Kubernetes 完整指南(一):基礎概念與架構詳解

🎯 前言

Kubernetes(常簡稱為 K8s)是目前最流行的容器編排平台,已成為雲原生應用的事實標準。本系列文章將全面介紹 Kubernetes 的核心概念、實務操作與生產部署。

本系列文章規劃:

  • 第一篇(本文):Kubernetes 基礎概念與架構
  • 第二篇:核心資源與實務操作
  • 第三篇:進階功能與生產實踐

📚 什麼是 Kubernetes?

核心定義

Kubernetes 是一個開源的容器編排平台,用於自動化部署、擴展和管理容器化應用程式。它最初由 Google 設計,現在由 Cloud Native Computing Foundation(CNCF)維護。

graph TB
    A[Kubernetes] --> B[容器編排]
    A --> C[自動化部署]
    A --> D[服務發現]
    A --> E[負載均衡]
    A --> F[自動擴展]
    A --> G[自我修復]

    B --> B1[管理數千個容器]
    C --> C1[滾動更新<br/>零停機部署]
    D --> D1[DNS 與服務註冊]
    E --> E1[流量分發<br/>健康檢查]
    F --> F1[水平/垂直擴展<br/>自動調度]
    G --> G1[故障恢復<br/>重啟容器]

    style A fill:#326ce5
    style B fill:#4ecdc4
    style C fill:#feca57
    style D fill:#ff6b6b
    style E fill:#a8e6cf
    style F fill:#ffb3ba
    style G fill:#bae1ff

Kubernetes 解決的問題

挑戰傳統方式Kubernetes 解決方案
容器管理手動管理每個容器聲明式配置,自動管理
服務發現硬編碼 IP 位址內建 DNS 與服務發現
負載均衡外部負載均衡器內建 Service 負載均衡
擴展性手動添加實例自動水平擴展(HPA)
故障恢復人工介入自我修復,自動重啟
更新部署停機維護滾動更新,零停機
資源利用低效分配智慧調度,資源優化
配置管理散落各處統一的 ConfigMap/Secret

🔄 為什麼需要 Kubernetes?

容器化的演進

graph LR
    A[單體應用<br/>Monolithic] --> B[容器化應用<br/>Containerized]
    B --> C[容器編排<br/>Orchestrated]
    C --> D[雲原生<br/>Cloud Native]

    A1[難以擴展<br/>部署緩慢] --> A
    B1[可移植<br/>環境一致] --> B
    C1[自動化<br/>高可用] --> C
    D1[微服務<br/>彈性伸縮] --> D

    style A fill:#ff6b6b
    style B fill:#feca57
    style C fill:#4ecdc4
    style D fill:#a8e6cf

Docker vs Kubernetes

graph TB
    subgraph "Docker 生態"
        D1[Docker Engine]
        D2[容器運行]
        D3[映像管理]
        D4[Docker Compose<br/>單機編排]
    end

    subgraph "Kubernetes 生態"
        K1[容器編排]
        K2[叢集管理]
        K3[服務發現]
        K4[負載均衡]
        K5[自動擴展]
        K6[自我修復]
        K7[配置管理]
        K8[儲存編排]
    end

    D1 -.->|運行時| K1
    D3 -.->|映像| K1

    style D1 fill:#0db7ed
    style K1 fill:#326ce5

對照表

特性DockerDocker ComposeKubernetes
適用範圍單容器單機多容器叢集多容器
擴展性手動有限自動(HPA)
負載均衡需外部基本支援內建 Service
服務發現手動配置容器名稱DNS + Service
故障恢復手動重啟策略自動修復
滾動更新不支援基本支援完整支援
多主機不支援不支援原生支援
配置管理環境變數.env 檔案ConfigMap/Secret
儲存編排VolumeVolumePV/PVC/StorageClass
學習曲線

關係說明:

  • Docker 提供容器運行時
  • Kubernetes 使用 Docker(或其他容器運行時)作為底層
  • Kubernetes 不是 Docker 的替代品,而是編排層

