升级Node和Calico

一、升级Node

1.1、升级kubelet(先升级master02)

# 1、下线k8s-master02
[root@k8s-master01 ~]# kubectl drain k8s-master02 --delete-local-data --force --ignore-daemonsets

# 2、查看状态master02节点已经变成SchedulingDisabled状态
[root@k8s-master01 ~]# kubectl get node
NAME           STATUS                     ROLES    AGE    VERSION
k8s-master01   Ready                      matser   5d5h   v1.19.5
k8s-master02   Ready,SchedulingDisabled   <none>   5d5h   v1.19.5
k8s-master03   Ready                      <none>   5d5h   v1.19.5
k8s-node01     Ready                      <none>   5d5h   v1.19.5
k8s-node02     Ready                      <none>   5d5h   v1.19.5

# 3、停止kubelet(master02节点上、升级那个节点就去那个节点停止,然后拷贝)
[root@k8s-master02 ~]# systemctl stop kubelet  

# 4、备份原文件且copy kubelet文件
[root@k8s-master02 ~]# cd /usr/local/bin/
[root@k8s-master02 bin]# mkdir kube-back
[root@k8s-master02 bin]# mv kubelet kube-back/
[root@k8s-master02 bin]# scp k8s-master01:/root/kubernetes/server/bin/kubelet .
[root@k8s-master02 bin]# ./kubelet --version    # 验证版本是否正确
Kubernetes v1.20.0


# 5、启动kubelet文件
!!!先不启动,先升级了Calico!!!
!!!请先往下走,升级了Calico,再启动kubelet!!!

二、升级Calico

2.1、calico安装文档

# 安装方式有几种、参考官方文档选择吧
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises

2.2、官网升级文档

https://docs.projectcalico.org/maintenance/kubernetes-upgrade#upgrading-an-installation-that-uses-the-kubernetes-api-datastore

2.3、下载

# 1、网络和网络策略管理都是用Calico
[root@k8s-master01 ~]# curl https://docs.projectcalico.org/manifests/calico.yaml -O    # 我用的是这个

# 2、网络策略管理用Calico和网络用flannel
curl https://docs.projectcalico.org/manifests/canal.yaml -O

2.4、备份原来的cm、deploy

[root@k8s-master01 ~]# kubectl get cm -n kube-system  calico-config -oyaml > calico-config.yaml
[root@k8s-master01 ~]# kubectl get deploy -n kube-system  calico-kube-controllers -oyaml > calico-kube-controllers.yaml

2.5、升级k8s-master02

# 1、查看版本。现在的版本(最新的)
[root@k8s-master01 ~]# cat calico.yaml | grep image    
          image: docker.io/calico/cni:v3.17.1
          image: docker.io/calico/cni:v3.17.1
          image: docker.io/calico/pod2daemon-flexvol:v3.17.1
          image: docker.io/calico/node:v3.17.1
          image: docker.io/calico/kube-controllers:v3.17.1
          
# 2、更改一下更新策略(防止更新失败)
[root@k8s-master01 ~]# vim calico.yaml 
# 原来的策略:
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
# 更改为:
  updateStrategy:
    type: OnDelete
# 然后apply它
[root@k8s-master01 ~]# kubectl apply -f calico.yaml 

# 3、查看是否加载成功
[root@k8s-master01 ~]# kubectl edit ds -n kube-system
# 查找calico的镜像,看到3.17.1说明更新成功
image: docker.io/calico/cni:v3.17.1
# 更新策略也变了
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: OnDelete
    
# 4、启动kubelet(在刚刚停止的节点启动,这次是升级的matser02,所以在02节点启动)
[root@k8s-master02 ~]# systemctl start kubelet

# 5、上线节点k8s-master02
[root@k8s-master01 ~]# kubectl uncordon k8s-master02
node/k8s-master02 uncordoned

