創(chuàng)建和刪除deployment
前面介紹的創(chuàng)建pod的方法創(chuàng)建出的pod是不穩(wěn)定的、不健壯的,掛掉之后不會(huì)自動(dòng)啟動(dòng),這樣就會(huì)導(dǎo)致運(yùn)行在容器里的應(yīng)用也無法正常運(yùn)行,使用deployment可以提高pod的健壯性。
deployment(簡(jiǎn)稱deploy)是一個(gè)控制器,只要告訴deployment需要幾個(gè)pod。deployment就會(huì)始終保持有幾個(gè)pod,如果其中一個(gè)pod掛掉了,則deployment會(huì)重新生成一個(gè)新的pod。
當(dāng)一個(gè)節(jié)點(diǎn)關(guān)機(jī)時(shí),在故障的幾分鐘內(nèi),master仍然會(huì)等待pod的恢復(fù),幾分鐘后,會(huì)執(zhí)行刪除pod操作,然后master會(huì)重新調(diào)度新pod替代,但是關(guān)機(jī)節(jié)點(diǎn)無法和master通信,所以關(guān)機(jī)節(jié)點(diǎn)上的pod處于“Terminating”狀態(tài),新pod會(huì)在另一節(jié)點(diǎn)運(yùn)行,關(guān)機(jī)節(jié)點(diǎn)重啟后,被標(biāo)記為刪除的pod會(huì)被刪除。
使用命令創(chuàng)建deployment
- 創(chuàng)建deployment
kubectl create deployment nginx --image=nginx --replicas=2
- 查看deployment
kubectl get deployments.apps
- 修改鏡像下載策略以提高速度(也可以修改副本數(shù))
kubectl edit deployments.apps nginx
- 修改副本數(shù)
kubectl scale deployment nginx --replicas=4
- 刪除deployment
kubectl delete deployments.apps nginx
使用yaml文件創(chuàng)建deployment
- 生成yaml文件
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > d1.yaml
- 修改鏡像下載策略(也可以修改副本數(shù))
vi d1.yaml
- 創(chuàng)建deployment
kubectl apply -f d1.yaml
- 查看deployment
kubectl get deployments.apps -o wide
kubectl get pod -o wide
- 刪除一個(gè)pod后,會(huì)自動(dòng)生成新的pod
kubectl delete pod nginx-7cf7d6dbc8-vz2r8
kubectl get pod -o wide
- 刪除deployment
kubectl delete -f d1.yaml
# 或者
kubectl delete deploy nginx
kubectl get deployments.apps -o wide
水平自動(dòng)更新HPA
當(dāng)deployment的pod負(fù)載較大,需要更多的pod來分?jǐn)傌?fù)載,就需要管理員手動(dòng)去調(diào)整副本數(shù)??梢栽O(shè)置讓k8s根據(jù)pod負(fù)載情況自動(dòng)去調(diào)整deployment里pod的副本數(shù),這可以通過水平自動(dòng)更新HPA(Horizontal Pod Autoscalers)來實(shí)現(xiàn),通過檢查pod的cpu負(fù)載通知deployment讓其自動(dòng)更新pod數(shù)量。
- 查看當(dāng)前是否有HPA設(shè)置
kubectl get hpa
- 創(chuàng)建HPA并查看
kubectl create deployment nginx --image=nginx --replicas=3
kubectl autoscale deployment nginx --min=2 --max=10
kubectl get horizontalpodautoscalers.autoscaling
- 修改副本數(shù),最小pod數(shù)任然為2
kubectl scale deployment nginx --replicas=1
kubectl get deployments.apps
- 刪除HPA
kubectl delete horizontalpodautoscalers.autoscaling nginx
- 測(cè)試HPA,修改deployment的配置,設(shè)置每個(gè)容器的資源限制
kubectl edit deployments.apps nginx
- 創(chuàng)建deployment副本數(shù)為1個(gè)
kubectl scale deployment nginx --replicas=1
- 創(chuàng)建新的HPA,使得每個(gè)pod的cpu數(shù)最大使用率不超過70%
kubectl autoscale deployment nginx --min=1 --max=5 --cpu-percent=70
- 為deployment創(chuàng)建一個(gè)服務(wù),類型為NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
kubectl get service
- 在任一客戶端安裝ab測(cè)試對(duì)其進(jìn)行壓測(cè):
yum install httpd-tools –y
ab -t 600 -n 1000000 -c 1000 http://192.168.159.164:31313/index.html
隨著請(qǐng)求CPU負(fù)載增加pod自動(dòng)擴(kuò)展。負(fù)載降低后pod數(shù)不是立刻減少,要等到一段時(shí)間,默認(rèn)是5m,目的是防止pod數(shù)的抖動(dòng)。
deployment鏡像升級(jí)及回滾
deployment鏡像升級(jí)
升級(jí)鏡像可以通過以下三種方法:
- kubectl edit deploy
- 修改yaml文件,然后執(zhí)行kubectl apply -f yaml文件
- 命令行方式修改。命令行方式可以記錄鏡像變更信息,回滾方便。
- 命令行升級(jí)deployment里鏡像的語法
# 語法
kubectl set image deploy/名字 容器名=鏡像 <--record>
# 舉例
kubectl create deployment nginx --image=nginx --replicas=2
kubectl set image deploy/nginx nginx=nginx:latest
kubectl set image deploy/nginx nginx=nginx:1.21
kubectl get deployments.apps -o wide
kubectl set image deploy/nginx nginx=nginx:1.20
kubectl get deployments.apps -o wide
- 查看變更信息,此時(shí)并沒有記錄
kubectl rollout history deployment nginx
- 添加選項(xiàng)
--record
,即可記錄鏡像變更信息,每次變更前都會(huì)有一個(gè)編號(hào)
kubectl set image deploy/nginx nginx=nginx:latest --record
kubectl set image deploy/nginx nginx=nginx:1.21 --record
kubectl rollout history deployment nginx
deployment鏡像回滾
如果變更后的鏡像有問題,我們可以把鏡像回滾到變更之前的版本,回滾的語法是:
# 語法
kubectl rollout undo deployment 名字 --to-revision=版本
# 例子
kubectl rollout undo deployment nginx --to-revision=5
kubectl get deployments.apps nginx -o wide
滾動(dòng)升級(jí)
對(duì)上述deployment,更換鏡像后,會(huì)將所有的pod刪除,然后重新使用新的鏡像創(chuàng)建pod,這個(gè)過程是一次性把所有pod刪除。
使用滾動(dòng)更新不是一次性全部更新,而是先更新幾個(gè)pod鏡像,更新完成后再更新幾個(gè),直至將所有pod全部更新完畢。
rollingUpgrade主要涉及兩個(gè)參數(shù):
- maxSurge:指定一次創(chuàng)建幾個(gè)pod,可以是百分比,也可以是具體數(shù)字
- maxUnavailable:用來指定最多刪除幾個(gè)pod,可以是百分比,也可以是具體數(shù)字
- 使用命令修改配置,參數(shù)設(shè)置為1,刪除一個(gè)pod,創(chuàng)建一個(gè)pod
kubectl edit deployments.apps nginx
文章來源:http://www.zghlxwxcb.cn/news/detail-776101.html
- 修改副本數(shù),變更鏡像
kubectl scale deployment nginx --replicas=4
kubectl set image deploy/nginx nginx=nginx:1.21
kubectl set image deploy/nginx nginx=nginx:latest
kubectl get pod
文章來源地址http://www.zghlxwxcb.cn/news/detail-776101.html
到了這里,關(guān)于Kubernetes中deployment相關(guān)操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!