(三) Kubernetes基础之Deployment

258 阅读2分钟

Deployment

用于部署无状态的服务,这个是最常用的控制器。一般用于管理维护企业内部无状态的微服务,比如configServer,springboot。可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等。

手动创建

$ kubectl create deployment nginx --image=nginx:1.15.2
deployment.apps/nginx created
$ kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-76446799f9-6ck7t   1/1     Running   0          26s

查看配置文件

# kubectl get deployment nginx -o yaml > nginx-deploy.yaml 
# cat nginx-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2020-09-19T02:41:11Z"
  generation: 1
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 2 #副本数
  revisionHistoryLimit: 10 # 设置保留RS旧的revision的个数
  selector:
    matchLabels:
      app: nginx
  strategy: #滚动更新策略  默认是RollingUpdate(先创建一个新的,在删除一个旧的,交替更新)   Recreate:重建,先删除旧的Pod,在创建新的Pod
    rollingUpdate:
      maxSurge: 25% # 可以超过期望值的最大Pod数   可以设置成数字或百分比
      maxUnavailable: 25% #指定在回滚或更新时最大不可用的Pod的数量 可以设置成数字或百分比
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.15.2
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30


Deployment更新

-- 更改deployment的镜像并记录
$ kubectl edit deploy nginx

-- 将nginx版本改为1.15.3 副本数改为2
- image: nginx:1.15.3
replicas: 2

-- 查看更新过程
kubectl rollout status deploy nginx**

deployment "nginx" successfully rolled out

# kubectl rollout status deploy nginx

Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...

Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...

Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...

Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...

Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...

deployment "nginx" successfully rolled out

Deployment回滚


-- 再次更新
$ kubectl set image deploy nginx nginx=1.15.4
-- 查看历史版本
$ kubectl rollout history deploy nginx
deployment.apps/nginx
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         kubectl set image deploy nginx nginx=1.15.4 --record=true

1924 Desktop/k8s  »

-- 查看指定版本信息
$ kubectl rollout history deploy nginx --revision=1
-- 回滚指定版本
$ kubectl rollout undo deploy nginx --to-revision=1
deployment.apps/nginx rolled back

扩容和缩容

» kubectl scale --replicas=3 deploy nginx
deployment.apps/nginx scaled
» kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           17m
» kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-76446799f9-j2v2s   1/1     Running   0          4m42s
nginx-76446799f9-pxg8g   1/1     Running   0          4m43s
nginx-76446799f9-vvfvk   1/1     Running   0          35s

更新暂停和恢复

» kubectl rollout pause deployment nginx
deployment.apps/nginx paused
» kubectl set image deploy nginx nginx=nginx:1.15.3
deployment.apps/nginx image updated
» kubectl set resources deploy nginx -c nginx --limits=cpu=200m,memory=128Mi --requests=cpu=10m,memory=16Mi
deployment.apps/nginx resource requirements updated
-- 查看配置文件 版本号和资源调整已修改(见下图)
» kubectl get deploy nginx -oyaml
-- 通过AGE可以看出来,并没有更新
» kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-76446799f9-j2v2s   1/1     Running   0          15m
nginx-76446799f9-pxg8g   1/1     Running   0          15m
nginx-76446799f9-vvfvk   1/1     Running   0          11m

-- 更新
» kubectl rollout resume deploy nginx
deployment.apps/nginx resumed

» kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7b7c775868-26brv   1/1     Running   0          3s
nginx-7b7c775868-594f6   1/1     Running   0          2s
nginx-7b7c775868-g2qdp   1/1     Running   0          5s

» kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-5cfd47cfc5   0         0         0       22m
nginx-76446799f9   0         0         0       30m
nginx-7b7c775868   3         3         3       8s
nginx-d45498588    0         0         0       29m

image.png