Kubernetes 是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序,随着时间的推移,Kubernetes 不断地更新和升级,以提供新功能、修复漏洞和提高性能,本文将介绍如何将 Kubernetes 集群升级至 1.18 版本。
准备工作
在升级 Kubernetes 之前,需要确保已经完成了以下准备工作:
1、确保所有的节点都已经安装了最新版本的 kubelet、kubectl 和 kubeadm,这些组件是运行 Kubernetes 集群的基础。
2、为所有节点生成并分发 ca 证书和 kubeconfig 文件,ca 证书用于建立信任关系,而 kubeconfig 文件包含了访问集群所需的信息。
3、在升级之前,建议先备份当前的集群状态,可以使用 kubectl get nodes
、kubectl get pods --all-namespaces
和 kubectl get deployments --all-namespaces
等命令进行备份。
升级步骤
1、更新控制平面组件
需要更新控制平面组件,包括 etcd、API Server 和 Controller Manager,可以通过以下命令进行升级:
停止 API Server sudo systemctl stop kube-apiserver 停止 etcd sudo systemctl stop etcd 停止 Controller Manager sudo systemctl stop kube-controller-manager 下载新的 etcd 镜像(如果使用的是 kubeadm) sudo kubeadm config images pull etcd --config=/etc/kubernetes/admin.conf --manifest-dir=/etc/kubernetes/manifests 使用 kubeadm upgrade apiserver 将 API Server 升级到最新的稳定版本 sudo kubeadm upgrade apiserver --to-version=v1.18.0 --config=/etc/kubernetes/admin.conf --manifest-dir=/etc/kubernetes/manifests 使用 kubeadm upgrade controller-manager 将 Controller Manager 升级到最新的稳定版本 sudo kubeadm upgrade controller-manager --to-version=v1.18.0 --config=/etc/kubernetes/admin.conf --manifest-dir=/etc/kubernetes/manifests 启动新的 etcd 实例(如果使用的是 kubeadm) sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs --config=/etc/kubernetes/admin.conf --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --control-plane-name my-control-plane --service-cidr=10.100.0.0/16 --node-cidr=10.100.0.0/16 --networking calico || true
注意:请根据实际情况替换 LOAD_BALANCER_DNS
、LOAD_BALANCER_PORT
、registry.aliyuncs.com/google_containers
、--control-plane-name
、--service-cidr
、--node-cidr
和 --networking
等参数。
2、更新工作负载组件
接下来,需要更新工作负载组件,包括 kubelet、kube-proxy 和 cni,可以通过以下命令进行升级:
下载新的 kubelet 镜像(如果使用的是 kubeadm) sudo kubeadm config images pull kubelet --config=/etc/kubernetes/admin.conf --manifest-dir=/etc/kubernetes/manifests 根据操作系统类型选择相应的升级脚本进行升级(对于 Ubuntu,可以使用以下命令) sudo apt update && sudo apt install -y apt-transport-https curl > /dev/null && curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add > /dev/null && echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null && sudo apt update && sudo apt install -y kubelet=1.18.0-00 kubelet-cimprov=1.18.0-00 kubelet-tools=1.18.0-00 > /dev/null && sudo apt clean > /dev/null && sudo apt autoremove > /dev/null && sudo apt purge > /dev/null && sudo apt update > /dev/null && sudo apt install kubelet=1.18.0-00 kubelet-cimprov=1.18.0-00 kubelet-tools=1.18.0-00 > /dev/null && sudo systemctl restart kubelet > /dev/null && sudo systemctl enable kubelet > /dev/null
注意:请根据实际情况替换 kubernetes-xenial
为实际使用的 Linux 发行版对应的版本,根据实际需求调整 --install-cni
、--cni-bin-dir
、--cni-conf-dir
、--cni-plugin-dir
、--cni-lib-dir
、--cni-bin-dir
、--network-plugin=cni
、--attachable-volumes
、--pods-infrastructure=cni
、--enable-hostpaths
、--hostpath-path=/opt/cni/bin
、--hostpath-type=hostpath:hostPath:bareHostPath:ro,relatime,mode:755,uid:root:0,gid:root:0,size:1G,requestDir:true,blockStorage:true,mounter:cifs
,--mounter=cifs
,--fstype=cifs
,--volumePluginClassName=csi.azureDisk.csiDriver:CSIAzureDiskVolumePlugin
,--storageClassName=standard
,--registry-mirror=$(cat REGISTRY_MIRROR)
,`–allowPrivilegedContainerRegistryAccess=$(echo $ALLOWPRIVILEGEDCONTAINERREGISTRYACCESS | base64 | tr ‘
‘ ‘ ‘ | sed ‘s/ //g’),
–experimentalMounterPathOverride=$(echo $EXPERIMENTALMOUNTERPATHOVERRIDE | base64 | tr ‘
‘ ‘ ‘ | sed ‘s/ //g’),以及
–node-ip=$(hostname)`,可以根据实际情况进行调整。
3、验证升级结果
完成上述步骤后,可以通过以下命令验证升级是否成功:
查看 API Server 版本 kubectl version --client=true | grep "Server version: v" | cut -d' ' -f3 | xargs echo "API Server version: " && echo "v$(cut -d' ' -f3)" || true
4、可能遇到的问题及解答
Q: 为什么在升级过程中会遇到权限问题?
A: 这可能是因为当前用户没有足够的权限执行升级操作,可以尝试使用 root 或者具有相应权限的用户进行升级,还可以检查 ~/.kube/config
文件中的认证信息是否正确。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/115102.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复