組態kubectl與AWS EKS叢集的連線,首先需要更新kubeconfig檔案,確保kubectl能夠正確存取叢集。接著,透過kubectl get svc驗證連線是否成功,並使用kubectl get pods和kubectl get nodes指令分別檢視Pod和節點資訊,掌握叢集的運作狀態。佈署應用程式到EKS叢集,可以使用kubectl create deployment指令,指定應用程式名稱和映像檔。佈署完成後,透過kubectl get deployment和kubectl get pods指令確認佈署狀態和Pod資訊。檢視Pod日誌可以使用kubectl logs指令,方便排查應用程式問題。此外,設定IAM使用者和許可權對於EKS叢集的安全性至關重要,需要根據不同角色的需求組態相應的許可權。
組態kubectl以與AWS EKS協同運作
在成功建立Amazon Elastic Kubernetes Service(EKS)叢集後,我們需要組態kubectl命令列工具,使其能夠與EKS叢集進行通訊。kubectl是Kubernetes的命令列介面,用於對Kubernetes叢集執行各種操作。
更新kubeconfig檔案
kubectl使用一個名為.kube/config的檔案來儲存叢集的組態資訊,包括API伺服器的端點、認證引數等。AWS CLI提供了一個便捷的方式來更新這個組態檔案。我們可以使用aws eks update-kubeconfig命令來完成這一步驟,如清單14-5所示。
清單14-5:透過AWS CLI更新kubeconfig檔案
aws configure
aws sts get-caller-identity
aws eks update-kubeconfig --region us-east-2 --name myeks01
kubectl version
在執行上述命令之前,我們需要確保AWS CLI的組態是有效的。首先,我們執行aws configure來組態AWS CLI的引數,包括存取金鑰ID、秘密存取金鑰、預設區網域名稱等。接著,執行aws sts get-caller-identity來驗證當前AWS CLI的身份資訊。
shiva-eks@wks01:~$ aws configure
AWS Access Key ID [None]: <SNIP>
AWS Secret Access Key [None]: <SNIP>
Default region name [None]: us-east-2
Default output format [None]:
shiva-eks@wks01:~$
shiva-eks@wks01:~$ aws sts get-caller-identity
{
"UserId": "AIDAQAFVWO7Y2NBGEQR6K",
"Account": "000381057009",
"Arn": "arn:aws:iam::000381057009:user/shiva"
}
shiva-eks@wks01:~$
shiva-eks@wks01:~$ aws eks update-kubeconfig --region us-east-2 --name myeks01
Added new context arn:aws:eks:us-east-2:000381057009:cluster/myeks01 to /home/shiva-eks/.kube/config
shiva-eks@wks01:~$
#### 內容解密:
aws configure:組態AWS CLI的命令,根據提示輸入存取金鑰、預設區域等資訊。aws sts get-caller-identity:驗證當前AWS CLI的使用者身份。aws eks update-kubeconfig:更新.kube/config檔案,將EKS叢集的組態資訊加入其中。--region us-east-2:指定EKS叢集所在的AWS區域。--name myeks01:指定EKS叢集的名稱。
驗證kubectl連線
更新完.kube/config檔案後,我們可以執行kubectl version命令來驗證kubectl是否能夠正確連線到EKS叢集,如清單14-6所示。
清單14-6:驗證kubectl連線
kubectl get svc
執行結果如下:
shiva-eks@wks01:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 10h
shiva-eks@wks01:~$
#### 內容解密:
kubectl get svc:取得當前叢集中所有服務的資訊。- 輸出結果顯示了預設的
kubernetes服務,表明kubectl已成功連線到EKS叢集。
取得叢集資訊
接下來,我們可以使用kubectl命令來取得叢集中的各種資源資訊,例如Pod、節點等。清單14-7展示瞭如何取得所有名稱空間下的Pod資訊。
清單14-7:取得所有名稱空間下的Pod
kubectl get pods --all-namespaces
執行結果如下:
shiva-eks@wks01:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system aws-node-bpbsn1 1/1 Running 0 9h
kube-system aws-node-r4rhw1 1/1 Running 0 9h
kube-system coredns-647484dc8b-5pfqr 1/1 Running 0 10h
kube-system coredns-647484dc8b-qrrd4 1/1 Running 0 10h
kube-system kube-proxy-cvqfp 1/1 Running 0 9h
kube-system kube-proxy-mdgw9 1/1 Running 0 9h
shiva-eks@wks01:~$
#### 內容解密:
kubectl get pods --all-namespaces:取得所有名稱空間下的Pod資訊。- 輸出結果顯示了系統名稱空間下的各個Pod,包括
aws-node、coredns、kube-proxy等。
取得節點資訊
我們還可以使用kubectl get nodes命令來取得叢集中的節點資訊,如清單14-8所示。
清單14-8:取得節點資訊
kubectl get nodes
執行結果如下:
shiva-eks@wks01:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-11-245.us-east-2.compute.internal Ready <none> 9h v1.27.3-eks-a5565ad
ip-172-31-36-222.us-east-2.compute.internal Ready <none> 9h v1.27.3-eks-a5565ad
shiva-eks@wks01:~$
#### 內容解密:
kubectl get nodes:取得叢集中的節點資訊。- 輸出結果顯示了節點的名稱、狀態、角色、存活時間以及Kubernetes版本。
在EKS中佈署第一個Pod
現在,我們已經成功組態了kubectl並能夠與EKS叢集進行通訊,接下來我們將佈署第一個Pod。佈署Pod的方式與在其他Kubernetes叢集中相同,可以使用YAML佈署檔案或直接使用命令列。
使用命令列佈署Pod
這裡,我們將使用命令列方式來佈署一個名為primeornot的應用,如清單14-9所示。
清單14-9:在EKS叢集中佈署Pod
kubectl create deployment primeornot --image=gitshiva/primeornot
執行結果如下:
shiva-eks@wks01:~$ kubectl create deployment primeornot --image=gitshiva/primeornot
deployment.apps/primeornot created
shiva-eks@wks01:~$
#### 內容解密:
kubectl create deployment primeornot --image=gitshiva/primeornot:建立一個名為primeornot的佈署,使用gitshiva/primeornot映象。- 輸出結果表明佈署已成功建立。
驗證佈署狀態
佈署完成後,我們可以使用kubectl get deployment命令來檢查佈署的狀態,如清單14-10所示。
清單14-10:取得佈署詳情
kubectl get deployment
執行結果如下:
shiva-eks@wks01:~$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
primeornot 1/1 1 1 25s
shiva-eks@wks01:~$
#### 內容解密:
kubectl get deployment:取得佈署的詳情。- 輸出結果顯示了
primeornot佈署的狀態,包括就緒副本數、更新副本數、可用副本數以及佈署的存活時間。
取得Pod詳情
進一步地,我們可以使用kubectl get pods命令來取得Pod的詳情,如清單14-11所示。
清單14-11:取得Pod詳情
kubectl get pods
執行結果如下:
shiva-eks@wks01:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
primeornot-9d584fd7d-8zvl2 1/1 Running 0 47s
shiva-eks@wks01:~$
#### 內容解密:
kubectl get pods:取得當前名稱空間下的Pod資訊。- 輸出結果顯示了
primeornot佈署下的Pod詳情,包括名稱、就緒狀態、執行狀態、重啟次數以及存活時間。
至此,我們已經成功在EKS叢集中佈署了第一個Pod,並驗證了其執行狀態。接下來的章節中,我們將繼續探討如何在EKS叢集中進行更複雜的操作和管理。```mermaid graph LR A[開始] –> B[組態kubectl] B –> C[更新kubeconfig檔案] C –> D[驗證kubectl連線] D –> E[取得叢集資訊] E –> F[佈署第一個Pod] F –> G[驗證佈署狀態] G –> H[取得Pod詳情] H –> I[結束]
**圖表翻譯:**
此圖表展示了從組態`kubectl`到佈署第一個Pod的整個流程。首先,我們組態`kubectl`並更新`kubeconfig`檔案。接著,驗證`kubectl`的連線狀態。隨後,取得叢集的相關資訊。然後,佈署第一個Pod,並驗證其佈署狀態。最後,取得Pod的詳細資訊,完成整個操作流程。
## 在Amazon EKS上操作叢集與應用程式佈署
在前面的章節中,我們已經成功地在Amazon Elastic Kubernetes Service(EKS)上建立了一個Kubernetes叢集。現在,我們將進一步探討如何在這個叢集中佈署應用程式,並對叢集進行操作與管理。
### 取得Pod日誌以瞭解應用程式狀態
如同在microk8s叢集中一樣,我們可以透過取得Pod的日誌來瞭解應用程式的執行狀態。所使用的命令並無不同,如以下**清單14-12**所示。
#### 清單14-12. 取得Pod日誌
```bash
kubectl logs -f primeornot-9d584fd7d-8zvl2
執行結果:
shiva-eks@wks01:~$ kubectl logs -f primeornot-9d584fd7d-8zvl2
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.6.RELEASE)
2023-08-27 13:56:50.640 INFO 7 --- [ main] us.subbu.Primeornot01Application : Starting Primeornot01Application on primeornot-9d584fd7d-8zvl2 with PID 7 (/tmp/primeornot01-0.0.1-SNAPSHOT.jar started by root in /)
<SNIP>
o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-08-27 13:56:53.959 INFO 7 --- [ main] us.subbu.Primeornot01Application : Started Primeornot01Application in
## 在AWS上操作EKS叢集:IAM使用者與許可權管理
在現代的雲端基礎設施管理中,Amazon Elastic Kubernetes Service(EKS)提供了一個強大且可擴充套件的容器協調平台。為了有效地管理EKS叢集,正確組態IAM使用者和許可權至關重要。本文將探討如何在AWS上為EKS叢集建立IAM使用者、群組,並授予適當的許可權。
### 建立IAM使用者和群組
首先,我們需要在AWS帳戶中建立三個IAM使用者群組和六個IAM使用者。這些群組和使用者將根據其角色和所需的許可權進行區分。
#### 建立IAM使用者群組
1. **grp-k8s-admins**:用於系統或平台工程團隊
2. **grp-k8s-devops**:用於DevOps團隊,包括SRE型別的工程師
3. **grp-k8s-readonly**:用於監控和只需要檢視叢集資訊的使用者
#### 建立IAM使用者
1. **k8sadmin01**:主要的Kubernetes管理員使用者,新增到`grp-k8s-admins`
2. **k8sadmin02**:第二個Kubernetes管理員使用者
3. **k8sdevops01**:DevOps/SRE團隊使用者01,新增到`grp-k8s-devops`
4. **k8sdevops02**:DevOps/SRE團隊使用者02
5. **k8sreadonly01**:唯讀使用者,新增到`grp-k8s-readonly`
6. **k8sreadonly02**:另一個唯讀使用者
這些使用者和群組的設定是為了展示當使用者執行叢集操作時,如何根據其許可權獲得不同的回應。
### 為grp-k8s-admins群組授予EKS所有許可權
接下來,我們將為`grp-k8s-admins`群組附加一個內嵌策略,以授予EKS的所有許可權。
1. 編輯`grp-k8s-admins`群組並導航到許可權標籤。
2. 點選“新增許可權”下拉選單並選擇“建立內嵌策略”。
3. 在“指定許可權”畫面中,輸入`EKS`並選擇EKS服務。
4. 選擇“所有資源”並點選“檢視策略”。
5. 將策略命名為`k8sadmins`並點選“建立策略”。
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EKSPermissions",
"Effect": "Allow",
"Action": "eks:*",
"Resource": "*"
}
]
}
內容解密:
此內嵌策略授予grp-k8s-admins群組對EKS的所有操作許可權。eks:*表示允許所有與EKS相關的操作,*表示這些操作適用於所有資源。
將IAM使用者對映到叢集角色
為了使IAM使用者能夠與EKS叢集互動,我們需要使用eksctl命令將IAM使用者對映到Kubernetes叢集角色。
eksctl create iamidentitymapping \
--cluster myeks01 \
--region=us-east-2 \
--arn arn:aws:iam::000381057009:user/k8sadmin01 \
--group system:masters \
--no-duplicate-arns
內容解密:
此命令將IAM使用者k8sadmin01對映到EKS叢集的system:masters角色,賦予該使用者叢集管理員許可權。--no-duplicate-arns選項確保不會建立重複的對映。
驗證k8sadmin01使用者的存取許可權
最後,我們驗證k8sadmin01使用者是否能夠與EKS叢集互動。
kubectl get svc
內容解密:
此命令嘗試取得叢集中的服務列表。如果k8sadmin01使用者具有適當的許可權,該命令應成功執行並傳回服務列表。
隨著雲原生技術的不斷發展,未來我們可以預期在IAM和Kubernetes的整合上會有更多的創新和改進。例如,利用AWS IAM的進階功能,如條件和屬性基礎的存取控制(ABAC),可以進一步增強EKS叢集的安全性和靈活性。
安全性考量
在組態IAM使用者和許可權時,安全性是一個重要的考量因素。建議遵循最小許可權原則,即僅授予使用者完成其任務所需的最小許可權。此外,定期稽核和檢查IAM策略和使用者許可權也是確保叢集安全性的重要措施。
效能最佳化
在大型EKS叢集中,高效的許可權管理和IAM組態對於保持叢集效能至關重要。過於複雜或過寬的許可權設定可能會導致效能問題或安全風險。因此,持續監控和最佳化IAM組態是保持叢集高效執行的關鍵。