前言
隨著微服務架構的普及,容器化技術已成為現代軟體開發的標準配備。而 Kubernetes(簡稱 K8s)作為目前最主流的容器編排平台,能夠幫助我們自動化部署、擴展和管理容器化應用程式。本文將介紹 Kubernetes 的基礎概念,幫助你快速入門這個強大的平台。
Kubernetes 簡介
Kubernetes 最初由 Google 開發,於 2014 年開源,目前由 Cloud Native Computing Foundation(CNCF)維護。K8s 這個縮寫來自於 Kubernetes 這個單字中間有 8 個字母(ubernete)。
為什麼需要 Kubernetes?
在沒有容器編排平台之前,我們面臨以下挑戰:
- 手動部署容器:需要人工在每台主機上啟動和停止容器
- 缺乏自動擴展:無法根據負載自動增減容器數量
- 服務發現困難:容器 IP 動態變化,難以追蹤服務位置
- 故障恢復緩慢:容器故障時需要人工介入處理
Kubernetes 解決了這些問題,提供:
- 自動化容器部署與管理
- 服務發現與負載平衡
- 自動擴展與自我修復
- 滾動更新與回滾機制
核心元件
Kubernetes 叢集由 Control Plane(控制平面)和 Worker Node(工作節點)組成。以下介紹幾個關鍵元件:
API Server
API Server 是 Kubernetes 控制平面的前端,負責處理所有 REST API 請求。它是叢集中唯一直接與 etcd 溝通的元件。
主要功能:
- 提供 RESTful API 介面
- 驗證和授權請求
- 處理叢集狀態的讀寫操作
| |
etcd
etcd 是一個分散式鍵值儲存系統,用於儲存 Kubernetes 叢集的所有配置資料和狀態資訊。
特點:
- 高可用性:支援多節點叢集部署
- 一致性:使用 Raft 協定確保資料一致性
- 安全性:支援 TLS 加密傳輸
etcd 儲存的資料包括:
- 節點資訊
- Pod 配置
- 密鑰和配置映射
- 服務帳號資訊
Scheduler
Scheduler 負責監控新建立且尚未分配節點的 Pod,並為其選擇最適合的節點運行。
排程考量因素:
- 資源需求(CPU、記憶體)
- 硬體/軟體/策略限制
- 親和性與反親和性規則
- 資料本地性
| |
基本物件
Pod
Pod 是 Kubernetes 中最小的部署單位,代表叢集中運行的一個或多個容器的組合。
特點:
- 同一 Pod 內的容器共享網路和儲存空間
- Pod 內的容器可透過 localhost 互相通訊
- Pod 是短暫的,可能隨時被終止和重新建立
| |
Node
Node 是 Kubernetes 叢集中的工作機器,可以是實體機或虛擬機。每個 Node 都包含運行 Pod 所需的服務。
Node 上運行的元件:
- kubelet:負責管理 Pod 和容器的生命週期
- kube-proxy:維護網路規則,實現服務的網路代理
- Container Runtime:負責運行容器(如 containerd、CRI-O)
| |
Namespace
Namespace 提供了一種在叢集內隔離資源群組的機制,適合用於多團隊或多專案的環境。
預設的 Namespace:
- default:沒有指定 Namespace 時的預設空間
- kube-system:Kubernetes 系統元件使用的空間
- kube-public:公開資源使用的空間
- kube-node-lease:節點心跳資訊使用的空間
| |
kubectl 基本指令
kubectl 是 Kubernetes 的命令列工具,用於與叢集互動。以下是一些常用指令:
資源查詢
| |
資源建立與刪除
| |
除錯與診斷
| |
資源編輯與擴展
| |
總結
本文介紹了 Kubernetes 的基礎概念,包括:
- Kubernetes 簡介:了解為什麼需要容器編排平台
- 核心元件:API Server、etcd、Scheduler 的角色與功能
- 基本物件:Pod、Node、Namespace 的概念與使用
- kubectl 指令:常用的命令列操作
這些只是 Kubernetes 的入門知識,實際上 K8s 還有許多進階功能,如 Deployment、Service、Ingress、ConfigMap、Secret 等,都值得深入學習。建議可以透過官方文件和實際操作來加深理解。