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 ...
随机推荐
- Element ui结合springboot的简单实战
Eelment UI简单实战 前端开发 1 创建项目,导入element ui(略) 2 大致设计出想要的效果,如下 3 创建包 根据设计的大致模样在项目的components中创建对应的包,方便以后 ...
- LeetCode 617. 合并二叉树 Java
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...
- memcache 和 redis 的区别
1)Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcache相比一个最大的区别.2)Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcache只是简单的K/V ...
- 建站第二步:简单配置Nginx反代理工具
简单配置Nginx反代理工具 你要用你的域名能和服务器绑定就要用一些反代理工具 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,极其优异的服务器软件,底层为C 来自某些 ...
- [bug] 前台表单添加数据,后台返回成功消息,但数据库相应字段值为null
原因 前端代码中输入框字段值和后端定义的属性值不一致 分析 bean . controller 如下图,浏览器收到后台返回消息,在后台也可打印user信息,说明已成功接收前端JSON数据并转换为use ...
- 分布式锁中的王者方案-Redisson
上篇讲解了如何用 Redis 实现分布式锁的五种方案,但我们还是有更优的王者方案,就是用 Redisson. 缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):R ...
- 最适合新手的Redis Cluster搭建过程
好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...
- DDD中实体与值对象是干什么的
实体值对象的含义 我们前面已经讲过领域的概念, 今天来讲讲实体, 实体是我们进行设计领域模型时的基础单元, 与之有关的是值对象, 接下来先梳理一下实体以及值对象的含义,然后讲讲他们俩的关系, 希望通过 ...
- Python+Selenium学习笔记17 - HTML测试报告
运行少量case时 1 # coding = utf-8 2 3 from selenium import webdriver 4 import unittest 5 import time 6 fr ...
- 多平台Gstreamer Multiplatform
多平台Gstreamer Multiplatform GStreamer可在所有主要操作系统上运行,例如Linux,Android,Windows,Max OS X,iOS,以及大多数BSD,商业Un ...