CKA认证K8s

【K8s 精选】CKA - 工作负载和调度 - 部署、更新和回滚

2022-02-28  本文已影响0人  熊本极客

参考工作负载 Deployment

1.创建 Deployment 部署 Pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  #deployment的标签
  labels:
    app: nginx
spec:
  replicas: 3
  selector:   #必填字段
    #spec.selector.matchLabels与spec.template.metadata.labels一致,可用于service的后端
    matchLabels:
      app: nginx
  template:
    metadata:
      #pod的标签
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

metadata.name 表示 Deployment 的唯一名称
spec.replicas 表示 Pod 的副本数
spec.selector 表示 Deployment 通过模板 template 管理 Pods

说明
spec.selector.matchLabelsspec.template.metadata.labels 需要保持一致,可用于 Service 的后端。

2.更新 Deployment

仅当 Deployment Pod 模板即 spec.template 内容有变化的时候,才会触发 Deployment 更新。

例如,更新镜像

步骤 ①:更新镜像版本

#方式1 直接设置镜像
#nginx-deployment是metadata.name,nginx是spec.template.spec.containers[0].name
$kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
deployment.apps/nginx-deployment image updated

#方式2 edit deployment
$kubectl edit deployment/nginx-deployment
deployment.apps/nginx-deployment image updated

步骤 ②:查看上线状态

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

步骤 ③:查看 Deployment 和 Pod 的最新状态

#查看 Deployment
$kubectl get deployment/nginx-deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           36s

#查看副本数 ReplicaSet 
$kubectl get rs |grep nginx-deployment
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-1564180365   3         3         3       6s
nginx-deployment-2035384211   0         0         0       36s

#查看 Pod
$kubectl get pods |grep nginx-deployment
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-1564180365-khku8   1/1       Running   0          14s
nginx-deployment-1564180365-nacti   1/1       Running   0          14s
nginx-deployment-1564180365-z9gth   1/1       Running   0          14s

Deployment 的升级流程:首先创建新 Pod,直到有足够的数量新 Pods 创建了,才会杀死旧 Pods。

3.回滚 Deployment

3.1 查看升级过程中有问题的 Pod

类似上面升级 Deployment 的操作,如果出现新 Pod 异常启动,则停止升级。

说明: 可通过 rollingUpdate 参数 maxUnavailable(默认值为 25%),实现 Deployment 控制器自动停止有问题的升级过程,并停止对新的 ReplicaSet 扩容。

#查看 Deployment
$kubectl get deployment/nginx-deployment
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...

#查看 Pod
$kubectl get pods |grep nginx-deployment
NAME                                READY     STATUS             RESTARTS   AGE
nginx-deployment-1564180365-70iae   1/1       Running            0          50s
nginx-deployment-1564180365-jbqqo   1/1       Running            0          50s
nginx-deployment-1564180365-hysrc   1/1       Running            0          50s
nginx-deployment-3066724191-08mng   0/1       ImagePullBackOff   0          6s

3.2 查看 Deployment 上线历史

#检查 Deployment 修订历史
$kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment"
REVISION    CHANGE-CAUSE
1           kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
2           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
3           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true


#查看指定 Deployment 历史的详情
#revision 表示上述 REVISION 的版本,数字越大,版本越新。
$kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
  Labels:       app=nginx
          pod-template-hash=1159050644
  Annotations:  kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
  Containers:
   nginx:
    Image:      nginx:1.16.1
    Port:       80/TCP
     QoS Tier:
        cpu:      BestEffort
        memory:   BestEffort
    Environment Variables:      <none>
  No volumes.

3.2 回滚 Deployment 之前的版本

# --to-revision 回滚到版本 2
$kubectl rollout undo deployment/nginx-deployment --to-revision=2

#检查回滚是否成功以及 Deployment 是否正在运
$kubectl get deployment nginx-deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           30m

$kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Sun, 02 Sep 2018 18:17:55 -0500
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision=4
                        kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
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.16.1
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-c4747d96c (3/3 replicas created)
Events:
  Type    Reason              Age   From                   Message
  ----    ------              ----  ----                   -------
  Normal  ScalingReplicaSet   12m   deployment-controller  Scaled up replica set nginx-deployment-75675f5897 to 3
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 1
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 2
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 2
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 1
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 3
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 0
  Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-595696685f to 1
  Normal  DeploymentRollback  15s   deployment-controller  Rolled back deployment "nginx-deployment" to revision 2
  Normal  ScalingReplicaSet   15s   deployment-controller  Scaled down replica set nginx-deployment-595696685f to 0
上一篇下一篇

猜你喜欢

热点阅读