从架构师视角看,通过kubeadm在AWS搭建Kubernetes集群并配置弹性伸缩需分以下步骤:
-
基础设施准备
- 使用EC2实例作为主节点(至少2核4GB)和工作节点
- 配置VPC安全组规则开放6443(API), 2379-2380(etcd), 10250(kubelet)等端口
- 为Worker节点附加IAM角色,包含EC2/AutoScaling访问权限
-
软件安装
- 所有节点安装Docker(20.10+)及kubeadm/kubelet/kubectl(版本需严格匹配Kubernetes版本)
- 禁用swap并设置sysctl参数:
net.bridge.bridge-nf-call-iptables=1
-
控制平面初始化
kubeadm init --pod-network-cidr=10.244.0.0/16- 应用Calico网络插件
- 保存join命令及kubeconfig文件
-
Worker节点加入
- 在Worker执行kubeadm join指令并验证节点状态
- 配置EC2自动扩容组(ASG),设置最小/最大实例数
-
弹性伸缩配置
- 部署Cluster Autoscaler并配置ASG发现:
autodiscovery: clusterName: <CLUSTER_NAME> - 安装Metrics Server并创建HPA策略:
kubectl autoscale deployment myapp --cpu-percent=50 --min=2 --max=10
- 部署Cluster Autoscaler并配置ASG发现:
关键注意点:
- 确保kubelet启动参数包含
--cloud-provider=aws - 为ASG打Tag:
k8s.io/cluster-autoscaler/<CLUSTER_NAME> = owned - 配置DNS服务(CoreDNS)与AWS Route53集成
- 通过压力测试验证伸缩延迟(通常5-10分钟触发扩容)