• kubeadm升级k8s集群


    一、注意事项

    升级前最好备份所有组件及数据,例如etcd

    千万不要跨小版本进行升级,例如从1.16升级到1.19,Kubernetes默认向前兼容两个版本

    二、查看当前版本

    1. [root@master-1 ~]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master-1 Ready control-plane,master 90d v1.20.1
    4. master-2 Ready control-plane,master 89d v1.20.1
    5. master-3 Ready control-plane,master 89d v1.20.1
    6. worker-1 Ready <none> 89d v1.20.1
    7. worker-2 Ready <none> 89d v1.20.1
    8. worker-3 Ready <none> 89d v1.20.1

    三、确定当前版本

    1. yum clean all
    2. yum list --showduplicates kubeadm --disableexcludes=kubernetes

    # 在列表中找到最新的 1.21 版本号

    # 该版本号格式为 1.21.x-0,其中 x 是最新的补丁

    四、升级 master 节点

    4.1 在第一个 master 节点上执行如下命令,升级 kubeadm

    yum install -y kubeadm-1.21.0-0 --disableexcludes=kubernetes

    4.2 第一个 master 节点上执行命令 kubeadm upgrade plan

    kubeadm upgrade plan

    4.3  执行如下命令以升级:

    kubeadm upgrade apply v1.21.0

    发现拉取coredns的时候报错

    1. [preflight] Some fatal errors occurred:
    2. [ERROR ImagePull]: failed to pull image registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0: output: Error response from daemon: manifest for registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 not found: manifest unknown: manifest unknown

    在所有节点从其他仓库拉取镜像 然后在打个tag吧

    1. docker pull registry.cn-beijing.aliyuncs.com/dotbalo/coredns:1.8.0
    2. docker tag registry.cn-beijing.aliyuncs.com/dotbalo/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

    再执行

    kubeadm upgrade apply v1.21.0

    在其他 master 节点上执行命令

    kubeadm upgrade node

    在所有的 master 节点上执行如下命令以升级 kubelet 和 kubectl

    yum install -y kubelet-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetes

    执行如下命令,以重启 kubelet

    systemctl daemon-reload && systemctl restart kubelet

    五、升级 worker 节点

    5.1 在所有的 worker 节点上执行如下命令,升级 kubeadm

    yum install -y kubeadm-1.21.0-0 --disableexcludes=kubernetes

    5.2 升级 kubelet 的配置

    kubeadm upgrade node

    5.3 升级 kubelet 和 kubectl

    在所有的 worker 节点执行命令

    yum install -y kubelet-1.21.0-0 kubectl-1.21.0-0--disableexcludes=kubernetes

    执行如下命令,以重启 kubelet

    systemctl daemon-reload && systemctl restart kubelet

    六、检查集群的状态

    kubectl get nodes -o wide
    1. [root@master-1 ~]# kubectl get nodes -o wide
    2. NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
    3. master-1 Ready control-plane,master 90d v1.21.0 192.168.248.101 <none> CentOS Linux 7 (Core) 5.6.1-1.el7.elrepo.x86_64 docker://19.3.11
    4. master-2 Ready control-plane,master 90d v1.21.0 192.168.248.102 <none> CentOS Linux 7 (Core) 5.6.1-1.el7.elrepo.x86_64 docker://19.3.11
    5. master-3 Ready control-plane,master 90d v1.21.0 192.168.248.103 <none> CentOS Linux 7 (Core) 5.6.1-1.el7.elrepo.x86_64 docker://19.3.11
    6. worker-1 Ready <none> 90d v1.21.0 192.168.248.111 <none> CentOS Linux 7 (Core) 5.6.1-1.el7.elrepo.x86_64 docker://19.3.11
    7. worker-2 Ready <none> 90d v1.21.0 192.168.248.112 <none> CentOS Linux 7 (Core) 5.6.1-1.el7.elrepo.x86_64 docker://19.3.11
    8. worker-3 Ready <none> 90d v1.21.0 192.168.248.113 <none>

    七、kubeadm其他命令用法

    7.1 查看当前可升级版本,并验证你当前的集群是否可升级。

    kubeadm upgrade plan [version] [flags]
    

    参数如下:

    1. --allow-experimental-upgrades
    2. 显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha/Beta/发行候选版本。
    3. --allow-release-candidate-upgrades
    4. 显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的发行候选版本。
    5. --config string
    6. 配置文件的路径。
    7. --feature-gates string
    8. 一组描述各种特征特性门控的键值对。选项有:
    9. PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    10. RootlessControlPlane=true|false (ALPHA - 默认值=false)
    11. UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
    12. -h, --help
    13. plan 的帮助信息
    14. --ignore-preflight-errors strings
    15. 其错误将显示为警告的检查列表。 例如:'IsPrivilegedUser,Swap'。 值 'all' 忽略所有检查错误。
    16. --kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
    17. 与集群通信时使用的 kubeconfig 文件。如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
    18. --print-config
    19. 指定是否打印将在升级中使用的配置文件。

    7.2 将 Kubernetes 集群升级到指定版本

    kubeadm upgrade apply [version]
    

    参数如下:

    1. --allow-experimental-upgrades
    2. 显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 alpha/beta 或 RC 版本。
    3. --allow-release-candidate-upgrades
    4. 显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
    5. --certificate-renewal Default: true
    6. 执行升级期间更改的组件所使用的证书的更新。
    7. --config string
    8. kubeadm 配置文件的路径。
    9. --dry-run
    10. 不要更改任何状态,只输出要执行的操作。
    11. --etcd-upgrade 默认值: true
    12. 执行 etcd 的升级。
    13. --feature-gates string
    14. 一组键值对,用于描述各种功能。选项包括:
    15. PublicKeysECDSA=true|false (ALPHA - 默认值=false
    16. RootlessControlPlane=true|false (ALPHA - 默认值=false)
    17. UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
    18. -f, --force
    19. 强制升级,但可能无法满足某些要求。这也意味着非交互模式。
    20. -h, --help
    21. apply 操作的帮助命令
    22. -ignore-preflight-errors strings
    23. 错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
    24. --kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
    25. 与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
    26. --patches string
    27. 包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。 "target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。 "patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一, 并且它们与 kubectl 支持的补丁格式相同。 默认的 "patchtype" 是 "strategic"。 "extension" 必须是"json" 或"yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
    28. --print-config
    29. 指定是否应打印将在升级中使用的配置文件。
    30. -y, --yes
    31. 执行升级,不提示确认(非交互模式)。

    7.3 显示哪些差异将被应用于现有的静态 pod 资源清单

    kubeadm upgrade diff [version] [flags]

    参数如下:

    1. --api-server-manifest string 默认值:"/etc/kubernetes/manifests/kube-apiserver.yaml"
    2. API服务器清单的路径
    3. --config string
    4. kubeadm 配置文件的路径
    5. -c, --context-lines int 默认值:3
    6. 差异中有多少行上下文
    7. --controller-manager-manifest string 默认值: "/etc/kubernetes/manifests/kube-controller-manager.yaml"
    8. 控制器清单的路径
    9. -h, --help
    10. 帮助
    11. --kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
    12. 与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
    13. --scheduler-manifest string 默认值:"/etc/kubernetes/manifests/kube-scheduler.yaml"
    14. 调度程序清单的路径

    7.4 升级集群中某个节点的命令

    kubeadm upgrade node [flags]

    "node" 命令执行以下阶段:

    1. preflight 执行节点升级前检查
    2. control-plane 如果存在的话,升级部署在该节点上的管理面实例
    3. kubelet-config 更新该节点上的 kubelet 配置

    参数如下:

    1. --certificate-renewal 默认值: true
    2. 对升级期间变化的组件所使用的证书执行更新。
    3. --dry-run
    4. 不更改任何状态,只输出将要执行的操作。
    5. --etcd-upgrade 默认值: true
    6. 执行 etcd 的升级。
    7. -h, --help
    8. node 操作的帮助命令
    9. --ignore-preflight-errors strings
    10. 其错误将显示为警告的检查列表。示例:'IsPrivilegedUser,Swap'。 值 'all' 忽略所有检查中的错误。
    11. --kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
    12. 用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
    13. --patches string
    14. 包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。 例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。 "target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。 "patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一, 并且它们与 kubectl 支持的补丁格式相同。 默认的 "patchtype" 是 "strategic"。 "extension" 必须是"json" 或"yaml"。 "suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
    15. --skip-phases strings
    16. 要跳过的阶段的列表

  • 相关阅读:
    第11章 Java集合(一)
    React进阶之路(二)-- 组件通信、组件进阶
    计算机存储和进制转换
    基于C语言实现进度条 | 附源码
    CentOS使用Docker搭建Halo网站并实现无公网ip远程访问
    机器学习——线性回归/岭回归/Lasso回归
    thinkphp csv格式导入导出
    麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo
    豆瓣电影top250网页爬虫
    swift UI 和UIKIT 如何配合使用
  • 原文地址:https://blog.csdn.net/zfw_666666/article/details/126371912