经常使用eks集群进行大量的测试工作,但是通过控制台启动集群需要做很多配置,这里整理出快速启动和配置eks集群的方式

配置工具

aws-cli

yum install unzip -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install

eksctl

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin

kubectl

curl -o kubectl https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/1.23.7/2022-06-29/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --short --client

completion

source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
. <(eksctl completion bash)
complete -C '/usr/local/bin/aws_completer' aws

makefile

SHELL := /bin/bash # Use bash syntaxinstall-awscli:curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip -o -q awscliv2.zipsudo ./aws/install --updaterm -r ./awsrm -r awscliv2.zipaws --versioninstall-eksctl:$(eval EKSCTL_VERSION:=v0.111.0)curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/$(EKSCTL_VERSION)/eksctl_Linux_amd64.tar.gz" | tar xz -C /tmpsudo mv /tmp/eksctl /usr/local/bineksctl versioninstall-kubectl:$(eval KUBECTL_VERSION:=v1.25.0)curl -LO "https://dl.k8s.io/release/$(KUBECTL_VERSION)/bin/linux/amd64/kubectl"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectlrm kubectlkubectl version --clientinstall-kustomize:$(eval KUSTOMIZE_VERSION:=3.2.0)wget https://github.com/kubernetes-sigs/kustomize/releases/download/v$(KUSTOMIZE_VERSION)/kustomize_$(KUSTOMIZE_VERSION)_linux_amd64chmod +x kustomize_$(KUSTOMIZE_VERSION)_linux_amd64sudo mv kustomize_$(KUSTOMIZE_VERSION)_linux_amd64 /usr/local/bin/kustomizekustomize versioninstall-yq:$(eval YQ_VERSION:=v4.26.1)wget https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64.tar.gz -O - | tar xzsudo mv yq_linux_amd64 /usr/bin/yqrm install-man-page.shrm yq.1yq --versioninstall-jq:$(eval JQ_VERSION:=1.5+dfsg-2)sudo apt-get install jq=$(JQ_VERSION) -yinstall-terraform:$(eval TERRAFORM_VERSION:=1.2.7)curl "https://releases.hashicorp.com/terraform/$(TERRAFORM_VERSION)/terraform_$(TERRAFORM_VERSION)_linux_amd64.zip" -o "terraform.zip"unzip -o -q terraform.zipsudo install -o root -g root -m 0755 terraform /usr/local/bin/terraformrm terraform.ziprm terraformterraform --versioninstall-helm:curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashhelm versioninstall-python:sudo apt install -q python3.8 -ysudo apt install -q python3-pip -ypython3.8 -m pip install --upgrade pipinstall-python-packages:python3.8 -m pip install -r tests/e2e/requirements.txtinstall-tools: install-awscli install-eksctl install-kubectl install-kustomize install-yq install-jq install-terraform install-helm install-python install-python-packages

创建资源

eks集群手动配置较为繁琐,需要满足权限配置(集群和节点),vpc和子网的要求(ip数量/终端节点),集群安全组配置,还有节点组本身的配置(类型/大小/存储/子网/安全组标签/启动模板/ami/启动脚本等),可以使用工具简化这一过程。

创建集群

eksctl的参数说明

创建一个完全托管的集群,会创建包括vpc/子网/role等等资源在内的所有资源,一键完成,想要使用已有的基础设置配置集群则需要配置文件的方式

eksctl create cluster <cluter-name>

使用已有的vpc和子网创建集群,可以按照官方文档配置参数

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:name: <cluster-name>region: cn-north-1version: "1.23"
iam:withOIDC: true
vpc:clusterEndpoints:publicAccess:  trueprivateAccess: trueid: "vpc-xxxxxxxxxxxxxx"subnets:private:private1:id: "subnet-xxxxxxxxxxxxxx"private2:id: "subnet-xxxxxxxxxxxxxx"public:public1:id: "subnet-xxxxxxxxxxxxxx"public2:id: "subnet-xxxxxxxxxxxxxx"addons:- name: vpc-cniversion: latest- name: corednsversion: latest- name: kube-proxyversion: latestfargateProfiles:- name: eksctl-fargateselectors:- namespace: fargate

创建节点组

