<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
replace
(/rɪˈpleɪs/)替換、取代;在本文中是修改後的yaml檔案替換舊的yaml檔案
rollout
(/ɑː®/)記錄;在本文中是記錄歷史的deploy副本版本
describe
(/dɪˈskraɪb/)描述;在本文中是說記錄過程
scale
(/skeɪl/)縮放;在本文中是說縮放副本的個數
pause
(/pɔːz/)暫停;在本文中是說暫停更新
resume
(/rɪˈzjuːm/)恢復;在本文中是說從暫停恢復到正常狀態
RC(Replication Controller)和RS(ReplicaSet)
(幾乎棄用)RC是複製控制器,確保Pod數量達到期望值,保證副本始終處於可用的狀態。
(不建議單獨使用)RS是RC的下一代,支援標籤集。
無狀態服務Deployment意思就是無狀態的。。。用於部署無狀態的服務。
類似網頁存取之類的請求就是無狀態的,每次請求都包含了需要的所有資訊,每次請求都和上次沒有關係。
Deployment是最常用的控制器。一般用於管理維護企業內部的無狀態的微服務,比如configserver、zuul、springboot。可以管理多個副本的Pod實現無縫遷移、自動擴容縮容、自動災難恢復、一鍵回滾等功能。
可以通過命令建立一個Deployment:
kubectl create deployment nginx --image=nginx:1.20.2
可以將建立的副本生成yaml檔案:
kubectl get deployment nginx -o yaml > nginx.yaml
然後可以修改yaml檔案的引數,然後重新載入新的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 # 副本數 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狀態說明:
[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的狀態,已經達到Ready的個數
UP-TO-DATE
:已經達到期望狀態的副本數
AVAILABLE
:已經可以使用的個數
AGE
:程式執行的時間
CONTAINERS
:容器的自定義名稱
IMAGES
:容器映象名稱
SELECTOR
:管理的Pod標籤
檢視建立nginx的deploy中映象的版本:可以看到是1.18.0
[root@k8s-master01 ~]# kubectl get deploy -o yaml | grep image - image: nginx:1.18.0 imagePullPolicy: Always
我們可以使用set命令更新映象的版本:這裡的set是設定的意思。
[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
可以使用下列命令檢視升級過程:
[root@k8s-master01 ~]# kubectl rollout status deployment nginx [root@k8s-master01 ~]# kubectl describe deployments.apps nginx
升級過程大概為:建立deploy時,系統也會同時建立depoly的RS,更新deploy時,系統會增加一個新的RS,舊的RS會相應減少1,直到替換完成。
deployment的回滾可以回滾到上個版本,也可以回滾到指定指定版本,歷史版本的數量由下面這個引數控制:
revisionHistoryLimit: 10
檢視歷史版本:可以看到副本發生了幾次變化
[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
回滾到上一個版本:undo是復原的意思(我的理解是復原現在的版本回到之前的版本)
[root@k8s-master01 ~]# kubectl rollout undo deployment nginx deployment.apps/nginx rolled back
檢視已經由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
如果多次釋出,回滾到指定版本:
[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: <none> Host Port: <none> Environment: <none> Mounts: <none> Volumes: <none> [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
可以看到以上資訊版本已經回滾到1.20.2版本;另外就算更新時候失敗,新映象拉取失敗,舊的副本不會停止工作,會一直持續工作,直到升級成功。
使用命令擴容:將nginx副本由一個變成兩個,注意擴容RS不會發生變化,因為Pod的本質沒有發生改變。scale這個單詞在這裡是縮放的意思。
[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
更新暫停:這條命令的作用是將更新暫停後,你使用kubectl set
命令修改Pod的設定後不會立刻生效,即使多次修改也只是積累起來不會馬上生效。
[root@k8s-master01 ~]# kubectl rollout pause deployment nginx
暫停恢復:解除之前的更新暫停功能,在暫停期間做過的修改將都會生效
[root@k8s-master01 ~]# kubectl rollout resume deployment nginx
捲動更新的策略:就是建立一個新的Pod,然後刪除一箇舊的Pod,用新的替換舊的。
spec.strategy.type
:更新deploy的方式,預設是RollingUpdate
RollingUpdate
:捲動更新,可以指定maxSurge和maxUnavailable
maxUnavailable
:指定在回滾或更新時最大不可用的Pod數量,預設25%,也可以設定數位;如果為0那麼maxSurge就不能為0 。
maxSurge
:可以超過期望值的的最大Pod數,可選,預設為25%。如果為0那maxUnavailable就不能為0 。
Recreate
:重建,先刪除舊的Pod,在建立新的Pod。
以上就是Deployment副本無狀態服務及水平擴充套件的詳細內容,更多關於Deployment無狀態服務擴充套件的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45