DaemonSet を使ってみる (kubernetes)
kubernetes
Published: 2020-12-30

やったこと

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が起動したことが分かります。

参考