03-AWS创建EKS集群
创建EKS前的准备
1
2
1. 网络: VPC、子网、路由表;
2. 授予IAM用户指定的权限;
创建集群
登录web控制台
EKS控制台: Amazon Elastic Kubernetes Service
创建集群
1.根据情况,选择配置选项:
快速配置(EKS)
自定义配置 (选择)
2.禁用 EKS自治模式
3.集群配置: 集群名称;提前创建好IAM角色(可根据后面的 推荐创建的角色)
4.kubernetes版本配置: 版本选择最新;升级策略: 选择已扩展
5.自治模式计算-全新,默认
6.集群访问权限: 禁用集群管理员访问权限
启用集群管理员访问权限: 授予 本次创建集群的IAM角色 管理员权限;
禁用集群管理员访问权限: 禁止授予 当前IAM角色为本次创建集群的管理员权限;避免权限太乱,选此项
集群身份验证: EKS API 和 ConfigMap
EKS API: 该集群将仅从 EKS 访问条目 API 中获取经过身份验证的 IAM 主体
EKS API 和 ConfigMap: 该集群将从 EKS 访问条目 API 和 aws-auth ConfigMap 中获取经过身份验证的 IAM 主体。
7.信封加密、ARC可用区转移、标签 根据需要设置,全部默认即可
8.下一步,指定联网:
选择提前创建好的 VPC、子网、安全组(非必要,创建集群后会自动创建一个集群安全组)
其他默认即可
9.集群端点访问: 公网和私网。根据需要设置,默认即可
10.配置可观测性:默认
指标: Prometheus、CloudWatch 根据需要安装,一般默认即可
11.控制面板日志: 集群核心组件的日志,默认即可,也可以全选利于排查问题
12.插件安装: 默认。安装默认已选择的插件即可,如图
注意:
- Amazon VPC CNI 插件需要单独的IAM角色,根据 <创建推荐的角色>进行创建,创建的时候需要注意:创建推荐的角色>
可信实体类型: AWS服务,默认
使用案例: EKS-Pod Identity,默认
13.下一步 –> 确认安装的内容 –> 创建。
需要等5-10min进程创建
创建节点池
前提条件:
使用的子网,需要能访问互联网,两种方式:
NAT网关统一出口网络: 02-AWS-使用NAT网关出口
直接互联网网关
1.创建节点池,点击: 添加节点组
2.节点组配置:名称、IAM角色(没有创建按照<创建推荐的角色>创建)创建推荐的角色>
3.启动模版: 禁用,默认
4.其他的默认
Kubernetes 标注: k8s中node的label
Kubernetes 污点: k8s中node的 污点标签
标签: 当前节点池的标签,非k8s节点标签
5.下一步,设置计算和扩展配置
除了下面几项,其他默认:
实例类型: 根据需求选择实例类型
磁盘大小: 根据需要选择大小
节点组扩缩容: 所需: 1或0;最小:0;最大: 3
6.下一步,指定联网
7.下一步 –> 确认资源后 –> 创建。
需要等5-10min进程创建
如果有问题,可以看 遇到的问题
连接集群
授予IAM连接集群
1.配置IAM访问条目
2.创建访问条目: 以AWS管理员账户为例
IAM主体: arn:aws:iam::<UID>:root
类型: 标准
其他可选配置默认
3.下一步,访问策略: AmazonEKSClusterAdminPolicy(集群管理员)
访问范围: 集群
点击 添加策略,显示如下
4.下一步 -> 创建。
配置kubeconfig配置文件
测试连接
1
kubectl get nodes
遇到的问题
Container runtime network not ready: cni config uninitialized [closed]
1
2
3
4
5
6
7
8
9
10
现象: 添加节点组后,节点已加入集群,但是 一直报这个错误;
问题: CNI插件未安装或者安装之后无法生效
解决: CNI插件安装 需要绑定一个 IAM账号 或 EKS容器组身份,目的是为了绑定一个权限策略: AmazonEKS_CNI_Policy
AmazonEKS_CNI_Policy: 此策略为 Amazon VPC CNI 插件 (amazon-vpc-cni-k8s) 提供了修改您的 EKS 工作节点上的 IP 地址配置所需的权限;
https://docs.aws.amazon.com/zh_cn/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html
注意: 在创建 IAM 或 EKS创建容器组 身份的时候,需要手动筛选 AmazonEKS_CNI_Policy,并绑定,才可生效;
error: You must be logged in to the server (Unauthorized)
AWS官方文档: 未经授权或访问被拒绝 (kubectl)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 问题及现象: 1. 已经使用命令: aws eks update-kubeconfig --name <集群名称> --kubeconfig <kubeconfig path> 导出kubeconfig文件,但是kubectl连接时一直报验证失败的错误 原因: 与AWS k8s集群的访问权限有关,新创建的k8s集群默认有: API、API和ConfigMap 两种模式,不管是哪一种都需要将指定用户加入当前的集群 API模式: 即仅访问条目方式,使用 EKS 访问条目向 IAM 用户授予对 Kubernetes 的访问权限, API和ConfigMap模式: ConfigMap: 即使用k8s集群中ConfigMap进行授权 配置文件cm: kubectl -n kube-system get configmap aws-auth身份验证模式: 向 IAM 用户和角色授予对 Kubernetes APIs 的访问权限
身份验证模式 方法 仅 ConfigMap (CONFIG_MAP) aws-auth ConfigMap EKS API 和 ConfigMap (API_AND_CONFIG_MAP) 访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation AWS Management Console 和 aws-auth ConfigMap 中的条目 仅 EKS API (API) 访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation 和 AWS Management Console中的条目 配置IAM访问条目
配置集群管理员权限
1 2 3 # 配置IAM用户授予 管理员权限 IAM: arn:aws:iam::******:<用户名> 访问策略: AmazonEKSClusterAdminPolicy