EKS 101 动手实验(一)创建EKS集群

更新到EKS 1.21版本 @2021-10 宁夏区域测试通过

快速跳转链接:

一、工具准备

1、Windows下安装EKS客户端

首先安装好AWS CLI。eksctl的安装可通过choco包管理工具进行。先使用管理员权限打开powershell,执行:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

即可安装好choco。然后在cmd下用管理员权限安装:

choco install -y eksctl 

很多日常软件都可以后续执行choco install安装。

2、Linux下安装EKS客户端

首先安装好AWS CLI。在Linux下安装eks工具,包括eksctl和kubectl两个。执行如下命令:

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 /bin
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.20.4/2021-04-12/bin/linux/amd64/kubectl
chmod 755 kubectl
sudo mv kubectl /bin
eksctl version

安装完毕后即可看到eksctl版本,同时kubectl也下载完毕。

3、MacOS下安装EKS客户端

首先安装好AWS CLI。安装homebrew包管理工具。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew tap weaveworks/tap
brew install weaveworks/tap/eksctl
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.20.4/2021-04-12/bin/darwin/amd64/kubectl
chmod 755 kubectl
sudo mv kubectl /bin
eksctl version

二、创建集群并配置Dashboard图形界面

1、创建集群

执行如下命令。注意如果是多人实验,需要更改EKS集群的名字避免冲突。

eksctl create cluster \
--name=eksworkshop \
--version=1.21 \
--node-type m5.2xlarge \
--managed \
--alb-ingress-access \
--region=ap-southeast-1

此过程需要10-15分钟才可以创建完毕。执行如下命令查询节点。

kubectl get node

返回节点如下表示正常。

NAME                                               STATUS   ROLES   AGE     VERSION
ip-192-168-76-61.ap-southeast-1.compute.internal   Ready   <none>   5m10s   v1.20.4-eks-6b7464
ip-192-168-8-47.ap-southeast-1.compute.internal   Ready   <none>   5m10s   v1.20.4-eks-6b7464

2、部署K8S原生控制面板

AWS的Github上官方的Workshop采用的是直接调用Github上的yaml文件,在国内网络条件下访问可能会失败。因此本实验按照中国区可以直接操作的提供流程,提供了在中国区S3可以访问的yaml文件。请执行如下命令。

kubectl apply -f https://myworkshop-lxy.s3.cn-north-1.amazonaws.com.cn/eksworkshop120/kubernetes-dashboard.yaml

部署需要等待3-5分钟。访问Dashboard的身份验证是通过token完成,执行以下命令获取token。注意需要手工替换EKS集群名称和region名称为实际操作环境。

aws eks get-token --cluster-name eksworkshop --region ap-southeast-1 | jq -r '.status.token'

使用如下命令启动Proxy将Dashboard的访问映射出来。

kubectl proxy

使用Chrome等不受安全策略限制的浏览器,在实验者的本机上访问如下地址(部分Firefox受到安全策略限制访问有兼容问题)。选择使用token登录,然后输入上一步获取的token,即可访问dashboard.

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

至此Dashboard配置完成。

3、删除Dashboard服务(可选)

测试完成后,如果需要删除Dashboard,执行如下命令。

kubectl delete -f https://s3.cn-north-1.amazonaws.com.cn/myworkshop-lxy/eksworkshop/kubernetes-dashboard.yaml

本命令为可选,建议保留Dashboard,在后续实验中也可以继续通过Dashboard做监控。

三、部署Nginx测试应用并使用Loadbalancer模式对外暴露服务

1、创建服务

这个测试应用将在当前集群的两个node上创建nginx应用pod,并使用default namespace运行Service,然后通过NLB对外发布在80端口。

本实验所使用的ngix-nlb.yaml配置文件与与Github上官方版本的配置有所不同,因为K8S的API版本从beta v1演进到v1,因此需要修改API Version,且加入selector配置。本实验提供的文件已经完成上述修正。

执行如下命令。

kubectl apply -f https://s3.cn-north-1.amazonaws.com.cn/myworkshop-lxy/eksworkshop/nginx-nlb.yaml 

查看创建出来的POD节点,执行如下命令。

kubectl get pods

返回结果如下Running表示运行正常。

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-85ff79dd56-8l8wn 1/1 Running 0 2m

确认部署执行如下命令。

kubectl get deployment nginx-deployment

返回结果如下,状态是Available表示工作正常。

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment 1/1 1 1 9m12s

2、测试从浏览器访问

本实验使用的是NLB,创建NLB过程需要3-5分钟。此时可以通过AWS EC2控制台,进入Load Balance负载均衡界面,可以看到NLB处于Provisioning创建中的状态。等待其变成Active状态。接下来进入NLB的listener界面,可以看到NLB将来自80端口的流量转发到了k8s-default-servicen这个target group。点击进入Target Group,可以看到当前两个node的状态是initial,等待其健康检查完成,变成healthy状态,即可访问。

查看运行中的Service,执行如下命令。

kubectl get service service-nginx -o wide 

返回结果如下。其中的ELB域名地址就是对外访问入口。

NAME            TYPE           CLUSTER-IP      EXTERNAL-IP                                                                             PORT(S)        AGE   SELECTOR
service-nginx LoadBalancer 10.100.224.17 acba538c728d64a8db295c3f14b0ee01-1911011890f36ddc.elb.cn-northwest-1.amazonaws.com.cn 80:31920/TCP 11m app=nginx

用浏览器访问ELB地址,即可验证应用启动结果。

3、测试从命令行访问(可选)

也可以在命令行上通过curl命令访问。如下命令是通过命令行访问。

NLB=$(kubectl get service service-nginx -o json | jq -r '.status.loadBalancer.ingress[].hostname')
echo $NLB
curl -m3 -v $NLB

由此即可访问到测试应用,看到 Welcome to nginx! 即表示访问成功。

4、删除服务

执行如下命令:

kubectl delete -f https://s3.cn-north-1.amazonaws.com.cn/myworkshop-lxy/eksworkshop/nginx-nlb.yaml

至此服务删除完成。

四、参考文档

注:本文测试命令和脚本以ap-southeast-1新加坡区域编写,在2021年10月针对EKS 1.21版本中国宁夏区域测试通过。

AWS GCR Workshop https://github.com/aws-samples/eks-workshop-greater-china/tree/master/china/2020_EKS_Launch_Workshop

Dashboard安装 https://github.com/kubernetes/dashboard