K8S實踐Ⅲ(Pod控制器)

一、Deployment

Deployment的主要功能就是自動部署一個容器應用的多份副本,以及持續監控副本的數量,在集羣內始終維持用戶指定的副本數量

1.配置參數
K8S實踐Ⅲ(Pod控制器)

Selector(選擇器):
  .spec.selector是可選字段,用來指定 label selector ,圈定Deployment管理的pod範圍。如果被指定, .spec.selector 必須匹配 .spec.template.metadata.labels,否則它將被API拒絕。如果 .spec.selector 沒有被指定, .spec.selector.matchLabels 默認是.spec.template.metadata.labels。

2.Deployment配置實例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           58s
# kubectl get pods
NAME                               READY   STATUS             RESTARTS   AGE
liveness-http                      0/1     CrashLoopBackOff   473        28h
nginx-deployment-6dd86d77d-6hk7w   1/1     Running            0          71s
nginx-deployment-6dd86d77d-mxr8l   1/1     Running            0          71s
nginx-deployment-6dd86d77d-xxhpd   1/1     Running            0          71s
# kubectl get pods --show-labels
NAME                               READY   STATUS    RESTARTS   AGE    LABELS
nginx-deployment-6dd86d77d-6hk7w   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-mxr8l   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-xxhpd   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d

當 Deployment 創建或者接管 ReplicaSet 時,Deployment controller 會自動爲 Pod 添加 pod-template-hash label。這樣做的目的是防止 Deployment 的子ReplicaSet 的 pod 名字重複

3.Deployment更新升級

現將nginx鏡像更新爲1.9.1版本,可以通過kubectl set image命令爲Deployment設置新的鏡像版本

# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment.extensions/nginx-deployment image updated
# kubectl rollout status deployment/nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out
# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d    0         0         0       70m
nginx-deployment-784b7cc96d   3         3         3       21m

# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-784b7cc96d-4575d   1/1     Running   0          2m13s
nginx-deployment-784b7cc96d-c98s8   1/1     Running   0          91s
nginx-deployment-784b7cc96d-r6sm9   1/1     Running   0          2m51s
#此處名稱已經更新

查看Deployment詳細信息

# kubectl describe deployment/nginx-deployment
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 1
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 2
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 2
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 1
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 3
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 0

另一種更新方法是使用kubectl edit命令修改 Deployment配置:
#kubectl edit deployment/nginx-deployment

4.Deployment版本回滾
查看deployment升級記錄

# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
  • 默認情況下,kubernetes 會在系統中保存前兩次 Deployment 的 rollout 歷史記錄,可以修改revision history limit來更改保存的revision數。
  • 這裏在創建Deployment時沒有增加--record參數,所以並不能看到revision的變化。在創建 Deployment 的時候加上--record參數就可以看到每個版本使用的命令。
  • Deployment的更新操作是在進行rollout時觸發的,這意味着當且僅當 Deployment 的 Pod template(如.spec.template)被更改時纔會創建新的revision,其他的更新操作(增加副本數)將不會觸發Deployment的更新操作,這意味着當回滾到之前的版本時,只有 Deployment 中的 Pod template 部分纔會回退。

查看特點版本的詳細信息

# kubectl rollout history deployment/nginx-deployment --revision=2

回滾至上一個版本

# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back

也可以使用--to-revision參數指定某個歷史版本

# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.extensions/nginx-deployment rolled back

5.Deployment暫停和恢復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章