使用EKS在AWS上轻松设置Kubernetes集群

这是续集。
您可以通过以下链接以PDF格式下载本文,以为我们提供支持。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Kubernetes可以说是最先进和采用最广泛的容器编排平台,可支持数百万个生产应用程序。对于大多数新的Linux和Kubernetes用户而言,主要挑战之一是集群设置。有许多Kubernetes集群安装和配置指南,但这是有关使用Amazon EKS在AWS云环境中设置Kubernetes集群的第一本指南。

如果您不熟悉Amazon EKS,它是一项托管服务,可轻松在AWS上运行Kubernetes,而无需安装,操作或维护自己的Kubernetes控制平面或节点。在多个可用区中运行Kubernetes控制平面实例以确保高可用性。 Amazon EKS与Kubernetes社区版本完全兼容,因此您可以轻松地将标准Kubernetes应用程序迁移到Amazon EKS,而无需更改代码。

Amazon EKS通过自动检测和替换不正常的控制平面实例来消除高可用性问题。它还使通过自动版本进行升级变得更加容易。 Amazon EKS与许多AWS服务集成,并为以下应用程序提供可扩展性和安全性:

  • Amazon ECR用于容器图像
  • 弹性负载平衡以实现负载平衡
  • IAM进行身份验证
  • Amazon VPC隔离

如何使用EKS在AWS上部署Kubernetes集群

以下部分详细说明了使用Amazon EKS托管服务在AWS上安装Kubernetes集群的过程。安装图如下所示:

步骤1:安装和配置AWS CLI工具

安装基于命令行,因此您需要设置AWS CLI工具。这是在本地工作站计算机上完成的。我们的安装同时针对Linux和macOS。

--- Install AWS CLI on macOS ---
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

--- Install AWS CLI on Linux ---
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

然后,您可以使用以下命令检查已安装的AWS CLI的版本:

$ aws --version
aws-cli/2.0.38 Python/3.7.3 Linux/4.18.0-193.6.3.el8_2.x86_64 exe/x86_64.centos.8

配置AWS CLI凭证

安装后,您需要设置AWS CLI凭证。使用aws configure命令来设置您的AWS CLI安装以供一般使用。

$ aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]: json

有关AWS CLI的更多信息, 〜/ .aws 目录:

$ ls ~/.aws
config
credentials

步骤2:在Linux上安装eksctl | Mac OS

eksctl 一个简单的CLI工具,用于在AWS上创建EKS集群。该工具使用Go语言编写,并使用CloudFormation。使用此工具,您可以在数分钟内启动并运行集群。

在撰写本文时,它具有以下功能:

  • 创建,获取,列出和删除集群
  • 创建,清空和删除节点组
  • 缩放节点组
  • 更新集群
  • 使用自定义AMI
  • 配置VPC网络
  • 配置对API端点的访问
  • GPU节点组支持
  • 竞价型实例和混合实例
  • IAM管理和附加政策
  • 列出集群Cloudformation堆栈
  • 安装coredns
  • 编写集群kubeconfig文件

使用以下命令在您的Linux或macOS计算机上安装eksctl工具。

--- Linux ---
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

--- macOS ---
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew tap weaveworks/tap
brew install weaveworks/tap/eksctl
brew upgrade eksctl && brew link --overwrite eksctl # When upgrading

使用以下命令测试安装是否成功:

$ eksctl version
0.25.0

启用外壳补全:

--- Bash ---
echo ". <(eksctl completion bash)" >> ~/.bashrc

--- Zsh ---
mkdir -p ~/.zsh/completion/
eksctl completion zsh > ~/.zsh/completion/_eksctl
# and put the following in ~/.zshrc:
fpath=($fpath ~/.zsh/completion)

# Note if you're not running a distribution like oh-my-zsh you may first have to enable autocompletion:
autoload -U compinit
compinit

第3步:在Linux上安装和配置kubectl | Mac OS

Kubectl 命令行工具用于从命令行界面控制Kubernetes集群。在终端中运行以下命令以安装该工具。

--- Linux ---
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.7/2020-07-08/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin

--- macOS ---
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.7/2020-07-08/bin/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin

安装kubectl后,可以使用以下命令检查版本。

$ kubectl version --short --client
Client Version: v1.17.7-eks-bffbac

kubectl工具查找名为config的文件 $ HOME / .kube 目录。您还可以通过设置KUBECONFIG环境变量或设置–kubeconfig标志来指定其他kubeconfig文件。

步骤4:创建和计算Amazon EKS集群

设置所有依赖项后,您可以使用compute选项创建一个Amazon EKS集群以运行您的微服务应用程序。您将能够利用最新的EKS功能,因为它将执行Amazon EKS上可用的最新Kubernetes版本的安装。

