EKS(Elastic Kubernetes Service),是AWS提供的一个云上弹性K8S集群,无需自己安装和配置,控制平面和数据平面的资源都由AWS提供。
EKS控制平面一般至少包含两个apiserver实例,以及分布在3个AZ的3个etcd实例,从而保证高可用。另外控制平面不能跨集群和跨账号,它通过VPC的网络来限制集群间或账号间的通信。但是你可以通过在EKS里添加对应的k8s RBAC策略来达到通信的目的。
我们一般直接使用EC2作为EKS的数据节点,每一个节点都由EC2的Auto Scaling group来管理,由ASG管理有以下好处,
Cluster Autoscaler以deployment的方式部署在EKS中,它可以根据集群情况自动调整集群节点数量,当pod由于集群资源不足无法启动或者被重新调度到其他节点时,CA可以在用户预算范围内添加新节点到集群中;当node节点利用率低,且节点上的pod都可以被迁移到其他节点时,CA会自动停止该node上的实例,然后由对应的controller将node下线,从而降低集群使用成本。
CA和基于CPU利用率的autoscaler不同,基于CPU的策略可能会在没有必要时添加新节点,或者缩容时不考虑重要服务,强行停止,会对应用造成影响。
AWS Load Balancer Controller主要提供以下两个功能,
但是需要确保EKS所在VPC的子网有正确的tag,
Key – kubernetes.io/role/internal-elb
Value – 1
Key – kubernetes.io/role/elb
Value – 1
和kubeadm部署k8s集群一样,EKS默认也使用CoreDNS作为集群的DNS服务器。默认情况下,EKS中会部署两个CoreDNS实例,不管集群有多少个节点。
先查询对应region有哪些集群,
aws eks list-clusters --region region-code --profile=your-file
然后将该集群的context更新到本地kubeconfig文件
aws eks update-kubeconfig --region region-code --name my-cluster --profile=your-file
当你创建EKS集群时,你所使用的IAM会被默认添加到k8s集群的RBAC认证用户,并作为admin(system:masters)权限用户。而且该IAM用户无法在集群中找到相关记录,因此需要注意保存信息。初始时,也只有这个IAM用户能通过kubectl访问k8s apiserver,后续可以根据需要添加不同IAM到EKS集群中。
可以通过以下命令查看当前EKS集群中的IAM映射信息,
kubectl describe -n kube-system configmap/aws-auth
要添加和删除映射信息,也可以直接edit这个configmap文件。
参考文档: