0x00 升级过程应该了解到的信息
1、在控制网页上升级的是,仅是EKS的控制平台版本,这个对用户是透明的。
2、控制平台升级时,不会触发数据平台的Pod升级,但如果版本差异太大的话,会在未来几天自动重部署。
3、存在三个版本相关的情况:
a:控制平台版本号,也就是 1.22-1.30这种版本号
b: 托管节点组版本号,如果采用托管节点方式部署的话,节点上的系统版本一般跟着控制平台版本号保持一致
c: Fargate 节点版本号,因为Fargate每一个Pod其实都是一个独立的 Node,它也有控制平台相应的平台号
4、Pod服务分两种:系统驱动Pod、应用业务服务Pod
a: 系统驱动会对K8s版本有一定适配需求,这个需要在升级前保持最新
b: 应用业务Pod(Java),这类服务只要没有用到K8s API,可以无视版本
5、如果Pod已经和外部的ebs/efs卷配置成功并运行中了,此时如何卸载了 ebs/efs驱动也不会影响使用中的Pod, 但新Pod肯定无法使用新的卷配置。
0x01 升级前的准备
-
系统驱动服务:确保版本号在当前EKS版本号最新,包含 kube-proxy、core-dns等
- 推荐:使用EKS网页上的系统插件去覆盖手动部署系统服务。官方称之为:托管插件模式
efs 驱动例外,下面单独讲
- 关于EBS托管插件安装: 可能会提示现有配置不支持更新,这里你需要先卸载系统中的ebs / efs 驱动.
- 推荐:使用EKS网页上的系统插件去覆盖手动部署系统服务。官方称之为:托管插件模式
托管节点组: 手动点击控制台上节点组的更新按钮,保证大版本号和控制平台保持一致
人员准备: 提前约好测试、研发人员,升级后第一时间验证功能完整性
关于efs csi 驱动:
如果EKS使用了Fargate部署,fargate自带了 efs 的协议,默认情况下,手动安装一下efs驱动:
apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
name: efs.csi.aws.com
annotations:
"helm.sh/hook": pre-install, pre-upgrade
"helm.sh/hook-delete-policy": before-hook-creation
"helm.sh/resource-policy": keep
spec:
attachRequired: false
确认方式:
kubectl get csidriver
# 下面表示已经支持 ebs, efs 两种卷驱动
NAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE
ebs.csi.aws.com true false false <unset> false Persistent 45h
efs.csi.aws.com false false false <unset> false Persistent 44m
0x02 留意AWS网页上的更新提醒
AWS计划性自动升级行为,应该每3天刷一下
https://health.console.aws.amazon.com/health/home#/account/dashboard/scheduled-changes?viewType=table
0x03 普适性规则
- 不要在 K8s中部署数据库,即使你使用了 efs卷,依然不如使用RDS服务来的安全
- 网关的低频升级服务,建议放在集群外面部署