kubernetes-SchedulingDisabledのノード上でDaemonSetのpodをスケジューリングすることを禁止する

2912 ワード

マスターノードを設定しました:SchedulingDisabled:
$ kubectl get node
NAME         STATUS                     ROLES                  AGE    VERSION
10.2.2.120   Ready,SchedulingDisabled   master                 239d   v1.13.3
10.2.2.121   Ready                      metallb-speaker,node   239d   v1.13.3
10.2.2.122   Ready                      metallb-speaker,node   239d   v1.13.3
10.2.2.123   Ready                      node                   105d   v1.13.3

しかし、私が配置したDaemonSetは、SchedulingDisabledを設定したノード(10.2.2.120)にpodがスケジューリングされています.
$ kubectl get po -l app=nginx -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
web-7l4s6                1/1     Running   0          35s     172.20.0.100   10.2.2.120              
web-clvgl                1/1     Running   0          35s     172.20.3.122   10.2.2.123              
web-j7plz                1/1     Running   0          35s     172.20.1.182   10.2.2.121              
web-zgbnd                1/1     Running   0          35s     172.20.2.139   10.2.2.122              

SchedulingDisabledのノードにpodがスケジューリングされないようにするには、DaemonSetにnodeSelectorを設定して、指定したラベルのノードでpoを実行させることができます.
1.ノードにラベルを付ける:
kubectl label nodes 10.2.2.121 key=val
kubectl label nodes 10.2.2.122 key=val
kubectl label nodes 10.2.2.123 key=val

2.次にDaemonSetでノード選択を追加します:nodeSelector:
$ cat daemonset.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: web
  namespace: default
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        key: val
      containers:
      - name: nginx
        image: nginx:latest

3.選択したnodeで正しいスケジューリングが実行されていることを確認します.
$ kubectl get po -l app=nginx -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
web-6rnk8                1/1     Running   0          34s     172.20.3.123   10.2.2.123              
web-9jdpc                1/1     Running   0          22s     172.20.2.140   10.2.2.122              
web-l5gvj                1/1     Running   0          56s     172.20.1.183   10.2.2.121              

他にも方法があります.参考:
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#taints-and-tolerations
kubernetes-K 8 SスケジューリングのTaints and Tolerations
その他の参考:
https://stackoverflow.com/questions/40493395/kubernetes-1-4-3-why-daemonset-is-scheduled-on-master
https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/