iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
Build on AWS

AWS 雲原生,學起來比泡咖啡還快系列 第 21

DAY21 - 部署應用:K8s 版 NGINX!

  • 分享至 

  • xImage
  •  

Amazon EKS Auto Mode 部署與測試完整指南

概述

Amazon EKS Auto Mode 是 AWS 提供的全託管 Kubernetes 服務模式,能夠自動管理節點生命週期、容量規劃和基礎設施配置。本指南將詳細介紹如何配置 kubeconfig、驗證叢集連線,以及部署測試應用來驗證 Auto Mode 的功能。

前置需求

  • 已建立的 EKS Auto Mode 叢集
  • AWS CLI 已安裝並配置
  • kubectl 工具已安裝
  • 適當的 IAM 權限

Step 1: 叢集配置與連線驗證

1.1 設定 kubeconfig

kubeconfig 是 kubectl 用來連接 Kubernetes 叢集的配置檔案。透過 AWS CLI 可以自動產生並配置這個檔案。

# 更新 kubeconfig 以連接到 EKS 叢集
# --region: 指定叢集所在的 AWS 區域
# --name: 指定叢集名稱
aws eks update-kubeconfig --region us-west-2 --name my-auto-mode-cluster

執行結果說明:

  • 此命令會在 ~/.kube/config 中新增或更新叢集配置
  • 自動設定認證資訊,使用 AWS IAM 進行身份驗證
  • 設定當前 kubectl 上下文指向新的叢集

1.2 驗證連線

確認 kubectl 能夠成功連接到 EKS 叢集並取得叢集資訊。

# 顯示叢集基本資訊
# 包含 API Server 版本、端點等重要資訊
kubectl cluster-info

# 列出叢集中的所有節點
# 在 Auto Mode 中,節點會根據工作負載需求自動建立
kubectl get nodes

預期輸出範例:

Kubernetes control plane is running at https://[cluster-endpoint]
CoreDNS is running at https://[cluster-endpoint]/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

NAME                                        STATUS   ROLES    AGE   VERSION
ip-10-0-1-100.us-west-2.compute.internal   Ready    <none>   5m    v1.28.3-eks-4f4795d

https://ithelp.ithome.com.tw/upload/images/20250923/20145462iUHCuxgHC7.png

Step 2: 部署測試應用

2.1 建立測試部署檔案

建立一個完整的 YAML 檔案,包含 Deployment 和 Service 資源,用於測試 EKS Auto Mode 的自動擴展功能。

echo " 

# 此檔案包含 Deployment 和 Service 兩個 Kubernetes 資源

# Deployment: 管理 Pod 的生命週期和副本數量
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  labels:
    app: nginx-test
spec:
  # 設定 3 個副本,測試 Auto Mode 的節點自動配置
  replicas: 3
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: nginx:1.21  # 使用穩定版本的 Nginx
        ports:
        - containerPort: 80
        # 資源限制:幫助 Auto Mode 進行容量規劃
        resources:
          requests:
            cpu: 100m      # 最少需要 0.1 CPU 核心
            memory: 128Mi  # 最少需要 128MB 記憶體
          limits:
            cpu: 200m      # 最多使用 0.2 CPU 核心
            memory: 256Mi  # 最多使用 256MB 記憶體

---
# Service: 提供網路存取和負載平衡
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  annotations: 
  # 設定 AWS LoadBalancer 為公開型(internet-facing)
    service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
spec:
  selector:
    app: nginx-test
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  # LoadBalancer 類型會自動建立 AWS Load Balancer
  type: LoadBalancer

" > nginx-deployment-service.yaml

YAML 檔案重點說明:

  • replicas: 3 - 建立 3 個 Pod 副本,測試多節點部署
  • resources - 明確定義資源需求,讓 Auto Mode 能準確計算所需容量
  • LoadBalancer - 自動建立 AWS Application Load Balancer 或 Network Load Balancer

2.2 部署應用

將 YAML 檔案套用到 Kubernetes 叢集中。