您可以选择使用一个计算选项创建集群,也可以在创建集群后添加其他选项。有两个标准计算选项。

  • AWS Fargate:在AWS Fargate中创建集群以仅运行Linux应用程序。 AWS Fargate只能与Amazon EKS一起使用 一些地区
  • 受管节点:在Amazon EC2实例上运行Linux应用程序。

使用EKS在AWS上轻松设置Kubernetes集群

此设置将执行运行Kubernetes版本的EKS集群的安装 1.17 使用托管的EC2计算节点。这些是我的集群的详细信息:

  • 地区:爱尔兰(eu-west-1
  • 集群名称: cs-dev-eks-群集
  • 版本: 1.17 -查看全部 提供EKS版本
  • 节点类型: t3.medium -查看全部 AWS节点类型 可用的
  • 节点总数(对于静态ASG): 2
  • ASG最大节点数:
  • 最小ASG节点: 1个
  • 用于节点的SSH公钥(从本地路径导入或使用现有的EC2密钥对):〜/ .ssh / eks.pub
  • 将节点组网络设为私有
  • 让eksctl在〜/ .kube / eksctl / clusters目录下管理集群凭证。
eksctl create cluster 
--version 1.17 
--name prod-eks-cluster 
--region eu-west-1 
--nodegroup-name eks-ec2-linux-nodes 
--node-type t3.medium 
--nodes 2 
--nodes-min 1 
--nodes-max 3 
--ssh-access 
--ssh-public-key ~/.ssh/eks.pub 
--managed 
--auto-kubeconfig 
--node-private-networking 
--verbose 3

eksctl安装程序将自动创建和配置您的VPC,Internet网关,NAT网关和路由表。

使用EKS在AWS上轻松设置Kubernetes集群

子网:

使用EKS在AWS上轻松设置Kubernetes集群

请耐心等待,因为安装可能需要一些时间。

[ℹ]  eksctl version 0.25.0
[ℹ]  using region eu-west-1
[ℹ]  setting availability zones to [eu-west-1a eu-west-1c eu-west-1b]
[ℹ]  subnets for eu-west-1a - public:192.168.0.0/19 private:192.168.96.0/19
[ℹ]  subnets for eu-west-1c - public:192.168.32.0/19 private:192.168.128.0/19
[ℹ]  subnets for eu-west-1b - public:192.168.64.0/19 private:192.168.160.0/19
[ℹ]  using SSH public key "/Users/jkmutai/.cheat/.ssh/eks.pub" as "eksctl-prod-eks-cluster-nodegroup-eks-ec2-linux-nodes-52:ad:b5:4f:a6:01:10:b6:c1:6b:ba:eb:5a:fb:0c:b2"
[ℹ]  using Kubernetes version 1.17
[ℹ]  creating EKS cluster "prod-eks-cluster" in "eu-west-1" region with managed nodes
[ℹ]  will create 2 separate CloudFormation stacks for cluster itself and the initial managed nodegroup
[ℹ]  if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=eu-west-1 --cluster=prod-eks-cluster'
[ℹ]  CloudWatch logging will not be enabled for cluster "prod-eks-cluster" in "eu-west-1"
[ℹ]  you can enable it with 'eksctl utils update-cluster-logging --region=eu-west-1 --cluster=prod-eks-cluster'
[ℹ]  Kubernetes API endpoint access will use default of {publicAccess=true, privateAccess=false} for cluster "prod-eks-cluster" in "eu-west-1"
[ℹ]  2 sequential tasks: { create cluster control plane "prod-eks-cluster", 2 sequential sub-tasks: { no tasks, create managed nodegroup "eks-ec2-linux-nodes" } }
[ℹ]  building cluster stack "eksctl-prod-eks-cluster-cluster"
[ℹ]  deploying stack "eksctl-prod-eks-cluster-cluster"
[ℹ]  building managed nodegroup stack "eksctl-prod-eks-cluster-nodegroup-eks-ec2-linux-nodes"
[ℹ]  deploying stack "eksctl-prod-eks-cluster-nodegroup-eks-ec2-linux-nodes"
[ℹ]  waiting for the control plane availability...
[✔]  saved kubeconfig as "/Users/jkmutai/.kube/eksctl/clusters/prod-eks-cluster"
[ℹ]  no tasks
[✔]  all EKS cluster resources for "prod-eks-cluster" have been created
[ℹ]  nodegroup "eks-ec2-linux-nodes" has 4 node(s)
[ℹ]  node "ip-192-168-21-191.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-35-129.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-49-234.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-78-146.eu-west-1.compute.internal" is ready
[ℹ]  waiting for at least 1 node(s) to become ready in "eks-ec2-linux-nodes"
[ℹ]  nodegroup "eks-ec2-linux-nodes" has 4 node(s)
[ℹ]  node "ip-192-168-21-191.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-35-129.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-49-234.eu-west-1.compute.internal" is ready
[ℹ]  node "ip-192-168-78-146.eu-west-1.compute.internal" is ready
[ℹ]  kubectl command should work with "/Users/jkmutai/.kube/eksctl/clusters/prod-eks-cluster", try 'kubectl --kubeconfig=/Users/jkmutai/.kube/eksctl/clusters/prod-eks-cluster get nodes'
[✔]  EKS cluster "prod-eks-cluster" in "eu-west-1" region is ready

要列出可用的群集,请使用以下命令。

$ eksctl get cluster
NAME			REGION
prod-eks-cluster	eu-west-1

产生的使用 kubeconfig 用于检查安装是否成功的文件。

$ kubectl --kubeconfig=/Users/jkmutai/.kube/eksctl/clusters/prod-eks-cluster get nodes
NAME                                           STATUS   ROLES    AGE   VERSION
ip-192-168-21-191.eu-west-1.compute.internal   Ready       18m   v1.17.9-eks-4c6976
ip-192-168-35-129.eu-west-1.compute.internal   Ready       14m   v1.17.9-eks-4c6976
ip-192-168-78-146.eu-west-1.compute.internal   Ready       14m   v1.17.9-eks-4c6976

$ kubectl --kubeconfig=/Users/jkmutai/.kube/eksctl/clusters/prod-eks-cluster get pods -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   aws-node-254fk             1/1     Running   0          19m
kube-system   aws-node-nmjwd             1/1     Running   0          14m
kube-system   aws-node-z47mq             1/1     Running   0          15m
kube-system   coredns-6987776bbd-8s5ct   1/1     Running   0          14m
kube-system   coredns-6987776bbd-bn5js   1/1     Running   0          14m
kube-system   kube-proxy-79bcs           1/1     Running   0          14m
kube-system   kube-proxy-bpznt           1/1     Running   0          15m
kube-system   kube-proxy-xchxs           1/1     Running   0          19m

获取有关正在使用的节点组的信息。

$ eksctl get nodegroup --cluster prod-eks-cluster
CLUSTER			NODEGROUP		CREATED			MIN SIZE	MAX SIZE	DESIRED CAPACITY	INSTANCE TYPE	IMAGE ID
prod-eks-cluster	eks-ec2-linux-nodes	2020-08-11T19:21:46Z	1		4		3			t3.medium

创建具有现有专用子网的集群。

如果要使用现有的公共子网和私有子网,

eksctl create cluster 
  --version 1.17 
  --name prod-eks-cluster 
  --region eu-west-1 
  --nodegroup-name eks-ec2-linux-nodes 
  --node-type t3.medium 
  --nodes 2 
  --nodes-min 1 
  --nodes-max 3 
  --ssh-access 
  --ssh-public-key ~/.ssh/eks.pub 
  --managed 
  --vpc-private-subnets=subnet-0597dd879c602d516,subnet-06dcc9817981d25db,subnet-0c4a73dfb9857be6a 
  --vpc-public-subnets=subnet-025b7029b62f7f922,subnet-03d1c9ee286b5e9e2,subnet-04218d8a1bf2acb11 
  --auto-kubeconfig 
  --node-private-networking 
  --verbose 3

删除EKS集群

如果删除EKS集群,则必须使用 删除eksctl 命令。

$ eksctl delete cluster --region=eu-west-1 --name=prod-eks-cluster

删除过程的输出如下所示:

[ℹ]  eksctl version 0.25.0
[ℹ]  using region eu-west-1
[ℹ]  deleting EKS cluster "prod-eks-cluster"
[ℹ]  deleted 0 Fargate profile(s)
[ℹ]  cleaning up AWS load balancers created by Kubernetes objects of Kind Service or Ingress
[ℹ]  2 sequential tasks: { delete nodegroup "eks-ec2-linux-nodes", delete cluster control plane "prod-eks-cluster" [async] }
[ℹ]  will delete stack "eksctl-prod-eks-cluster-nodegroup-eks-ec2-linux-nodes"
[ℹ]  waiting for stack "eksctl-prod-eks-cluster-nodegroup-eks-ec2-linux-nodes" to get deleted
[ℹ]  will delete stack "eksctl-prod-eks-cluster-cluster"
[✔]  all cluster resources were deleted

在使用EKS服务在AWS上完成Kubernetes集群的配置之前,我将使用其他配置来更新本文。

类似指南:

使用Kuberadm在Ubuntu 20.04上安装Kubernetes集群

在CentOS 7上使用kubeadm安装Kubernetes集群

在OpenShift和Kubernetes中检查容器/容器指标

使用Kompose将Docker Compose应用程序迁移到Kubernetes

这是续集。
您可以通过以下链接以PDF格式下载本文,以为我们提供支持。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Sidebar