k8s-Scale、Rolling Update(5)

前言

​ 在K8S中,我们可以根据访问量,以一种简单的形式动态扩展我们的应用,以及以一种零停机时间的形式滚动更新我们的 应用。

​ 以下演示均以上篇文章的deployment文件为例。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo-deployment
  labels:
    k8s-app: k8s-demo-web
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: k8s-demo-web
  template:
    metadata:
      labels:
        k8s-app: k8s-demo-web
    spec:
      containers:
      - name: aspnetcore
        image: easyboys/k8sdemo:v1 
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000   #此端口需要与dockerfile中指定暴露的端口一致,否则无法访问
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: k8s-demo-web
  name: k8s-demo-service
spec:
  type: NodePort
  ports:
  - port: 5000
    targetPort: 5000
    nodePort: 31000
  selector:
    k8s-app: k8s-demo-web

1、Scale

​ 创建上面所示的Deployment,replicas为1:

kubectl apply -f demoDeployment-1.yaml

如下图所示,成功创建了一个服务副本:

1603370502(1)

执行以下命令扩容到4个:

kubectl scale deployment k8s-demo-deployment --replicas 4

如下图所示,成功创建了四个副本运行在两个节点下:

1603370740(1)

根据CPU状态自动扩容todo

2、Rolling Update

如我们需要更新镜像,并不会一次性全部更新,而是创建一个新的pod,暂停一个旧的pod,创建完成后删除旧的pod,确保每次只有一个pod不可用。

更新镜像:

kubectl set image deployment/k8s-demo-deployment aspnetcore=easyboys/k8sdemo:v2

如下图所示,三个pod为runing状态,只有一个pod处理更新状态。

1603371140(1)

验证更新是否成功:

image-20201022205658668

版本为v2,更新成功

回滚更新:

回滚到上一次的更新状态

kubectl rollout undo deployment/k8s-demo-deployment

查看回滚状态:

kubectl rollout status deployment/k8s-demo-deployment

如下图,成功回滚到v1版本

image-20201022210103780

回滚到指定版本:

如果要回滚到指定本版,那么每次发布的都有带上 --record参数

准备三个demoployment:

demoDeployment-1.yaml 对应image:easyboys/k8sdemo:v1

demoDeployment-2.yaml 对应image:easyboys/k8sdemo:v2

demoDeployment-3.yaml 对应image:easyboys/k8sdemo:v3

分别依次执行:

kubectl apply -f demoDeployment-1.yaml --record

kubectl apply -f demoDeployment-2.yaml --record

kubectl apply -f demoDeployment-3.yaml --record

查看Deployment升级的历史记录:

kubectl rollout history deployment/k8s-demo-deployment

1603374289(1)

查看单个revision的详细信息:

kubectl rollout history deployment/k8s-demo-deployment --revision=2

1603374367(1)

回退指定版本:

--to-revision 指定版本号

kubectl rollout undo deployment/k8s-demo-deployment --to-revision=1 
原文地址:https://www.cnblogs.com/roluodev/p/13862336.html