EKS简明教程 (1) 集群创建

01 安装命令行工具

需要安装以下三个命令行工具:

  1. AWS CLI : 用于通过命令行方式控制 AWS Service.

  2. kubectl : 用于控制 Kubernetes 集群以及对象

  3. eksctl : 用于管理 Amazon EKS 集群, 管理 NodeGroup / Fargate Profile 等EKS 资源.

01.01 AWS CLI 安装配置

AWS 官方文档出处 安装或更新 AWS CLI 的最新版本

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

下载安装包

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

安装

sudo installer -pkg AWSCLIV2.pkg -target /

验证

# aws --version
aws-cli/2.11.17 Python/3.11.3 Darwin/22.5.0 exe/x86_64 prompt/off

配置 AKSK

# aws configure
AWS Access Key ID [None]: AxxxxxxxxxxTUCxxxxxG
AWS Secret Access Key [None]: uMe7fuxxxxxxxxxxxxBqt3HxxxxxxxxDTm  
Default region name [None]: us-east-1
Default output format [None]: json

验证权限

aws ec2 describe-vpcs

01.02 kubectl 安装

AWS 官方文档出处 安装或更新 kubectl

https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/install-kubectl.html

下载二进制文件

curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/darwin/amd64/kubectl

赋予执行权限

chmod +x ./kubectl

更新 PATH

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

验证命令行

kubectl version --short --client

01.03 eksctl 安装

eksctl github page

https://github.com/eksctl-io/eksctl

Mac OS 使用HomeBrew 进行安装

brew tap weaveworks/tap
brew install weaveworks/tap/eksctl

验证

eksctl version

02 EKS 核心对象

EKS Control Plane: EKS以托管方式为我们管理, 控制面板的相关组件, etcd/Kube-apiserver/kube-controller.

Worker Node & Node Groups : 使用 EC2 作为 K8S 作为数据平面时, EKS 提供以 Node Group 方式进行 EC2 Instance 的管理.

Fargate Profile : EKS 中你还可以使用 Fargate 的方式承载 K8S 上的数据平面负载, 这时你需要配置 Fargate Profile.

VPC : 在 EKS 中, 数据平面负载所需的网络环境由 VPC 进行承载.

02.01 EKS Control Plane

  1. EKS 中每一个 Cluster 的控制平面都独自隔离, control plane 的基础设施不会与其他账号或者同一个账号下的其他 Cluster 进行共享.

  2. 在这个 Control Plane 中, 在用户看来是天然高可用的, EKS 会为用户启动至少两个 APIServer Node 和 三个 EtcdNodes , 且其基础设施会横跨同一区域中的三个可用区.

  3. EKS 也会帮助我们自动检测和替换非正常控制平面节点, 以使得用户免于运维 Control Plane 的相关组件.

02.02 Worker Node 和 Node Group

  1. 你可以使用 EC2 Instances 作为 K8S 的数据平面负载, 也就是 K8S语境中的 Worker Node.

  2. 这些 Worker Node 在通过位于其所在的 VPC 中的 Cluser API Server endpoint 与 EKS 托管的 Control Plane 进行通信.

  3. Node Group 是为了简化 Worker Node 而被设计出来的, 其背后使用 EC2 AutoScaling Group 进行管理. 所以在同一个 Node Group 中的多个 Node 使用同一个模板进行创建, 保证其配置的一致性, 例如使用一致的 Instance Type/AMI/EC2 Profile.

02.03 Fargate Profiles

  1. 在 EKS 中你还可以使用 Fargate 服务在承载 K8S 中的计算负载, 从而免于运维虚拟机.

  2. 每一个 Fargate 运行着一个 Pod, Fargate为其提供一个隔离的运行环境, 每个 Fargate 都使用隔离的计算资源和独立的ENI.

  3. 通过配置 Fargate Profile 可以让 Fargate Controller 识别哪些 Pod 需要使用 Fargate 方式进行承载.

02.04 VPC (Virtual Private Cloud)

  1. VPC 是 AWS 中的网络服务, 用于让客户创建独立的网络环境.

  2. 在 VPC 中, 通过安全组(Security Group) 和 N-ACL 完成网络安全策略配置.

  3. 不论是以 Node Group 方式还是 Fargate 方式, 都需要跑在 VPC 提供的网络环境下.

03 创建第一个 EKS Cluster

03.01 创建Cluster Control Plane

CLI Example:

eksctl create cluster --name=eksdemo1 \
                      --region=us-east-1 \
                      --zones=us-east-1a,us-east-1b \
                      --without-nodegroup
  • –name : cluster 名称

  • –region: cluster 所在区域

  • –zones: cluster 所在可用区

  • –without-nodegroup : 仅创建 control plane, 不创建nodegroup

OUTPUT :

创建时间大概 15 到 20 分钟.

验证 cluster

# eksctl get cluster
NAME    REGION    EKSCTL CREATED
eksdemo1  us-east-1  True