🏗️ Kubernetes 核心架構

整體架構圖

graph TB
    subgraph "Control Plane 控制平面"
        API[API Server<br/>kube-apiserver]
        ETCD[(etcd<br/>資料存儲)]
        SCHED[Scheduler<br/>kube-scheduler]
        CM[Controller Manager<br/>kube-controller-manager]
        CCM[Cloud Controller<br/>cloud-controller-manager]
    end

    subgraph "Node 1 工作節點"
        KUBELET1[Kubelet]
        PROXY1[Kube-proxy]
        RUNTIME1[Container Runtime<br/>containerd/CRI-O]
        POD1[Pod]
        POD2[Pod]
    end

    subgraph "Node 2 工作節點"
        KUBELET2[Kubelet]
        PROXY2[Kube-proxy]
        RUNTIME2[Container Runtime]
        POD3[Pod]
        POD4[Pod]
    end

    API <--> ETCD
    API <--> SCHED
    API <--> CM
    API <--> CCM

    KUBELET1 <--> API
    KUBELET2 <--> API

    KUBELET1 --> RUNTIME1
    KUBELET2 --> RUNTIME2

    RUNTIME1 --> POD1
    RUNTIME1 --> POD2
    RUNTIME2 --> POD3
    RUNTIME2 --> POD4

    PROXY1 -.-> POD1
    PROXY1 -.-> POD2
    PROXY2 -.-> POD3
    PROXY2 -.-> POD4

    style API fill:#326ce5
    style ETCD fill:#ff6b6b
    style SCHED fill:#4ecdc4
    style CM fill:#feca57

控制平面元件(Control Plane)

元件作用功能說明
API Server前端介面• 接收所有 REST 請求
• 驗證和處理請求
• 更新 etcd
• 叢集的唯一入口
etcd資料存儲• 分散式鍵值存儲
• 儲存叢集所有狀態
• 強一致性保證
• 支援 watch 機制
Scheduler調度器• 為新 Pod 選擇節點
• 考慮資源需求
• 硬體約束
• 親和性規則
Controller Manager控制器管理器• Node Controller
• Replication Controller
• Endpoints Controller
• Service Account Controller
Cloud Controller雲端控制器• 雲端服務整合
• 負載均衡器
• 儲存卷
• 路由管理

工作節點元件(Node)

元件作用功能說明
Kubelet節點代理• 管理 Pod 生命週期
• 執行容器健康檢查
• 回報節點狀態
• 掛載 Volume
Kube-proxy網路代理• 維護網路規則
• 實現 Service 抽象
• 負載均衡
• 支援 iptables/IPVS
Container Runtime容器運行時• 運行容器
• 拉取映像
• 支援 CRI 介面
• containerd、CRI-O、Docker

元件通訊流程

sequenceDiagram
    participant U as 使用者/kubectl
    participant API as API Server
    participant ETCD as etcd
    participant SCHED as Scheduler
    participant KUBELET as Kubelet
    participant RUNTIME as Container Runtime

    U->>API: 1. 創建 Pod 請求
    API->>ETCD: 2. 儲存 Pod 規格
    ETCD->>API: 3. 確認儲存
    API->>U: 4. 返回成功

    SCHED->>API: 5. Watch 未調度 Pod
    SCHED->>API: 6. 選擇節點並綁定
    API->>ETCD: 7. 更新 Pod 綁定資訊

    KUBELET->>API: 8. Watch 分配到本節點的 Pod
    KUBELET->>RUNTIME: 9. 啟動容器
    RUNTIME->>KUBELET: 10. 容器運行
    KUBELET->>API: 11. 回報 Pod 狀態
    API->>ETCD: 12. 更新狀態

📦 Kubernetes 核心概念

1. Pod - 最小部署單元

Pod 是什麼?

  • Kubernetes 中最小的可部署單元
  • 一個或多個容器的集合
  • 共享網路和儲存空間
  • 同一個 Pod 內的容器可以透過 localhost 通訊
