kubernetes 版本从 1.26.6 升级到 1.27.9

kubernetes版本的升级主要是升级kubeadm、kubectl和kubelet,升级应遵循以下原则:

1、apiserver保证版本最大,其它功能最多比apiserver小一个小版本号。

2、不能跨小版本升级。

3、更新前要修改 /etc/yum.repos.d/kubernetes.repo 文件中 baseurl 和 gpgkey 的URL到相应的升级版本。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

使用下列命令列出可用版本

yum list --showduplicates kubeadm --disableexcludes=kubernetes

我的环境包括一个控制节点和二个业务节点,操作系统CentOS7。

一、升级第一个控制节点

1、升级kubeadm

yum install -y kubeadm-1.27.9-150500.1.1 --disableexcludes=kubernetes

kubeadm upgrade plan

kubeadm upgrade apply v1.27.9

kubectl drain k8s-m --ignore-daemonsets --force

yum install -y kubelet-1.27.9-150500.1.1 kubectl-1.27.9-150500.1.1 --disableexcludes=kubernetes

systemctl daemon-reload && systemctl restart kubelet

kubectl uncordon k8s-m

视情况升级 flannel

 kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

如还有其它控制节点与主节点稍有不同

kubeadm upgrade node

#execute on master control plane node
kubectl drain k8s-m-x --ignore-daemonsets

yum install -y kubelet-1.27.9-150500.1.1 kubectl-1.27.9-150500.1.1 --disableexcludes=kubernetes

systemctl daemon-reload && systemctl restart kubelet

#execute on master control plane node
kubectl uncordon k8s-m-x

2、升级业务节点(同样适用于剩余的其它控制节点)

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

yum install -y kubeadm-1.27.9-150500.1.1 --disableexcludes=kubernetes

kubeadm upgrade node

#在master节点执行
kubectl drain k8s-n-1 --ignore-daemonsets --delete-emptydir-data --force

yum install -y kubelet-1.27.9-150500.1.1 kubectl-1.27.9-150500.1.1 --disableexcludes=kubernetes

systemctl daemon-reload && systemctl restart kubelet

#在master节点执行
kubectl uncordon k8s-n-1

更新问题分享,其中一些网上根本找不到资料,难倒只有我这么幸运:(

1、从1.22.5升级到1.23.17的过程中不知我系统的问题还其它,当执行到 kubeadm upgrade plan 命令时会出现如下错误(已确认是我的问题,另一篇文章有更好的解决办法)

[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[upgrade/config] In order to upgrade, a ConfigMap called "kubeadm-config" in the kube-system namespace must exist.
[upgrade/config] Without this information, 'kubeadm upgrade' won't know how to configure your upgraded cluster.

[upgrade/config] Next steps:
        - OPTION 1: Run 'kubeadm config upload from-flags' and specify the same CLI arguments you passed to 'kubeadm init' when you created your control-plane.
        - OPTION 2: Run 'kubeadm config upload from-file' and specify the same config file you passed to 'kubeadm init' when you created your control-plane.
        - OPTION 3: Pass a config file to 'kubeadm upgrade' using the --config flag.

[upgrade/config] FATAL: the ConfigMap "kubeadm-config" in the kube-system namespace used for getting configuration information was not found
To see the stack trace of this error execute with --v=5 or higher

按照提示 kubectl -n kube-system get cm kubeadm-config -o yaml 是有配置的,不知为何提示找不到,我的解决办法是将该命令的输出另存为一个/etc/kubernetes/kubeadm-config.yaml文件,这里需要注意的是只把 ClusterConfiguration 段另存即可,否则会提示如下错误
invalid configuration for GroupVersionKind /v1, Kind=ConfigMap: kind and apiVersion is mandatory information that must be specified

配置文件准备好后执行如下命令来更新系统

kubeadm upgrade plan --config=/etc/kubernetes/kubeadm-config.yaml
kubeadm upgrade apply v1.23.17 --config=/etc/kubernetes/kubeadm-config.yaml

2、可能是我比较懒很久没更新了导致1.22已不再支持,在更新过程中出现如下错误

I0515 11:50:46.554140   19030 checks.go:859] pulling: k8s.gcr.io/coredns:v1.8.6
[preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:v1.8.6: output: time="2023-05-15T11:50:48+08:00" level=fatal msg="pulling image: rpc error: code = NotFound desc = failed to pull and unpack image \"k8s.gcr.io/coredns:v1.8.6\": failed to resolve reference \"k8s.gcr.io/coredns:v1.8.6\": k8s.gcr.io/coredns:v1.8.6: not found"
, error: exit status 1

该问题是因为coredns镜像已经更改为另一个路径了,可以通过Tag方式来解决,我使用的containerd,命令如下

crictl pull k8s.gcr.io/coredns/coredns:v1.8.6
ctr -n k8s.io image tag k8s.gcr.io/coredns/coredns:v1.8.6 k8s.gcr.io/coredns:v1.8.6kube

集群更新后,执行如下指令切换成正确的镜像,否则Node也会找不到。

kubectl set image --namespace kube-system deployment.apps/coredns  coredns=k8s.gcr.io/coredns/coredns:v1.8.6

3、升级启动kubelet时的以下错误通过屏蔽 /var/lib/kubelet/kubeadm-flags.env 文件中相应参数解决

Jun 14 10:50:41 k8s-m kubelet[12310]: Error: failed to parse kubelet flag: unknown flag: --network-plugin

3、尽量不要更新最新次要版本,有可能会出现镜像下载不了的情况。

可参考官方升级文档:

Upgrading kubeadm clusters | Kubernetes

本文随新版本发布不定期更新。

吐槽一个这个编辑器,我只是按个ctrl+z,把我所有输入都取消了,而且不能恢复,真是可以的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
对于在 Ubuntu 18.04.1 上安装 Kubernetes 1.26.3 的教程,可以按照以下步骤进行操作: 1. 更新系统软件包: ``` sudo apt update sudo apt upgrade -y ``` 2. 安装 Docker: ``` sudo apt install docker.io -y sudo systemctl start docker sudo systemctl enable docker ``` 3. 配置 Kubernetes APT 存储库: ``` sudo apt update && sudo apt install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update ``` 4. 安装 Kubernetes 组件: ``` sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` 5. 初始化 Kubernetes Master 节点: ``` sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 初始化完成后,将会显示一些指令,类似下面的内容: ``` kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash> ``` 6. 设置当前用户的 Kubernetes 配置: ``` mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 7. 安装网络插件(这里以 Calico 为例): ``` kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` 8. 加入其他节点(如果有的话): 在其他节点上执行第 5 步中的指令,将其加入 Kubernetes 集群。 完成上述步骤后,您应该已经成功安装了 Kubernetes 1.26.3 版本。您可以通过运行 `kubectl get nodes` 命令来验证节点的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值