EKS
Amazon Elastic Kubernetes Service (Amazon EKS) 是一项托管服务,可用于在 上运行 AWSKubernetes,而无需安装、操作和维护您自己的 Kubernetes 控制层面或节点。Kubernetes 是一个用于实现容器化应用程序的部署、扩展和管理的自动化的开源系统.
一.前置准备
1.1 VPC
复制并保存VPC-ID: vpc-0ff08cccc0f71e42c
1.2 子网设计
- Node节点子网:
- 10.48.2.0/24
a可用区
- 10.48.3.0/24
b可用区
- 10.48.2.0/24
- Pod子网:
- 10.48.128.0/18
a可用区
- 10.48.192.0/18
a可用区
- 10.48.128.0/18
- serviceSubnet: (内部定义使用,无需创建此子网)
- 10.253.0.0/16
记录NodeSubnet,PodSubnet对应的子网ID、CIDR、可用区
。注意:务必要一一对应
1.3 访问密钥
- 对于基础设施资源管理,建议使用独立的子账户来进行相关操作.
- 因此需要创建对应子账户并开启API访问、授权管理员权限;
- 简要操作步骤如下:(如果已有账号只需要创建密钥即可.)
- 登录主账号,搜索IAM服务
- 点击
用户
根据提示一步步创建注意: 选择管理员授权、运行API、控制台操作
- 最后点击下载 .csv 的账号文件即可.
- 再次点击刚刚创建的用户,如下图所示 创建访问密钥。下载访问密钥文件留存.
1.4 命令行配置(管理节点)
- 首先创建一台EC2实例,用于配置命令行工具、以及执行后续的安装部署操作;
- 安装下列命令行工具:
-
安装AWS CLI:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-cliv2.html
# aws --version aws-cli/2.2.38 Python/3.8.8 Linux/3.10.0-1062.12.1.el7.x86_64 exe/x86_64.centos.7 prompt/off # ls $HOME/.aws/ config credentials # aws s3 ls
-
安装eksctl:https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html
-
安装Kubectl:https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html
-
二、部署控制面板
2.1 初始化配置文件
- 需要使用
eksctl
来进行集群初始化创建操作. - *
eksctl
命令的详细文档,可参考:https://eksctl.io/introduction/**
首先,创建以下文件命名可自定义,这里选择使用vpc.yml
,
其中需要注意的是修改对应的:
- name 集群名称
- region 区域
- vpc VPC信息
- subnet 子网信息
文件内容如下:
- 请根据
前置准备
相关的信息,逐一替换并核验无误
# cat vpc.yml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: sa-k8s
region: me-south-1
kubernetesNetworkConfig:
serviceIPv4CIDR: 10.253.0.0/16
vpc:
id: "vpc-0ff08cccc0f71e42c" # (optional, must match VPC ID used for each subnet below)
cidr: "10.48.0.0/16" # (optional, must match CIDR used by the given VPC)
subnets:
# must provide 'private' and/or 'public' subnets by availibility zone as shown
private:
me-south-1a:
id: "subnet-0d40ab21e655fe4ba"
cidr: "10.48.2.0/24" # (optional, must match CIDR used by the given subnet)
me-south-1c:
id: "subnet-09a31977efd768dcc"
cidr: "10.48.3.0/24" # (optional, must match CIDR used by the given subnet)
managedNodeGroups:
- name: ng-default # 加入了一个初始的节点
labels: { role: workers }
instanceType: m5.xlarge
desiredCapacity: 1
volumeSize: 80
privateNetworking: true
注意: 切记要再三检查录入的信息无误。否则集群会创建失败
2.2 创建集群
eksctl create cluster \
--with-oidc \
--config-file=vpc.yaml
执行后,终端页面会显示创建日志,等待10+分钟后,可在控制台刷新页面,查看集群;
另外也可以在 CloudFormation
查看到详细的执行信息
2.3 获取kubeconfig 配置文件
- 这里需要注意指定的
region
和-name
,修改为正确的。
# aws eks update-kubeconfig --region ap-southeast-1 --name sg-k8s
# kubectl get node
NAME STATUS ROLES AGE VERSION
ip-10-48-2-144.xx.com Ready <none> 5m v1.20.10-eks-3bcdcd
# kubectl get ns
NAME STATUS AGE
default Active 25h
kube-node-lease Active 25h
kube-public Active 25h
kube-system Active 25h
OK,到这里集群就创建完成了,下面需要做自定义配置项的调整;
2.4 自定义Pod网段
使用CNI Custom Networking的方法来更改pod的地址范围,
需要更多详情可以查看官方网站: https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html
2.4.1 配置aws-node环境变量
kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
2.4.2 安全组ID
- 集群初始化时,会自动创建三个EKS专用的安全组,此时需要登录控制台查看对应安全组并记录安全组ID.
- 如下图所示,这里使用的是ID为
07d1165a2897b6d1b
的安全组;请记录并保存
2.4.3 初始化配置文件
- me-south-1a.yml(修改并核对name、安全组ID、子网ID信息)
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
name: me-south-1a
spec:
securityGroups:
- sg-07d1165a2897b6d1b
subnet: subnet-097e6fe8783629c2d
- me-south-1c.yml (修改并核对name、安全组ID、子网ID信息)
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
name: me-south-1c
spec:
securityGroups:
- sg-07d1165a2897b6d1b
subnet: subnet-092c2d4d0469534fd
再次提示: 请核对相关信息保持一致
2.4.4 更新配置
kubectl apply -f me-south-1a.yml
kubectl apply -f me-south-1c.yml
kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=failure-domain.beta.kubernetes.io/zone
2.5 验证配置
2.5.1 删除初始化node节点
- 控制台删除之前初始化创建的node节点,或者命令行直接删除
eksctl delete nodegroup --cluster sg-k8s --name ng-default
2.5.2 新增node节点
# cat test-node.yml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: sg-k8s
region: me-south-1
managedNodeGroups:
- name: test-node
labels: { role: workers }
instanceType: m5.xlarge
desiredCapacity: 1
volumeSize: 40
privateNetworking: true
# eksctl create nodegroup --config-file=test-node.yml
等待节点组创建成功
2.5.3 验证配置
# kubectl create deploy nginx --image=nginx:alpine
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-565785f75c-pb77h 1/1 Running 0 1m 10.48.136.177 ip-10-48-2-184.xx.com <none> <none>
此时可以看到Pod IP已经调整为指定的网段;
- 删除测试节点
eksctl delete nodegroup --cluster sg-k8s --name test-node
三、新增Node节点
使用启动模板来进行后续的应用、中间件等节点实例的添加
3.1 添加密钥对
用于登录EC2 node 节点实例
- 可导入已有密钥对或者创建一个新的密钥对
3.2 创建启动模板
- 注意: 请不要直接创建启动模板,因为模板包含了EKS的一些认证相关的配置.因此使用前面初始化后的节点组模板来创建即可.
- 创建自定义模板:
- 调整的配置项有:
- 描述信息
- 实例类型(EC2)
- 密钥对(用于登录node节点EC2实例)
- 安全组(使用EKS创建的安全组)
- 存储卷,(新增了一个数据盘)
- 资源标签: 定义实例名称、其他自定义值、结算优惠标签(注意勾选值).
- 调整的配置项有:
确认以上信息无误后,点击创建模板版本即可.
3.3 添加节点组
3.3.1 第一步
3.3.2 第二步
3.3.3 第三步
3.3.4 第四步
- 配置确认OK,点击创建即可
等待5+分钟,即可看到节点被成功添加.
四、CSI插件-EBS(可选)
默认 EKS已经创建了一个默认的SC来挂载EBS.
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 3h
# more zk.yml
......
volumeClaimTemplates:
- metadata:
name: datadir
namespace: uat-zk
annotations:
kubernetes.io/aws-ebs: "gp2" ## 指定名称即可
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
4.1 IAM配置
- step1. 下载示例模板文件
curl -sSL -o ebs-csi-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/docs/example-iam-policy.json
- step2. 定义环境变量
export AWS_REGION="me-south-1"
- step3. 创建并关联策略
// 1. 创建策略(如果之前有操作过则无需重复创建)
# aws iam create-policy \
--region $AWS_REGION \
--policy-name Amazon_EBS_CSI_Driver \
--policy-document file://ebs-csi-policy.json
// 2. 定义变量
# export EBS_CSI_POLICY_NAME=Amazon_EBS_CSI_Driver
# export EBS_CSI_POLICY_ARN=$(aws --region ${AWS_REGION} iam list-policies --query 'Policies[?PolicyName==`'$EBS_CSI_POLICY_NAME'`].Arn' --output text)
// 3. associate到EKS集群
# eksctl utils associate-iam-oidc-provider \
--region=$AWS_REGION \
--cluster=sg-k8s \
--approve
// 3. 关联策略到EKS集群
# eksctl create iamserviceaccount \
--cluster sg-k8s \
--name ebs-csi-controller-irsa \
--namespace kube-system \
--attach-policy-arn $EBS_CSI_POLICY_ARN \
--override-existing-serviceaccounts \
--approve
4.2 helm
# curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
# chmod 700 get_helm.sh
# ./get_helm.sh
# helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
# helm repo update
4.3 aws-ebs-csi-driver
# helm upgrade --install aws-ebs-csi-driver \
--version=0.9.8 \
--namespace kube-system \
--set serviceAccount.controller.create=false \
--set serviceAccount.snapshot.create=false \
--set enableVolumeScheduling=true \
--set enableVolumeResizing=true \
--set enableVolumeSnapshot=true \
--set serviceAccount.snapshot.name=ebs-csi-controller-irsa \
--set serviceAccount.controller.name=ebs-csi-controller-irsa \
aws-ebs-csi-driver/aws-ebs-csi-driver
# kubectl -n kube-system rollout status deployment ebs-csi-controller
# kubectl get pod -n kube-system -l "app.kubernetes.io/name=aws-ebs-csi-driver,app.kubernetes.io/instance=aws-ebs-csi-driver"
NAME READY STATUS RESTARTS AGE
ebs-csi-controller-65dc9cbfcf-p6h7s 6/6 Running 0 2m
ebs-csi-controller-65dc9cbfcf-pn5vn 6/6 Running 0 2m
ebs-csi-node-228ww 3/3 Running 0 2m
ebs-csi-node-2f45k 3/3 Running 0 2m
4.4 创建sc存储类
-
导航到
dynamic-provisioning
可查看示例配置。aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning
# cat ebs-sc.yml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
# kubectl apply -f ebs-sc.yml
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ebs-sc ebs.csi.aws.com Delete WaitForFirstConsumer false 1m
gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 2d
4.4 使用示例
# more zk.yml
......
volumes:
- name: datadir
hostPath:
path: /data/zook-data
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Riyadh
volumeClaimTemplates:
- metadata:
name: datadir
namespace: uat-zk
annotations:
kubernetes.io/aws-ebs: "ebs-sc"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
标签:csi,QuickStart,创建,--,aws,AWS,ebs,EKS,name
From: https://www.cnblogs.com/jevic/p/16977580.html