graph TB
    subgraph "Pod"
        C1[容器 1<br/>主應用]
        C2[容器 2<br/>Sidecar]
        VOL[(共享 Volume)]
        NET[共享網路<br/>localhost]

        C1 -.-> NET
        C2 -.-> NET
        C1 -.-> VOL
        C2 -.-> VOL
    end

    POD_IP[Pod IP: 10.244.1.5]
    POD_IP -.-> NET

    style C1 fill:#4ecdc4
    style C2 fill:#a8e6cf
    style NET fill:#feca57
    style VOL fill:#ff6b6b

Pod 特性對照表:

特性說明範例
共享網路同一 Pod 內容器共享 IP容器間透過 localhost 通訊
共享儲存可掛載相同的 Volume日誌收集、資料共享
生命週期作為一個整體管理同時創建、刪除
調度單元總是被調度到同一節點保證容器位置關係
臨時性Pod 是短暫的IP 會變動,需要 Service

2. Deployment - 應用部署

Deployment 是什麼?

  • 管理無狀態應用的控制器
  • 聲明式更新 Pod 和 ReplicaSet
  • 支援滾動更新和回滾
  • 確保指定數量的 Pod 運行
graph TB
    D[Deployment<br/>nginx-deployment<br/>replicas: 3] --> RS[ReplicaSet<br/>nginx-rs-abc123]
    RS --> P1[Pod 1<br/>Running]
    RS --> P2[Pod 2<br/>Running]
    RS --> P3[Pod 3<br/>Running]

    D -.->|更新| RS2[ReplicaSet<br/>nginx-rs-def456]
    RS2 -.-> P4[Pod 4<br/>Running]
    RS2 -.-> P5[Pod 5<br/>Running]

    style D fill:#326ce5
    style RS fill:#4ecdc4
    style RS2 fill:#a8e6cf
    style P1 fill:#feca57
    style P2 fill:#feca57
    style P3 fill:#feca57

Deployment 功能:

功能說明指令範例
創建部署應用kubectl create deployment
擴展調整副本數kubectl scale deployment
更新滾動更新kubectl set image
回滾返回舊版本kubectl rollout undo
暫停/恢復控制更新流程kubectl rollout pause/resume
查看歷史版本記錄kubectl rollout history

3. Service - 服務發現與負載均衡

Service 是什麼?

  • 為一組 Pod 提供穩定的網路端點
  • 內建負載均衡
  • 支援服務發現(DNS)
  • 解決 Pod IP 不穩定的問題
graph TB
    subgraph "外部存取"
        CLIENT[客戶端]
    end

    subgraph "Service Layer"
        SVC[Service<br/>my-service<br/>ClusterIP: 10.0.0.100]
    end

    subgraph "Pod Layer"
        P1[Pod 1<br/>10.244.1.5]
        P2[Pod 2<br/>10.244.2.8]
        P3[Pod 3<br/>10.244.3.12]
    end

    CLIENT --> SVC
    SVC -.->|負載均衡| P1
    SVC -.->|負載均衡| P2
    SVC -.->|負載均衡| P3

    DNS[CoreDNS<br/>my-service.default.svc.cluster.local]
    DNS -.-> SVC

    style SVC fill:#326ce5
    style P1 fill:#4ecdc4
    style P2 fill:#4ecdc4
    style P3 fill:#4ecdc4

Service 類型對照表:

類型用途存取方式適用場景
ClusterIP叢集內部存取ClusterIP + Port後端服務
NodePort透過節點 IP 存取NodeIP:NodePort開發測試
LoadBalancer雲端負載均衡器外部 IP生產環境(雲端)
ExternalNameDNS CNAME 映射DNS 名稱外部服務整合

4. Volume - 資料持久化

Volume 類型:

