国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一個網站的微服務架構實戰(2)k8s遷移

Forelax / 2861人閱讀

摘要:前言我們一起回顧上一篇文章平臺的微服務架構和,一共通過構建了三個鏡像數據庫,部署前端頁面的,和接口。最近阿里云產品春節大促銷,我一時沒忍住又買了一臺服務器,打完折扣還是很貴。是一個非常穩定的,可移植的網絡文件系統。

前言

我們一起回顧上一篇文章《Bees平臺的微服務架構(1)docker和docker-compose》,一共通過Dockerfile構建了三個docker鏡像:mysql數據庫,部署angular前端頁面的nginx,和springboot接口。然后使用docker-compose來做容器服務的編排,以保障不同容器之間可以互訪。為了提高開發的效率,我們還寫了一個自動部署的腳本,實際是只是通過docker-compose.yml啟動和關閉容器,在本地鏡像庫中生成或刪除鏡像。

不可否認,docker-compose服務編排的小巧靈活性讓人愛不釋手,那我們今天為什么要遷移到k8s(kubernetes)上呢?因為k8s的編排能力更強,因為k8s可以做跨主機的分布式集群,因為k8s搭載rancher將更有利于微服務架構的統一管理,等等。

k8s準備

本文將不講解k8s和rancher的安裝和配置,相關的安裝文檔和配置文檔網上有很多。最近阿里云產品春節大促銷,我一時沒忍住又買了一臺服務器,打完折扣還是很貴。心疼歸心疼,不過這樣我就有兩臺服務器了,就順便搭建了k8s的集群環境。

鏡像倉庫

分布式集群帶來的復雜度就增加了。你沒辦法直接使用本地的鏡像庫地址了,我不想搭建鏡像倉庫,好在阿里的docker鏡像倉庫是免費的,就將最終版的docker鏡像推送到阿里的容器倉庫里面。當需要啟動容器時,容器的地址就寫阿里容器倉庫里的地址,后文中會出現。

宿主機掛載卷

分布式的另一個問題就是宿主機的掛載卷,如果對上一篇文章印象深刻的話,應該記得mysql數據庫的數據文件和nginx代理的圖片文件等,都是掛載在宿主機上的。因為docker容器的特性,如果不使用掛載卷,在重啟容器之后容器內的數據都會丟失。分布式環境中,不同主機之間是沒辦法互訪目錄的。我是通過在一臺機器上搭建了nfs服務器,將單臺機器上的目錄開放為共享目錄,具體內容下文有介紹。

服務互訪

不同服務之間免不了要相互訪問,例如:springboot要訪問數據庫和redis,angualr要調用springboot接口。而且考慮到k8s上經常要對某個服務做多節點的集群,所以要在注冊中心開放給外界訪問的地址應該是集群的地址。

我們在docker-compose上是怎么做的呢?在docker-compose.yml 上定義多個服務service,每個service對應于一個鏡像。容器啟動后,對應容器的服務名稱即可以作為 hostname來使用。

k8s上也有類似的用法,它使用yaml文件,kind類型有很多,例如:Pod表示啟動的服務是一個pod;ReplicationController則會根據Pod模板生成一批pod作為集群;Service則相當于服務的注冊,可給與之對應的pod副本集群提供訪問地址,等等還有很多。那這個問題Service就能解決,我們給不同的服務都創建一個Service,這樣就也能同docker-compose一樣通過服務的名稱就能訪問與之對應服務的pod副本集群。

其他

因為業務需要,在之前的三個鏡像的基礎上又加了一個redis鏡像。那么分布式redis、分布式mysql環境搭建就太麻煩了,如果以后有機會再多帶帶寫文章來介紹,這次我干脆就只啟動單節點的mysql和redis。

nfs共享目錄

NFS是Network File System的簡寫,即網絡文件系統,NFS是FreeBSD支持的文件系統中的一種。NFS基于RPC(Remote Procedure Call)遠程過程調用實現,其允許一個系統在網絡上與它人共享目錄和文件。通過使用NFS,用戶和程序就可以像訪問本地文件一樣訪問遠端系統上的文件。NFS是一個非常穩定的,可移植的網絡文件系統。

選用nfs的另一個原因是,nfs服務在k8s上可以直接作為存儲卷使用,十分方便。

安裝

nfs是基于rpc的,安裝nfs就需要確保已安裝rpcbind,不過一般CentOS都默認已安裝了rpcbind

