日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解k8s deployment的滚动更新

發(fā)布時(shí)間:2025/1/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解k8s deployment的滚动更新 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

k8s deployment的滾動(dòng)更新

一、知識(shí)準(zhǔn)備

● 本文詳細(xì)探索deployment在滾動(dòng)更新時(shí)候的行為

二、環(huán)境準(zhǔn)備

組件版本
OSUbuntu 18.04.1 LTS
docker18.06.0-ce

三、準(zhǔn)備鏡像

首先準(zhǔn)備2個(gè)不同版本的鏡像,用于測(cè)試(已經(jīng)在阿里云上創(chuàng)建好2個(gè)不同版本的nginx鏡像)

docker pull registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1 docker pull registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2 root@k8s-master:~# docker run -d --rm -p 10080:80 nginx:v1 e88097841c5feef92e4285a2448b943934ade5d86412946bc8d86e262f80a050 root@k8s-master:~# curl http://127.0.0.1:10080 ---------- version: v1 hostname: f5189a5d3ad3

四、deployment、replicaset、pod之間的關(guān)系

+------------+| deployment |+-----+------+||||+--------------------------------------------------+| | || | || | || | || | || | | +------v------+ +------v------+ +------v------+ |replicaset:v1| |replicaset:v2| |replicaset:v3| +-------------+ +------+------+ +-------------+||+--------+---------+| || |+---v---+ +---v---+|pod:v2 | |pod:v2 |+-------+ +-------+

● deployment調(diào)度replicaset,pod由replicaset調(diào)度
● deployment管理多個(gè)replicaset版本,可用于回滾
● replicaset控制pod的行為,包括新增pod、刪除pod

我們首先準(zhǔn)備一個(gè)yaml文件用于測(cè)試:

root@k8s-master:~# more roll_update.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata:name: image-deployment spec:replicas: 1template:metadata:labels:app: image-updatespec:containers:- name: nginximage: registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1imagePullPolicy: Always

簡(jiǎn)單驗(yàn)證一下:

root@k8s-master:~# kubectl apply -f roll_update.yaml deployment.extensions "update-deployment" created root@k8s-master:~# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE update-deployment 3 3 3 3 54s root@k8s-master:~# kubectl get rs NAME DESIRED CURRENT READY AGE update-deployment-7db77f7cc6 3 3 3 56s root@k8s-master:~# kubectl get pod NAME READY STATUS RESTARTS AGE update-deployment-7db77f7cc6-7j49g 1/1 Running 0 1m update-deployment-7db77f7cc6-b75wn 1/1 Running 0 1m update-deployment-7db77f7cc6-cfnt5 1/1 Running 0 1m

deployment、replicaset、pod都已經(jīng)正常啟動(dòng),下面分析一下他們的行為:

deployment

root@k8s-master:~# kubectl describe deploy update-deployment Name: update-deployment Namespace: default ... Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge ... NewReplicaSet: update-deployment-7db77f7cc6 (3/3 replicas created) Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set update-deployment-7db77f7cc6 to 3

● deployment創(chuàng)建了一個(gè)replicaset,叫做update-deployment-7db77f7cc6(7db77f7cc6是replicaset的template hash值)
● 根據(jù)配置文件的要求,replicaset的副本數(shù)為3


replicaset

root@k8s-master:~# kubectl describe rs update-deployment-7db77f7cc6 Name: update-deployment-7db77f7cc6 Namespace: default ... Controlled By: Deployment/update-deployment Replicas: 3 current / 3 desired Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed ... Events:Type Reason Age From Message---- ------ ---- ---- -------Normal SuccessfulCreate 3m replicaset-controller Created pod: update-deployment-7db77f7cc6-7j49gNormal SuccessfulCreate 3m replicaset-controller Created pod: update-deployment-7db77f7cc6-b75wnNormal SuccessfulCreate 3m replicaset-controller Created pod: update-deployment-7db77f7cc6-cfnt5

● replicaset創(chuàng)建了3個(gè)pod


pod

root@k8s-master:~# kubectl describe pod update-deployment-7db77f7cc6-7j49g Name: update-deployment-7db77f7cc6-7j49g Namespace: default ... Status: Running IP: 10.10.169.140 Controlled By: ReplicaSet/update-deployment-7db77f7cc6 ... Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 9m default-scheduler Successfully assigned update-deployment-7db77f7cc6-7j49g to k8s-node2Normal SuccessfulMountVolume 9m kubelet, k8s-node2 MountVolume.SetUp succeeded for volume "default-token-v9nkm"Normal Pulling 9m kubelet, k8s-node2 pulling image "registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1"Normal Pulled 9m kubelet, k8s-node2 Successfully pulled image "registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1"Normal Created 9m kubelet, k8s-node2 Created containerNormal Started 9m kubelet, k8s-node2 Started container