graph TB
    A[Volume 類型] --> B[臨時存儲]
    A --> C[持久存儲]
    A --> D[配置存儲]
    A --> E[投影存儲]

    B --> B1[emptyDir<br/>Pod 生命週期]
    B --> B2[hostPath<br/>節點本地路徑]

    C --> C1[PersistentVolume<br/>持久卷]
    C --> C2[PersistentVolumeClaim<br/>持久卷聲明]

    D --> D1[ConfigMap<br/>配置資料]
    D --> D2[Secret<br/>敏感資料]

    E --> E1[Projected<br/>多種來源投影]

    style A fill:#326ce5
    style B fill:#ff6b6b
    style C fill:#4ecdc4
    style D fill:#feca57
    style E fill:#a8e6cf

Volume 類型對照表:

類型生命週期持久性適用場景
emptyDirPod臨時資料、快取
hostPath節點系統級存取、測試
PV/PVC獨立資料庫、檔案存儲
ConfigMap獨立配置檔案
Secret獨立密鑰、證書
NFS獨立共享檔案系統
CSI獨立雲端儲存(EBS, Azure Disk)

5. Namespace - 命名空間

Namespace 是什麼?

  • 虛擬叢集劃分
  • 資源隔離
  • 多租戶支援
  • 資源配額管理
graph TB
    CLUSTER[Kubernetes Cluster]

    CLUSTER --> NS1[Namespace: default]
    CLUSTER --> NS2[Namespace: development]
    CLUSTER --> NS3[Namespace: production]
    CLUSTER --> NS4[Namespace: kube-system]

    NS1 --> R1[Resources]
    NS2 --> R2[Resources<br/>ResourceQuota<br/>LimitRange]
    NS3 --> R3[Resources<br/>ResourceQuota<br/>LimitRange]
    NS4 --> R4[System Resources<br/>CoreDNS, Metrics]

    style CLUSTER fill:#326ce5
    style NS2 fill:#4ecdc4
    style NS3 fill:#ff6b6b
    style NS4 fill:#feca57

預設 Namespace:

Namespace用途說明
default預設命名空間未指定時使用
kube-system系統元件K8s 核心元件
kube-public公開資源所有使用者可讀
kube-node-lease節點心跳節點健康檢查

6. ConfigMap & Secret - 配置管理

graph LR
    subgraph "配置注入方式"
        CM[ConfigMap<br/>一般配置]
        SEC[Secret<br/>敏感資料]
    end

    subgraph "Pod 使用方式"
        ENV[環境變數]
        VOL[Volume 掛載]
        CMD[命令行參數]
    end

    CM --> ENV
    CM --> VOL
    CM --> CMD

    SEC --> ENV
    SEC --> VOL

    style CM fill:#4ecdc4
    style SEC fill:#ff6b6b

對照表:

項目ConfigMapSecret
用途一般配置資料敏感資料(密碼、金鑰)
編碼明文Base64 編碼
大小限制1MB1MB
典型內容配置檔、環境變數密碼、API Token、TLS 證書
安全性中(需額外加密)

🔧 Kubernetes 安裝與設定

安裝方式對照表

方式適用場景複雜度生產可用
Minikube本地開發、學習
KindCI/CD、測試
k3s邊緣運算、IoT
kubeadm自建叢集
kOpsAWS 叢集
EKS/GKE/AKS雲端託管
Rancher企業管理平台

1. Minikube 安裝(本地開發)

系統需求:

  • 2 CPU 核心以上
  • 2GB 記憶體以上
  • 20GB 磁碟空間
  • 容器或虛擬機管理器(Docker、VirtualBox、KVM)

macOS 安裝:

 1# 使用 Homebrew 安裝
 2brew install minikube
 3
 4# 安裝 kubectl
 5brew install kubectl
 6
 7# 啟動 Minikube
 8minikube start --driver=docker --cpus=2 --memory=4096
 9
10# 驗證安裝
11kubectl cluster-info
12kubectl get nodes
13
14# 啟用插件
15minikube addons enable dashboard
16minikube addons enable metrics-server
17minikube addons enable ingress
18
19# 開啟 Dashboard
20minikube dashboard

Linux 安裝:

 1# 下載 Minikube
 2curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
 3sudo install minikube-linux-amd64 /usr/local/bin/minikube
 4
 5# 安裝 kubectl
 6curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
 7sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
 8
 9# 啟動 Minikube
