成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Kubernetes中怎么利用Deployment實現(xiàn)滾動升級

本篇文章為大家展示了Kubernetes中怎么利用Deployment實現(xiàn)滾動升級,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)主營札達網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),札達h5微信小程序搭建,札達網(wǎng)站營銷推廣歡迎札達等地區(qū)企業(yè)咨詢

創(chuàng)建Deployment

Kubernetes中怎么利用Deployment實現(xiàn)滾動升級可以看出一個Deployment擁有多個Replica Set,而一個Replica Set擁有一個或多個Pod。一個Deployment控制多個rs主要是為了支持回滾機制,每當(dāng)Deployment操作時,Kubernetes會重新生成一個Replica Set并保留,以后有需要的話就可以回滾至之前的狀態(tài)。 下面創(chuàng)建一個Deployment,它創(chuàng)建了一個Replica Set來啟動3個nginx pod,yaml文件如下:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    k8s-app: nginx-demo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

將上面內(nèi)容保存為: nginx-deployment.yaml,執(zhí)行命令:

$ kubectl create -f nginx-deployment.yaml
deployment "nginx-deploy">

然后執(zhí)行一下命令查看剛剛創(chuàng)建的Deployment:

$ kubectl get deployments
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3         0         0            0           1s

隔一會再次執(zhí)行上面命令:

$ kubectl get deployments
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3         3         3            3           4m

我們可以看到Deployment已經(jīng)創(chuàng)建了3個Replica Set了,執(zhí)行下面的命令查看rs和pod:

$ kubectl get rs
NAME                     DESIRED   CURRENT   READY     AGE
nginx-deploy-431080787   3         3         3         6m
$ kubectl get pod --show-labels
NAME                           READY     STATUS    RESTARTS   AGE       LABELS
nginx-deploy-431080787-53z8q   1/1       Running   0          7m        app=nginx,pod-template-hash=431080787
nginx-deploy-431080787-bhhq0   1/1       Running   0          7m        app=nginx,pod-template-hash=431080787
nginx-deploy-431080787-sr44p   1/1       Running   0          7m        app=nginx,pod-template-hash=431080787

上面的Deployment的yaml文件中的replicas:3將會保證我們始終有3個POD在運行。

滾動升級Deployment

現(xiàn)在我們將剛剛保存的yaml文件中的nginx鏡像修改為nginx:1.13.3,然后在spec下面添加滾動升級策略:

minReadySeconds: 5
strategy:
  # indicate which strategy we want for rolling update
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 1
  • minReadySeconds:

    • Kubernetes在等待設(shè)置的時間后才進行升級

    • 如果沒有設(shè)置該值,Kubernetes會假設(shè)該容器啟動起來后就提供服務(wù)了

    • 如果沒有設(shè)置該值,在某些極端情況下可能會造成服務(wù)服務(wù)正常運行

  • maxSurge:

    • 升級過程中最多可以比原先設(shè)置多出的POD數(shù)量

    • 例如:maxSurage=1,replicas=5,則表示Kubernetes會先啟動1一個新的Pod后才刪掉一個舊的POD,整個升級過程中最多會有5+1個POD。

  • maxUnavaible:

    • 升級過程中最多有多少個POD處于無法提供服務(wù)的狀態(tài)

    • 當(dāng)maxSurge不為0時,該值也不能為0

    • 例如:maxUnavaible=1,則表示Kubernetes整個升級過程中最多會有1個POD處于無法服務(wù)的狀態(tài)。

然后執(zhí)行命令:

$ kubectl apply -f nginx-deployment.yaml
deployment "nginx-deploy" configured

然后我們可以使用rollout命令:

  • 查看狀態(tài):

    $ kubectl rollout status deployment/nginx-deploy
    Waiting for rollout to finish: 1 out of 3 new replicas have been updated..
    deployment "nginx-deploy" successfully rolled out

  • 暫停升級

    $ kubectl rollout pause deployment <deployment>

  • 繼續(xù)升級

    $ kubectl rollout resume deployment <deployment>

升級結(jié)束后,繼續(xù)查看rs的狀態(tài):

$ kubectl get rs
NAME                      DESIRED   CURRENT   READY     AGE
nginx-deploy-2078889897   0         0         0         47m
nginx-deploy-3297445372   3         3         3         42m
nginx-deploy-431080787    0         0         0         1h

根據(jù)AGE我們可以看到離我們最近的當(dāng)前狀態(tài)是:3,和我們的yaml文件是一致的,證明升級成功了。用describe命令可以查看升級的全部信息:

Name:     nginx-deploy
Namespace:    default
CreationTimestamp:  Wed, 18 Oct 2017 16:58:52 +0800
Labels:     k8s-app=nginx-demo
Annotations:    deployment.kubernetes.io/revision=3
      kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1beta1","kind":"Deployment","metadata":{"annotations":{},"labels":{"k8s-app":"nginx-demo"},"name":"nginx-deploy","namespace":"defa...
Selector:   app=nginx
Replicas:   3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:   RollingUpdate
MinReadySeconds:  0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels: app=nginx
  Containers:
   nginx:
    Image:    nginx:1.13.3
    Port:   80/TCP
    Environment:  <none>
    Mounts:   <none>
  Volumes:    <none>
