• AWS EKS


    1 EKS

    EKS(Elastic Kubernetes Service),是AWS提供的一个云上弹性K8S集群,无需自己安装和配置,控制平面和数据平面的资源都由AWS提供。

    2 EKS控制平面

    EKS控制平面一般至少包含两个apiserver实例,以及分布在3个AZ的3个etcd实例,从而保证高可用。另外控制平面不能跨集群和跨账号,它通过VPC的网络来限制集群间或账号间的通信。但是你可以通过在EKS里添加对应的k8s RBAC策略来达到通信的目的。

    3 EKS数据平面

    我们一般直接使用EC2作为EKS的数据节点,每一个节点都由EC2的Auto Scaling group来管理,由ASG管理有以下好处,

    • 更好的容错率,ASG会自动监测group中node的健康情况,并尝试结束异常节点,然后重新创建新的节点。而且可以配置跨AZ,从而实现异地容灾。
    • 更好的可用性,ASG会确保group中有指定数量的节点,保证服务可用性
    • 更好的费用管理,ASG可以根据负载动态调整节点数量,从而实现更好的按需付费,节省开支

    4 EKS集群内组件

    4.1 Cluster Autoscaler

    Cluster Autoscaler以deployment的方式部署在EKS中,它可以根据集群情况自动调整集群节点数量,当pod由于集群资源不足无法启动或者被重新调度到其他节点时,CA可以在用户预算范围内添加新节点到集群中;当node节点利用率低,且节点上的pod都可以被迁移到其他节点时,CA会自动停止该node上的实例,然后由对应的controller将node下线,从而降低集群使用成本。

    CA和基于CPU利用率的autoscaler不同,基于CPU的策略可能会在没有必要时添加新节点,或者缩容时不考虑重要服务,强行停止,会对应用造成影响。

    4.2 AWS Load Balancer Controller

    AWS Load Balancer Controller主要提供以下两个功能,

    • 当你创建一个k8s ingress时,为你创建一个对应的Application Load Balancer (ALB)
    • 当你创建一个类型为LoadBalancer的服务时,为你创建一个对应的Network Load Balancer (NLB)

    但是需要确保EKS所在VPC的子网有正确的tag,

    • Private subnets
    Key – kubernetes.io/role/internal-elb
    Value – 1
    
    • 1
    • 2
    • Public subnets
    Key – kubernetes.io/role/elb
    Value – 1
    
    • 1
    • 2

    4.3 CoreDNS

    和kubeadm部署k8s集群一样,EKS默认也使用CoreDNS作为集群的DNS服务器。默认情况下,EKS中会部署两个CoreDNS实例,不管集群有多少个节点。

    5 集群认证

    5.1 获取kubeconfig文件

    先查询对应region有哪些集群,

    aws eks list-clusters --region region-code --profile=your-file
    
    • 1

    然后将该集群的context更新到本地kubeconfig文件

    aws eks update-kubeconfig --region region-code --name my-cluster --profile=your-file
    
    • 1

    5.2 IAM用户和k8s集群用户映射

    当你创建EKS集群时,你所使用的IAM会被默认添加到k8s集群的RBAC认证用户,并作为admin(system:masters)权限用户。而且该IAM用户无法在集群中找到相关记录,因此需要注意保存信息。初始时,也只有这个IAM用户能通过kubectl访问k8s apiserver,后续可以根据需要添加不同IAM到EKS集群中。

    可以通过以下命令查看当前EKS集群中的IAM映射信息,

    kubectl describe -n kube-system configmap/aws-auth
    
    • 1

    要添加和删除映射信息,也可以直接edit这个configmap文件。


    参考文档:

    1. https://docs.aws.amazon.com/eks/latest/userguide/clusters.html
    2. https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html
    3. https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html
    4. https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html
    5. https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md
    6. https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
    7. https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html
  • 相关阅读:
    【JavaScript高级】内存管理与闭包:垃圾回收GC、闭包定义、访问和执行过程、内存泄漏
    Qwt-QwtPlot类详解
    VScode+esp-idf:例程(esp32-web-camera)保存图片到sd卡
    golang 通过案列感受下内存分析
    什么是MISRA C++
    浅谈 Raft 分布式一致性协议|图解 Raft
    python知识点_初级(汇总)
    IDEA的database使用教程(使用mysql数据库)
    pycocotools and mmpycocotools 循环报错
    linux下解决 git clone每次都要输入用户名密码问题(推荐)
  • 原文地址:https://blog.csdn.net/u010039418/article/details/125695650