增加单个节点IP数量,需要确保使用的vpc cni插件版本大于1.9.0 或 1.10.1。之后可以为节点组指定单个节点的启动pod数量超过实例ip数量的限制,最高110个,但是可以手动调整节点kubelet为更大数量

创建的节点组实际上是一个autoscaling group,不指定ami和启动模板时会选择默认配置启动节点,如果指定了ami需要配置overrideBootstrapCommand,可以指定启动模板

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true

使用配置文件创建托管节点组

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfigmetadata:name: <cluster-name>region: <region>managedNodeGroups:- name: ng-1-workerslabels: { role: workers }instanceType: m5.xlargedesiredCapacity: 10volumeSize: 80privateNetworking: true- name: ng-2-builderslabels: { role: builders }instanceType: m5.2xlargedesiredCapacity: 2volumeSize: 100privateNetworking: true

配置文件中只需要指定cluster名称即可

eksctl create nodegroup -f xxxx.yaml

在私有子网创建节点组,并且修改单个节点pod为60

eksctl create nodegroup \--cluster <cluster-name> \--node-type t3.medium \--max-pods-per-node 60 \--nodes 1 --nodes-max 5 --nodes-min 0 \--node-volume-size 30 --node-volume-type gp3 \--ssh-access --ssh true \--ssh-public-key <key-name> \--node-private-networking false \--enable-ssm

在公有子网创建托管节点组,指定最大pod数量为60,允许ssm和ssh访问

eksctl create nodegroup \--cluster testtemp1 \--node-type t3.small \--nodes 1 --nodes-max 5 --nodes-min 0 \--node-volume-size 30 --node-volume-type gp3  \--max-pods-per-node 60 \--ssh-access  --ssh-public-key cluster-key   \--enable-ssm --dry-run

在公有子网创建资管节点组

eksctl create nodegroup \--cluster xxxxxxx \--node-type t3.medium \--max-pods-per-node 60 \--nodes 1 --nodes-max 3 --nodes-min 0 \--node-volume-size 30 --node-volume-type gp3  \--ssh-access  --ssh-public-key cluster-key   \--enable-ssm  \--managed=false \# -P //私有子网开启

添加插件

$ eksctl create addon --cluster xxxxxxx --name vpc-cni
$ eksctl create addon --cluster xxxxxxx --name coredns
$ eksctl create addon --cluster xxxxxxx --name kube-proxy
$ eksctl get addon  --cluster xxxxxxx
2022-10-22 02:19:41 [ℹ]  Kubernetes version "1.23" in use by cluster "xxxxxxx"
2022-10-22 02:19:41 [ℹ]  getting all addons
2022-10-22 02:19:42 [ℹ]  to see issues for an addon run `eksctl get addon --name <addon-name> --cluster <cluster-name>`
NAME            VERSION                 STATUS  ISSUES  IAMROLE UPDATE AVAILABLE
coredns         v1.8.7-eksbuild.3       ACTIVE  0
kube-proxy      v1.23.7-eksbuild.1      ACTIVE  0               v1.23.8-eksbuild.2
vpc-cni         v1.10.4-eksbuild.1      ACTIVE  0               v1.11.4-eksbuild.1,v1.11.3-eksbuild.1,v1.11.2-eksbuild.1,v1.11.0-eksbuild.1

添加fargate配置

$ eksctl create fargateprofile \--cluster my-cluster \--name my-fargate-profile \--namespace my-kubernetes-namespace \--labels key=value

添加新用户

实际上是向eks集群中名为aws-auth的config map 中增加映射关系

$ eksctl get iamidentitymapping --cluster worklearn
ARN                                                                                                     USERNAME                               GROUPS                                                   ACCOUNT
arn:aws-cn:iam::037047667284:role/eksctl-worklearn-nodegroup-ng-322-NodeInstanceRole-1TM9E1DSSFSRS      system:node:{{EC2PrivateDNSName}}      system:bootstrappers,system:nodes$ eksctl create iamidentitymapping \--cluster xxxxxxx \--region=cn-north-1 \--arn arn:aws-cn:iam::xxxxxxx:role/xxxxxxxx \--group system:masters \--no-duplicate-arns

添加service account

会创建一个cloudformation模板,创建角色并和eks集群中的角色关联起来

