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+路由即可訪問應用,我這是://192.168.231.133:30001/hello//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

Tags: