• Kubernetes1.16.0重置升级到1.22.2


    目录

    Kubernetes1.16.0手动升级到1.22.2

    前言

    Docker卸载升级最新版本

    Kubernetes还原

    Kubernetes升级1.22.2

    升级kubeadm、kubelet、kubectl(所有机器)

    升级k8smaster管理节点

    重新安装网络插件

    重新安装calico (master机器)

    升级k8s node工作节点

    验证升级是否成功

    kubectl get cs

    kubectl version 

    问题:

    scheduler/controller-manager: dial tcp 127.0.0.1:10251: connect: connection refused


    Kubernetes1.16.0手动升级到1.22.2




    前言

    本文基于centos7 搭建 kubernetes1.16.0 集群进行升级改造


    Docker卸载升级最新版本

    1. # --------[1. 停用当前docker]--------
    2. # 查看当前docker版本
    3. [root@node2 ~]# docker version
    4. Client:
    5. Version: 18.09.7
    6. API version: 1.39
    7. Go version: go1.10.8
    8. Git commit: 2d0083d
    9. Built: Thu Jun 27 17:56:06 2019
    10. OS/Arch: linux/amd64
    11. # 查看当前docker状态
    12. # 如果是运行状态则停掉--systemctl stop docker
    13. [root@node2 ~]# systemctl status docker
    14. Unit docker.service could not be found.
    15. # --------[2. 删除当前docker]--------
    16. # 查看yum安装的docker文件包
    17. [root@node2 ~]# yum list installed |grep docker
    18. docker-ce-cli.x86_64 1:18.09.7-3.el7 @docker-ce-stable
    19. # 查看docker相关的rpm源文件
    20. [root@node2 ~]# rpm -qa |grep docker
    21. docker-ce-cli-18.09.7-3.el7.x86_64
    22. # 删除所有安装的docker文件包
    23. [root@node2 ~]# yum -y remove docker.x86_64
    24. Loaded plugins: fastestmirror
    25. No Match for argument: docker.x86_64
    26. No Packages marked for removal
    27. # 其他的docker相关的安装包同样删除操作,删完之后可以再查看下docker rpm源
    28. [root@node2 ~]# rpm -qa |grep docker
    29. docker-ce-cli-18.09.7-3.el7.x86_64
    30. [root@node2 ~]# yum -y remove docker-ce-cli.x86_64
    31. Loaded plugins: fastestmirror
    32. Resolving Dependencies
    33. --> Running transaction check
    34. ---> Package docker-ce-cli.x86_64 1:18.09.7-3.el7 will be erased
    35. --> Finished Dependency Resolution
    36. Dependencies Resolved
    37. ==============================================
    38. Package
    39. Arch Version
    40. Repository Size
    41. ==============================================
    42. Removing:
    43. docker-ce-cli
    44. x86_64 1:18.09.7-3.el7
    45. @docker-ce-stable 66 M
    46. Transaction Summary
    47. ==============================================
    48. Remove 1 Package
    49. Installed size: 66 M
    50. Downloading packages:
    51. Running transaction check
    52. Running transaction test
    53. Transaction test succeeded
    54. Running transaction
    55. Erasing : 1:docker-ce-cli-18.09.7- 1/1
    56. Verifying : 1:docker-ce-cli-18.09.7- 1/1
    57. Removed:
    58. docker-ce-cli.x86_64 1:18.09.7-3.el7
    59. Complete!
    60. [root@node2 ~]# rpm -qa |grep docker
    61. [root@node2 ~]#
    62. [root@node2 ~]# docker version
    63. -bash: /usr/bin/docker: No such file or directory
    64. # --------[3. 安装最新版本或者指定版本docker]--------
    65. [root@node2 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
    66. Loaded plugins: fastestmirror
    67. Loading mirror speeds from cached hostfile
    68. * base: mirror.lzu.edu.cn
    69. * extras: mirror.lzu.edu.cn
    70. * updates: mirrors.bupt.edu.cn
    71. Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
    72. Package device-mapper-persistent-data-0.8.5-3.el7_9.2.x86_64 already installed and latest version
    73. Package 7:lvm2-2.02.187-6.el7_9.5.x86_64 already installed and latest version
    74. Nothing to do
    75. [root@node2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    76. Loaded plugins: fastestmirror
    77. adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    78. grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    79. repo saved to /etc/yum.repos.d/docker-ce.repo
    80. [root@node2 ~]# yum makecache
    81. Loaded plugins: fastestmirror
    82. Loading mirror speeds from cached hostfile
    83. * base: mirrors.huaweicloud.com
    84. * extras: mirrors.huaweicloud.com
    85. * updates: mirrors.huaweicloud.com
    86. base | 3.6 kB 00:00
    87. docker-ce-stable | 3.5 kB 00:00
    88. extras | 2.9 kB 00:00
    89. kubernetes/signature | 844 B 00:00
    90. kubernetes/signature | 1.4 kB 00:00 !!!
    91. updates | 2.9 kB 00:00
    92. Metadata Cache Created
    93. # 可以查看所有仓库中所有docker版本,并选择特定的版本安装。
    94. # yum list docker-ce --showduplicates | sort -r
    95. # yum install docker-ce 默认安装最新版本
    96. [root@node2 ~]# yum install docker-ce -y

    验证效果


    Kubernetes还原

    升级集群前, 保险起见, 先还原重置下

    kubeadm reset
    


    Kubernetes升级1.22.2


    升级kubeadm、kubelet、kubectl(所有机器)

    1. # 执行配置k8s的yum--阿里源
    2. # 可以先产看是否有 cat /etc/yum.repos.d/kubernetes.repo
    3. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    4. [kubernetes]
    5. name=Kubernetes
    6. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    7. enabled=1
    8. gpgcheck=1
    9. repo_gpgcheck=1
    10. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    11. EOF
    12. # 安装kubeadm、kubectl、kubelet
    13. yum install -y kubectl-1.22.2 kubeadm-1.22.2 kubelet-1.22.2
    14. # 重启 docker,并启动 kubelet
    15. systemctl daemon-reload
    16. systemctl restart docker
    17. systemctl enable kubelet && systemctl start kubelet


    升级k8smaster管理节点

    1. #下载管理节点中用到的6个docker镜像,你可以使用docker images查看到
    2. #这里需要大概两分钟等待,会卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull
    3. kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.2 --apiserver-advertise-address 10.0.0.198 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

    上面安装完后,会提示你输入如下命令,复制粘贴过来,执行即可。

    1. # 上面安装完成后,k8s会提示你输入如下命令,执行
    2. mkdir -p $HOME/.kube
    3. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    4. sudo chown $(id -u):$(id -g) $HOME/.kube/config

    记住node加入集群的命令---- 上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来

    1. You should now deploy a pod network to the cluster.
    2. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    3. https://kubernetes.io/docs/concepts/cluster-administration/addons/
    4. Then you can join any number of worker nodes by running the following on each as root:
    5. kubeadm join 10.0.0.198:6443 --token utoxqq.yl2ss3tut97a3ck1 \
    6. --discovery-token-ca-cert-hash sha256:af31741fd42a53a30bc56afba7f37b42d30cdaaf8d8ac996efa928ea2649e6b4
    7. [root@master-1 k8s-big-data-suite]# mkdir -p $HOME/.kube
    8. [root@master-1 k8s-big-data-suite]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    9. cp: overwrite ‘/root/.kube/config’? y
    10. [root@master-1 k8s-big-data-suite]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    11. [root@master-1 k8s-big-data-suite]#


    重新安装网络插件


    重新安装calico (master机器)

    1. # 安装 calico 网络插件
    2. # 安装 Tigera Calico operator和自定义资源。
    3. curl https://docs.projectcalico.org/manifests/tigera-operator.yaml -O
    4. kubectl create -f tigera-operator.yaml
    5. # 通过创建必要的自定义资源来安装 Calico。有关此清单中可用配置选项的更多信息,请参阅安装参考。
    6. # 注意:在创建此清单之前,请阅读其内容并确保其设置适合您的环境。例如,您可能需要更改默认 IP 池 CIDR 以匹配您的 Pod 网络 CIDR。
    7. curl https://docs.projectcalico.org/manifests/custom-resources.yaml -O
    8. export POD_SUBNET=10.244.0.0/16
    9. sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" custom-resources.yaml
    10. kubectl create -f custom-resources.yaml

    修改 Pods 使用的 IP 网段,默认使用 192.168.0.0/16 网段,但是和我们的服务器本来的网段不一样,会产生冲突,所以我们需要修改一下,注意,这个网段应该与kubeapi定义–service-cluster-ip-range的网段一样

    参考链接: https://docs.projectcalico.org/getting-started/kubernetes/quickstart

    注意:在创建此清单之前,请阅读其内容并确保其设置适合您的环境。例如,您可能需要更改默认 IP 池 CIDR 以匹配您的 Pod 网络 CIDR。



    升级k8s node工作节点

    加入集群 这里加入集群的命令每个人都不一样,可以登录master节点,使用kubeadm token create --print-join-command 来获取。获取后执行如下。

    1. # 加入集群,如果这里不知道加入集群的命令,可以登录master节点,使用kubeadm token create --print-join-command 来获取
    2. kubeadm join 10.0.0.198:6443 --token utoxqq.yl2ss3tut97a3ck1 \
    3. --discovery-token-ca-cert-hash sha256:af31741fd42a53a30bc56afba7f37b42d30cdaaf8d8ac996efa928ea2649e6b4

    加入成功后,可以在master节点上使用kubectl get nodes命令查看到加入的节点。



    验证升级是否成功


    kubectl get cs

    执行kubectl get cs命令来检测组件的运行状态

    kubectl version 

    执行kubectl version命令来查看版本



    问题:


    scheduler/controller-manager: dial tcp 127.0.0.1:10251: connect: connection refused

    部署完master节点以后,执行kubectl get cs命令来检测组件的运行状态时,报如下错误:

    1. root@fly-virtual-machine:/etc/netplan# kubectl get cs
    2. Warning: v1 ComponentStatus is deprecated in v1.19+
    3. NAME STATUS MESSAGE ERROR
    4. scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
    5. etcd-0 Healthy {"health":"true","reason":""}
    6. controller-manager Healthy ok
    7. root@fly-virtual-machine:/etc/netplan# vim /etc/kubernetes/manifests/kube-scheduler.yaml
    8. root@fly-virtual-machine:/etc/netplan# systemctl restart kubelet.service

    原因分析

    出现这种情况,是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0导致的,解决方式是注释掉对应的port即可,操作如下:

    img

    然后在master节点上重启kubelet,systemctl restart kubelet.service,然后重新查看就正常了

    port=0是做什么用的? 关闭非安全端口

  • 相关阅读:
    Ribbon
    每日一学vue2:自定义绑定事件解除方式($off)及销毁vc
    flutter Package 打包上传插件
    仪器仪表制造业采购数字化方案:集中采购系统为供采双方打造更高效运转平台
    洗地机选购攻略,洗地机哪个品牌好?一篇教会你挑到好用的洗地机
    Windows Linux 子系统迎来多项改进,并增加IPv6支持
    【分享课】腾讯云大讲堂TDSQL(PG版)OSS平台管理-周四晚19:30
    浏览器事件循环原理 —— 任务优先级
    listbox控件响应鼠标右键消息
    解题-->在线OJ(十三)
  • 原文地址:https://blog.csdn.net/fly910905/article/details/121020679