1. Arn
AWS ARN(Amazon Resource Name)是
Amazon Web Services(AWS)中用于唯一标识和命名资源的标识符。一般情况下 partition 为 aws
,在中国时 aws-cn
。
1 | if self.region.startswith('cn-'): |
2. EC2 实例是否在所有可用区(Availablity Zone)可用
我在国际区 AWS 的做法是在每个 EKS 的子网,创建一个单独的计算组(Nond Group),主要目的是在节点(K8S Node)自动扩缩容时,可以自动的选择可用区。(A 的 Pod 无法使用 B 可用区的 PVC)。我在部署时 CDK 报错:
1 | Resource handler returned message: "[Issue(Code=AsgInstanceLaunchFailures, Message=Could not launch On-Demand Instances. Unsupported - Your requested instance type (t3a.small) is |
这说明我选择的 EC2 实例类型 t3a.small
在可用区 cn-north-1d
不被支持。我在 AWS Global 没有遇到过这个问题。解决方案:支持为 EKS 节点组自定义子网。代码如下:
1 | def add_node_groups(self): |
还有一个隐藏的问题:如果已经在 A 可用区创建了 PVC,后面想更换 EC2 实例类型。如果欲更换的实例类型不支持可用区 A,则无法再不迁移 PVC 的情况下更换实例类型。
3. AWS Ingress LoadBlancer Controller
AWS CDK 提供了非常简单的 aws_eks.AlbController()
方法来安装 ALB Controller,但可惜在中国区也是不可用的,原因是中国区无法拉取镜像:
1 | Normal BackOff 112s (x415 over 96m) kubelet Back-off 602401143452.dkr.ecr.us-west-2.amazonaws.com/amazon/aws-load-balancer-controller:v2.6.2 |
检查 CDK 源码,没有发现可以指定镜像的参数,只能通过 Helm Chart 安装。需要注意的是,代码如下:
1 | def install_lb_controller(self): |