##查找是否已安裝nfs 和 rpcbind
[mpaas@kerry1 k8s]$ rpm -qa | grep nfs
[mpaas@kerry1 k8s]$ rpm -qa | grep rpcbind
##如果沒安裝,則通過有yum安裝
[mpaas@kerry1 k8s]$ yum -y install nfs-utils
[mpaas@kerry1 k8s]$ yum -y install rpcbind

安裝完成后,必須要先啟動rpcbind服務,再啟動nfs服務

[mpaas@kerry1 k8s]$ systemctl start rpcbind
[mpaas@kerry1 k8s]$ systemctl start nfs-server

設置開機啟動

[mpaas@kerry1 k8s]$ systemctl enable rpcbind
[mpaas@kerry1 k8s]$ systemctl enable nfs-server
配置

通過修改 /etc/exports 文件,設置nfs的共享目錄

/home/nfs/bees/mysql/data *(rw,no_root_squash,no_all_squash,sync)

如上,將 /home/nfs/bees/mysql/data作為共享目錄

星號* 代表可在任意服務器上訪問該共享目錄,也可以指定特點的ip和端口訪問

括號內是參數設置,常見的參數則有:

rw  ro    該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。

sync  async    sync 代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存于內存當中,而非直接寫入硬盤!

no_root_squash  root_squash    客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那么這里就得要開 no_root_squash 才行!

all_squash    不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面關于 *_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在于你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 啰。

編輯完 /etc/exports 文件后,執行下列命令生效

[mpaas@kerry1 k8s]$  exportfs -r

在服務器端,可執行下列命令查看目錄是否共享成功

[mpaas@kerry1 k8s]$ showmount -e localhost
Export list for localhost:
/home/nfs/bees/mysql/data *

也可以在另外一臺機器上安裝nfs后執行上述命令,只需要將localhost換成目標服務器的ip地址即可。

nginx服務

先啟動nginx來部署angualr,我們需要創建一個RC,根據模板創建pods,暫時只創建一個pod,后續如果需要擴展再在rancher上管理。

創建bees_angular_rc.yaml,開放pod的80端口

apiVersion: v1
kind: ReplicationController
metadata:
 name: bees-angular
spec:
 replicas: 1
 selector:
  app: bees-angular
 template:
  metadata:
   labels:
    app: bees-angular
  spec:
   containers:
   - name: bees-angular
     image: registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-nginx:v1.0
     ports:
     - containerPort: 80

創建bees_angualr_svc.yaml,設置nodePort,將pod的80端口映射給宿主機的30000端口

apiVersion: v1
kind: Service
metadata:
 name: bees-angular
spec:
 type: NodePort
 ports: 
  - port: 80
    nodePort: 30000
 selector:
  app: bees-angular

那么執行下列命令即可創建rc和service,與之對應的pod也會運行起來

##啟動rc
[mpaas@kerry1 k8s]$ kubectl create -f bees-angular-rc.yaml 
##啟動service
[mpaas@kerry1 k8s]$ kubectl create -f bees-angular-svc.yaml 
##查看pod是否啟動成功
[mpaas@kerry1 k8s]$ kubectl get pods
mysql服務

創建bees_mysql_rc.yaml,開放pod的3306端口,并將nfs服務器上的共享目錄 /home/nfs/bees/mysql/data 掛載到容器中

apiVersion: v1
kind: ReplicationController
metadata:
 name: bees-mysql
spec:
 replicas: 1
 selector:
  app: bees-mysql
 template:
  metadata:
   labels:
    app: bees-mysql
  spec:
   containers:
   - name: bees-mysql
     image: registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-mysql:v1.0
     ports:
     - containerPort: 3306
     env:
     - name: MYSQL_ROOT_PASSWORD
       value: 數據庫密碼
     volumeMounts:
     - name: mysql-data-persistent-storage
       mountPath: /var/lib/mysql
   volumes:
   - name: mysql-data-persistent-storage
     nfs:
      path: /home/nfs/bees/mysql/data
      server: nfs服務器的ip

創建bees_mysql_svc.yaml

apiVersion: v1
kind: Service
metadata:
 name: bees-mysql
spec:
 type: NodePort
 ports: 
  - port: 3306
    nodePort: 30003
 selector:
  app: bees-mysql
springboot服務

bees_springboot_rc.yaml

kind: ReplicationController
metadata:
 name: bees-springboot
