Kubernetes的Deployment對象使用

1、什麼是Deployment對象

明明ReplicaSet已經能夠控制pod的數量了,爲何還須要Deployment?nginx

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

Deploymen實際上一個兩層控制器,遵循一種滾動更新的方式來實升級現有的容器,這個能力的實現,依賴的就是ReplicaSet這個對象
當咱們修改了Deployment對象後,Deployment控制器會使用修改後的模板,建立一個新的ReplicaSet對象,這時候有兩個RelicaSet對象,
Deployment經過控制ReplicaSet對象的pod數量來達到滾動升級的效果
例如A和B,若是最終設置的pod數都是3,經過A-1,B+1這樣的方式,直到A的pod數量變爲0,最終 達到了滾動升級的目的。
同時,由於存在多個ReplicaSet,讓回滾成爲了可能api

2、使用示例

示例yaml文件app

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,指定了滾動升級的策略ide

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

查看deploymentscode

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 副本個數對象

3、查看歷史和回滾

查看歷史版本blog

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

查看指定版本get

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

回滾到上一版本io

kubectl rollout undo deployment  ${name}

回滾到指定版本

kubectl rollout undo deployment ${name} --to-revision=${version}
相關文章
相關標籤/搜索