kubernetes 滚动更新、定义应用版本、实现应用更新、管理应用更新、添加更新描述

pv.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-10m
spec:
  capacity:
    storage: 10Mi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 192.168.2.140
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/02
    server: 192.168.2.140
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-5gi
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/03
    server: 192.168.2.140

pvc.yaml:

apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nginx
  namespace: dev
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: nfs

nginx-dp-svc-pvc.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: nginx-pv-storage
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nginx-pv-storage
        persistentVolumeClaim:
          claimName: pvc-nginx
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-nginx
  name: svc-nginx
  namespace: dev
spec:
  ports:
  - name: 8000-80
    port: 8000
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
root@k8s-master1:~# kubectl apply -f pv.yaml -f pvc.yaml -f nginx-dp-svc-pvc.yaml


root@k8s-master1:~# kubectl get deploy -n dev
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           35m
root@k8s-master1:~# kubectl edit deploy nginx-deployment -n dev
查看:.spec.template.spec.containers[0].image 

更新为nginx:1.26.2, imagePullPolicy如果是always修改为IfNotPresent

在.metadata.annotations这里写上更新原因描述:kubernetes.io/change-cause: update to nginx:1.26.2

:wq保存退出

观察滚动更新的过程

仔细查看输出信息,可以发现,kubernetes逐步的创建新pod,同时也在销毁旧pod,保证系统里始终有足够数量的pod在运行,不会有“空窗期”中断业务。新pod的数量增加的过程有点像滚雪球,从零开始越滚越大,所以这就是所谓的“滚动更新”(rolling update)。

root@k8s-master1:~# kubectl describe deploy nginx-deployment -n dev

1、一开始时候,v1的pod数量是3.

2、滚动更新开始的时候,kubernetes创建了1个v2的pod(ddc75986),并将v1pod(8845b589f)减少到2个.

3、接着再增加v2pod的数量到2,同时v1pod的数量变成了1.

4、最后v2pod的数量达到预期值3,v1pod的数量变成了0,整个更新过程结束了.

root@k8s-master1:~# kubectl rollout status deploy nginx-deployment -n dev

查看更新历史

root@k8s-master1:~# kubectl rollout history deploy nginx-deployment -n dev

查看某一个版本具体的信息:

root@k8s-master1:~# kubectl rollout history --revision=8 deploy nginx-deployment -n dev

回滚到先前的版本:

root@k8s-master1:~# kubectl rollout undo --to-revision=9 deploy nginx-deployment -n dev
deployment.apps/nginx-deployment rolled back
root@k8s-master1:~#

Categories: docker与kubernetes