1. 程式人生 > >DOCKER 學習筆記9 Kubernetes (K8s) 彈性伸縮容器 下

DOCKER 學習筆記9 Kubernetes (K8s) 彈性伸縮容器 下

前言

從上一篇看來,我們已經對於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

革命尚未成功,同志任需努力