Conditions:
  Type    Status  Reason
  ----    ------  ------
  Progressing   True  NewReplicaSetAvailable
  Available   True  MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet:  nginx-deploy-3297445372 (3/3 replicas created)
Events:
  FirstSeen LastSeen  Count From      SubObjectPath Type    Reason      Message
  --------- --------  ----- ----      ------------- --------  ------      -------
  50m   50m   1 deployment-controller     Normal    ScalingReplicaSet Scaled up replica set nginx-deploy-2078889897 to 1
  45m   45m   1 deployment-controller     Normal    ScalingReplicaSet Scaled down replica set nginx-deploy-2078889897 to 0
  45m   45m   1 deployment-controller     Normal    ScalingReplicaSet Scaled up replica set nginx-deploy-3297445372 to 1
  39m   39m   1 deployment-controller     Normal    ScalingReplicaSet Scaled down replica set nginx-deploy-431080787 to 2
  39m   39m   1 deployment-controller     Normal    ScalingReplicaSet Scaled up replica set nginx-deploy-3297445372 to 2
  38m   38m   1 deployment-controller     Normal    ScalingReplicaSet Scaled down replica set nginx-deploy-431080787 to 1
  38m   38m   1 deployment-controller     Normal    ScalingReplicaSet Scaled up replica set nginx-deploy-3297445372 to 3
  38m   38m   1 deployment-controller     Normal    ScalingReplicaSet Scaled down replica set nginx-deploy-431080787 to 0

回滾Deployment

我們已經(jīng)能夠滾動平滑的升級我們的Deployment了,但是如果升級后的POD出了問題該怎么辦?我們能夠想到的最好最快的方式當(dāng)然是回退到上一次能夠提供正常工作的版本,Deployment就為我們提供了回滾機制。

首先,查看Deployment的升級歷史:

$ kubectl rollout history deployment nginx-deploy
deployments "nginx-deploy"
REVISION  CHANGE-CAUSE
1   <none>
2   <none>
3   kubectl apply --filename=Desktop/nginx-deployment.yaml --record=true

從上面的結(jié)果可以看出在執(zhí)行Deployment升級的時候最好帶上record參數(shù),便于我們查看歷史版本信息。同樣我們可以使用下面的命令查看單個REVISION的信息:

$ kubectl rollout history deployment nginx-deploy --revision=3
deployments "nginx-deploy" with revision #3
Pod Template:
  Labels: app=nginx
  pod-template-hash=3297445372
  Annotations:  kubernetes.io/change-cause=kubectl apply --filename=nginx-deployment.yaml --record=true
  Containers:
   nginx:
    Image:  nginx:1.13.3
    Port: 80/TCP
    Environment:  <none>
    Mounts: <none>
  Volumes:  <none>

假如現(xiàn)在要直接回退到當(dāng)前版本的前一個版本:

$ kubectl rollout undo deployment nginx-deploy
deployment "nginx-deploy" rolled back

當(dāng)然也可以用revision回退到指定的版本:

$ kubectl rollout undo deployment nginx-deploy --to-revision=2
deployment "nginx-deploy" rolled back

現(xiàn)在可以用命令查看Deployment現(xiàn)在的狀態(tài)了。

注意清除機制

前面在用apply命令滾動升級Deployment后,無意間在Dashboard中發(fā)現(xiàn)了Replica Sets下面有很多Pods為0/0的RS,由于本人有輕微的強迫癥,眼里是容不下0/0這種東西的,然后就給刪除了,結(jié)果后面更新的時候又出現(xiàn)了,以為是yaml腳本有誤,結(jié)果到現(xiàn)在才清楚這個是用于Deployment回滾用的,不能隨便刪除的(感覺自己就是個棒槌啊~~~)。Kubernetes中怎么利用Deployment實現(xiàn)滾動升級

Kubernetes默認是會將Deployments的每次改動操作生成一個新的RS,并保存下來的。不過你可以設(shè)置參數(shù).spec.revisonHistoryLimit來來指定Deployment最多保留多少revision 歷史記錄。如果將該項設(shè)置為0,Deployment就不允許回退了。

上述內(nèi)容就是Kubernetes中怎么利用Deployment實現(xiàn)滾動升級,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前文章:Kubernetes中怎么利用Deployment實現(xiàn)滾動升級
文章起源:http://jinyejixie.com/article2/jpdgic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站營銷、App設(shè)計、網(wǎng)站改版企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
大余县| 晋州市| 合水县| 西和县| 合肥市| 镇雄县| 吉水县| 合江县| 仁寿县| 西乌| 舟山市| 石门县| 拉孜县| 汉中市| 镇宁| 贵南县| 收藏| 左贡县| 九龙城区| 永和县| 神池县| 庆云县| 乌拉特后旗| 桂阳县| 梁山县| 闵行区| 丹阳市| 丁青县| 将乐县| 沁水县| 福泉市| 承德市| 黔西县| 辉南县| 丹寨县| 哈密市| 翁源县| 曲周县| 六安市| 吉木乃县| 孝义市|