DevOps課程-AWS-EKS 2

透過AWS管理介面建置EKS叢集

ZONGRU Li
15 min readOct 6, 2022

手動(UI)建立EKS叢集-Part I

1.先建立EKS IAM Role

  • 用以調用EKS相關的服務身分權限

2.針對Worker Nodes建立VPC

  • 提供給Worker Nodes運行的私有網路空間

3.建置EKS叢集(Master Nodes)

  • EKS叢集建置完成,即代表Master Nodes已開始運行

4.透過kubectl工具連線至EKS叢集

  • 可以從本機端測試kubectl工具來連線至我們的EKS叢集

5.另外再建立EC2 IAM Role用來建立Node Group

  • 為了建置Worker Nodes做準備,建立專門管理Node Group的帳號權限
  • Node Group方式統一管理Worker Nodes

6.建立Node Group並且可以接觸到EKS叢集

  • 透過建立Node Group,i.e.AWS幫我們建立EC2機台來當Worker Nodes
  • 並設定讓這些Worker Nodes可以連接到EKS叢集(i.e.碰觸Master Nodes)

7.為叢集設定Auto-scaling

  • 上述等於建立好完整的叢集,接著設定多少Pods或說多少應用程式時候
  • 透過資源需求自動地增減擴展Worker Nodes數量(也就是EC2實體的數量)

8.透過kubectl工具,實際部署應用程式到EKS上

1.先建立EKS IAM Role

首先登入AWS root帳號進到IAM服務

選到EKS這個AWS的服務

上面展開確認沒問題就

最後看到:

2.針對Worker Nodes建立VPC

如原本已知的,我們每個Region都會有預設defaultVPC

以及其對應的Subnet,Route Table

所以為何需要額外的VPC來供給EKS?

→因為EKS叢集需要獨立的網路設定

EKS基於K8S,而K8S有它自己的網路規則

→預設的VPC沒辦法滿足EKS所需要的網路環境

  • 另外特別注意這邊準備要建立的VPC是提供給EKSWorker Nodes
  • 舉例為何要獨立的網路環境,其中一個簡單的例子就是防火牆
  • 所以到時候這些Worker Nodes需要特別且獨立的網路防火牆規則設定
  • 用以讓master nodesworker nodes兩端之間串通

這邊特別注意到,EKS是運行在由AWS管理的不同的VPC裡,且是在我們的AWS帳號之外的管理下(概念如下圖),而Worker Nodes則是運作在我們AWS帳號管理下的VPC裡(要自己建)

worker <-> master防火牆開通溝通用的PORT防火牆設定
  • Best Practice:設置Public SubnetPrivate Subnet,這個用意是
  • EKS中,當建立K8SService這個Loadbalancer元件後
  • 並且是type即為"LoadBalancer"Server元件時
  • AWS會自動同時建立Cloud Native Loadbalancer元件(AWS就是Elastic Load Balancer元件)
  • 並且K8S會知道是要把這個Cloud Native Loadbalancer建立在Public Subnet
AWS建議的同時開出Private,Public的Subnet

可以另外googleAWSEKSdoc網頁,查看VPC相關:

LINK
  • 所以還要額外新增IAM Role提供給Kubernetes權限來異動VPC設定中的PORT
  • 例如建立了一個Node PortService元件,即代表Worker Node要打開相應的PORT,才能把服務暴露給Cluster之外
  • 對應的就是Subnet中的EC2SG防火牆設定
  • 這也就是為何前面要建立IAMRoleEKS
  • 而這一堆設定都可由AWS建議提供,但是我們也不用完全理解
  • AWStemplate,方便這些設定可以全權交由AWS的搞定
  • 而這個AWStemplate就是AWS CloudFormation來設置
  • AWS CloudFormation也是IaC Tool
  • 透過CloudFormation的template來設置所需要的VPC,SG,ig,等等VPC相關設置

CloudFormation:

其中所需的Template存放在AWS S3bucket

上述需要的Template檔從剛剛的doc文件頁可以取得設定檔URL下載位置:

LINK

拿到以下(怕位置有變,建議從上面連結去拿URL):

https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml

下載得到YAML檔

大概長這樣:

後面還有Private Subnet等設定:

但是大致上用這份AWS產出的預設設定檔就夠了

除了有需要調整諸如IP的範圍等等才需要更改

然後使用在CloudFormationStack:

接著一個確認頁:

大概五分鐘後看還沒建立完,講師是說最後會有22條:

後面看Resources頁面是都好了:

來到Output頁面可以看到有三個大項:

必須要在建置EKS Cluster(Control Plane)的時候記得上面的資訊

到時候建置的時候會需要用到!!!!!!!!

也就是EKS要知道要用哪一個帳號底下的哪一個VPC,Subnet,SG來建置

Note這篇文章完成後補充:

