升级 Amazon Elastic Kubernetes Service (EKS) 集群对于利用 Kubernetes 的最新功能、安全补丁和性能改进至关重要。本指南提供了将 EKS 集群从任何版本升级到较新版本的清晰分步过程。本博客的目的是帮助 Kubernetes 管理员和 DevOps 工程师顺利高效地执行此升级,最大限度地减少停机时间并确保其工作负载的持续可靠性/安全性。
本指南概述了升级 Amazon Elastic Kubernetes Service (EKS) 集群的方法,涵盖控制平面和数据平面工作节点。
它提供了准备、执行和升级后验证的详细步骤,确保平稳过渡到较新的 Kubernetes 版本。主要行动包括:
- 验证兼容性,
- 备份数据,
- 更新工具、封锁节点以防止新的 pod 调度,以及系统地升级托管和自管理节点组.
该指南还强调了更新必要的addon-ons和升级后测试工作负载的重要性,以保持 Kubernetes 环境的稳定性和性能。这可确保您的集群利用最新功能、安全补丁和性能改进,为云原生应用程序提供坚实的基础。
分步升级指南
1. 准备
-
检查兼容性:
- 验证您的工作负载和附加组件是否与目标 Kubernetes 版本兼容。
- 查看 EKS Kubernetes 版本发行说明。
-
备份数据:
- 备份集群数据和配置,以确保您可以在需要时恢复它们。
-
更新 kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
-
更新 AWS CLI:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
2. 升级 EKS 控制平面
-
检查当前版本:
aws eks describe-cluster --name <cluster_name> --query cluster.version --output text
-
启动控制平面升级:
aws eks update-cluster-version --name <cluster_name> --kubernetes-version <target_version>
-
监控升级过程:升级过程可能需要一些时间。使用命令监控状态:
aws eks describe-update --name <cluster_name> --update-id <update_id>
3. 升级工作节点
托管节点组
-
封锁节点: 防止在节点上调度新的 pod:
kubectl cordon <node_name>
-
更新托管节点组:对于每个托管节点组:
aws eks update-nodegroup-version --cluster-name <cluster_name> --nodegroup-name <node_group_name> --kubernetes-version <target_version>
-
监控升级过程:
检查节点组更新状态:
aws eks describe-update --cluster-name <cluster_name> --nodegroup-name <node_group_name> --update-id <update_id>
自管理节点组
-
封锁并排空旧节点:
kubectl cordon <node_name>
kubectl drain <node_name> --ignore-daemonsets --delete-local-data
-
创建新节点组:使用所需的 Kubernetes 版本创建新节点组:
eksctl create nodegroup --cluster <cluster_name> --name <new_node_group> --kubernetes-version <target_version>
-
删除旧节点组:
eksctl delete nodegroup --cluster <cluster_name> --name <old_node_group>
4. 升级后步骤
-
验证升级:
kubectl get nodes
-
升级 Add-ons:
- 更新必要的附加组件以确保与新的 Kubernetes 版本兼容:
eksctl update addon --name vpc-cni --cluster <cluster_name>
eksctl update addon --name kube-proxy --cluster <cluster_name>
eksctl update addon --name coredns --cluster <cluster_name>
-
测试工作负载:
kubectl get pods -A
-
清理:
总结
通过这种方法(包括在升级之前封锁节点),您可以高效地升级 EKS 集群。此过程有助于确保您的 Kubernetes 环境具有最新的功能和安全增强,保持应用程序的稳健性和性能,并为您的云原生工作负载提供坚实的基础。
本文翻译自:How to Upgrade Your EKS Cluster to the Latest Version?