在規劃叢集內部資源要怎麼部署的時候,比起衡量服務需要的算力、記憶體、網路等,更核心要探討的部分,是這些容器要做什麼事情、解決什麼問題。
依照部署出來的特性,通常要用來監控叢集的,或者是作為 CNI插件 (CNI Plugins),必須要部署在每個節點上。
然而在早期使用 Docker Container 建立的觀念,資料庫不適合用容器運行,因為 Docker container 是 暫態(ephemeral) 的。 雖然技術上可行,若沒有妥善掛載 volume(如 Docker Volume、Bind mount、PVC),container 一重啟資料就沒了; 可以用但如果有叢集幫忙管理 永久儲存 (Persistent Volume) 的話,那麼也是可以拿容器來作為資料庫使用。
| 用途 | 說明 | 範例 |
|---|---|---|
| 📋 日誌收集 | 在每台機器收集 container logs | Fluentd, Filebeat, Logstash |
| 📊 監控代理 | 安裝監控 agent 到每個 Node | Prometheus Node Exporter, Datadog Agent |
| 🔐 安全守衛 | 防火牆、容器安全工具 | Falco, Sysdig |
| 🌐 網路管理 | 管理 CNI、設定 overlay network | Cilium, Weave Net |
| 🧪 節點健診 | 定時檢查 Node 健康狀況 | Node Problem Detector |
Taints + Tolerations 機制,並改寫 DaemonSet 來避免直接被植入,是個好方法。
之後再補充。
| 資源類型 | Pod 命名規則 | 範例 | 是否包含隨機字串 |
|---|---|---|---|
Deployment / ReplicaSet |
<deployment-name>-<replicaset-hash>-<pod-id> |
nginx-7d8b9c6f8b-4m2xl |
✅ 是(hash + 隨機) |
StatefulSet |
<statefulset-name>-<ordinal> |
mysql-0, mysql-1 |
❌ 否(固定、有序) |
Job |
<job-name>-<random-suffix> |
batch-job-5z2kp |
✅ 是(為避免重複) |
CronJob |
<cronjob-name>-<timestamp> |
backup-1689253040 |
✅ 是(根據時間戳) |
DaemonSet |
<daemonset-name>-<pod-template-hash>-<random> |
log-agent-fd89s |
✅ 是(帶 hash) |
Pod(手動建立) |
自己定義 | my-pod |
❌ 否(自己命名) |
PersistentVolumeClaim 的縮寫,用來向叢集申請儲存空間的資源,具有「請求者(Claim)」的概念,它代表 Pod 向儲存系統提出的「我要空間」的需求。PersistentVolume,由叢集管理的永久儲存。apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 10Gi
| 模式 | 說明 |
|---|---|
ReadWriteOnce (RWO) |
單一 Node 可讀寫,常見於 AWS EBS 等 |
ReadOnlyMany (ROX) |
多個 Node 可唯讀 |
ReadWriteMany (RWX) |
多個 Node 可同時讀寫,如 NFS、CephFS |
| 類別 | 特點 |
|---|---|
| 抽象性 | 與儲存設備解耦,Pod 只認 PVC |
| 安全性 | 資料與應用分離,不因重建 Pod 而遺失 |
| 可配置性 | 支援多種儲存後端與自動配置 |
| 彈性擴展 | 可搭配 StatefulSet、自動擴容(某些 CSI 支援) |
| 適用場景 | DB、ElasticSearch、持久型快取、備份空間等 |
先確認情境,選擇合適的做法吧!
| 情境 | 建議資源 |
|---|---|
| 每台 Node 都要跑一個守護程式(Log、Agent) | DaemonSet |
| 系統級背景任務或 CNI 插件 | DaemonSet |
| 每個 Pod 都有獨立儲存與固定身份 | StatefulSet |
| 想確保有序升級 / 移轉 / 故障恢復 | StatefulSet |