• 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 
    
  • 相关阅读:
    Spring3:AOP
    Spring2:bean的使用
    Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
    Vue.js——60分钟组件快速入门(上篇)
    vue父子组件嵌套的时候遇到
    Vue.js——60分钟快速入门
    [Vue warn]: Cannot find element: #app
    关于RabbitMQ以及RabbitMQ和Spring的整合
    spring集成多个rabbitMQ
    RabbitMQ-从基础到实战(5)— 消息的交换(下)
  • 原文地址:https://www.cnblogs.com/roluodev/p/13862336.html
Copyright © 2020-2023  润新知