後來發現,這個CloudFormation建立的主要物件雖然顯示以下:

但是實際上Resource還有包含以下某個滿燒錢的東西:

3.建置EKS叢集(Master Nodes)

這邊後來發現應該要用IAM User來建立,並且事前擴增IAM User的EKS相關權限,後面第四步驟"透過kubectl工具連線至EKS叢集"有補充,請注意!

找到EKS服務:

確認大概收費後開始建置:

其中可以特別注意到這一部分:

基本K8SSecret元件,是基於Base64這個不太安全的加密方式

很容易就會洩漏相關實際內容

所以通常需要在K8S Cluster內加裝其他工具

來將Base64加密的Secret元件內容進一步加密

AWS有提供額外的功能(KMS:Key Management Service)來完成

進一步將Secret加密的工作

接著

最後

真的要等個10分鐘多才會建好:

4.透過kubectl工具連線至EKS叢集

如上已經有建立EKSCluster了,到Compute分頁下

這時候我們可以嘗試用kubectl工具去連看看Cluster

這邊有嘗試下載windows對應的k8s kubectl工具:

右上版本換一下:

工具kubectl準備好後,這邊要讓工具連上EKS Cluster方式就是...

建出kubeconfig

首先要先確認以下

#執行以前安裝的aws cli工具指令,確認目前的憑證對應的是EKS建置的Region:
aws configure list

接著可以透過aws cli工具建立我們要用的kubeconfig

#執行以下aws工具指令取得該Region指定的EKS Cluster名稱的kubeconfig檔:
aws eks update-kubeconfig --name eks-cluster-test
產出的kubeconfig檔!

可以大概看看裡面內容:

也就是說這時候可以來跑看看kubectl工具了

赫然發現沒辦法連

後來發現使用aws cli工具的身分是IAM Useradminpig

其產出的kubeconfig可能無法連線

所以針對之前用的IAM User(adminpig)額外擴增EKS權限:

並且改用該帳號來建立EKS Cluster

#也可以確認Cluster資訊:
kubectl cluster-info

總節一下目前有的EKS Cluster資訊:

5.另外再建立EC2 IAM Role用來建立Node Group

這個時候EKS僅僅只有master node,並且是AWS管理

我們要嘗試建立worker node來實際處理工作

這邊有些概念:

  • Worker Nodes是運行WorkerProcess
  • kubelet也是其中一個Worker Process
  • 1.kubelet抑是主要的Process,專門來scheduling,managing Pods
  • 2.kubelet抑是主要的Process,取得Server本身的資源(CPU,Memory…etc),用以分配給Pods
  • 3.kubelet抑是主要的Process,來與AWS上的其他Service溝通!
  • 4.kubelet抑是主要的Process,來與master nodes溝通
  • 所以長在worker nodes(EC2 Instance)上的kubelet需要有權限來做上面的事
  • 也就是要另外建立EC2 IAM Role提供給長在worker nodes上的kubelet

所以登入到AWSroot主帳號去調整IAM,新增Role:

第一個policy(EC2EKS相關Read權限):

第二個policy(ECR的相關權限):

也就是可以去ECRpull image

第三個policy(最後就是EKSCNI相關)權限:

最後下一步

接著確認建立:

6.建立Node Group並且可以接觸到EKS叢集

回到IAM帳號的EKS頁面準備建立Node Group

其他下面都用預設的就next:

接著下面很重要的:

但是我的本機IP是浮動的,有點麻煩就next

注意這個按下去就開始收EC2這兩台的錢了

然後就開始被收兩台EC2的錢錢了....

這時候去EC2的儀表板看:

這時候看到EKS的我們建的Cluster頁面底下的Compute:

這時候可以跑跑kubectl指令

#查看node數量:
kubectl get nodes

這也就代表我們可以在上面擺上pod等元件了!

這時候如果需求上需要更大量機台來應付

可以嘗試點進去Node group:

然後看到:

大概不用半分鐘:

這時候再看就有:

這邊還在建..

這邊還有一個概念要理解的就是這些建出來的worker nodes

已經帶有AWS幫我們一併安裝必要kubernetesWorker軟體:

  1. containerd
  2. kubelet
  3. kube-proxy

我這邊嘗試putty進到一台去看看,這邊特別注意在EC2連線那邊寫root ssh

但實際root進去會跳說請用ec2-user進去

提示請用ec2-user登入
改ec2-user可以正常登入
#確認kubelet服務是否安裝且正常啟動中:
service kubelet status
#同理containerd的安裝與運作:
service containerd status
#另外kubeproxy是pod形式,要從外面用kubectl去看pod確認(在kube-system這個ns):
kubectl get pod -n kube-system -o wide

最後這邊省點錢,先把機台降回去1台看看:

明天繼續上課會講到自動擴展部分

省錢很重要!

參考課程reference

--

--

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet