1. 程式人生 > 其它 >k8s學習筆記(3)- kubectl高可用部署,擴容,升級,回滾springboot應用

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

前言:上一篇通過rancher管理k8s,部署服務應用擴容,高可用,本篇介紹kubectl命令列部署高可用叢集節點,測試升級、擴容等

1、測試環境:3節點k3s,使用其中2節點(ubuntunode1與ubuntunode2),node3暫不用

  • 輸入命令,檢視節點狀況

2、進入任意節點,使用kubectl命令列進行服務部署操作,我們這裡用node1節點

  • 新建一個.yaml檔案,用於部署2個負載的應用,檔名稱:springbootapp-2nodes.yaml
  • 檔案內容如下,kind節點使用Deployment型別:
  • 文字如下:
      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
    
  • 輸入命令,建立2節點副本應用,-n 指定名稱空間
    命令如下:
      sudo kubectl create -f springbootapp-2nodes.yaml -n springboot2node
    
  • 也可以在.yaml檔案中指定名稱空間:
  • 輸入命令,檢視pod節點執行狀態
    命令如下:
      sudo kubectl get pods -n springboot2node
    
  • 輸入命令,檢視副本集情況
    命令如下:
      sudo kubectl get rs -n springboot2node
    
  • 輸入命令,建立一個svc的service,暴露叢集
    命令如下:
      sudo kubectl apply -f springbootapp-2node-svc.yaml
    
  • 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
    
  • 通過任意節點ip+埠:30001+路由即可訪問應用,我這是:http://192.168.231.133:30001/hellohttp://192.168.231.134:30001/hello

3、k8s擴容

  • 修改配置檔案springbootapp-2nodes.yaml,2節點改為3節點
  • 輸入命令,重新部署,檢視副本集變為3個
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true 
    
  • 檢視pod數量,也為3個

4、k8s自愈性

  • 刪除2個pod,模擬伺服器宕機狀況
      sudo kubectl delete pod springbootapp-dep-67656f6dc9-cncb6 springbootapp-dep-67656f6dc9-pp47x -n springboot2node
    
  • 重新檢視pod狀況,發現又重新構建了2個新的pod,保證負載還是3臺
      sudo kubectl get pods -n springboot2node
    

5、k8s升級

  • 修改程式碼,區分版本,重新構建映象推到倉庫
  • 新映象tag:43
  • 修改部署檔案:springbootapp-2nodes.yaml,映象版本改為43
  • 輸入命令,重新部署應用,引數--record=true讓 Kubernetes 把這行命令記到釋出歷史中方便後面檢視
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true
    
  • ContainerCreating狀態的表示新版本的容器正在啟動,Running的是新版本的已經執行起來了,Terminating的這個是老版本正在停止
  • 過了一段時間,發現3個節點已經建立完成
  • 訪問應用,即可看見新版本已釋出完成

6、k8s回滾應用

  • 輸入命令,檢視釋出歷史
      sudo kubectl rollout history deployment springbootapp-dep -n springboot2node
    
  • 可以看到有2個版本,我們回滾到版本1的狀態
      sudo kubectl rollout undo deployment springbootapp-dep --to-revision=1 -n springboot2node
    
  • 查看回滾狀態,成功
      sudo kubectl rollout status deployment springbootapp-dep -n springboot2node
    
  • 訪問應用,即可看見應用已回滾到老版本

7、rancher2.x對springboot2node進行遷移,遷移到default專案下,便於rancher管理

  • 點選右側下拉選單,移動

  • 名稱空間已轉移到專案default中
  • 以後可以通過rancher操作應用擴容縮容回滾等,會相當方便