03.02 创建 IAM OIDC Provider

在 EKS 使用过程中, K8S 的 pod 很多情境下都需要拥有 IAM 的权限, 这时我们会借助这个 OIDC 来完成 Kubernetes Service Acounts 与 IAM Roles 的转换和映射. 所以在这里, 绝大多数情况下我们都需要创建一个 OIDC Provider.

CLI Example:

eksctl utils associate-iam-oidc-provider \
    --region us-east-1 \
    --cluster eksdemo1 \
    --approve

03.03 创建 Node Group

通常情况下, 我们想要有机会去 ssh 到 nodegroup 管理的 ec2 instance 中进行一些操作, 那么我们需要提前创建一个 keypair 进行 ssh 连接. 你可以在 EC2 的控制台当中创建一个 keypair, 以下是我创建的 keypair

接下来开始创建 Node Group, 在创建 Node Group 时, 可以制定很多选项你可以使用

eksctl create nodegroup --help

来进行选项的具体作用. 下面是一个创建 nodegroup 的示例:

eksctl create nodegroup \
--cluster=eksdemo1 \
--region=us-east-1 \
--name=eksdemo1-ng-public1 \
--node-type=t3.medium \
--nodes=2 \
--nodes-min=2 \
--nodes-max=4 \
--node-volume-size=20 \
--ssh-access \
--ssh-public-key=kube-demo \
--asg-access \
--external-dns-access \
--full-ecr-access \
--appmesh-access \
--alb-ingress-access

其中 cluster/region/name 表明 nodegroup 隶属于那个 cluster , 位于哪个 region, 叫做什么名字.

node-type, 则是 group 内 ec2 的实例类型, node-volume-size 则是 instance 的卷大小.

Nodes/nodes-min/nodes-max: nodegroup 背后的 asg 的所需容量,最小容量和最大容量.

ssh-access/ssh-public-key : 则指定了 instance sg 被允许 ssh 且使用制定的 keypair.

剩下的, asg-access/external-dns-access/full-ecr-access/appmesh-access/alb-ingress-access , 则是显性的指明在 nodegroup 下的 ec2 instance 所附加的 EC2 instance profile 需要添加上述的几个权限.

04 验证集群资源

04.01 EKS 资源验证

验证 Control Plane

# eksctl get cluster
NAME    REGION    EKSCTL CREATED
eksdemo1  us-east-1  True
# eksctl get cluster --name=eksdemo1
NAME    VERSION  STATUS  CREATED      VPC      SUBNETS                          SECURITYGROUPS    PROVIDER
eksdemo1  1.25  ACTIVE  2023-08-07T06:01:32Z  vpc-051e6f8a3c344c075  subnet-0146b62bf36b782f8,subnet-03efa115372238d10,subnet-04836e2c70b6532f9,subnet-0bc391b02ce6bd919  sg-0cd93ab2c8acb64af  EKS

验证Node Group

# eksctl get nodegroup --cluster=eksdemo1
CLUSTER        NODEGROUP        STATUS    CREATED            MIN SIZE    MAX SIZE    DESIRED CAPACITY    INSTANCE TYPE    IMAGE ID    ASG NAME                            TYPE
eksdemo1    eksdemo1-ng-public1    ACTIVE    2023-08-07T07:17:35Z    2        4        2            t3.medium    AL2_x86_64    eks-eksdemo1-ng-public1-78c4e76d-dbe3-503f-7603-dbe140ecef65    managed

验证节点信息

# kubectl get node -owide
NAME                            STATUS   ROLES    AGE    VERSION                INTERNAL-IP     EXTERNAL-IP    OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-192-168-13-57.ec2.internal   Ready    <none>   171m   v1.25.11-eks-a5565ad   192.168.13.57   xxx.95.xxx.255   Amazon Linux 2   5.10.184-175.749.amzn2.x86_64   containerd://1.6.19
ip-192-168-33-3.ec2.internal    Ready    <none>   171m   v1.25.11-eks-a5565ad   192.168.33.3    xxx.91.xxx.130   Amazon Linux 2   5.10.184-175.749.amzn2.x86_64   containerd://1.6.19

04.02 VPC网络资源

在 VPC Resource Map 中可以看到eksctl 使用 cloudformation 为我们创建的相关网络资源.

包含 4 个子网, 每个 AZ 包含一个公有子网,一个私有子网

一个 IGW 与 一个 NAT-GW

一个Cluster安全组, 用于 control plane 与 data plane 之间的通信.

一个 SSH 安全组, 附加与 NodeGroup 中, 用于允许外部 IP 连接 WorkerNode.

04.03 验证 SSH

使用配置的 KeyPair 进行对于 NodeGroup 中实例的 ssh 连接.

04.04 仅测试使用 慎用 开启Node所有入网流量

为了方便之后的demo 和测试, 在上述 SSH 安全组上开启所有来源 IP (0.0.0.0) 对于所有协议和端口的入栈流量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值