AWS上创建EKS(K8S)集群

网友投稿 297 2022-09-09

AWS上创建EKS(K8S)集群

1.注意事项及准备工作

EKS分为EKS Master和EKS Node两种角色;EKS Master为全托管,EKS Node为CloudFormation创建EKS Node若在NAT网络里,一定要注意,NAT网络一定要与外网联通,因为EKS Node连接EKS Master使用外网去连接.(在小章节里会配置详细配置图片)EKS的VPC的DNS hostnames Enabled设置一定要打开,否则无法解析EKS的域名,导致EKS Node无法连接EKS Master.需要准备的资源。

VPC,igw网络和nat网络都需要,dns设置打开.

安全组,创建EKS Master需要指定一个安全组

密钥:创建EKS Master和Node时需要.

2.创建VPC以及子网

1.这里为手动创建vpc,所以和CloudFormation创建的vpc会少很多标签,结果就是k8s的service模式无法使用 Local模式去访问。

2.NAT网关,出网映射的子网一定要是在pub网络里面,也就是说,这个子网必须可以使用igw连接互联网。

子网规划,三个可用区三个子网组成一个服务类型子网,比如igw是public网络,那么由三个可用区的三个子网组成.

子网网段/24

可用区

网络类型

10.1.50.0

ap-northeast-1a

igw

10.1.51.0

ap-northeast-1b

igw

10.1.52.0

ap-northeast-1c

igw

10.1.53.0

ap-northeast-1a

nat

10.1.54.0

ap-northeast-1b

nat

10.1.55.0

ap-northeast-1c

nat

创建vpc等一些工作手动创建,这里不做讲解.这里只讲解创建igw和nat的网络类型。

2.1 创建internet网关

2.输入名称创建igw网关,这里只有创建

3.创建路由表关联igw

4.路由表关联子网

找到做好分类的子网,然后关联

2.2 创建nat网关

1.创建NAT网关.

这里选择的子网一定要在igw里面,否则还是无法出网。

2.创建路由表

3.关联子网

3.创建EKS Master

创建EKS Master有图形化方式和aws cli方式,截止2019年8月14日,图形化创建会存在bug,bug为当前vpc下的所有子网,不管是否选择都会全部提交,所以可能存在某些可用区无法创建EKS Master的问题.

3.1 图形化创建

存在bug。

1.打开EKS创建按钮,开始配置集群信息

输入集群名称,选择版本,并且创建一个可以管理EKS的Role name。

2.选择子网以及安全组以及是否对公网访问

就是这里存在bug,不管选择与否,都会提交所有子网。

这里的private access的意思就是必须vpc到aws内网才可以使用。

3.2 aws cli

以下只有命令,标红的地方根据实际调整

aws eks --region ap-northeast-1 create-cluster --name ap-lcm-prod-k8sMaster \--role-arn arn:aws:iam::858659433780:role/eks \--resources-vpc-config subnetIds=subnet-07d73b9f0a2899ebb,subnet-0da4b758a0bb5709e,subnet-08114567a3be57a9c,subnet-0d3bb405d6755b74c,subnet-097f1b494870d1da2,subnet-0d38ee1c1f5cc7922,securityGroupIds=sg-0bd1f1fd24d388f89

创建完成会有成功提示

4.创建EKS Node

aws创建EKS Node只有​​CloudFormation​​。

1.创建堆栈,选择安全组

2.选择Node的名称以及imageid

3.选择磁盘大小以及子网

4.下面一页直接下一步,到第三页勾选确认.

这一步EKS Node创建完成了,EKS的Node安全组会自动创建,指定了master的安全组,它会自动创建一些规则在master的安全组里面并自动创建Node的安全组。

5.配置EKS Node连接 EKS Master

下载、编辑和应用AWS身份验证器配置映射

curl -o aws-auth-cm.yaml v1kind: ConfigMapmetadata: name: aws-auth namespace: kube-systemdata: mapRoles: | - rolearn: username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

在cloudformation获取ARN

5.EKS Node自动缩扩容

在EKS Node使用CloudFormation时会自动创建一个auto scaling组,但是该组里面没有任何策略,并且如果设置也仅仅只能依据cpu的使用率来设置,因此,aws有一个专门针对cluster来设置的服务。

官方链接:简短描述

Cluster Autoscaler是一个工具,可在满足下列任意一项条件时自动调整 Kubernetes 集群的大小:

有Pod因为资源不足而无法在集群中运行。集群中有节点长时间利用率不足,并且其 Pod 可以放置到其他现有的节点。

AWS上的Cluster Autoscaler会扩展任何指定 Auto Scaling 组内的工作线程节点,并在您的集群中作为部署运行。

