やったこと
DaemonSet を使ってみます。
確認環境
$ k version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:41:49Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
調査
DaemonSet は全て(またはいくつか)のNodeが単一のPodのコピーを稼働させることを保証します。
sample4.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemon-first
spec:
selector:
matchLabels:
app: sample4
template:
metadata:
labels:
app: sample4
spec:
containers:
- name: nginx-container
image: nginx:1.16
マニフェストの適用
$ k apply -f sample4.yaml
daemonset.apps/my-daemon-first created
$ k get pods
NAME READY STATUS RESTARTS AGE
my-daemon-first-fghkd 1/1 Running 0 22s
$ k get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
my-daemon-first 1 1 1 1 1 <none> 11m
$ k get pods
NAME READY STATUS RESTARTS AGE
my-daemon-first-fghkd 1/1 Running 0 59s
sample4.yaml を編集します。
image: nginx:1.17
更新を適用する
$ k apply -f sample4.yaml
daemonset.apps/my-daemon-first configured
$ k get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
my-daemon-first 1 1 1 0 1 <none> 12m
$ k get pods
NAME READY STATUS RESTARTS AGE
my-daemon-first-fghkd 1/1 Terminating 0 114s
// しばらくした後
$ k get pods
NAME READY STATUS RESTARTS AGE
my-daemon-first-nnfnm 1/1 Running 0 35s
更新戦略
$ k get ds -o jsonpath="{.items[0].spec.updateStrategy}"
map[rollingUpdate:map[maxUnavailable:1]
maxUnavailable=1 より、Terminateされてから新しいPodが起動したことが分かります。