Kubernetes HA集羣平滑升級方案1.10.1-1.12.0

    集羣框架:
node

    172.30.0.81 k8s-master1nginx

    172.30.0.109 k8s-master2docker

    172.30.0.89 k8s-node1api

    172.30.2.60 nginx vip網絡

    K8S master高可用配置 方便升級集羣的流量切換:app

    image.png

   

    image.png

    image.png

    K8S集羣初始化安裝的版本爲1.10.1,後續考慮到集羣平滑升級方案,再次作了一系列測試,方案適用於1.10.1升級至1.11.0,1.11.0升級至1.12.0親測,整個升級過程不影響正常業務容器,須要提早設置後master負載均衡,摘除準備升級的master節點,將master節點上的容器「排幹」,在升級node節點的時候如是,對容器「排幹」操做,避免業務容器出現中斷的可能。負載均衡

    注意:kubeadm 集羣升級,只能按階梯升級,不能跨兩級從1.10直接升級至1.12框架

   

    準備工做:ide

         1.準備版本升級所須要的master,node節點的容器鏡像,能夠到官網下載指定版本,或者經過獲取kubeadm默認版本的配置文件,拉取指定的鏡像,如測試

         # kubeadm config print init-defaults > init-default.yaml

         更換鏡像拉取地址爲阿里雲的,默認是k8s官網的,須要×××  

              imageRepository: registry.aliyuncs.com/google_containers

         # kubeadm upgrade image pull --config=init-default.yaml

         鏡像拉取到以後,須要修改標籤,要否則在升級部署的過程k8s會報鏡像拉取失敗,如

         image.png

   

         升級過程:

         1.切換master節點的流量,將須要升級的master節點下掉

            image.png

         

         2.升級kubeadm到指定版本

         # yum update kubeadm-1.12.0 --disableexcludes=kubernetes

         查看是否爲預期版本

         # kubeadm version


         輸出升級版本的config.yaml

         # kubeadm config migrate --old-config /app/config.yaml-1.11 --new-config /app/kubeadm-config-1.11.yaml

         PS:158行添加
          kubeletExtraArgs:
                pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1

          kubeadm config print-default > kubeadm-config-default.yaml
            (對比 kubeadm-config-default.yaml kubeadm-config-1.11.yaml,補全kubeadm-config-1.11.yaml)


         3.查看升級計劃是否正常

         # kubeadm upgrade plan

         正常則返回success


         4.kubeadm upgrade apply --config=/app/kubeadm-config-1.11.yaml

         注意:升級過程當中若遇到阻塞,能夠查看控制檯的master相關pod,通常是由於標籤不對拉不到鏡像,須要更改鏡像標籤

         image.png

        此時這臺升級的master的kube-apiserver,controller-manager,scheduler,kube-proxy組件均已升級完畢,能夠經過kubectl describe pod查看版本

        (若卡住:kubeadm reset;tar -xf /etc/kubernetes/kubeconf.tar.gz -C /etc/kubernetes/;kubeadm init --config /app/kubeadm-config-1.11.yaml)


        5.升級kubelet,修改kubelet配置文件,升級爲升級版本的配置

        # yum upgrade kubelet-1.12.0 kubectl-1.12.0 -y

        # kubeadm upgrade node config --kubelet-version 1.12.0

        重啓kubelet

        # systemctl daemon-reload && systemctl restart kubelet

        查看系統日誌看節點是否正常

        # tail -F /var/log/message

        查看節點是否升級成功

        # kubectl get node   節點已升級至1.12.0


        6.切換nginx流量,下掉另外一臺沒有升級的master'


        7.升級第二臺master的kubelet至1.12.0,從新加載kubelet配置

        # yum upgrade kubelet-1.12.0 -y

        # kubeadm upgrade node config --kubelet-version 1.12.0

        重啓kubelet

        # systemctl daemon-reload && systemctl restart kubelet

        查看系統日誌看節點是否正常

        # tail -F /var/log/message

        查看節點是否升級成功

        # kubectl get node   節點已升級至1.12.0


        8.node worker節點升級,升級kubelet,加載新版本配置,從新啓動kubelet便可


        9.升級完成

        image.png


注意:在1.10升級至1.11後 worker節點的kubelet會缺乏一段cni網絡配置,會致使worker節點上的pod ip變爲當前docker服務的ip地址從而沒法通訊

解決方式:

    worker 1.10.1-->1.11.0    sudo yum install kubelet-1.11.0 kubeadm-1.11.0 -y    sudo kubeadm upgrade node config --kubelet-version v1.11.0    從master複製/var/lib/kubelet/kubeadm-flags.env到worker節點的/var/lib/kubelet/目錄    sudo systemctl daemon-reload && sudo systemctl restart kubelet && sudo systemctl enable kubelet.service

相關文章
相關標籤/搜索