k8s學習筆記(3)- kubectl高可用部署,擴容,升級,回滾springboot應用

xjk27400861發表於2021-10-19

前言:上一篇通過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

相關文章