eksctl create iamserviceaccount \--cluster xxxxxx \--name xxxxxxx \--namespace kube-system \--attach-policy-arn xxxxxx \--override-existing-serviceaccounts \--region cn-north-1 \--approve

部署驱动

部署ebs-csi

创建ebs-csi-controller-sa

eksctl create iamserviceaccount \--name ebs-csi-controller-sa \--namespace kube-system \--cluster xxxxx \--attach-policy-arn arn:aws-cn:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \--approve \# --role-only \# --role-name AmazonEKS_EBS_CSI_DriverRole

添加ebs csi

eksctl create addon --name aws-ebs-csi-driver \--cluster my-cluster \--service-account-role-arn xxxxxxxxxxxxxxxxx \--force

aws-ebs-csi-driver的使用demo

部署efs-csi

创建sa

curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.jsonaws iam create-policy \--policy-name AmazonEKS_EFS_CSI_Driver_Policy \--policy-document file://iam-policy-example.jsoneksctl create iamserviceaccount \--cluster xxxxxxx \--namespace kube-system \--name efs-csi-controller-sa \--attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_EFS_CSI_Driver_Policy \--approve \--region cn-north-1

下载清单和i修改

kubectl kustomize \"github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr?ref=release-1.4" > efs-driver.yaml

中国区 Amazon 容器镜像注册表

Amazon EKS 会将镜像复制到 AWS 区域 支持的每个 Amazon EKS 中的存储库。您的节点可以通过互联网从以下任何注册表中提取容器镜像

cn-north-1 918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn
cn-northwest-1 961992271922.dkr.ecr.cn-northwest-1.amazonaws.com.cn

修改

sed -i.bak -e 's|us-west-2|cn-north-1|' driver.yaml
sed -i.bak -e 's|602401143452|918309763551|' driver.yaml

!!! 删除清单driver中名为efs-csi-controller-saServiceAccount,并部署

kubectl apply -f driver.yaml

部署ingress-controller

alb ingress controller流程和组件关系

  1. 控制器观察来自 API 服务器的进站事件。如果发现 Ingress 资源满足要求,则将开始创建 AWS 资源。
  2. 为 Ingress 资源创建 ALB。
  3. 为 Ingress 资源中指定的每个后端创建目标组。
  4. 为 Ingress 资源注释中指定的每个端口创建侦听器。如果未指定端口,则将使用合理的默认值(80443)。
  5. 为 Ingress 资源中指定的每个路径创建规则。这将确保指向特定路径的流量将被路由至所创建的正确目标组

下载策略

curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.3/docs/install/iam_policy.jsonsed -i.bak -e 's|arn:aws:|arn:aws-cn:|' iam_policy.jsonaws iam create-policy \--policy-name AWSLoadBalancerControllerIAMPolicy \--policy-document file://iam_policy.json

创建sa

eksctl create iamserviceaccount \--cluster worklearn \--namespace kube-system \--name aws-load-balancer-controller \--attach-policy-arn arn:aws-cn:iam::xxxxxx:policy/AWSLoadBalancerControllerIAMPolicy \--override-existing-serviceaccounts \--region cn-north-1 \--approve

注意:helm中的image版本和yaml的版本不一致一个叫loadbalance-controller,另一个叫alb-controller

helm部署

helm repo add eks https://aws.github.io/eks-charts
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
helm repo update
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \-n kube-system \--set clusterName=george-c1 \--set serviceAccount.create=false \--set serviceAccount.name=aws-load-balancer-controller \--set image.repository=918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/amazon/aws-alb-ingress-controller

手动部署

下载cert-manager

curl -Lo cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
kubectl apply --validate=false -f cert-manager.yaml

部署controller

curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.3/v2_4_3_full.yamlsed -i.bak -e 's|your-cluster-name|<cluster-name>|' ./ingress-controller.yamlkubectl apply -f controller.yaml