10minikube start --driver=docker
11
12# 驗證
13kubectl get nodes

Windows 安裝:

 1# 使用 Chocolatey
 2choco install minikube
 3choco install kubernetes-cli
 4
 5# 或使用 Windows Package Manager
 6winget install Kubernetes.minikube
 7winget install Kubernetes.kubectl
 8
 9# 啟動
10minikube start --driver=hyperv
11
12# 驗證
13kubectl version --client
14kubectl cluster-info

2. kubectl 配置

kubectl 配置檔案: ~/.kube/config

 1apiVersion: v1
 2kind: Config
 3clusters:
 4- cluster:
 5    certificate-authority-data: <CA_DATA>
 6    server: https://127.0.0.1:58619
 7  name: minikube
 8contexts:
 9- context:
10    cluster: minikube
11    user: minikube
12  name: minikube
13current-context: minikube
14users:
15- name: minikube
16  user:
17    client-certificate-data: <CERT_DATA>
18    client-key-data: <KEY_DATA>

常用 kubectl 配置指令:

 1# 查看當前 context
 2kubectl config current-context
 3
 4# 列出所有 context
 5kubectl config get-contexts
 6
 7# 切換 context
 8kubectl config use-context minikube
 9
10# 查看配置
11kubectl config view
12
13# 設定命名空間
14kubectl config set-context --current --namespace=development
15
16# 添加叢集
17kubectl config set-cluster my-cluster \
18  --server=https://k8s.example.com:6443 \
19  --certificate-authority=/path/to/ca.crt
20
21# 添加使用者
22kubectl config set-credentials my-user \
23  --client-certificate=/path/to/client.crt \
24  --client-key=/path/to/client.key
25
26# 添加 context
27kubectl config set-context my-context \
28  --cluster=my-cluster \
29  --user=my-user \
30  --namespace=default

3. 驗證叢集健康狀態

 1# 查看叢集資訊
 2kubectl cluster-info
 3
 4# 查看節點
 5kubectl get nodes
 6kubectl describe node <node-name>
 7
 8# 查看元件狀態
 9kubectl get componentstatuses
10# 或
11kubectl get cs
12
13# 查看系統 Pod
14kubectl get pods -n kube-system
15
16# 查看所有命名空間的資源
17kubectl get all --all-namespaces
18
19# 查看事件
20kubectl get events --all-namespaces --sort-by='.lastTimestamp'

4. 第一個 Kubernetes 應用

創建 Nginx Deployment:

 1# 創建 Deployment
 2kubectl create deployment nginx --image=nginx:latest
 3
 4# 查看 Deployment
 5kubectl get deployments
 6
 7# 查看 Pod
 8kubectl get pods
 9
10# 暴露服務
11kubectl expose deployment nginx --port=80 --type=NodePort
12
13# 查看 Service
14kubectl get services
15
16# 取得服務 URL(Minikube)
17minikube service nginx --url
18
19# 測試服務
20curl $(minikube service nginx --url)

使用 YAML 檔案部署:

 1# nginx-deployment.yaml
 2apiVersion: apps/v1
 3kind: Deployment
 4metadata:
 5  name: nginx-deployment
 6  labels:
 7    app: nginx
 8spec:
 9  replicas: 3
10  selector:
11    matchLabels:
12      app: nginx
13  template:
14    metadata:
15      labels:
16        app: nginx
17    spec:
18      containers:
19      - name: nginx
20        image: nginx:1.24
21        ports:
22        - containerPort: 80
23        resources:
24          requests:
25            memory: "64Mi"
26            cpu: "250m"
27          limits:
28            memory: "128Mi"
29            cpu: "500m"
30
31---
32apiVersion: v1
33kind: Service
34metadata:
35  name: nginx-service
36spec:
37  selector:
38    app: nginx
39  type: LoadBalancer
40  ports:
41  - protocol: TCP
42    port: 80
43    targetPort: 80

