1. 预设条件
a. 使用AWS Global区域
b. 使用Amazon EKS 1.30版本
2. 创建EKS专用VPC
使用如下S3链接地址,在AWS CloudFormation中创建带有私有子网和公有子网的EKS专用VPC
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
3. 控制台快速配置创建EKS Auto Mode
Cluste IAM Role和Node IAM Role使用推荐方式创建,如下图所示
接下来的VPC选择前一步骤创建的EKS专用VPC
点击创建,接下来等待10分钟左右,EKS Auto Mode就创建好了
4. 部署示例应用
刚安装完成时,集群没有节点
部署一个示例应用进行测试
将如下文件保存成inflate.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: inflate
spec:
replicas: 1
selector:
matchLabels:
app: inflate
template:
metadata:
labels:
app: inflate
spec:
terminationGracePeriodSeconds: 0
nodeSelector:
eks.amazonaws.com/compute-type: auto
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: inflate
image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
resources:
requests:
cpu: 1
securityContext:
allowPrivilegeEscalation: false
执行如下命令部署示例应用
kubectl apply -f inflate.yaml
部署Sample Deployment以后,可以看到节点
5. EKS Auto Mode升级
EKS控制台可以对集群一键升级,升级时会自动升级控制层面EKS版本和托管实例AMI版本
等待十多分钟后,升级完成
auto mdoe托管实例升级前
升级过程中
升级后
6. EKS Auto Mode的特殊之处
6.1 计算
A. 预置托管的Karpenter,提前内置两个node pool(general-purpose,system),也可以自定义更多的node pool;不需要节点组也可以运行工作负载;
B. 通过Karpenter实现自动缩放,机型大小随工作负载自动选择;
C. Karpenter拉起的EC2托管实例,无法通过SSH和SSM连接;
D. EC2托管实例无法选择AMI版本,默认是Bottlerocket;
6.2 存储
A. 预置托管的EBS CSI Driver,需要手动部署GP3 StorageClass来使用EBS持久化存储。
6.3 网络
A. Amazon VPC CNI预置在EC2托管实例上;
B. CoreDNS预置在EC2托管实例上;
C. 网络策略(Network Policy)提前预置,无需安装Calico类似插件即可使用;
D. 有一些限制,例如不支持基于Pod的安全组、自定义CNI网络、Warm IP等。
6.4 IAM
A. 提供推荐的Cluster IAM role和Node IAM role;
B. 无需安装EKS Pod Identity Agent。
6.5 负载均衡
A. 预置托管的AWS Load Balancer Controller,ALB通过部署Ingress使用,NLB通过Service添加annotation使用;
B. 不支持自建AWS Load Balancer Controller迁移到auto mode;
C. ALB不支持安全组模式,NLB支持。
6.6 节点监控和自修复
A. EC2托管实例预置了节点监控代理(node monitoring agent);
B. Auto mode模式下自动启用了节点自动修复(node auto-repair)功能。
6.7 升级
A. 控制台点击升级以后,EKS集群和EC2托管实例会同步升级,集群先升级,EC2托管实例后升级到与集群一致的版本;
B. 预置托管的组件,由AWS维护,用户无需关心升级,例如Karpenter,AWS Load Balancer Controller,EBS CSI Driver等;EC2托管实例上安装的组件,例如VPC CNI,CoreDNS,Network Policy,node monitoring agent等,也无需用户关心升级问题;
C. 用户自行安装的第三方插件,需要用户自行升级。