首页 > 其他分享 >AWS EKS-QuickStart-Deployment

AWS EKS-QuickStart-Deployment

时间:2022-12-13 02:33:05浏览次数:73  
标签:csi QuickStart 创建 -- aws AWS ebs EKS name

EKS

Amazon Elastic Kubernetes Service (Amazon EKS) 是一项托管服务,可用于在 上运行 AWSKubernetes,而无需安装、操作和维护您自己的 Kubernetes 控制层面或节点。Kubernetes 是一个用于实现容器化应用程序的部署、扩展和管理的自动化的开源系统.

一.前置准备

1.1 VPC

复制并保存VPC-ID: vpc-0ff08cccc0f71e42c

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114165139379.png

1.2 子网设计

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114165516363.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114171754224.png

  • Node节点子网:
    • 10.48.2.0/24 a可用区
    • 10.48.3.0/24 b可用区
  • Pod子网:
    • 10.48.128.0/18 a可用区
    • 10.48.192.0/18 a可用区
  • serviceSubnet: (内部定义使用,无需创建此子网)
    • 10.253.0.0/16

记录NodeSubnet,PodSubnet对应的子网ID、CIDR、可用区注意:务必要一一对应

1.3 访问密钥

  • 对于基础设施资源管理,建议使用独立的子账户来进行相关操作.
  • 因此需要创建对应子账户并开启API访问、授权管理员权限;
  • 简要操作步骤如下:(如果已有账号只需要创建密钥即可.)
    • 登录主账号,搜索IAM服务
    • 点击 用户 根据提示一步步创建 注意: 选择管理员授权、运行API、控制台操作
    • 最后点击下载 .csv 的账号文件即可.
    • 再次点击刚刚创建的用户,如下图所示 创建访问密钥。下载访问密钥文件留存.

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114170351901.png

1.4 命令行配置(管理节点)

二、部署控制面板

2.1 初始化配置文件

首先,创建以下文件命名可自定义,这里选择使用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 查看到详细的执行信息

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114174607272.png

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的安全组;请记录并保存

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114180709453.png

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 节点实例

  • 可导入已有密钥对或者创建一个新的密钥对

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114183654666.png

3.2 创建启动模板

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114183948450.png

  • 注意: 请不要直接创建启动模板,因为模板包含了EKS的一些认证相关的配置.因此使用前面初始化后的节点组模板来创建即可.
  • 创建自定义模板:
    • 调整的配置项有:
      • 描述信息
      • 实例类型(EC2)
      • 密钥对(用于登录node节点EC2实例)
      • 安全组(使用EKS创建的安全组)
      • 存储卷,(新增了一个数据盘)
      • 资源标签: 定义实例名称、其他自定义值、结算优惠标签(注意勾选值).

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114184541820.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114184714591.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114184934751.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114185059108.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114185400796.png

确认以上信息无误后,点击创建模板版本即可.

3.3 添加节点组

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114185919662.png

3.3.1 第一步

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114190105656.png

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114190413443.png

3.3.2 第二步

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114191044999.png

3.3.3 第三步

https://raw.githubusercontent.com/jevic/images/master/typora/image-20211114192430938.png

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存储类

# 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

相关文章

  • AWS-自建集群K8s-Master控制面板
    control-planeinit-kubeadm.yaml#catinit-kubeadm.yamlapiVersion:kubeadm.k8s.io/v1beta3bootstrapTokens:-groups:-system:bootstrappers:kubeadm:defaul......
  • AWS-自建集群K8s-Calico部署
    CalicoInstall镜像下载dockerpulldocker.io/calico/cni:v3.24.5dockerpulldocker.io/calico/node:v3.24.5dockerpulldocker.io/calico/kube-controllers:v3.24.......
  • RFO SIG:openEuler AWS AMI 制作详解
    作者简介王瀚兴,SUSE软件工程师,主要负责Rancher产品线相关的研发工作。欧拉开源社区的RFOSIG正在努力将openEuler与Rancher整合,以推动社区的云原生版图发展。而op......
  • aws 强制 开启 MFA
    创建一个策略{"Version":"2012-10-17","Statement":[{"Sid":"AllowViewAccountInfo","Effect":"Allow","Action"......
  • SSH 连接AWS
    左侧导航选择“密钥对”从本地导入.pub公钥通过ssh命令连接AWS服务器C:\\Users\\Administrator\\.ssh\\id_rsaXXXX.ap-southeast-1.compute.amazonaws.com为AWS的......
  • 云计算——实验3:AWS实验-EC2操作
    本次实验属于验证型实验,通过本次实验学生将掌握以下内容:1、EC2免费实例创建方法;2、EC2实例SSH连接以及命令使用。我使用阿里云进行注册和远程连接,aws需要使用信用卡,国......
  • 集群部署看过来,低代码@AWS智能集群的架构与搭建方案
    为了帮助充分利用AWS的托管服务快速构建起一套集群环境,彻底去掉“单一故障点”,实现最高的可用性,我们准备了《低代码智能集群@AWS的架构与搭建方案》看完本文,带你掌握“基于n......
  • 记录使用 aws lambda +apigateway 过程中遇到的问题
    我希望创建一个api-gatewayhttpapi,把$default路由全发给一个lambda函数。SAM配置:...Events:ExplicitApi:#warning:createsapublicendpoint......
  • AWS上DevOps实验(二)--- 使用Terraform创建VPC网络
    从本文档起,作者计划在AWS上做一系列DevOps/IaC相关实验,本文是第二篇,使用Terraform创建VPC网络。本次实验架构图Terraform代码执行主文件main.tf#terraformcodetod......
  • 集群部署看过来,低代码@AWS智能集群的架构与搭建方案
    为了帮助充分利用AWS的托管服务快速构建起一套集群环境,彻底去掉“单一故障点”,实现最高的可用性,我们准备了《低代码智能集群@AWS的架构与搭建方案》看完本文,带你掌握“基于......