spec:
 replicas: 1
 selector:
  app: bees-springboot
 template:
  metadata:
   labels:
    app: bees-springboot
  spec:
   containers:
   - name: bees-springboot
     image: registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-springboot:v1.0
     ports:
     - containerPort: 8010

bees_springboot_svc.yaml

apiVersion: v1
kind: Service
metadata:
 name: bees-springboot
spec:
 type: NodePort
 ports: 
  - port: 8010
    nodePort: 30004
 selector:
  app: bees-springboot

都是一些基礎的代碼使用,這里就不過多寫了。

自動打包鏡像推送倉庫的腳本
#!/bin/bash

echo "nginx版本:"$1
echo "springboot版本:"$2

v_springboot_jar=`find /bees/devops/upload/ -name "*.jar"`
echo "找到jar:"$v_springboot_jar
v_angular_zip=`find /bees/devops/upload/ -name "dist.zip"`
echo "找到dist:"$v_angular_zip

docker rmi -f $(docker images|grep "paperbee-nginx" | awk "{print $3}")
docker rmi -f $(docker images|grep "paperbee-springboot" | awk "{print $3}")
echo "刪除原鏡像"

cd /bees/devops/dockerfiles/springboot-k8s/
rm -f *.jar
cp $v_springboot_jar ./bees-0.0.1-SNAPSHOT.jar
docker build -t paperbee-springboot .
echo "生成springboot鏡像"

cd /bees/devops/dockerfiles/angular-k8s/
rm -rf dist/
cp $v_angular_zip ./dist.zip
unzip dist.zip
rm -f dist.zip
docker build -t paperbee-nginx .
echo "生成angular鏡像"

docker login --username=賬號 --password=密碼 registry.cn-hangzhou.aliyuncs.com
echo "登錄docker容器倉庫"

v_nginx_image=$(docker images|grep "paperbee-nginx" | awk "{print $3}")
v_springboot_image=$(docker images|grep "paperbee-springboot" | awk "{print $3}")


docker tag $v_nginx_image registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-nginx:$1
docker push registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-nginx:$1
echo "推送 bees-nginx:"$1


docker tag $v_springboot_image registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-springboot:$2
docker push registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-springboot:$2
echo "推送 bees-springboot:"$2

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33152.html

相關文章

  • 容錯性好、易于管理和便于觀察:淺談如何利用K8s全面擁抱微服務架構

    摘要:年月日,論壇首次來到中國,在上海跨國采購會展中心召開并獲得了圓滿成功。擁抱微服務就成為大勢所趨。和大會日期會議日程通告日期年月日會議活動舉辦日期年月至日和贊助方案和多元化獎學金現正接受申請和即將首次合體落地中國和購票窗口,立即購票 KubeCon + CloudNativeCon 論壇,作為 CNCF 的旗艦會議,自2016年以來已經在北美和歐洲兩地的舊金山、倫敦、硅丘(奧斯汀)、哥本...

    Ku_Andrew 評論0 收藏0
  • 快收藏!5225萬字,微服務、云原生、容器、K8S、Serverless精華文章集錦

    摘要:正在走遠,新年之初,小數精選過去一年閱讀量居高的技術干貨,從容器到微服務云原生,匯集成篇精華集錦,充分反映了這一年的技術熱點走向。此文值得收藏,方便隨時搜索和查看。,小數將繼續陪伴大家,為朋友們奉獻更有逼格的技術內容。 2017正在走遠,新年之初,小數精選過去一年閱讀量居高的技術干貨,從容器、K8S 到微服務、云原生、Service Mesh,匯集成52篇精華集錦,充分反映了這一年的技...

    AaronYuan 評論0 收藏0
  • 2021 年最新基于 Spring Cloud 的微服務架構分析

    摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...

    cikenerd 評論0 收藏0
  • 回顧Java 發展,看 Docker 與Mesos | 數人云COO謝樂冰@KVM分享實錄

    摘要:馬拉松會匹配每個和提供的資源,然后通過將任務下發下去。對外暴露的就是負載均衡的某個服務,后面自動將流量轉發到某個容器的端口上。還有一直辦法是用內網的,這個會維護現有的容器列表端口,并且返回任意一個的端口,頁實現了負載均衡和服務發現功能。 演講嘉賓 數人云COO 謝樂冰 在德國工作十年,回國后加入惠普電信運營商部門,擁有多年項目經驗和創業公司工作經驗。在數人云負責產品售前和運營,專注行...

    canger 評論0 收藏0

發表評論

0條評論

Forelax

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<