網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Deployment副本無(wú)狀態(tài)服務(wù)創(chuàng)建及水平擴(kuò)展_服務(wù)器其它
作者:、重明 ? 更新時(shí)間: 2022-05-21 編程語(yǔ)言本文單詞:
replace
(/r??ple?s/)替換、取代;在本文中是修改后的yaml文件替換舊的yaml文件
rollout
(/ɑ??/)記錄;在本文中是記錄歷史的deploy副本版本
describe
(/d??skra?b/)描述;在本文中是說記錄過程
scale
(/ske?l/)縮放;在本文中是說縮放副本的個(gè)數(shù)
pause
(/p??z/)暫停;在本文中是說暫停更新
resume
(/r??zju?m/)恢復(fù);在本文中是說從暫停恢復(fù)到正常狀態(tài)
RC(Replication Controller)和RS(ReplicaSet)
(幾乎棄用)RC是復(fù)制控制器,確保Pod數(shù)量達(dá)到期望值,保證副本始終處于可用的狀態(tài)。
(不建議單獨(dú)使用)RS是RC的下一代,支持標(biāo)簽集。
無(wú)狀態(tài)服務(wù)Deployment意思就是無(wú)狀態(tài)的。。。用于部署無(wú)狀態(tài)的服務(wù)。
類似網(wǎng)頁(yè)訪問之類的請(qǐng)求就是無(wú)狀態(tài)的,每次請(qǐng)求都包含了需要的所有信息,每次請(qǐng)求都和上次沒有關(guān)系。
Deployment是最常用的控制器。一般用于管理維護(hù)企業(yè)內(nèi)部的無(wú)狀態(tài)的微服務(wù),比如configserver、zuul、springboot。可以管理多個(gè)副本的Pod實(shí)現(xiàn)無(wú)縫遷移、自動(dòng)擴(kuò)容縮容、自動(dòng)災(zāi)難恢復(fù)、一鍵回滾等功能。
deployment的創(chuàng)建
可以通過命令創(chuàng)建一個(gè)Deployment:
kubectl create deployment nginx --image=nginx:1.20.2
可以將創(chuàng)建的副本生成yaml文件:
kubectl get deployment nginx -o yaml > nginx.yaml
然后可以修改yaml文件的參數(shù),然后重新加載新的yaml文件:
kubectl replace -f nginx.yaml
也可以通過在線修改yaml文件,退出后直接生效:
kubectl edit deploy nginx
從yaml文件生成deployment:
apiVersion: v1 items: - apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "2" creationTimestamp: "2022-02-08T07:52:05Z" generation: 2 labels: app: nginx name: nginx namespace: default resourceVersion: "266395" uid: d4a3dbe9-5156-42cf-aaf5-3dfefccf4753 spec: progressDeadlineSeconds: 600 replicas: 1 # 副本數(shù) revisionHistoryLimit: 10 # 保留歷史的版本 selector: matchLabels: app: nginx strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx:1.18.0 imagePullPolicy: Always name: nginx resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 1 conditions: - lastTransitionTime: "2022-02-08T07:52:10Z" lastUpdateTime: "2022-02-08T07:52:10Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2022-02-08T07:52:05Z" lastUpdateTime: "2022-02-08T07:55:54Z" message: ReplicaSet "nginx-86dddd6686" is progressing. reason: ReplicaSetUpdated status: "True" type: Progressing observedGeneration: 2 readyReplicas: 1 replicas: 2 unavailableReplicas: 1 updatedReplicas: 1 kind: List metadata: resourceVersion: "" selfLink: ""
deployment狀態(tài)說明:
[root@k8s-master01 ~]# kubectl get deployments.apps -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 1/1 1 1 4d5h mynginx nginx k8s-app=mynginx
NAME:Deployment
名稱
READY
:Pod的狀態(tài),已經(jīng)達(dá)到Ready的個(gè)數(shù)
UP-TO-DATE
:已經(jīng)達(dá)到期望狀態(tài)的副本數(shù)
AVAILABLE
:已經(jīng)可以使用的個(gè)數(shù)
AGE
:程序運(yùn)行的時(shí)間
CONTAINERS
:容器的自定義名稱
IMAGES
:容器鏡像名稱
SELECTOR
:管理的Pod標(biāo)簽
deployment的升級(jí)
查看創(chuàng)建nginx的deploy中鏡像的版本:可以看到是1.18.0
[root@k8s-master01 ~]# kubectl get deploy -o yaml | grep image - image: nginx:1.18.0 imagePullPolicy: Always
我們可以使用set命令更新鏡像的版本:這里的set是設(shè)置的意思。
[root@k8s-master01 ~]# kubectl set image deploy nginx nginx=nginx:1.20.2 --record [root@k8s-master01 ~]# kubectl get deployments.apps nginx -o yaml | grep image kubernetes.io/change-cause: kubectl set image deploy nginx nginx=1.18.1 --record=true - image: nginx:1.20.2 imagePullPolicy: Always
可以使用下列命令查看升級(jí)過程:
[root@k8s-master01 ~]# kubectl rollout status deployment nginx [root@k8s-master01 ~]# kubectl describe deployments.apps nginx
升級(jí)過程大概為:創(chuàng)建deploy時(shí),系統(tǒng)也會(huì)同時(shí)創(chuàng)建depoly的RS,更新deploy時(shí),系統(tǒng)會(huì)增加一個(gè)新的RS,舊的RS會(huì)相應(yīng)減少1,直到替換完成。
deployment的回滾
deployment的回滾可以回滾到上個(gè)版本,也可以回滾到指定指定版本,歷史版本的數(shù)量由下面這個(gè)參數(shù)控制:
revisionHistoryLimit: 10
查看歷史版本:可以看到副本發(fā)生了幾次變化
[root@k8s-master01 ~]# kubectl rollout history deployment nginx deployment.apps/nginx REVISION CHANGE-CAUSE 8 kubectl set image deploy nginx nginx=1.18.1 --record=true 9 kubectl set image deploy nginx nginx=nginx:1.20.2 --record=true
回滾到上一個(gè)版本:undo是撤銷的意思(我的理解是撤銷現(xiàn)在的版本回到之前的版本)
[root@k8s-master01 ~]# kubectl rollout undo deployment nginx deployment.apps/nginx rolled back
查看已經(jīng)由1.20.2回到了1.18.0版本:
[root@k8s-master01 ~]# kubectl get deployments.apps nginx -o yaml | grep image kubernetes.io/change-cause: kubectl set image deploy nginx nginx=1.18.1 --record=true - image: nginx:1.18.0 imagePullPolicy: Always
如果多次發(fā)布,回滾到指定版本:
[root@k8s-master01 ~]# kubectl rollout history deployment nginx deployment.apps/nginx REVISION CHANGE-CAUSE 9 kubectl set image deploy nginx nginx=nginx:1.20.2 --record=true 10 kubectl set image deploy nginx nginx=1.18.1 --record=true 您在 /var/spool/mail/root 中有新郵件 [root@k8s-master01 ~]# kubectl rollout history deployment nginx --revision=9 deployment.apps/nginx with revision #9 Pod Template: Labels: app=nginx pod-template-hash=67d5b4548c Annotations: kubernetes.io/change-cause: kubectl set image deploy nginx nginx=nginx:1.20.2 --record=true Containers: nginx: Image: nginx:1.20.2 Port:Host Port: Environment: Mounts: Volumes: [root@k8s-master01 ~]# kubectl rollout undo deployment nginx --to-revision=9 deployment.apps/nginx rolled back [root@k8s-master01 ~]# kubectl get deployments.apps nginx -o yaml | grep image kubernetes.io/change-cause: kubectl set image deploy nginx nginx=nginx:1.20.2 - image: nginx:1.20.2 imagePullPolicy: Always
可以看到以上信息版本已經(jīng)回滾到1.20.2版本;另外就算更新時(shí)候失敗,新鏡像拉取失敗,舊的副本不會(huì)停止工作,會(huì)一直持續(xù)工作,直到升級(jí)成功。
deployment的擴(kuò)容和縮容
使用命令擴(kuò)容:將nginx副本由一個(gè)變成兩個(gè),注意擴(kuò)容RS不會(huì)發(fā)生變化,因?yàn)镻od的本質(zhì)沒有發(fā)生改變。scale這個(gè)單詞在這里是縮放的意思。
[root@k8s-master01 ~]# kubectl get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 17h [root@k8s-master01 ~]# kubectl scale --replicas=2 deployment nginx deployment.apps/nginx scaled [root@k8s-master01 ~]# kubectl get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 17h
deployment的更新暫停及恢復(fù)
更新暫停:這條命令的作用是將更新暫停后,你使用kubectl set
命令修改Pod的配置后不會(huì)立刻生效,即使多次修改也只是積累起來不會(huì)馬上生效。
[root@k8s-master01 ~]# kubectl rollout pause deployment nginx
暫停恢復(fù):解除之前的更新暫停功能,在暫停期間做過的修改將都會(huì)生效
[root@k8s-master01 ~]# kubectl rollout resume deployment nginx
deployment的注意項(xiàng)
- .spec.revisionHistoryLimit: 10:設(shè)置保留RS的舊的版本的個(gè)數(shù),為0的話不保存
- .spec.minReadySeconds:可選,指定新創(chuàng)建的Pod在沒有任何容器崩潰的情況下是為Ready的最小秒數(shù),默認(rèn)為0,就是一但創(chuàng)建就被視為可用
滾動(dòng)更新的策略:就是創(chuàng)建一個(gè)新的Pod,然后刪除一個(gè)舊的Pod,用新的替換舊的。
spec.strategy.type
:更新deploy的方式,默認(rèn)是RollingUpdate
RollingUpdate
:滾動(dòng)更新,可以指定maxSurge和maxUnavailable
maxUnavailable
:指定在回滾或更新時(shí)最大不可用的Pod數(shù)量,默認(rèn)25%,也可以設(shè)置數(shù)字;如果為0那么maxSurge就不能為0 。
maxSurge
:可以超過期望值的的最大Pod數(shù),可選,默認(rèn)為25%。如果為0那maxUnavailable就不能為0 。
Recreate
:重建,先刪除舊的Pod,在創(chuàng)建新的Pod。
原文鏈接:https://yyang.blog.csdn.net/article/details/122818329
相關(guān)推薦
- 2022-07-13 Dos攻擊Tomcat導(dǎo)致coredump問題分析
- 2022-10-26 Go?REFLECT?Library反射類型詳解_Golang
- 2022-08-15 使用mybatis-plus 的baseMapper的selectById 出現(xiàn)查詢不到值
- 2022-09-14 iOS開發(fā)多線程下全局變量賦值崩潰原理詳解_IOS
- 2022-06-13 ASP.NET?Core中的Caching組件簡(jiǎn)介_實(shí)用技巧
- 2023-01-03 利用C++模擬實(shí)現(xiàn)STL容器:list_C 語(yǔ)言
- 2022-10-02 iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法_IOS
- 2022-11-13 MacOS下C++使用WebRTC注意事項(xiàng)及問題解決_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支