注意:以下解决方案假定您拥有一个活动的 Amazon EKS 集群,并且该集群与使用 AWS CloudFormation 模板创建的工作线程节点关联。以下示例使用了自动发现设置。您还可以通过指定一个或多个 Auto Scaling 组来配置 Cluster Autoscaler。

5.2 部署

5.2.1 创建标签

1.打开​​AWS CloudFormation 控制台​​,选择您的堆栈,然后选择资源选项卡

要查找您的堆栈创建的 Auto Scaling 组资源,请在逻辑 ID列查找 NodeGroup

这个组可以在EC2的Auto Scaling组里面找到对应的。

2.打开Amazon EC2 控制台,然后从导航窗格中选择Auto Scaling 组。选择标签选项卡,然后选择添加/编辑标签。

Key: k8s.io/cluster-autoscaler/enabled Key: k8s.io/cluster-autoscaler/awsExampleClusterName

将awsExampleClusterName替换为您的 EKS 集群的名称

5.2.2 创建策略并关联

1.创建IAM策略

根据如下示例创建IAM 策略并将该策略命名为ClusterAutoScaler,从而为运行 Cluster Autoscaler 的工作线程节点授予访问所需资源和执行所需操作的权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags", "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup" ], "Resource": "*" } ] }

2.向Amazon EKS 工作节点的实例角色附加此新策略

可以从CloudFormation 来查看node的策略。

将刚才创建ClusterAutoScaler附加到这个策略上面来。

5.2.3 部署 Cluster Autoscaler

1.部署 Cluster Autoscaler

要在 GitHub 上下载 Cluster Autoscaler 项目提供的示例部署文件,请运行以下命令

wget YAML 文件并根据下例设置 EKS 集群名称 (awsExampleClusterName) 和环境变量 (us-east-1)。然后保存更改

然后执行命令

kubectl apply -f /k8s/cluster-autoscaler-autodiscover.yaml kubectl logs -f deployment/cluster-autoscaler -n kube-system

5.3 测试

1.要查看当前的工作线程节点数量,请运行以下命令:

kubectl get nodes

2.要增加工作线程节点的数量,请运行以下命令:

kubectl create deployment autoscaler-demo --image=nginx kubectl set resources deployment.v1.apps/autoscaler-demo -c=nginx --limits=cpu=1000m kubectl scale deployment autoscaler-demo --replicas=20

注意:此命令会使用 NGINX 映像直接在 Kubernetes 集群上创建一个名为 autoscaler-demo 的部署,然后启动 20 个 Pod。

3.要检查部署的状态并看到 Pod 的数量在增加,请运行以下命令:

kubectl get deployment autoscaler-demo --watch

4.当可用 Pod 的数量达到 50 时,请运行以下命令检查工作线程的数量:

kubectl get nodes

清理测试部署

1.要通过删除之前创建的部署 autoscaler-demo来收缩工作线程节点,请运行以下命令:

kubectl delete deployment autoscaler-demo

2.要查看工作线程节点的数量,请等待大约 30 分钟,然后运行以下命令:

kubectl get nodes

6.连接EKS

6.1 更新kubeconfig

这样会自动创建连接EKS的信息

aws eks --region region update-kubeconfig --name cluster_name

6.2 新增用户及权限

如果新增用户,依然可以使用6.1的方式去更新kubeconfig.

但是如果想动态添加用户以及权限那么就要使用以下方式了(这个步骤是热增加,其实在更新kubeconfig之前就应该做了)

[root@ip-10-5-2-39 tools]# cat /tools/aws-auth-cm.yaml apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: arn:aws:iam::858659433780:role/ap-lcm-test-k8sNode-NodeInstanceRole-TAZECTU1GNIJ username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes #这里开始全部为新增,userarn和username不做讲解,主要是新增groups,这个是k8s默认的system:masters集群绑定了cluster-admin的权限,把用户加入这个组,就会有集群管理员权限.system:masters是一个集群绑定,在集群里面不可见,但是可以翻阅官方文档,看到它绑定了cluster-admin这个角色.如果需要把用户赋予其它权限,可以深入去了解RBAC,这里不做讲解 mapUsers: | - userarn: arn:aws:iam::858659433780:user/zexiong.li username: zexiong.li groups:

默认用户其实就是aws的登录用户,以下就是aws 官方文档给出的答案,这里和上面的可以辅助观看,这里的文档和上面不是承上启下关联的

当您创建一个 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap [1]. 例如我们添加了 IAM 用户 arn:aws:iam::858659433780:user/zexiong.li 在 mapUsers 部分

7.故障处理

7.1 dns hostname

VPC的dns hostname没有打开就会有以下报错

作者:小家电维修

转世燕还故榻,为你衔来二月的花。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:文案君:花了500万,买来一套小红书建立品牌的实操方法(7000字)!
下一篇:prometheus监控k8s节点服务器常用指标
相关文章

 发表评论

暂时没有评论,来抢沙发吧~