k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

前言:上一篇通过rancher管理k8s,部署服务应用扩容,高可用,本篇介绍kubectl命令行部署高可用集群节点,测试升级、扩容等

1、测试环境:3节点k3s,使用其中2节点(ubuntunode1与ubuntunode2),node3暂不用

  • 输入命令,查看节点状况
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

2、进入任意节点,使用kubectl命令行进行服务部署操作,我们这里用node1节点

  • 新建一个.yaml文件,用于部署2个负载的应用,文件名称:springbootapp-2nodes.yaml

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 文件内容如下,kind节点使用Deployment类型:

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 文本如下:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: springbootapp-dep
        labels:
          app: springbootapp
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: springbootapp
        template:
          metadata:
            labels:
              app: springbootapp
          spec:
            containers:
            - name: springbootapp
              image: xjk27400861/springbootapp:42
              ports:
              - containerPort: 8080
    
  • 新建一个命名空间,用于部署集群应用
    命令如下:
      sudo kubectl create namespace springboot2node
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 输入命令,创建2节点副本应用,-n 指定命名空间
    命令如下:
      sudo kubectl create -f springbootapp-2nodes.yaml -n springboot2node
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 也可以在.yaml文件中指定命名空间:

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 输入命令,查看pod节点运行状态
    命令如下:
      sudo kubectl get pods -n springboot2node
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 输入命令,查看副本集情况
    命令如下:
      sudo kubectl get rs -n springboot2node
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 输入命令,创建一个svc的service,暴露集群
    命令如下:
      sudo kubectl apply -f springbootapp-2node-svc.yaml
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • springbootapp-2node-svc.yaml文件内容如下:
      apiVersion: v1
      kind: Service
      metadata:
        name: springbootapp-2node-svc
        namespace: springboot2node
        labels:
          app: springbootapp-2node-svc
      spec:
        type: NodePort
        ports:
          - port: 8080
            nodePort: 30001
        selector:
          app: springbootapp
    

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 通过任意节点ip+端口:30001+路由即可访问应用,我这是:http://192.168.231.133:30001/hellohttp://192.168.231.134:30001/hello

    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

3、k8s扩容

  • 修改配置文件springbootapp-2nodes.yaml,2节点改为3节点
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 输入命令,重新部署,查看副本集变为3个
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true 
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 查看pod数量,也为3个
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

4、k8s自愈性

  • 删除2个pod,模拟服务器宕机状况
      sudo kubectl delete pod springbootapp-dep-67656f6dc9-cncb6 springbootapp-dep-67656f6dc9-pp47x -n springboot2node
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 重新查看pod状况,发现又重新构建了2个新的pod,保证负载还是3台
      sudo kubectl get pods -n springboot2node
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

5、k8s升级

  • 修改代码,区分版本,重新构建镜像推到仓库
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 新镜像tag:43
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 修改部署文件:springbootapp-2nodes.yaml,镜像版本改为43
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 输入命令,重新部署应用,参数--record=true让 Kubernetes 把这行命令记到发布历史中方便后面查看
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • ContainerCreating状态的表示新版本的容器正在启动,Running的是新版本的已经运行起来了,Terminating的这个是老版本正在停止
  • 过了一段时间,发现3个节点已经创建完成
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 访问应用,即可看见新版本已发布完成
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

6、k8s回滚应用

  • 输入命令,查看发布历史
      sudo kubectl rollout history deployment springbootapp-dep -n springboot2node
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 可以看到有2个版本,我们回滚到版本1的状态
      sudo kubectl rollout undo deployment springbootapp-dep --to-revision=1 -n springboot2node
    
  • 查看回滚状态,成功
      sudo kubectl rollout status deployment springbootapp-dep -n springboot2node
    
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 访问应用,即可看见应用已回滚到老版本
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

7、rancher2.x对springboot2node进行迁移,迁移到default项目下,便于rancher管理

k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用

  • 点击右侧下拉菜单,移动
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 命名空间已转移到项目default中
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
  • 以后可以通过rancher操作应用扩容缩容回滚等,会相当方便
    k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
上一篇:ansible-playbook先导yaml


下一篇:k8s中controller部署有状态应用StatefulSet