# 套用 YAML 配置檔案到叢集
# -f: 指定檔案路徑
kubectl apply -f nginx-deployment-service.yaml

執行過程:

  1. Kubernetes 接收部署請求
  2. Auto Mode 分析資源需求
  3. 自動配置適當的節點類型和數量
  4. 調度 Pod 到可用節點上

2.3 檢查部署狀態

監控應用部署進度和狀態。

# 檢查 Deployment 狀態
# 顯示期望副本數、當前副本數、可用副本數
kubectl get deployments

# 檢查 Pod 狀態和分佈
# 觀察 Pod 是否均勻分佈在不同節點上
kubectl get pods -o wide

# 檢查 Service 狀態
# 特別注意 LoadBalancer 的 EXTERNAL-IP
kubectl get services

https://ithelp.ithome.com.tw/upload/images/20250923/20145462QWNMZt1czl.png
狀態檢查重點:

  • Deployment - 確認 READY 欄位顯示 3/3
  • Pods - 確認所有 Pod 狀態為 Running
  • Service - 等待 EXTERNAL-IP 從 <pending> 變為實際 IP 位址

Step 3: 驗證 Auto Mode 功能

3.1 觀察自動節點管理

EKS Auto Mode 的核心功能是自動管理節點,根據工作負載需求動態調整基礎設施。

# 檢查節點狀態和詳細資訊
# -o wide: 顯示更多欄位,包含內部/外部 IP、OS、核心版本等
kubectl get nodes -o wide

# 檢查特定節點的詳細資訊
# 包含容量、已分配資源、系統資訊等
kubectl describe nodes

https://ithelp.ithome.com.tw/upload/images/20250923/20145462bcNKRKIUb1.png
Auto Mode 節點管理特色:

  • 自動選擇實例類型 - 根據 Pod 資源需求選擇最適合的 EC2 實例
  • 動態擴展 - 當資源不足時自動新增節點
  • 成本最佳化 - 優先使用 Spot 實例和適當大小的實例
  • 自動修復 - 偵測並替換不健康的節點

3.2 進階驗證命令

# 檢查節點資源使用情況
kubectl top nodes

# 檢查 Pod 資源使用情況
kubectl top pods

# 檢查叢集事件,觀察 Auto Mode 的自動化操作
kubectl get events --sort-by='.lastTimestamp'

# 檢查 Auto Mode 相關的系統 Pod
kubectl get pods -n kube-system

故障排除

常見問題與解決方案

  1. kubeconfig 配置失敗

    # 檢查 AWS CLI 配置
    aws sts get-caller-identity
    
    # 確認叢集存在
    aws eks describe-cluster --name my-auto-mode-cluster --region us-west-2
    
  2. Pod 無法啟動

    # 檢查 Pod 詳細狀態
    kubectl describe pod <pod-name>
    
    # 檢查 Pod 日誌
    kubectl logs <pod-name>
    
  3. LoadBalancer 無法取得外部 IP

    # 檢查 AWS Load Balancer Controller
    kubectl get pods -n kube-system | grep aws-load-balancer
    
    # 檢查 Service 事件
    kubectl describe service nginx-service
    

Step 4: 驗證功能

#取得Service ,看NLB自動產生的DNS。
kubectl get svc  

https://ithelp.ithome.com.tw/upload/images/20250923/20145462ZYX2Kq7FNb.png

輸入DNS就可以看到架設成功NGINX的畫面
https://ithelp.ithome.com.tw/upload/images/20250923/20145462Ynk79NqxTz.png

總結

透過本指南,你已經學會了:

  1. 配置 kubeconfig - 建立與 EKS 叢集的連線
  2. 部署測試應用 - 使用 YAML 檔案部署完整的應用堆疊
  3. 監控和故障排除 - 使用 kubectl 命令進行系統監控

EKS Auto Mode 大幅簡化了 Kubernetes 叢集管理,讓開發者能專注於應用開發而非基礎設施管理。


上一篇
DAY20 - Pod / Deployment / Service / Ingress:角色大集合
系列文
AWS 雲原生,學起來比泡咖啡還快21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言