前言
Kubernetes(簡稱 K8s)是 Google 開源的容器編排引擎,支援自動化部署、大規模可伸縮和應用容器化管理。對開發者而言,Kubernetes 可以看成一個叢集作業系統,提供服務發現、伸縮、負載均衡、自癒等功能。本文將從 Kubernetes 的架構、核心物件到實際部署,帶你建立完整的基礎認知。
Kubernetes 叢集架構
Kubernetes 叢集由 Master 節點和 Node 節點組成。
Master 節點
Master 節點是叢集的控制節點,由四個核心元件構成:
- API Server:各元件互相通訊的中轉站,接受外部請求並將資訊寫入 ETCD
- Controller Manager:執行叢集級功能,如追蹤節點、處理節點故障等
- Scheduler:負責根據資源、親和性等條件將容器調度到 Node 上運行
- ETCD:分散式資料儲存元件,負責儲存叢集的設定資訊
生產環境通常部署多個 Master 以保障高可用。
Node 節點
Node 節點是叢集的計算節點,運行容器化應用:
- kubelet:與 Container Runtime 互動,管理節點上的容器
- kube-proxy:應用間的存取代理,解決節點上應用的存取問題
- Container Runtime:容器運行時(如 Docker),負責下載映像檔和運行容器
Kubernetes 的擴展性
Kubernetes 開放了三大介面,讓擴展性最大化:
- CRI(Container Runtime Interface):容器運行時介面,支援不同容器引擎
- CNI(Container Network Interface):容器網路介面,支援不同網路環境
- CSI(Container Storage Interface):容器儲存介面,支援各種類型的儲存
Kubernetes 核心物件
工作負載類
- Pod:K8s 建立或部署的最小單位,封裝一個或多個容器、儲存卷和獨立網路 IP
- Deployment:對 Pod 的服務化封裝,支援多副本和自動分發請求
- StatefulSet:管理有狀態應用,為每個 Pod 維護固定 ID
- DaemonSet:在每個節點上運行一個 Pod,適合日誌收集、資源監控等
- Job / CronJob:分別用於批次任務和定時任務
服務與網路類
- Service:提供固定 IP 位址和負載均衡,基於四層 TCP/UDP 轉發
- Ingress:基於七層 HTTP/HTTPS 轉發,支援域名和路徑細粒度劃分
設定與儲存類
- ConfigMap:儲存設定資料的鍵值對,實現設定解耦
- Secret:加密儲存認證資訊、憑證、私鑰等敏感資料
- PV / PVC:PV 定義持久化儲存卷,PVC 用於申請儲存資源
kubectl 命令列工具
kubectl 是 Kubernetes 叢集的命令列工具,可安裝在任意機器上操作叢集。
# 查看叢集資訊
kubectl cluster-info
# 查看節點
kubectl get nodes
Kubernetes 物件的 YAML 描述
Kubernetes 資源使用 YAML 描述,內容分為四個部分:
- typeMeta:API 版本和物件類型
- objectMeta:物件名稱、標籤等元資訊
- spec:物件的期望狀態(映像檔、副本數等)
- status:物件的實際狀態(建立後才有)
實戰:部署第一個應用
撰寫 Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 100m
memory: 200Mi
部署與查看
# 建立 Deployment
kubectl create -f nginx-deployment.yaml
# 查看 Deployment
kubectl get deploy
# 查看 Pod
kubectl get pods
總結
- Kubernetes 由 Master 和 Node 節點組成,Master 負責控制,Node 負責運行工作負載
- CRI、CNI、CSI 三大介面讓 Kubernetes 具備極高的擴展性
- Pod 是最小部署單位,Deployment、StatefulSet、DaemonSet 等控制器管理 Pod 的生命週期
- Service 和 Ingress 解決服務存取問題,ConfigMap 和 Secret 管理設定資料
- 使用 kubectl 和 YAML 描述檔即可在叢集上部署和管理應用

發佈留言