Deployment 和 ReplicaSet 通常使用多個 replica 時候,都是建在各 nodes 隨機安裝。
DaemonSet 可以讓每一台 node 運行 Pod。
感覺這個跟 docker swarm 的 agent mode :global 一樣 docker swarm 一些指令相關整理 | 程式狂想筆記
立馬實作看看
DaemonSet
使用 DaemonSet 會在所有 node 建立 Pod。如先前所講,跟 Docker Swarm 很像的 agent mode :global 很像
也可以針對 nodename 來建立 Pod。
後記
確保每個節點都會有一份運行的Pod。
- Storage daemon 每台機器都要裝
- CNI daemon
- 日誌收集
- 監控收集
taint 的 NoSchedule 可以阻擋 DaemonSet 部屬。
DaemonSet 概念圖
原有兩台節點(Node)
後面加上一個Node就會部屬Pod
建立 DaemonSet
examples/9-1-fluentd.yaml at master · kubernetes-up-and-running/examples
這邊版本太舊
no matches for kind “DaemonSet” in version “extensions/v1beta1
no matches for kind “DaemonSet” in version “extensions/v1beta1” · Issue #627 · gluster/gluster-kubernetes
notes:
changed apiVersion to "apps/v1" added selector
最後還是套用官方文件DaemonSet | Kubernetes
1 | apiVersion: apps/v1 |
1 | kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml |
查看狀況,這邊namespace 要調整
1 | kubectl describe daemonsets fluentd-elasticsearch --namespace kube-system |
1 | kubectl get pods -o wide --namespace kube-system |
node 新增一個 Label
1 | # 查看 nodes 名稱有哪些 |
1 | apiVersion: apps/v1 |
這邊有實作Day-25 認識DaemonSet - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
Pod 都沒有出來
不知道是不是 Kind 出問題??
1 | tolerations: |
這行家這個就能跑了…
在研究什麼原因
刪除 DaemonSet
1 | kubectl delete daemonset nginx-fast-storage |
DaemonSet Tree
DaemonSet -> ControllerRevision -> Pod
DaemonSet因為有ControllerRevision 可以控制版本。但無法做到Replica一樣功能。
kube-system 有用到 DaemonSet
1 | kubectl -n kube-system get ds |
1 | NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE |
StatefulSets
有狀態的Pod。
常運用儲存、網路結合。
Network
StatefulSet -> Pod-1
-> Pod-2
-> Pod-3
每個Pod都有個自Dns。
Storage
Pod-1 -> Volume-1
Pod-2 -> Volume-2
更新策略
從後面先動作,先關掉再建立Pod。
Tree
StatefulSet->ControllerRevision->Pod