aws eks 快速启动和配置相关推荐

  1. aws eks_在生产中配置和使用AWS EKS

    aws eks 到现在,我们已经完成了向Amazon EKS ( 工作地点)的迁移,并且集群已经投入生产. 过去,我已经写了一些要点的简短摘要,您可以在这里找到. 当系统正在处理实际流量时,我有了一些 ...

  2. 在生产中配置和使用AWS EKS

    到现在,我们已经完成了向Amazon EKS ( 工作地点)的迁移,并且集群已经投入生产. 过去,我已经写了一些要点的简短摘要,您可以在这里找到. 当系统正在为实际流量提供服务时,我有了一些额外的信心 ...

  3. 如何配置命令快速启动常用软件

    前言: 上班的时候,每天打开电脑都要用鼠标去点击启动一些常用的软件,例如QQ,wechat等,如果桌面图标比较多,找起来就比较费劲,而且有时候不想把QQ,微信等非工作软件放在桌面,那么这个时候,通过快 ...

  4. Rhel 7 /Centos 7配置快速启动栏启动以Firefox为例

    大多数通过第三方软件包安装的软件,一般是在applications是不具备启动方式的; 这里通过安装最新的firefox来说明如何在application里面创建启动方式; 配置环境: 操作系统: r ...

  5. aws eks_在带aws eks的kubernetes上部署带舵的破折号

    aws eks Today we are going to be talking about Deploying a Dash App on Kubernetes with a Helm Chart ...

  6. 如何统一管理谷歌GKE、AWS EKS和Oracle OKE

    在Rancher出现之前,管理在不同云提供商中运行的kubernetes集群从来都不是一件容易的事.Rancher是什么?它是一个开源的Kubernetes管理平台,用户可以在Rancher上创建对接 ...

  7. 容器编排技术 -- AWS EC2快速入门

    容器编排技术 -- AWS EC2快速入门 前提条件 1.您需要一个AWS账户,访问http://aws.amazon.com获得. 2.安装并配置AWS命令行界面. 3.你需要一个拥有EC2全部权限 ...

  8. (亚马逊云)10分钟-快速启动基于 Odoo 的电商网站

    文章目录 1. 引言 2. 快速启动Odoo电商网站 1. 注册 2. 创建Amazon EC2实例 3. 为Amazon EC2 实例绑定弹性IP地址 4. 获取Odoo登录密码 5. 登入Odoo ...

  9. APC UPS网络管理卡 (AP9606/9617/9618/9619)的快速安装及配置指南

    APC UPS网络管理卡 (AP9606/9617/9618/9619)的快速安装及配置指南 本文说明如何配置APC UPS网络管理卡所需的基本网络参数 在正确使用网络管理卡之前,必须对其基本参数进行 ...

最新文章

  1. 为你分享10篇NLP、CV领域优质论文
  2. IT人士必备五大绿色健康生活用品
  3. i3wm amxier toggle只关闭不开启问题解决
  4. php课设报告致谢_PHP学生管理系统毕业论文设计.doc
  5. 测试鼠标双击_鼠标环境可靠性测试是什么
  6. 力控批量添加变量_力控变量.ppt
  7. Centos7开放及查看端口
  8. Java笔记(十七) 异步任务执行服务
  9. echarts 折线图数据太多会导致卡顿_重新定义数据图表,还有比这个更厉害的吗?...
  10. HDU 5857 - Median ( 查询模拟 + 思路 )
  11. Vue经典开源项目汇总
  12. 注册表右键取得管理员权限
  13. CNN网络实现垃圾分类
  14. SEO采集系统-SEO采集工具自动采集伪原创发布
  15. 离散数学:n个相同的小球,可以放入m个相同的盒子里,允许有空盒,问有多少种不同方法
  16. python爬取qq音乐下载歌曲
  17. 在鹅厂的第5219天,我毕业了...
  18. RV1126RV1109 buildroot 增加串口屏测试
  19. JAVA高级工程师笔试面试题
  20. HTML——选择器(1)

热门文章

  1. 机器人教育在STEM课程中的设计研究
  2. Unix 文件系统的核心目录总结
  3. 解析路飞惊人战斗力由何而来
  4. 使用Heritrix进行主题抓取
  5. 递归求 n 阶勒让德多项式
  6. 一款炫酷Loading动画--加载成功
  7. Odoo 8.0深入浅出开发教程(十) 附录
  8. 为了让人愿意花3000块买口锅,这些高端厨具品牌也是蛮拼的
  9. hive插入表数据以及出现问题的解决
  10. 阿里云_山东鼎信短信的使用(云市场)