當DaemonSet設定好後,DaemonSet會在Kubernetes上符合條件的Node中佈署一個Pod,新增Node時會自動佈署和移除Node時會回收並刪除Pod,同時DaemonSet也支援滾動式更新。
因為DaemonSet的特性,所以非常適合用來佈署監控、日誌收集等應用程式。
如果要佈署監控、日誌收集等還會涉及到其他設定,這樣有點麻煩,所以這裡就隨便拿一個image來展示和示範。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemon-demo
spec:
selector:
matchLabels:
app: daemon-demo
template:
metadata:
labels:
app: daemon-demo
spec:
containers:
- name: google-samples
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: Always
ports:
- containerPort: 5000
可在查詢pod時加上-o wide來查看目前pod佈署在哪一個node上。
可以看到目前DaemonSet創建的pod在所有Node中都各有一個
現在可以創建一個Node來觀察

可以看到在創建一個新的Node後不久DaemonSet就創建了一個新的Pod並佈署在新Node上。
我們也可以透過nodeSelector:來將pod佈署在特定條件的node上
先給node上標籤
(註:詳細關於標籤(label)的介紹與使用方法可以回到DAY6查看)
這裡我讓minikube、minikube-m03的daemon-label=0,minikube-m02的daemon-label=1
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemon-demo
spec:
selector:
matchLabels:
app: daemon-demo
template:
metadata:
labels:
app: daemon-demo
spec:
nodeSelector:
daemon-label: '0'
containers:
- name: google-samples
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: Always
ports:
- containerPort: 5000
套用後再觀察pod的佈署狀況
可以發現在minikube-m02的pod被撤下來了。
| Deployment | DaemonSet | |
|---|---|---|
| 主要用途 | 佈署無狀態應用 | 佈署監控、日誌等服務 |
| Pod佈署數量 | 透過replicas: 調整 |
按照Node條件進行佈署 |
| Node新增時 | 並不會自動在新Node上佈署Pod | 按照新Node條件決定是否進行佈署 |
| Node刪除時 | 會將上方的Pod調度至其他Node 維持當初設定Pody總數 | 刪除Node時會刪除佈署在上面的Pod |