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

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

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

  • 输入命令,查看节点状况
    image

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

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

    image

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

    image

  • 文本如下:

    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
    image

  • 输入命令,创建2节点副本应用,-n 指定命名空间
    命令如下:

    sudo kubectl create -f springbootapp-2nodes.yaml -n springboot2node
    image

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

    image

  • 输入命令,查看pod节点运行状态
    命令如下:

    sudo kubectl get pods -n springboot2node
    image

  • 输入命令,查看副本集情况
    命令如下:

    sudo kubectl get rs -n springboot2node
    image

  • 输入命令,创建一个svc的service,暴露集群
    命令如下:

    sudo kubectl apply -f springbootapp-2node-svc.yaml
    image

  • 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

    image

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

    image

3、k8s扩容

  • 修改配置文件springbootapp-2nodes.yaml,2节点改为3节点
    image
  • 输入命令,重新部署,查看副本集变为3个
    sudo kubectl apply -f springbootapp-2nodes.yaml --record=true
    image
  • 查看pod数量,也为3个
    image

4、k8s自愈性

  • 删除2个pod,模拟服务器宕机状况
    sudo kubectl delete pod springbootapp-dep-67656f6dc9-cncb6 springbootapp-dep-67656f6dc9-pp47x -n springboot2node
    image
  • 重新查看pod状况,发现又重新构建了2个新的pod,保证负载还是3台
    sudo kubectl get pods -n springboot2node
    image

5、k8s升级

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

6、k8s回滚应用

  • 输入命令,查看发布历史
    sudo kubectl rollout history deployment springbootapp-dep -n springboot2node
    image
  • 可以看到有2个版本,我们回滚到版本1的状态
    sudo kubectl rollout undo deployment springbootapp-dep --to-revision=1 -n springboot2node
  • 查看回滚状态,成功
    sudo kubectl rollout status deployment springbootapp-dep -n springboot2node
    image
  • 访问应用,即可看见应用已回滚到老版本
    image

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

image

  • 点击右侧下拉菜单,移动
    image
    image
  • 命名空间已转移到项目default中
    image
  • 以后可以通过rancher操作应用扩容缩容回滚等,会相当方便
    image
posted @ 2021-10-19 18:23  xjk27400861  阅读(667)  评论(0)    收藏  举报