部署應用:

 1# 應用 YAML
 2kubectl apply -f nginx-deployment.yaml
 3
 4# 查看資源
 5kubectl get deployments,pods,services
 6
 7# 查看詳細資訊
 8kubectl describe deployment nginx-deployment
 9kubectl describe service nginx-service
10
11# 查看 Pod 日誌
12kubectl logs <pod-name>
13
14# 進入 Pod
15kubectl exec -it <pod-name> -- bash
16
17# 刪除資源
18kubectl delete -f nginx-deployment.yaml

📊 Kubernetes 物件模型

宣告式 vs 命令式

graph TB
    A[Kubernetes 管理方式] --> B[命令式<br/>Imperative]
    A --> C[宣告式<br/>Declarative]

    B --> B1[kubectl run]
    B --> B2[kubectl create]
    B --> B3[kubectl expose]
    B --> B4[kubectl scale]

    C --> C1[YAML 檔案]
    C --> C2[kubectl apply]
    C --> C3[版本控制]
    C --> C4[GitOps]

    style A fill:#326ce5
    style B fill:#ff6b6b
    style C fill:#4ecdc4

對照表:

特性命令式(Imperative)宣告式(Declarative)
命令方式kubectl create, runkubectl apply
配置檔案不需要YAML/JSON
版本控制困難容易(Git)
可重複性
生產環境不推薦推薦
學習曲線
適用場景快速測試、學習生產部署、GitOps

YAML 基本結構

 1# 所有 Kubernetes 物件都遵循此結構
 2apiVersion: apps/v1              # API 版本
 3kind: Deployment                 # 資源類型
 4metadata:                        # 元資料
 5  name: my-app                   # 名稱
 6  namespace: default             # 命名空間
 7  labels:                        # 標籤
 8    app: my-app
 9    env: production
10  annotations:                   # 註解
11    description: "My application"
12spec:                            # 規格定義
13  # 具體規格內容
14  replicas: 3
15  selector:
16    matchLabels:
17      app: my-app
18  template:
19    metadata:
20      labels:
21        app: my-app
22    spec:
23      containers:
24      - name: app
25        image: my-app:v1.0

標籤(Labels)與選擇器(Selectors)

graph TB
    subgraph "標籤系統"
        P1[Pod 1<br/>app=web, env=prod]
        P2[Pod 2<br/>app=web, env=dev]
        P3[Pod 3<br/>app=api, env=prod]
        P4[Pod 4<br/>app=api, env=dev]
    end

    subgraph "選擇器"
        S1[Selector: app=web]
        S2[Selector: env=prod]
        S3[Selector: app=web, env=prod]
    end

    S1 -.-> P1
    S1 -.-> P2

    S2 -.-> P1
    S2 -.-> P3

    S3 -.-> P1

    style P1 fill:#4ecdc4
    style P2 fill:#a8e6cf
    style P3 fill:#feca57
    style P4 fill:#ffb3ba

標籤最佳實踐:

標籤鍵說明範例值
app應用名稱nginx, mysql
version應用版本v1.0.0, stable
component架構元件frontend, backend, database
tier應用層級frontend, backend, cache
environment環境production, staging, dev
managed-by管理工具helm, kubectl, terraform
part-of所屬專案myproject, e-commerce

🎯 學習路徑與資源

學習階段規劃

graph TB
    A[第一階段<br/>基礎概念] --> B[第二階段<br/>核心資源]
    B --> C[第三階段<br/>網路與存儲]
    C --> D[第四階段<br/>配置與安全]
    D --> E[第五階段<br/>進階功能]
    E --> F[第六階段<br/>生產實踐]

    A1[理解架構<br/>安裝 K8s<br/>基本指令] --> A
    B1[Pod/Deployment<br/>Service<br/>基本部署] --> B
    C1[Ingress<br/>NetworkPolicy<br/>PV/PVC] --> C
    D1[ConfigMap/Secret<br/>RBAC<br/>Security Context] --> D
    E1[StatefulSet<br/>DaemonSet<br/>Job/CronJob<br/>HPA] --> E
    F1[監控告警<br/>日誌管理<br/>CI/CD<br/>Helm] --> F

    style A fill:#326ce5
    style B fill:#4ecdc4
    style C fill:#a8e6cf
    style D fill:#feca57
    style E fill:#ffb3ba
    style F fill:#ff6b6b