# 6、查看版本是否正确
[root@k8s-master01 ~]# kubectl get node
NAME           STATUS     ROLES    AGE    VERSION
k8s-master01   Ready      matser   5d6h   v1.19.5
k8s-master02   Ready      <none>   5d6h   v1.20.0   # 已经成功变成了v1.20.0
k8s-master03   Ready      <none>   5d6h   v1.19.5
k8s-node01     Ready      <none>   5d6h   v1.19.5
k8s-node02     NotReady   <none>   5d6h   v1.19.5

# 7、更新Calico  #这次更新的Calico是k8s-master02上的,所以只滚动更新k8s-master02 节点上的
[root@k8s-master01 ~]#  kubectl get pod -n kube-system -owide | grep k8s-master02 
calico-node-wz2l9       1/1     Running   9          5d6h   192.168.1.202   k8s-master02 
[root@k8s-master01 ~]#  kubectl delete pod -n kube-system  calico-node-wz2l9 
pod "calico-node-wz2l9" deleted

# 8、查看更新状态
[root@k8s-master01 ~]#  kubectl get pod -n kube-system -owide | grep k8s-master02 
calico-node-dr6pk       0/1     Init:0/3   0          19s    192.168.1.202   k8s-master02 

# 9、等状态变成Running,查看版本是否更新成功
[root@k8s-master01 ~]# kubectl edit po calico-node-dr6pk   -n kube-system

# 到此为止,一个节点完整的步骤已经走完了!那么我们更新一下其他的节点的吧

三、更新k8s-master01节点

# 1、常规操作
[root@k8s-master01 ~]# systemctl stop kubelet
[root@k8s-master01 ~]# cd kubernetes/server/bin/
[root@k8s-master01 bin]# \cp -rp  kubelet  /usr/local/bin/
[root@k8s-master01 bin]# systemctl start kubelet && systemctl status kubelet

# 2、更新k8s-master01节点上的calico
[root@k8s-master01 bin]# kubectl get pod -n kube-system -owide | grep k8s-master01 
calico-node-t8c5l        0/1     Running   10         5d7h   192.168.1.201   k8s-master01
[root@k8s-master01 bin]# kubectl delete pod -n kube-system  calico-node-t8c5l 
pod "calico-node-t8c5l" deleted

# 3、查看node是否更新成功
[root@k8s-master01 bin]# kubectl get node
NAME           STATUS     ROLES    AGE    VERSION
k8s-master01   Ready      matser   5d7h   v1.20.0
k8s-master02   Ready      <none>   5d7h   v1.20.0
k8s-master03   Ready      <none>   5d7h   v1.19.5
k8s-node01     Ready      <none>   5d7h   v1.19.5
k8s-node02     NotReady   <none>   5d7h   v1.19.5

四、更新k8s-node01节点(其他节点的都一样)

# 1、更新kubelet
[root@k8s-node01 ~]# systemctl stop kubelet
[root@k8s-node02 ~]# cd  /usr/local/bin/ ;  mkdir kube_back; mv kubelet  kube_back/
[root@k8s-node01 bin]# scp k8s-master01:/root/kubernetes/server/bin/kubelet .

# 2、更新calico
[root@k8s-master01 ~]# kubectl get pod -n kube-system -owide
[root@k8s-master01 ~]# kubectl delete pod -n kube-system calico-node-hjqvm
pod "calico-node-hjqvm" deleted

# 3、启动kubelet
[root@k8s-node01 bin]# systemctl restart kubelet && systemctl status kubelet

# 4、确定calicoRunning后,查看kubelet版本是否更新成功
[root@k8s-master01 ~]# kubectl get node
NAME           STATUS   ROLES    AGE    VERSION
k8s-master01   Ready    matser   5d7h   v1.20.0
k8s-master02   Ready    <none>   5d7h   v1.20.0
k8s-master03   Ready    <none>   5d7h   v1.19.5
k8s-node01     Ready    <none>   5d7h   v1.20.0
k8s-node02     Ready    <none>   5d7h   v1.20.0
posted @ 2021-02-10 16:39  taotaozh  阅读(863)  评论(0编辑  收藏  举报