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网关
1.打开aws vpc,点击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 https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/aws-auth-cm.yaml
文件内容如下
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: <ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
在cloudformation获取ARN


5.EKS Node自动缩扩容
在EKS Node使用CloudFormation时会自动创建一个auto scaling组,但是该组里面没有任何策略,并且如果设置也仅仅只能依据cpu的使用率来设置,因此,aws有一个专门针对cluster来设置的服务。
官方链接:https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-cluster-autoscaler-setup/
5.1 简短描述
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 https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
2.打开下载的 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:
- system:masters
默认用户其实就是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没有打开就会有以下报错

AWS上创建EKS(K8S)集群的更多相关文章
- 2.28秒创建一个k8s集群(非理论篇,理论自行 -- )
准备3台centos 7+ (建议7以上,不然要会很麻烦,要升级内核等等,扯淡的东西) 安装docker 和k8s集群(均以最新版为例)基于官网 设置静态ip(可选) 查看本机的网关ip cd /Li ...
- 如何使用Rancher在OpenStack上创建K8S集群
不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...
- 搭建K8S集群
一.前言 我们将现有的虚拟机称之为Node1,用作主节点.为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点. ...
- 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像
本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- k8s集群启动了上万个容器(一个pod里放上百个容器,起百个pod就模拟出上万个容器)服务器超时,无法操作的解决办法
问题说明: 一个POD里放了百个容器,然后让K8S集群部署上百个POD,得到可运行上万个容器的实验目的. 实验环境:3台DELL裸机服务器,16核+64G,硬盘容量忽略吧,上T了,肯定够. 1.一开始 ...
- 使用Kubeadm创建k8s集群之部署规划(三十)
前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...
- 使用Kubeadm创建k8s集群之节点部署(三十一)
前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...
- 仅需60秒,使用k3s创建一个多节点K8S集群!
作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...
随机推荐
- EventSource的自定义实现
前言: 前面两篇文章都介绍了.NET Core 性能诊断工具,其中诊断工具都用到了EventCounters来实时的收集服务器性能指标. 那么收集指标能否自己定义呢? 一.What's EventCo ...
- [Qt] Librecad 源码分析
libraries jwwlib libdxfrw:一个免费的C++库,用于读写文本格式或二进制格式的DXF文件(C++ library to read and write DXF/DWG files ...
- [刷题] PTA 6-10 阶乘计算升级版
要求: 实现一个打印非负整数阶乘的函数 N是用户传入的参数,其值不超过1000.如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印"Invalid input" 1 # ...
- QTableWidget - 基础讲解(2) 样式、右键菜单、表头塌陷、多选等
转载:https://www.cnblogs.com/zhoug2020/p/3789076.html 在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是 ...
- linux操作系统优化系列-RAID不同阵列模式的选择
背景 笔者所在的某通信运营商某大数据项目由于应用面临瓶颈需要扩充服务器设备,当初上这个项目的时候,服务器上线前的工作(配置raid,安装操作系统,Infiniband网络调试,系统漏洞安全加固)都是我 ...
- Tracert 命令
Tracert 命令 Tracert 命令的作用 Tracert命令诊断实用程序通过向目标计算机发送具有不同生存时间的ICMP数据包,来确定至目标计算机的路由,也就是说用来跟踪一个消息从一台计算机到另 ...
- rpm包名详解-rpm命令使用方法
linux软件包管理-rpm mount # 挂载 1.将光盘镜像插入光驱 2.创建挂载目录 mkdir /guangqu 3.挂载到/guangqu [root@gong ~]# mount /de ...
- nosql数据库之Redis持久化、备份和主从配置
一.持久化方式 Redis提供了两种数据备份的方式,一种是RDB,另外一种是AOF. RDB AOF 开启/关闭 开启:默认开启:关闭:把配置文件中所有的save注释就是关闭了 开启:在配置文件中 ...
- 一个开源的MY BLOG
my blog My Blog是由Docker+SpringBoot+Mybatis+thymeleaf等技术实现的Java博客系统,本来是一个docker和springboot的实战练习项目,目前已 ...
- Sqlserver语句获取本周、上一周、本月数据
sql语句获取本周.上一周.本月数据 获取周数据 1 本周 2 select * from table1 where datediff(week,时间字段,getdate()) = 0 3 上周 4 ...