推薦學習資源

官方文件:

互動式學習:

認證考試:

  • CKA(Certified Kubernetes Administrator)- 管理員認證
  • CKAD(Certified Kubernetes Application Developer)- 開發者認證
  • CKS(Certified Kubernetes Security Specialist)- 安全專家認證

🔍 常見問題解答

Q1: Kubernetes 和 Docker 是什麼關係?

答: Kubernetes 與 Docker 是互補而非競爭關係:

層級DockerKubernetes
定位容器運行時容器編排平台
作用運行單個容器管理多個容器
範圍單機叢集
關係K8s 使用 Docker 作為底層運行時之一

Q2: 什麼時候需要使用 Kubernetes?

適合使用 K8s:

  • 微服務架構
  • 需要自動擴展
  • 多環境部署(dev/staging/prod)
  • 需要高可用性
  • 容器數量超過 10 個

不需要 K8s:

  • 單體應用
  • 小型專案(<5 個容器)
  • 學習階段(可用 Docker Compose)
  • 資源有限(管理開銷大)

Q3: Kubernetes 有哪些替代方案?

方案特點適用場景
Docker Swarm簡單、Docker 原生小規模、簡單需求
Nomad輕量、支援多種工作負載混合工作負載
ECSAWS 託管AWS 生態系統
Cloud Run無伺服器容器簡單 HTTP 服務

Q4: Kubernetes 學習曲線陡峭嗎?

學習難度分析:

階段難度時間內容
基礎⭐⭐1-2週Pod, Deployment, Service
中級⭐⭐⭐1-2月Volume, ConfigMap, Ingress
進階⭐⭐⭐⭐3-6月StatefulSet, Operator, CRD
專家⭐⭐⭐⭐⭐6月+叢集管理、調優、安全

學習建議:

  1. 先掌握 Docker 基礎
  2. 循序漸進,從簡單應用開始
  3. 實際操作比理論重要
  4. 多看官方文件和範例
  5. 參與社群討論

Q5: 生產環境需要多少資源?

最小叢集配置(小型):

  • Control Plane:2 CPU, 4GB RAM
  • Worker Node × 3:2 CPU, 4GB RAM each
  • 總計:8 CPU, 16GB RAM

推薦配置(中型):

  • Control Plane:4 CPU, 8GB RAM
  • Worker Node × 5:4 CPU, 8GB RAM each
  • 總計:24 CPU, 48GB RAM

🎉 總結

本文介紹了 Kubernetes 的基礎概念,涵蓋:

核心知識點

  1. 什麼是 Kubernetes

    • 容器編排平台
    • 解決的問題
    • 與 Docker 的關係
  2. 核心架構

    • 控制平面(Control Plane)
    • 工作節點(Node)
    • 元件通訊流程
  3. 核心概念

    • Pod:最小部署單元
    • Deployment:應用部署管理
    • Service:服務發現與負載均衡
    • Volume:資料持久化
    • Namespace:資源隔離
    • ConfigMap/Secret:配置管理
  4. 安裝與配置

    • Minikube 本地開發環境
    • kubectl 配置
    • 第一個應用部署

關鍵要點

  • Kubernetes 是容器編排的事實標準
  • 聲明式配置是最佳實踐
  • 標籤與選擇器是資源管理的核心
  • 從簡單開始,循序漸進

下一步學習

在第二篇文章中,我們將深入探討:

  • 核心工作負載資源(Pod、Deployment、StatefulSet)
  • Service 與 Ingress 網路配置
  • 儲存管理(PV、PVC、StorageClass)
  • ConfigMap 與 Secret 實務應用
  • kubectl 進階操作與技巧

掌握這些基礎概念後,您將能夠理解 Kubernetes 的運作原理,為後續深入學習打下堅實的基礎!