iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
Build on AWS

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

DAY18 - EKS Cluster:雲端樂園開幕

  • 分享至 

  • xImage
  •  

在開始建置我們第一個CLUSTER 之前,先來一些開胃小菜,簡單介紹一下k8S 跟 eks。

Kubernetes 基礎知識

什麼是 Kubernetes?

Kubernetes (K8s) 是一個開源的容器編排平台,用於自動化部署、擴展和管理容器化應用程式。

核心概念

1. Pod

  • Kubernetes 中最小的部署單位
  • 包含一個或多個緊密相關的容器
  • 共享網路和存儲資源
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: my-app
    image: nginx:1.21
    ports:
    - containerPort: 80

2. Deployment

  • 管理 Pod 的副本數量
  • 提供滾動更新和回滾功能
  • 確保應用程式的高可用性
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

3. Service

  • 為 Pod 提供穩定的網路端點
  • 負載均衡流量到多個 Pod
  • 支援不同類型:ClusterIP、NodePort、LoadBalancer
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

4. ConfigMap 和 Secret

  • ConfigMap: 存儲非敏感的配置數據
  • Secret: 存儲敏感信息如密碼、API 金鑰

5. Namespace

  • 提供資源隔離
  • 支援多租戶環境
  • 便於資源管理和權限控制

Kubernetes 架構

Master Node 組件

  • API Server: 集群的前端,處理所有 REST 請求
  • etcd: 分散式鍵值存儲,保存集群狀態
  • Controller Manager: 運行控制器進程
  • Scheduler: 負責 Pod 調度到合適的節點

Worker Node 組件

  • kubelet: 節點代理,管理 Pod 生命週期
  • kube-proxy: 網路代理,處理服務發現和負載均衡
  • Container Runtime: 容器運行時(如 Docker、containerd)

Amazon EKS 介紹

Amazon Elastic Kubernetes Service (EKS) 是 AWS 提供的託管 Kubernetes 服務,讓你能夠在 AWS 上輕鬆運行 Kubernetes,無需安裝、操作和維護自己的 Kubernetes 控制平面。

EKS 的核心特性

  • 完全託管的控制平面
  • 高可用性和安全性
  • 與 AWS 服務深度整合
  • 支援標準 Kubernetes API
  • 自動更新和修補

EKS 的優勢

1. 簡化管理

  • AWS 負責管理 Kubernetes 控制平面
  • 自動處理更新、修補和備份
  • 減少運維負擔

2. 高可用性

  • 控制平面跨多個可用區部署
  • 99.95% 的 SLA 保證
  • 自動故障恢復

3. 安全性

  • 與 AWS IAM 整合進行身份驗證和授權
  • 支援 AWS PrivateLink 進行私有連接
  • 預設啟用加密

4. 成本效益

  • 只需為工作節點付費
  • 控制平面費用固定且合理
  • 支援 Spot 實例降低成本

5. AWS 生態系統整合

  • 與 ALB、NLB 無縫整合
  • 支援 AWS Fargate 無伺服器運算
  • 整合 CloudWatch、CloudTrail 等監控服務

EKS 核心組件

1. EKS 控制平面

  • 託管的 Kubernetes API 伺服器
  • etcd 數據存儲
  • 控制器管理器和調度器

2. 工作節點

自管理節點組

  • 你負責管理 EC2 實例
  • 完全控制節點配置
  • 需要手動更新和維護

EKS 託管節點組

  • AWS 管理節點生命週期
  • 自動更新和修補
  • 簡化節點管理

AWS Fargate

  • 無伺服器容器運算
  • 無需管理 EC2 實例
  • 按需付費模式

3. 網路組件

  • Amazon VPC CNI: 為 Pod 分配 VPC IP 地址
  • AWS Load Balancer Controller: 管理 ALB 和 NLB
  • CoreDNS: 集群內 DNS 解析

4. 存儲組件

  • Amazon EBS CSI Driver: 持久化存儲
  • Amazon EFS CSI Driver: 共享文件系統
  • Amazon FSx CSI Driver: 高性能文件系統

EKS Auto Mode (最新功能)

什麼是 EKS Auto Mode?

EKS Auto Mode 是 AWS 在 2024 年推出的全新功能,提供完全託管的 Kubernetes 體驗,進一步簡化集群管理。

Auto Mode 的核心特性

1. 完全託管的基礎設施

  • 自動節點管理: 無需手動創建或管理節點組
  • 動態擴展: 根據工作負載自動調整節點數量
  • 自動修補: 系統自動處理安全更新和修補

2. 簡化的網路管理

  • 自動 VPC 配置: 自動創建和配置網路資源
  • 內建負載均衡: 自動配置 Application Load Balancer
  • DNS 自動管理: 簡化服務發現配置

3. 智能資源優化

  • 成本優化: 自動選擇最適合的實例類型
  • 性能調優: 根據工作負載特性優化資源分配
  • 多可用區部署: 自動確保高可用性

4. 增強的安全性

  • 自動安全更新: 及時應用安全修補程式
  • 內建合規性: 符合 AWS 安全最佳實踐
  • 加密預設啟用: 數據傳輸和靜態加密

Auto Mode vs 傳統 EKS

特性 傳統 EKS EKS Auto Mode
節點管理 手動或託管節點組 完全自動化
網路配置 需要手動配置 自動配置
擴展管理 需要配置 Cluster Autoscaler 內建智能擴展
成本優化 手動選擇實例類型 自動優化
安全更新 需要手動管理 自動應用

使用 Auto Mode 的場景

  • 快速原型開發: 快速啟動和測試應用
  • 生產環境: 減少運維複雜度
  • 多環境管理: 簡化開發、測試、生產環境的一致性
  • 成本敏感項目: 自動優化資源使用

Auto Mode 配置示例

# EKS Auto Mode 集群配置
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-auto-cluster
  region: us-west-2

# 啟用 Auto Mode
autoMode:
  enabled: true
  
# 基本配置
kubernetes:
  version: "1.28"

# 自動配置的附加組件
addons:
- name: vpc-cni
  version: latest
- name: coredns
  version: latest
- name: kube-proxy
  version: latest

實際應用場景

1. 微服務架構

# 微服務部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: [your-registry]/user-service:v1.0
        ports:
        - containerPort: 8080
        env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: database-host

2. CI/CD 整合

  • 與 AWS CodePipeline 整合
  • 使用 GitOps 工具如 ArgoCD
  • 自動化部署和回滾

3. 監控和日誌

# Prometheus 監控配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
    - job_name: 'kubernetes-pods'
      kubernetes_sd_configs:
      - role: pod

4. 自動擴展配置

# Horizontal Pod Autoscaler
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

總結

選擇 EKS 的理由

  1. 降低複雜度: 託管服務減少運維負擔
  2. 提高可靠性: AWS 的基礎設施和 SLA 保證
  3. 加速開發: 專注於應用開發而非基礎設施管理
  4. 成本效益: 合理的定價和資源優化
  5. 未來準備: Auto Mode 等新功能持續簡化管理

最佳實踐建議

  • 使用 Infrastructure as Code (如 Terraform, CDK)
  • 實施適當的 RBAC 權限控制
  • 定期備份和災難恢復計劃
  • 監控和日誌集中管理
  • 安全掃描和合規性檢查

EKS Auto Mode 的推出標誌著 Kubernetes 管理進入了一個新的簡化時代,讓開發團隊能夠更專注於業務邏輯的實現,而不是基礎設施的管理。


上一篇
DAY17 - EKS建置前的環境準備
下一篇
DAY19 - 第一個Cluster
系列文
AWS 雲原生,學起來比泡咖啡還快20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言