● pod被replicaset創(chuàng)建之后,開始分配到worker節(jié)點(diǎn)、拉取鏡像、啟動(dòng)容器等一系列操作
● 所以pod的命名方式是:update-deployment-7db77f7cc6-7j49g(deployment名字-replicaset模板hash名字-pod模板hash名字)


不禁有同學(xué)要問,為什么搞這么復(fù)雜,啟動(dòng)一個(gè)pod需要?jiǎng)佑眠@么多組件呢?下面用一個(gè)場(chǎng)景說明為啥需要這么多組件:

鏡像版本更新

● 當(dāng)鏡像版本有更新時(shí)(三種方法都可以實(shí)現(xiàn),參考前一篇文章:更新k8s鏡像版本的三種方式),既要保證服務(wù)可用,又要保證在線更新,流程應(yīng)該是:
??1、先增加一個(gè)pod,鏡像版本為新版本
??2、pod可用之后,刪除一個(gè)老版本pod
??3、循環(huán)第1、2步,直到老版本pod全部刪除,新版本的pod全部可用
● 上述的這個(gè)過程就是replicaset的作用,它根據(jù)需求,自動(dòng)的增加新版本pod,然后刪除老版本pod,直到老版本pod全部刪除,新版本的pod全部可用
● 如果此時(shí)版本需要回退,那replicaset需要把剛才的步驟逆向更新一遍,實(shí)現(xiàn)版本回退
● deployment的作用就是管理replicaset。deployment會(huì)保存各個(gè)版本的replicaset,一旦需要進(jìn)行版本回滾,deployment會(huì)立即回滾replicaset的版本,從而控制pod狀態(tài)


下面測(cè)試一下:

使用patch命令更新鏡像版本,并且使用pause命令來觀察:

root@k8s-master:~# kubectl patch deployment update-deployment \ --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2"}]}}}}' \ && kubectl rollout pause deployment update-deployment deployment.extensions "update-deployment" patched deployment.apps "update-deployment" paused

此時(shí)pod狀態(tài):

root@k8s-master:~# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE update-deployment-7db77f7cc6-7j49g 1/1 Running 0 1h 10.10.169.140 k8s-node2 update-deployment-7db77f7cc6-b75wn 1/1 Running 0 1h 10.10.235.211 k8s-master update-deployment-7db77f7cc6-cfnt5 1/1 Terminating 0 1h 10.10.36.126 k8s-node1 update-deployment-7fb7b4b557-6987x 1/1 Running 0 7s 10.10.36.127 k8s-node1 update-deployment-7fb7b4b557-dxdqb 1/1 Running 0 10s 10.10.169.139 k8s-node2

新增了2個(gè)pod,而刪除了1個(gè)老版本的pod

此時(shí)replicaset狀態(tài):

root@k8s-master:~# kubectl get rs -owide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR update-deployment-7db77f7cc6 2 2 2 1h nginx registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1 app=roll-update,pod-template-hash=3863393772 update-deployment-7fb7b4b557 2 2 2 4m nginx registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2 app=roll-update,pod-template-hash=3963606113

有一個(gè)新版本的replicaset創(chuàng)建了出來,并且需求的pod數(shù)量為2,而原來的replicaset需求的pod數(shù)量從3降為2

查看replicaset版本:

root@k8s-master:~# kubectl rollout history deploy update-deployment deployments "update-deployment" REVISION CHANGE-CAUSE 1 <none> 2 update version to v2

新增了一個(gè)版本2

由于使用pause命令,更新過程到此會(huì)卡主,我們讓更新的過程繼續(xù)下去:

root@k8s-master:~# kubectl rollout resume deployment update-deployment deployment.apps "update-deployment" resumed

查看狀態(tài):

root@k8s-master:~# kubectl get pod NAME READY STATUS RESTARTS AGE update-deployment-7fb7b4b557-6987x 1/1 Running 0 15m update-deployment-7fb7b4b557-dxdqb 1/1 Running 0 15m update-deployment-7fb7b4b557-wg5c8 1/1 Running 0 1m root@k8s-master:~# kubectl get rs -owide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR update-deployment-7db77f7cc6 0 0 0 1h nginx registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1 app=roll-update,pod-template-hash=3863393772 update-deployment-7fb7b4b557 3 3 3 14m nginx registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2 app=roll-update,pod-template-hash=3963606113

v1版本的replicaset已經(jīng)沒有pod,但是歷史記錄還是保留的,可以通過deployment調(diào)度快速回滾

五、小結(jié)

● 本文介紹了deployment滾動(dòng)更新時(shí),deployment、replicaset、pod的細(xì)節(jié)以及創(chuàng)建過程
● 介紹了deployment版本管理的方式

參考鏈接:https://www.cnblogs.com/wangkun122/articles/12707216.html

總結(jié)

以上是生活随笔為你收集整理的详解k8s deployment的滚动更新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。