k8s入門實戰(zhàn)deployment使用詳解
介紹
假設(shè)現(xiàn)在我們寫了一個訂單服務(wù),由于訪問量很高 只部署一臺肯定不夠,我希望k8s幫我啟動好幾個pod, 我們用kubectl run可能得運行100次,
基于deployment,你可以告訴k8s副本數(shù)量,k8s就會自動幫你完成,其實不止是副本數(shù)量,一旦你的pod被deployment管理,deployment將會賦予它更多的能力,比如自愈,擴縮容,滾動更新等
自愈能力
我們使用原來的方式創(chuàng)建一個pod
kubectl run mynginx --image=nginx
使用deployment方式創(chuàng)建一個pod
kubectl create deployment mytomcat --image=tomcat:8.5.68
當我們刪除使用kubectl run方式創(chuàng)建的pod時,發(fā)現(xiàn)一刪就真的刪掉了
[root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mynginx 1/1 Running 0 112s mytomcat-6f5f895f4f-7jqlr 1/1 Running 0 47s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# kubectl delete pod mynginx pod "mynginx" deleted [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mytomcat-6f5f895f4f-7jqlr 1/1 Running 0 2m4s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d
當我們刪deployment創(chuàng)建的pod時,發(fā)現(xiàn)他又會自動幫我們創(chuàng)建一個
[root@k8s-master ~]# kubectl delete pod mytomcat-6f5f895f4f-7jqlr pod "mytomcat-6f5f895f4f-7jqlr" deleted [root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mytomcat-6f5f895f4f-s4zr7 1/1 Running 0 15s nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d
這個刪除可以當成是你node節(jié)點宕機的情況,我們把這個稱為k8s的自愈能力
這時候你又確實想刪除怎么辦,我們先試用下面命令查出deployment
[root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE mytomcat 1/1 1 1 13m nfs-client-provisioner 1/1 1 1 7d
使用刪除deployment命令
[root@k8s-master ~]# kubectl delete deploy mytomcat deployment.apps "mytomcat" deleted
這時候再查看就沒有了
[root@k8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d
多副本
假設(shè)現(xiàn)在業(yè)務(wù)量上來,我們需要同時針對一個服務(wù)部署多個實例,可以使用--replicas,比如我們使用下面3個命令創(chuàng)建3個副本
kubectl create deployment my-dep --image=nginx --replicas=3
可以看到創(chuàng)建了一個deployment,3/3指期望創(chuàng)建3個,3個可用
[root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 3/3 3 3 2m4s nfs-client-provisioner 1/1 1 1 7d
擴縮容
我們可以基于k8s實現(xiàn)手動擴縮容和動態(tài)擴縮容(根據(jù)系統(tǒng)負載) 手動擴縮容
使用kubectl scale命令
kubectl scale --replicas=5 deployment/my-dep
查看
[root@k8s-master ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 3/5 5 3 15m nfs-client-provisioner 1/1 1 1 7d
縮容
[root@k8s-node2 ~]# kubectl scale --replicas=2 deployment/my-dep deployment.apps/my-dep scaled
查看
[root@k8s-node2 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 17m nfs-client-provisioner 1/1 1 1 7d
除了使用kubectl scale,還可以使用下面方式
kubectl edit deploy my-dep
這時候會以yaml格式打開,我們編輯這個replicas的值
保存后退出,這時候發(fā)現(xiàn)又變成了5份
[root@k8s-node2 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/5 5 2 19m nfs-client-provisioner 1/1 1 1 7d
故障轉(zhuǎn)移
我們看到目前的pod都在這個node1節(jié)點
[root@k8s-master ~]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-dep-5b7868d854-9ljtd 1/1 Running 0 3m5s 10.244.36.105 k8s-node1 <none> <none> my-dep-5b7868d854-fh5bf 1/1 Running 0 3m5s 10.244.36.96 k8s-node1 <none> <none> my-dep-5b7868d854-l74rf 1/1 Running 0 3m5s 10.244.36.106 k8s-node1 <none> <none> my-dep-5b7868d854-r2dpl 1/1 Running 0 22m 10.244.36.109 k8s-node1 <none> <none> my-dep-5b7868d854-xsqzp 1/1 Running 0 22m 10.244.36.120 k8s-node1 <none> <none> nfs-client-provisioner-6c8cdddb58-kh555 1/1 Running 8 7d 10.244.36.110 k8s-node1 <none> <none>
我們嘗試把node1節(jié)點關(guān)掉,看下他是否會自動轉(zhuǎn)移,重新拉起正常運行呢
這時候我們需要等待一段時間,因為node節(jié)點掛掉會有一個閾值k8s才能感知
[root@k8s-master ~]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-dep-5b7868d854-694hk 1/1 Running 0 6m15s 10.244.169.191 k8s-node2 <none> <none> my-dep-5b7868d854-dq8h8 1/1 Running 0 6m15s 10.244.169.190 k8s-node2 <none> <none> my-dep-5b7868d854-vmlrz 1/1 Running 0 6m15s 10.244.169.151 k8s-node2 <none> <none> nfs-client-provisioner-6c8cdddb58-t7wmd 1/1 Running 0 22m 10.244.169.170 k8s-node2 <none> <none>
滾動更新
我們看下之前部署的my-dep使用了nginx最新版的鏡像
命令如下
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record //查看滾動狀態(tài) kubectl rollout status deployment/my-dep
可以使用-w看到有一個逐步替換的過程,最后使用了我們指定的1.16.1版本
版本回退
加入我們發(fā)現(xiàn)我們滾動更新的版本有問題,就需要執(zhí)行版本回退
#歷史記錄 kubectl rollout history deployment/my-dep #查看某個歷史詳情 kubectl rollout history deployment/my-dep --revision=2 #回滾(回到上次) kubectl rollout undo deployment/my-dep #回滾(回到指定版本) kubectl rollout undo deployment/my-dep --to-revision=2
其他
除了Deployment,k8s還有 StatefulSet 、DaemonSet 、Job 等 類型資源。我們都稱為 工作負載。有狀態(tài)應(yīng)用使用 StatefulSet 部署,無狀態(tài)應(yīng)用使用 Deployment 部署
以上就是k8s入門實戰(zhàn)deployment使用詳解的詳細內(nèi)容,更多關(guān)于k8s deployment使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Kubernetes?Ingress實現(xiàn)細粒度IP訪問控制
這篇文章主要為大家介紹了Kubernetes?Ingress實現(xiàn)細粒度IP訪問控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Rancher部署配置開源Rainbond云原生應(yīng)用管理平臺
這篇文章主要為大家介紹了Rancher部署配置開源Rainbond云原生應(yīng)用管理平臺,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Google?Kubernetes?Engine?集群實戰(zhàn)詳解
這篇文章主要為大家介紹了Google?Kubernetes?Engine?集群實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08云原生要素配置分離ConfigMap創(chuàng)建方式
這篇文章主要為大家介紹了云原生要素配置分離ConfigMap以及多種創(chuàng)建方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-03-03Rainbond調(diào)用Vue?React項目的后端接口
這篇文章主要為大家介紹了Rainbond調(diào)用Vue?React項目的后端接口問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04