DevOps課程-AWS-EKS 2
手動(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都會有預設default的VPC
以及其對應的Subnet,Route Table
所以為何需要額外的VPC來供給EKS?
→因為EKS叢集需要獨立的網路設定
→EKS基於K8S,而K8S有它自己的網路規則
→預設的VPC沒辦法滿足EKS所需要的網路環境
- 另外特別注意這邊準備要建立的VPC是提供給EKS的Worker Nodes的
- 舉例為何要獨立的網路環境,其中一個簡單的例子就是防火牆
- 所以到時候這些Worker Nodes需要特別且獨立的網路防火牆規則設定
- 用以讓master nodes與worker nodes兩端之間串通
這邊特別注意到,EKS是運行在由AWS管理的不同的VPC裡,且是在我們的AWS帳號之外的管理下(概念如下圖),而Worker Nodes則是運作在我們AWS帳號管理下的VPC裡(要自己建)
- Best Practice:設置Public Subnet與Private Subnet,這個用意是
- 在EKS中,當建立K8S的Service這個Loadbalancer元件後
- 並且是type即為"LoadBalancer"的Server元件時
- AWS會自動同時建立Cloud Native Loadbalancer元件(AWS就是Elastic Load Balancer元件)
- 並且K8S會知道是要把這個Cloud Native Loadbalancer建立在Public Subnet
可以另外google到AWS的EKS的doc網頁,查看VPC相關:
- 所以還要額外新增IAM Role提供給Kubernetes權限來異動VPC設定中的PORT
- 例如建立了一個Node Port的Service元件,即代表Worker Node要打開相應的PORT,才能把服務暴露給Cluster之外
- 對應的就是Subnet中的EC2的SG防火牆設定
- 這也就是為何前面要建立IAM的Role給EKS
- 而這一堆設定都可由AWS建議提供,但是我們也不用完全理解
- AWS有template,方便這些設定可以全權交由AWS的搞定
- 而這個AWS的template就是AWS CloudFormation來設置
- AWS CloudFormation也是IaC Tool
- 透過CloudFormation的template來設置所需要的VPC,SG,ig,等等VPC相關設置
CloudFormation:
其中所需的Template存放在AWS S3的bucket
上述需要的Template檔從剛剛的doc文件頁可以取得設定檔URL下載位置:
拿到以下(怕位置有變,建議從上面連結去拿URL):
大概長這樣:
後面還有Private Subnet等設定:
但是大致上用這份AWS產出的預設設定檔就夠了
除了有需要調整諸如IP的範圍等等才需要更改
然後使用在CloudFormation的Stack:
接著一個確認頁:
大概五分鐘後看還沒建立完,講師是說最後會有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服務:
確認大概收費後開始建置:
其中可以特別注意到這一部分:
基本K8S有Secret元件,是基於Base64這個不太安全的加密方式
很容易就會洩漏相關實際內容
所以通常需要在K8S Cluster內加裝其他工具
來將Base64加密的Secret元件內容進一步加密
而AWS有提供額外的功能(KMS:Key Management Service)來完成
進一步將Secret加密的工作
接著
最後
真的要等個10分鐘多才會建好:
4.透過kubectl工具連線至EKS叢集
如上已經有建立EKS的Cluster了,到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
可以大概看看裡面內容:
也就是說這時候可以來跑看看kubectl工具了
後來發現使用aws cli工具的身分是IAM User →adminpig
其產出的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是運行Worker的Process
- 而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
所以登入到AWS的root主帳號去調整IAM,新增Role:
第一個policy(EC2與EKS相關Read權限):
第二個policy(ECR的相關權限):
也就是可以去ECR做pull image
第三個policy(最後就是EKS的CNI相關)權限:
最後下一步
接著確認建立:
6.建立Node Group並且可以接觸到EKS叢集
回到IAM帳號的EKS頁面準備建立Node Group
其他下面都用預設的就next:
接著下面很重要的:
但是我的本機IP是浮動的,有點麻煩就next
然後就開始被收兩台EC2的錢錢了....
這時候去EC2的儀表板看:
這時候看到EKS的我們建的Cluster頁面底下的Compute:
這時候可以跑跑kubectl指令
#查看node數量:
kubectl get nodes
這也就代表我們可以在上面擺上pod等元件了!
這時候如果需求上需要更大量機台來應付
可以嘗試點進去Node group:
然後看到:
大概不用半分鐘:
這時候再看就有:
這邊還有一個概念要理解的就是這些建出來的worker nodes上
已經帶有AWS幫我們一併安裝必要kubernetes的Worker軟體:
- containerd
- kubelet
- kube-proxy
我這邊嘗試putty進到一台去看看,這邊特別注意在EC2連線那邊寫root ssh
但實際root進去會跳說請用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台看看:
明天繼續上課會講到自動擴展部分