Kubernetes - Deployment创建Pod及滚动升级,回滚命令 示例

我们先看看deployment的官方解释:

Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

看起来说的是升级版的RC和RS,提供了更加完善的版本升级和版本回滚功能;

1、和使用helm一样,先构建一个简单的文件夹:

tree demodeploy/
demodeploy/
├── Chart.yaml
├── templates
│   └── demodeploy.yaml
└── values.yaml

2、 

[root demodeploy]# cat Chart.yaml 
name: demodeploy
version: "v1.0"
description: demodeploy build by Helm

 3、

[root demodeploy]# cat templates/demodeploy.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: demodeploy
spec:
  minReadySeconds: 5  #滚动升级时,容器准备就绪时间最少为5s
  strategy:
    type: RollingUpdate  #升级方式 recreate 
    rollingUpdate: ##若replicas为3,则整个升级,pod个数在2-4个之间
      maxSurge: 1  ##滚动升级时会先启动1个pod
      maxUnavailable: 1  ##滚动升级时允许的最大Unavailable的pod个数
  replicas: {{.Values.core.replicas}}
  template: 
    metadata: 
      labels:
        app: demodeploy
    spec:
      containers:
      - name: demodeploy
        image: {{.Values.docker.registry}}/demo:{{.Values.demodeploy.version}}
        imagePullPolicy: {{.Values.docker.pullPolicy}}
#        resources:
#          limits:
#            memory: "128Mi"
#          requests:
#            memory: "64Mi"
        volumeMounts:
        - mountPath: /home/test/daopinz
          name: config-volume
      volumes:
      - name: config-volume
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: demodeploy
  labels:
    app: demodepoly
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
  - port: 12321
    name: demodeploy-port
    nodePort: 32111
  selector:
    app: demodeploy

4、

[root demodeploy]# cat  values.yaml 
docker:
  registry: xxx-xxx:5000/docker.io
  pullPolicy: Always
core:
  replicas: 2 
demodeploy: #此处不允许有-
  version: "v1.0"

5、

helm lint demodeploy/			 #检查依赖和模板配置是否正确,如果文件格式错误,可以根据提示进行修改
helm install --dry-run --debug demodeploy/		    #检查配置和模板是否有效
helm install -n demodeploy demodeploy    			#根据配置创建Pod

6、

deployment:(多种升级方案:Recreate--删除所有已存在的pod,重新创建新的; RollingUpdate--滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。
recreate策略将会在升级过程中,停止服务,但会保证应用版本一致;使用rollingUpdate不会中断服务,但会导致调用时出现应用版本不一致的情况,输出内容不一致。)
kubectl api-versions                                                #查看ApiServer版本信息
kubectl create -f demodeploy.yaml --record=true                     #创建Deployment,记录版本历史(–record=true)注,不使用此方式创建deployment,使用helm创建,依旧可使用下面的命令

[root demodeploy]# kubectl rollout history deployment/demodeploy
deployments "demodeploy"
REVISION  CHANGE-CAUSE
5         kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v3.0 --record=true
7         <none>
8         kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v1.0 --record=true
9         kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v2.0 --record=true

kubectl rollout history deployments
kubectl rollout history deployment --revision=3                     #可以查看deployment版本历史明细
kubectl describe deployment/demodeploy
kubectl rollout status deployment/demodeploy                        #查看部署状态
kubectl set image deployment/demodeploy demodeploy=xxx-xxx:5000/docker.io/dome:v2.0 --record #滚动升级 (推荐使用)
kubectl apply -f update-nginx-deployment.yaml                       #修改了demodeploy的镜像,就相当于升级 (参考使用)
kubectl rollout pause deployment/demodeploy                         #暂停
kubectl rollout resume deployment/demodeploy                        #继续
kubectl rollout undo deployment/demodeploy                          #回滚
kubectl rollout undo deployment/demodeploy --to-revision=2          #回滚至指定版本

 

posted @ 2022-01-27 18:36  zhangdaopin  阅读(293)  评论(0编辑  收藏  举报