在規劃叢集內部資源要怎麼部署的時候,比起衡量服務需要的算力、記憶體、網路等,更核心要探討的部分,是這些容器要做什麼事情、解決什麼問題。
依照部署出來的特性,通常要用來監控叢集的,或者是作為 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 |