天天看點

Kubernetes的Deployment對象使用

一、什麼是Deployment對象

明明ReplicaSet已經可以控制pod的數量了,為什麼還需要Deployment?

簡單的說,Deployment控制ReplicaSet的多個版本,ReplicaSet控制Pod個數

Kubernetes的Deployment對象使用

Deploymen實際上一個兩層控制器,遵循一種滾動更新的方式來實更新現有的容器,這個能力的實作,依賴的就是ReplicaSet這個對象

當我們修改了Deployment對象後,Deployment控制器會使用修改後的模闆,建立一個新的ReplicaSet對象,這時候有兩個RelicaSet對象,

Deployment通過控制ReplicaSet對象的pod數量來達到滾動更新的效果

例如A和B,如果最終設定的pod數都是3,通過A-1,B+1這樣的方式,直到A的pod數量變為0,最終 達到了滾動更新的目的。

同時,因為存在多個ReplicaSet,讓復原成為了可能

二、使用示例

示例yaml檔案

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

           

template字段,指定了建立pod的模闆

replicas指定了pod的節點數量

還有一個 type: RollingUpdate,指定了滾動更新的政策

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1

           

檢視deployments

kubectl get deployments demo2 -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                        SELECTOR
demo2   2/3     3            2           24d   demo2        harbor.eoffcn.com/dev/demo2   workload.user.cattle.io/workloadselector=deployment-web-demo2
           

UP-TO-DATE:目前處于最新版本的 Pod 的個數,所謂最新版本指的是 Pod 的 Spec 部分與 Deployment 裡 Pod 模闆裡定義的完全一緻

AVAILABLE:目前已經可用的 Pod 的個數,即:既是 Running 狀态,又是最新版本,并且已經處于 Ready(健康檢查正确)狀态的 Pod 的個數

READY:前處于 Running 狀态的 Pod 的個數/使用者期望的 Pod 副本個數

三、檢視曆史和復原

檢視曆史版本

kubectl rollout history deployment ${name} 
deployment.extensions/demo2 
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
4 <none>
           

檢視指定版本

kubectl rollout history deployment ${name} --revision=${version}
           

復原到上一版本

kubectl rollout undo deployment  ${name}
           

復原到指定版本

kubectl rollout undo deployment ${name} --to-revision=${version}