DOCKER 學習筆記9 Kubernetes (K8s) 彈性伸縮容器 下
阿新 • • 發佈:2020-02-19
前言
從上一篇看來,我們已經對於Kubernetes ,通過minikube 建立叢集,而後使用kubectl 進行互動,對Deployment 部署以及服務的暴露等。這節,將學習彈性的將服務部署到多個節點上。
檢查
檢查部署情況 kubectl get deployments
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
mynode 1/1 1 1 10m
- READY 顯示當前/所需副本的比率
- UP-TO-DATE 最新顯示已更新以達到所需狀態的副本數
- 顯示應用程式有多少副本可供使用者使用。
- AGE 啟動時間
kubectl get nodes
檢查當前可用節點數
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 39m v1.17.2
增加副本數量
kubectl scale deployment <name> --replicas=?
將部署的副本數量調節至指定大小
mrc@mrc-linux:~$ kubectl scale deployment mynode --replicas=4 deployment.apps/mynode scaled
kubectl get pods
可以檢視當前POD 的數量
$ kubectl get pods NAME READY STATUS RESTARTS AGE mynode-5479db549c-6n6wt 1/1 Running 0 31m mynode-5479db549c-hvpnr 1/1 Running 0 4m39s mynode-5479db549c-mzmht 1/1 Running 0 4m39s mynode-5479db549c-zwg6k 1/1 Running 0 4m39s
檢視部署建立的複製集合
kubectl get rs
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
mynode-5479db549c 4 4 4 10h
我們擴容到了四個,所以這裡展示的有四個
檢視服務狀態
$ kubectl get service mynginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mynginx NodePort 10.111.8.25 <none> 80:30857/TCP 5m33s
這裡原有的服務就是將nginx 應用80埠暴露到虛擬機器30857 埠下
更新應用
在 Kubernetes 中,這些是通過滾動更新(Rolling Updates)完成的。 滾動更新 允許通過使用新的例項逐步更新 Pod 例項,零停機進行 Deployment 更新。新的 Pod 將在具有可用資源的節點上進行排程。
更新映象
vi Dockerfile
FROM nginx
RUN echo '<h1>Update Kubernetes</h1>' > /usr/share/nginx/html/index.html
重新打包
docker build -t mynginx:v1 .
更換部署映象
$ kubectl.exe set image deployment <deployment> oldimage=newimage
- deployment 表示需要修改的應用例項
- oldimage 原本的映象名稱
- newimage 新的映象名稱
$ kubectl.exe set image deployment/mynginx mynginx=mynginx:v1 deployment.apps/mynginx image updated
檢視POD
kubectl.exe get pods
我們會發現多出來兩個POD ,當然這兩個POD 是新的,將要替換掉原來老舊的POD
$ kubectl.exe get pods NAME READY STATUS RESTARTS AGE
mynginx-54fdcfb5dd-h7wwl 1/1 Running 0 11s
mynginx-54fdcfb5dd-jk4n4 1/1 Running 0 9s
mynginx-54fdcfb5dd-m9x45 1/1 Running 0 9s
mynginx-54fdcfb5dd-wbrpz 1/1 Running 0 11s
mynginx-6579cc57f7-pkvgv 0/1 Terminating 0 39m
mynginx-6579cc57f7-zlwzj 0/1 Terminating 0 64m
檢查更新結果
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45h
mynginx NodePort 10.111.8.25 <none> 80:30857/TCP 125m
獲取到暴露出的埠號:30857
回滾
其實回滾和更新是一個操作,是需要將映象版本進行修改即可完成回滾
小結
到這裡,基本上docker 學習就先到一段落吧,從最開始的docker 入門開始,到接觸到編排 compose 以及建立虛擬機器 docker-machine 再到使用官網的docker swarm 進行叢集的建立,任務的部署。走過很大段的一條路。最後我們嘗試著接觸一些企業裡面流行的生產化容器編排 k8S
革命尚未成功,同志任需努力