2023.5 记一次EKS 1.22->1.26 升级

Summary

环境:EKS 1.22,5个节点,有statefulset、deployment服务

采用原地in-place方式升级,记录下来发生的事项

版本注意事项

1.22-1.23

  • EBS CSI 插件和IAM Role升级

  • Node rolling update要求事先解除节点IP依赖

  • kube-proxy 升级

1.23-1.24

无,顺利完成

1.24-1.25

无,顺利完成

1.25-1.26

无,顺利完成

过程记录点

EKS升级时会提示,注意阅读

根据1.22升级到1.23时,需要事先安装EBS CSI Driver

EBSCSIDriver需要权限,所以确认一下IAM Role是否有这个权限policy

确认完毕即可升级到1.23了,不过要确认当前的Node和Master是否为一致版本1.22,否则也不能升级到1.23

按照要求升级Node Group即可

因为EKS每次升级都需要保持Node和Master的一致,而Node升级会发生IP变更,一定要避免在配置文件中使用固定IP,例如如下为redis创建一个service服务

apiVersion: v1
kind: Service
metadata:
  name: redis
spec:
  selector:
    app: redis
  ports:
  - port: 6480
    targetPort: 6480

容易忽略的地方是DNS策略,尤其我们使用了hostnetwork时,要参考ClusterFirstWithHostNet的使用,排查DNS问题时注意这个地方

Kubernetes DNS Policy 是指 Kubernetes 集群中用于控制容器访问 DNS 的策略。以下是 Kubernetes DNS 策略的几种类型:

  1. ClusterFirst:这是默认选项,当 Pod 中的容器需要进行 DNS 查询时,会优先使用 Kubernetes 集群中的 DNS 服务。如果查询失败,才会尝试使用其他配置的 DNS 服务器。

  2. ClusterFirstWithHostNet:这个选项与 ClusterFirst 类似,不同之处在于它适用于使用 HostNetwork 模式的 Pod,即容器共享主机网络栈的 Pod。因为容器和主机网络栈共享了相同的网络命名空间,所以容器可以直接访问主机上的 DNS 服务。

  3. Default:这个选项直接使用 Pod 所在节点上的 DNS 服务器解析 DNS 查询请求,而不是使用 Kubernetes 集群中的 DNS 服务。

  4. None:这个选项表示禁止 DNS 查询功能。这在某些高安全性场景下很有用,但通常情况下不建议使用。

除了上述四种类型,还有两个特殊的类型:

  1. External:这个选项定义了自定义 DNS 配置。Pod 访问 DNS 将直接使用该配置。

  2. Cache: 这个选项仅适用于 CoreDNS,它将DNS查询结果缓存在CoreDNS中,下次DNS查询时直接返回缓存结果,从而提高查询效率。

关于kube-proxy虽然EKS没有强制要求跟随每个版本一起升级,但是为了线上稳定性,最好还是一起升级。至于会发生什么问题,这个是未知的,有可能发生master与node通信协议的不一致导致错误。

EKS升级proxy注意调整configmap出现冲突时的模式,例如设置为override

1.23 1.24没有额外特别注意的,1.25时有一个提示PSP,根据各自情况判断,我们这里没有使用PSP

至此,我们安全的完成了1.22至1.26的升级,检查没有发生问题。最后,总结下实践经验,当然需要根据各自情况做抉择

AWS EKS 升级的最佳实践:

  1. 备份数据:在开始升级过程之前,建议先备份 Kubernetes 资源和数据。这有助于在升级过程中出现任何意外情况时进行恢复。

  2. 了解升级流程:AWS EKS 提供两种类型的升级——控制平面升级和节点组升级。控制平面升级涉及升级 EKS 控制平面的 Kubernetes 版本,该平面管理集群的 API 交互和工作负载管理。节点组升级涉及升级集群中节点的 Kubernetes 版本。

  3. 检查兼容性:确保您使用的所有附加组件和工具与新的 EKS 版本兼容。您可以在官方 AWS EKS 文档页面上检查附加组件和工具的兼容性。

  4. 查看发布说明:查看新的 EKS 版本的发布说明,了解更改和新功能。这将帮助您为应用程序或基础架构所需的任何更改做好准备。

  5. 在非生产环境中测试升级:在升级生产环境之前,最好在非生产环境中测试升级。这将确保升级过程顺利进行,不会影响您的生产环境。

  6. 按照推荐升级路径进行操作:AWS EKS 为每个版本提供了推荐的升级路径。按照推荐的升级路径进行操作,以避免任何兼容性问题。

  7. 监控升级进度:在升级过程中,密切监视进展。AWS EKS 提供各种工具,如 CloudWatch 日志、Amazon SNS 和 Amazon EventBridge 来监视升级进度。

  8. 验证升级后的集群:完成升级后,请运行一些测试来验证升级后的集群是否正常运行。

  9. 清理:验证升级后的集群后,请清理任何未使用的资源,以最小化成本。

通过遵循这些最佳实践,您可以顺利地升级 AWS EKS 版本,而不会出现任何问题。

最后更新于