Kubernetes: ๊ตฌ์—ญ ๋ถˆ๊ท ํ˜•์ด์žˆ์„ ๋•Œ ์ผ๋ถ€ ๋…ธ๋“œ๋Š” ์Šค์ผ€์ค„๋ง์—์„œ ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 05์›” 30์ผ  ยท  129์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋Š”์ง€ : ์šฐ๋ฆฌ๋Š” 15 ๊ฐœ์˜ kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ 1.17.5์—์„œ 1.18.2 / 1.18.3์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๊ณ  ๋ฐ๋ชฌ ์…‹์ด ๋” ์ด์ƒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋ชจ๋“  ๋ฐ๋ชฌ ์…‹ ํฌ๋“œ๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ์— ๋‹ค์Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  9s (x5 over 71s)  default-scheduler  0/13 nodes are available: 12 node(s) didn't match node selector.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋…ธ๋“œ ์„ ํƒ๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์—๋„ ์˜ค์—ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชฌ ์…‹ https://gist.github.com/zetaab/4a605cb3e15e349934cb7db29ec72bd8

% kubectl get nodes
NAME                                   STATUS   ROLES    AGE   VERSION
e2etest-1-kaasprod-k8s-local           Ready    node     46h   v1.18.3
e2etest-2-kaasprod-k8s-local           Ready    node     46h   v1.18.3
e2etest-3-kaasprod-k8s-local           Ready    node     44h   v1.18.3
e2etest-4-kaasprod-k8s-local           Ready    node     44h   v1.18.3
master-zone-1-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
master-zone-2-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
master-zone-3-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
nodes-z1-1-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z1-2-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z2-1-kaasprod-k8s-local          Ready    node     46h   v1.18.3
nodes-z2-2-kaasprod-k8s-local          Ready    node     46h   v1.18.3
nodes-z3-1-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z3-2-kaasprod-k8s-local          Ready    node     46h   v1.18.3

% kubectl get pods -n weave -l weave-scope-component=agent -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE                                   NOMINATED NODE   READINESS GATES
weave-scope-agent-2drzw   1/1     Running   0          26h     10.1.32.23   e2etest-1-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-4kpxc   1/1     Running   3          26h     10.1.32.12   nodes-z1-2-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-78n7r   1/1     Running   0          26h     10.1.32.7    e2etest-4-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-9m4n8   1/1     Running   0          26h     10.1.96.4    master-zone-1-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-b2gnk   1/1     Running   1          26h     10.1.96.12   master-zone-3-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-blwtx   1/1     Running   2          26h     10.1.32.20   nodes-z1-1-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-cbhjg   1/1     Running   0          26h     10.1.64.15   e2etest-2-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-csp49   1/1     Running   0          26h     10.1.96.14   e2etest-3-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-g4k2x   1/1     Running   1          26h     10.1.64.10   nodes-z2-2-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-kx85h   1/1     Running   2          26h     10.1.96.6    nodes-z3-1-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-lllqc   0/1     Pending   0          5m56s   <none>       <none>                                 <none>           <none>
weave-scope-agent-nls2h   1/1     Running   0          26h     10.1.96.17   master-zone-2-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-p8njs   1/1     Running   2          26h     10.1.96.19   nodes-z3-2-kaasprod-k8s-local          <none>           <none>

apiserver / schedulers / controller-managers๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉˆ์ถฐ์žˆ๋Š” ๋‹จ์ผ ๋…ธ๋“œ (nodes-z2-1-kaasprod-k8s-local)๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์ด ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

% kubectl describe node nodes-z2-1-kaasprod-k8s-local
Name:               nodes-z2-1-kaasprod-k8s-local
Roles:              node
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=59cf4871-de1b-4294-9e9f-2ea7ca4b771f
                    beta.kubernetes.io/os=linux
                    failure-domain.beta.kubernetes.io/region=regionOne
                    failure-domain.beta.kubernetes.io/zone=zone-2
                    kops.k8s.io/instancegroup=nodes-z2
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=nodes-z2-1-kaasprod-k8s-local
                    kubernetes.io/os=linux
                    kubernetes.io/role=node
                    node-role.kubernetes.io/node=
                    node.kubernetes.io/instance-type=59cf4871-de1b-4294-9e9f-2ea7ca4b771f
                    topology.cinder.csi.openstack.org/zone=zone-2
                    topology.kubernetes.io/region=regionOne
                    topology.kubernetes.io/zone=zone-2
Annotations:        csi.volume.kubernetes.io/nodeid: {"cinder.csi.openstack.org":"faf14d22-010f-494a-9b34-888bdad1d2df"}
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 10.1.64.32/19
                    projectcalico.org/IPv4IPIPTunnelAddr: 100.98.136.0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 28 May 2020 13:28:24 +0300
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  nodes-z2-1-kaasprod-k8s-local
  AcquireTime:     <unset>
  RenewTime:       Sat, 30 May 2020 12:02:13 +0300
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Fri, 29 May 2020 09:40:51 +0300   Fri, 29 May 2020 09:40:51 +0300   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  10.1.64.32
  Hostname:    nodes-z2-1-kaasprod-k8s-local
Capacity:
  cpu:                4
  ephemeral-storage:  10287360Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8172420Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  9480830961
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8070020Ki
  pods:               110
System Info:
  Machine ID:                 c94284656ff04cf090852c1ddee7bcc2
  System UUID:                faf14d22-010f-494a-9b34-888bdad1d2df
  Boot ID:                    295dc3d9-0a90-49ee-92f3-9be45f2f8e3d
  Kernel Version:             4.19.0-8-cloud-amd64
  OS Image:                   Debian GNU/Linux 10 (buster)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.8
  Kubelet Version:            v1.18.3
  Kube-Proxy Version:         v1.18.3
PodCIDR:                      100.96.12.0/24
PodCIDRs:                     100.96.12.0/24
ProviderID:                   openstack:///faf14d22-010f-494a-9b34-888bdad1d2df
Non-terminated Pods:          (3 in total)
  Namespace                   Name                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                        ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-77pqs                           100m (2%)     200m (5%)   100Mi (1%)       100Mi (1%)     46h
  kube-system                 kube-proxy-nodes-z2-1-kaasprod-k8s-local    100m (2%)     200m (5%)   100Mi (1%)       100Mi (1%)     46h
  volume                      csi-cinder-nodeplugin-5jbvl                 100m (2%)     400m (10%)  200Mi (2%)       200Mi (2%)     46h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                300m (7%)   800m (20%)
  memory             400Mi (5%)  400Mi (5%)
  ephemeral-storage  0 (0%)      0 (0%)
Events:
  Type    Reason                   Age    From                                    Message
  ----    ------                   ----   ----                                    -------
  Normal  Starting                 7m27s  kubelet, nodes-z2-1-kaasprod-k8s-local  Starting kubelet.
  Normal  NodeHasSufficientMemory  7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasSufficientPID
  Normal  NodeAllocatableEnforced  7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Updated Node Allocatable limit across pods

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด๊ฒƒ์„ ๋ฌด์ž‘์œ„๋กœ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ ํ•œ ์ผ : ๋ฐ๋ชฌ ์…‹์ด ๋ชจ๋“  ๋…ธ๋“œ์— ํ”„๋กœ๋น„์ €๋‹ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ) : ์ •๋ง ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. 1.18.x kubernetes๋ฅผ ์„ค์น˜ํ•˜๊ณ  daemonset์„ ๋ฐฐํฌํ•˜๊ณ  ๊ทธ ๋Œ€๊ธฐ ์ผ ์ดํ›„ (?)

์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? :์ด ๊ฒฝ์šฐ ํ•ด๋‹น ๋…ธ๋“œ์— ๋‹ค๋ฅธ ๋ฐ๋ชฌ ์…‹์„ ํ”„๋กœ๋น„์ €๋‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ์œ ์ฐฝํ•œ ๋น„ํŠธ๋„ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ kubelet ๋กœ๊ทธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

% kubectl get ds --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
falco         falco-daemonset            13        13        12      13           12          <none>                            337d
kube-system   audit-webhook-deployment   3         3         3       3            3           node-role.kubernetes.io/master=   174d
kube-system   calico-node                13        13        13      13           13          kubernetes.io/os=linux            36d
kube-system   kops-controller            3         3         3       3            3           node-role.kubernetes.io/master=   193d
kube-system   metricbeat                 6         6         5       6            5           <none>                            35d
kube-system   openstack-cloud-provider   3         3         3       3            3           node-role.kubernetes.io/master=   337d
logging       fluent-bit                 13        13        12      13           12          <none>                            337d
monitoring    node-exporter              13        13        12      13           12          kubernetes.io/os=linux            58d
volume        csi-cinder-nodeplugin      6         6         6       6            6           <none>                            239d
weave         weave-scope-agent          13        13        12      13           12          <none>                            193d
weave         weavescope-iowait-plugin   6         6         5       6            5           <none>                            193d

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ๋ชฌ ์…‹์—๋Š” ํ•˜๋‚˜์˜ ํฌ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ :

  • Kubernetes ๋ฒ„์ „ ( kubectl version ) : 1.18.3
  • ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ : openstack
  • OS (์˜ˆ : cat /etc/os-release ) : ๋ฐ๋น„์•ˆ ๋ฒ„์Šคํ„ฐ
  • ์ปค๋„ (์˜ˆ : uname -a ) : Linux nodes-z2-1-kaasprod-k8s-local 4.19.0-8-cloud-amd64 # 1 SMP Debian 4.19.98-1 + deb10u1 (2020-04-27) x86_64 GNU / ๋ฆฌ๋ˆ…์Šค
  • ๋„๊ตฌ ์„ค์น˜ : kops
  • ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ๋ฒ„์ „ (๋„คํŠธ์›Œํฌ ๊ด€๋ จ ๋ฒ„๊ทธ ์ธ ๊ฒฝ์šฐ) : calico
  • ๊ธฐํƒ€ :
help wanted kinbug prioritimportant-soon sischeduling

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ˜„์žฌ ์ œ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์Šค๋ƒ… ์ƒท์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  129 ๋Œ“๊ธ€

/ ์‹œ๊ทธ ์Šค์ผ€์ค„๋ง

์„œ๋ฒ„์—์„œ ๊ฒ€์ƒ‰๋œ ๋…ธ๋“œ, ๋ฐ๋ชฌ ์…‹, ์˜ˆ์ œ ํฌ๋“œ ๋ฐ ํฌํ•จํ•˜๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์˜ ์ „์ฒด yaml์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋งˆ๋””:
https://gist.github.com/zetaab/2a7e8d3fe6cb42a617e17abc0fa375f7

๋ฐ๋ชฌ ์…‹ :
https://gist.github.com/zetaab/31bb406c8bd622b3017bf4f468d0154f

์˜ˆ์ œ ํฌ๋“œ (์ž‘๋™ ์ค‘) :
https://gist.github.com/zetaab/814871bec6f2879e371f5bbdc6f2e978

์˜ˆ์ œ ํฌ๋“œ (์ผ์ •์ด ์•„๋‹˜) :
https://gist.github.com/zetaab/f3488d65486c745af78dbe2e6173fd42

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค :
https://gist.github.com/zetaab/4625b759f4e21b50757c79e5072cd7d9

๋‹จ์ผ ๋…ธ๋“œ์™€ ๋งŒ ์ผ์น˜ํ•˜๋Š” nodeAffinity ์„ ํƒ๊ธฐ๋กœ DaemonSet pod ์ผ์ •์„ ์˜ˆ์•ฝํ•˜๋ฏ€๋กœ "13 ๊ฐœ ์ค‘ 12 ๊ฐœ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ"๋ฉ”์‹œ์ง€๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํฌ๋“œ / ๋…ธ๋“œ ์ฝค๋ณด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฌ๋“œ ์ŠคํŽ™์—์„œ ์ถฉ๋Œ ํ•  ์ˆ˜์žˆ๋Š” ํฌํŠธ๊ฐ€์—†๊ณ  ๋…ธ๋“œ๊ฐ€ ์˜ˆ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์˜ค์—ผ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ถฉ๋ถ„ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. 3 ๊ฐœ์˜ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋ชจ๋‘ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค (ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉด loglevel์„ 4๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

% kubectl get ds --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
falco         falco-daemonset            13        13        13      13           13          <none>                            338d
kube-system   audit-webhook-deployment   3         3         3       3            3           node-role.kubernetes.io/master=   175d
kube-system   calico-node                13        13        13      13           13          kubernetes.io/os=linux            36d
kube-system   kops-controller            3         3         3       3            3           node-role.kubernetes.io/master=   194d
kube-system   metricbeat                 6         6         6       6            6           <none>                            36d
kube-system   openstack-cloud-provider   3         3         3       3            3           node-role.kubernetes.io/master=   338d
logging       fluent-bit                 13        13        13      13           13          <none>                            338d
monitoring    node-exporter              13        13        13      13           13          kubernetes.io/os=linux            59d
volume        csi-cinder-nodeplugin      6         6         6       6            6           <none>                            239d
weave         weave-scope-agent          13        13        13      13           13          <none>                            194d
weave         weavescope-iowait-plugin   6         6         6       6            6           <none>                            194d

์ด์ œ ๋ชจ๋“  ๋ฐ๋ชฌ ์…‹์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ”„๋กœ๋น„์ €๋‹๋ฉ๋‹ˆ๋‹ค. ์–ด์จ‹๋“  ์Šค์ผ€์ค„๋Ÿฌ์— ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

cc @ kubernetes / sig-scheduling-bugs @ ahg-g

v1.18.3์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๋ฐ๋ชฌ ์…‹ ํฌ๋“œ๋กœ ์˜ˆ์•ฝ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋‹ค์‹œ ์‹œ์ž‘ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get pod -A|grep Pending
kube-system   coredns-vc5ws                                                 0/1     Pending   0          2d16h
kube-system   local-volume-provisioner-mwk88                                0/1     Pending   0          2d16h
kube-system   svcwatcher-ltqb6                                              0/1     Pending   0          2d16h
ncms          bcmt-api-hfzl6                                                0/1     Pending   0          2d16h
ncms          bcmt-yum-repo-589d8bb756-5zbvh                                0/1     Pending   0          2d16h
[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get ds -A
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-system   coredns                    3         3         2       3            2           is_control=true                 2d16h
kube-system   danmep-cleaner             0         0         0       0            0           cbcs.nokia.com/danm_node=true   2d16h
kube-system   kube-proxy                 8         8         8       8            8           <none>                          2d16h
kube-system   local-volume-provisioner   8         8         7       8            7           <none>                          2d16h
kube-system   netwatcher                 0         0         0       0            0           cbcs.nokia.com/danm_node=true   2d16h
kube-system   sriov-device-plugin        0         0         0       0            0           sriov=enabled                   2d16h
kube-system   svcwatcher                 3         3         2       3            2           is_control=true                 2d16h
ncms          bcmt-api                   3         3         0       3            0           is_control=true                 2d16h
[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get node
NAME                                  STATUS   ROLES    AGE     VERSION
tesla-cb0434-csfp1-csfp1-control-01   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-control-02   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-control-03   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-edge-01      Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-edge-02      Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-01    Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-02    Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-03    Ready    <none>   2d16h   v1.18.3

๊ฐ์†Œ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋ฉด ๋””๋ฒ„๊น…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํŒŸ (Pod)์„ ์˜ˆ์•ฝํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ 3 ๊ฐœ๋ฅผ ๋ชจ๋‘ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ์ค‘ ํ•˜๋‚˜๋งŒ default-scheduler ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด loglevel์„ 4๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋ฐœ๊ฒฌ ํ•œ ๊ฒƒ์„ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

loglevel์„ 9๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ ๋” ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋กœ๊ทธ๊ฐ€ ๋ฃจํ•‘๋ฉ๋‹ˆ๋‹ค.

I0601 01:45:05.039373       1 generic_scheduler.go:290] Preemption will not help schedule pod kube-system/coredns-vc5ws on any node.
I0601 01:45:05.039437       1 factory.go:462] Unable to schedule kube-system/coredns-vc5ws: no fit: 0/8 nodes are available: 7 node(s) didn't match node selector.; waiting
I0601 01:45:05.039494       1 scheduler.go:776] Updating pod condition for kube-system/coredns-vc5ws to (PodScheduled==False, Reason=Unschedulable)

๊ทธ๋ž˜ ๊ฐ™์€ ์ค„ ์ด์ƒ์€ ๋ณผ ์ˆ˜ ์—†์—ˆ์–ด

no fit: 0/8 nodes are available: 7 node(s) didn't match node selector.; waiting

์ด์ƒํ•œ ์ ์€ https://github.com/kubernetes/kubernetes/issues/91340 ์—๋ณด๊ณ  ๋œ ๋ฌธ์ œ์™€ ๊ฐ™์ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— 7 ๊ฐœ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋งŒ ํ‘œ์‹œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

/ cc @damemi

@ ahg-g ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฑฐ๊ธฐ์—๋ณด๊ณ  ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š” ํ•„ํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๊ฑฐ๋‚˜ ์ถ”์ธก ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‹คํŒจํ•˜๋Š” ๋‹ค๋ฅธ ์กฐ๊ฑด์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ฌธ์ œ์—์„œ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค (์ด ์Šค๋ ˆ๋“œ์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-636360092).

๋‚ด ๊ฒƒ๋„ ๋ฐ๋ชฌ ์…‹์— ๊ด€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ค‘๋ณต์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ https://github.com/kubernetes/kubernetes/issues/91340 ์—์„œ ํ† ๋ก ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์Šค์ผ€์ค„๋Ÿฌ์—๋Š” ๋” ์ž์„ธํ•œ ๋กœ๊น… ์˜ต์…˜์ด ํ•„์š”ํ•˜๋ฉฐ, ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ๋กœ๊ทธ๊ฐ€ ์—†์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@zetaab +1, ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ˜„์žฌ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ํฌ๊ฒŒ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ œ๊ฐ€ ํ•œ๋™์•ˆ ๋‹ค๋ฃจ๋ ค๊ณ ํ–ˆ๋˜ ์—…๊ทธ๋ ˆ์ด๋“œ์ด๊ณ  ๋งˆ์นจ๋‚ด ์—ฌ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค : https://github.com/kubernetes/kubernetes/issues/91633

/์–‘์ˆ˜์ธ

๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ ์žˆ๋‹ค. ์ผ€์ด์Šค ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ์žฌ์ƒ์‚ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋จผ์ € ์ƒ์„ฑ ๋œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ : ๋ฐ๋ชฌ ์…‹ ๋˜๋Š” ๋…ธ๋“œ?
  • ๊ธฐ๋ณธ ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
  • ์ต์Šคํ…๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ๋ชฌ ์…‹ ์ด์ „์— ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœํ•„์„ ์˜๋ฏธํ•˜๋ฉฐ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ต์Šคํ…๋”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    command:
    - /usr/local/bin/kube-scheduler
    - --address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/kube-scheduler.kubeconfig
    - --profiling=false
    - --v=1

์˜ํ–ฅ์„ ์ค„ ์ˆ˜์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ ์€ ๋””์Šคํฌ ์„ฑ๋Šฅ์ด etcd์— ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. etcd๋Š” ๋Š๋ฆฐ ์ž‘์—…์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ด๋Ÿฌํ•œ ํ”Œ๋ž˜๊ทธ๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๊ธฐ๋ณธ ํ”„๋กœํ•„๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์† ์ฐพ์•„ ๋ณผ๊ฒŒ์š”. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋ฒˆ์‹ ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

์—ฌ์ „ํžˆ ์•„๋ฌด๊ฒƒ๋„ ... ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ค‘์ธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ค์—ผ๋ฌผ, ํ•ญ๊ตฌ, ๊ธฐํƒ€ ์ž์›?

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์‹œ๋„๋ฅผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํฌ๋“œ๋ฅผ ๋…ธ๋“œ์— ๊ณ„์† ์˜ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ •์˜์—†์ด ๋˜๋Š” "nodeName"์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ).

Affinity / Antiaffinity๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋ฉด ํฌ๋“œ๊ฐ€ ๋…ธ๋“œ์— ์˜ˆ์•ฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€์žˆ์„ ๋•Œ ์ž‘์—… :

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  nodeName: master-zone-3-1-1-test-cluster-k8s-local
  containers:
    - image: nginx
      name: nginx
      resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

๋™์‹œ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Œ :

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                  - master-zone-3-1-1-test-cluster-k8s-local
  containers:
    - image: nginx
      name: nginx
      resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

๋˜ํ•œ ํ›„์ž์˜ ๊ฒฝ์šฐ์—๋„ ๋งค์šฐ ํฅ๋ฏธ๋กœ ์› ์Šต๋‹ˆ๋‹ค.

Warning  FailedScheduling  4m37s (x17 over 26m)  default-scheduler  0/9 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  97s (x6 over 3m39s)   default-scheduler  0/8 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  53s                   default-scheduler  0/8 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  7s (x5 over 32s)      default-scheduler  0/9 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 7 node(s) didn't match node selector.
  • ์ฒซ ๋ฒˆ์งธ ์ด๋ฒคํŠธ๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ๋ฐฉ๊ธˆ ์ ์šฉ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค (์˜ˆ์•ฝ ํ•  ์ˆ˜์—†๋Š” ๋…ธ๋“œ์—๋Š” ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ).
  • ๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ๋Š” kubectl๋กœ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ์˜€์Šต๋‹ˆ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ๋Š” ๋…ธ๋“œ๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ์ด๋ฏ€๋กœ ๋…ธ๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ๊ฐ€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋…ธ๋“œ๊ฐ€ ์ด์ „ ์ด๋ฒคํŠธ 3 ๊ฐœ์—์„œ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜ ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค). ๋„ค ๋ฒˆ์งธ ์ด๋ฒคํŠธ์—์„œ ํฅ๋ฏธ๋กœ์šด ์ ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์—ฌ์ „ํžˆ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” 0/9 ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ค๋ช…์€ 8 ๊ฐœ์—์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

"nodeName"์€ ์„ ํƒ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. nodeName์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค์ผ€์ค„๋ง์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋„ค ๋ฒˆ์งธ๋Š” ๋…ธ๋“œ๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ์ด๋ฏ€๋กœ ๋…ธ๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ๊ฐ€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋…ธ๋“œ๊ฐ€ ์ด์ „ ์ด๋ฒคํŠธ 3 ๊ฐœ์—์„œ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜ ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค). ๋„ค ๋ฒˆ์งธ ์ด๋ฒคํŠธ์—์„œ ํฅ๋ฏธ๋กœ์šด ์ ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์—ฌ์ „ํžˆ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” 0/9 ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ค๋ช…์€ 8 ๊ฐœ์—์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๊ฐ€ ์˜ˆ์•ฝ๋˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋งˆ์Šคํ„ฐ ์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

8 node(s) didn't match node selector ๊ฐ€ 7๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์‹œ์ ์—์„œ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

"nodeName"์€ ์„ ํƒ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. nodeName์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค์ผ€์ค„๋ง์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.

"NodeName"์€ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•  ๊ฒฝ์šฐ ํฌ๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธ๋“œ๊ฐ€ ํฌ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋„ค ๋ฒˆ์งธ๋Š” ๋…ธ๋“œ๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ์ด๋ฏ€๋กœ ๋…ธ๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ๊ฐ€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋…ธ๋“œ๊ฐ€ ์ด์ „ ์ด๋ฒคํŠธ 3 ๊ฐœ์—์„œ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜ ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค). ๋„ค ๋ฒˆ์งธ ์ด๋ฒคํŠธ์—์„œ ํฅ๋ฏธ๋กœ์šด ์ ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์—ฌ์ „ํžˆ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” 0/9 ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ค๋ช…์€ 8 ๊ฐœ์—์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๊ฐ€ ์˜ˆ์•ฝ๋˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋งˆ์Šคํ„ฐ ์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

8 node(s) didn't match node selector ๊ฐ€ 7๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์‹œ์ ์—์„œ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” 9 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 3 ๋ช…์˜ ์ฃผ์ธ๊ณผ 6 ๋ช…์˜ ๋…ธ๋™์ž. ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. 0/8 nodes are available: 8 node(s) didn't match node selector. . ๊ทธ๋Ÿฌ๋‚˜ ๋…ธ๋“œ ์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋‚˜ํƒ€ ๋‚ฌ์„ ๋•Œ ์ด๋ฒคํŠธ๋Š” 0/9 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 7 node(s) didn't match node selector. ๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” 8 ๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ 9 ๋ฒˆ์งธ (์ด์ „ ์ด๋ฒคํŠธ์—์„œ ํ™•์ธ ๋จ)์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฒคํŠธ ์ƒํƒœ :

  • ์ฒซ ๋ฒˆ์งธ ์ด๋ฒคํŠธ : 9 ๊ฐœ์˜ ๋…ธ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, daemonset์—์„œ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ
  • 2 ์ฐจ ๋ฐ 3 ์ฐจ ์ด๋ฒคํŠธ : 8 ๊ฐœ ๋…ธ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ํฌ๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋‹ค์‹œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ์ด๋ฒคํŠธ : 9 ๊ฐœ์˜ ๋…ธ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๋‹ค์‹œ ์‹œ์ž‘๋œ ๋…ธ๋“œ๊ฐ€ ์‹œ์ž‘๋จ).

๋งˆ์ง€๋ง‰์— ํ…Œ์ŠคํŠธ ํฌ๋“œ๋Š” ์˜ค์—ผ์œผ๋กœ ์ธํ•ด ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

"NodeName"์€ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•  ๊ฒฝ์šฐ ํฌ๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธ๋“œ๊ฐ€ ํฌ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋…ธ๋“œ ์˜ค๋ฒ„ ์ปค๋ฐ‹์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์—†์ง€๋งŒ ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋งŽ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์— ํ…Œ์ŠคํŠธ ํฌ๋“œ๋Š” ์˜ค์—ผ์œผ๋กœ ์ธํ•ด ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ์€ : 9 ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ค์—ผ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” (1) ์ƒํƒœ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„ ๋˜๋Š” (2) ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ์€ : 9 ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ค์—ผ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” (1) ์ƒํƒœ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„ ๋˜๋Š” (2) ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—์ด ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ ์˜ค์—ผ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ฃผ์ธ๊ณผ ๋…ธ๋™์ž ๋ชจ๋‘์—๊ฒŒ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ, ์ ์–ด๋„ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ๋“ค์€ ๋ฌธ์ œ๋ฅผ ๊ณ ์น˜๋Š” ์•ฝ๊ฐ„ "์–ด๋ ค์šด"๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋กฑ์ƒท,ํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋งŒ๋‚˜๋ฉด ... ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ์— ์ง€์ •๋œ ํฌ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ ์งˆ๋ฌธ์„ ๊ฒŒ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹ค๋ฅธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ์ต์Šคํ…๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
* Do you have other master nodes in your cluster?

๋ชจ๋“  cluser์—๋Š” 3 ๊ฐœ์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค).

* Do you have extenders?

์•„๋‹ˆ.

์˜ค๋Š˜ ์ฃผ๋ชฉ ํ•œ ํ•œ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ์ ์€ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ DaemonSet์—์„œ ํฌ๋“œ๋ฅผ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ž ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ข…๋ฃŒ ํ•œ ChaosMonkey๊ฐ€ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฌ๋“œ๋ฅผ ์ด์ „์—๋ฐ›์ง€ ์•Š์€ ๋งˆ์Šคํ„ฐ์—๊ฒŒ๋กœ ์ด๋™ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋“  ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๊ทธ ์‹œ์ ์—์„œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ "์ˆ˜์ •"๋•Œ๋ฌธ์— ๋‚˜๋Š” ์ง€๋ช… ๋œ ํฌ๋“œ์— ๋Œ€ํ•ด ๋Œ€๋‹ต ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ˜ผ๋ž€ ์Šค๋Ÿฌ์›Œ์š” ... ๋ฐ๋ชฌ ์…‹์ด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์˜ค์—ผ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์‹œ ๋งํ•ด์„œ ... ๋‹น์‹ ์˜ ๋ฒ„๊ทธ๋Š” ๋‹จ์ง€ ์Šค์ผ€์ค„๋ง ์ด๋ฒคํŠธ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ํฌ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋˜์–ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ผ์น˜ ์„ ํ˜ธ๋„ (๋˜๋Š” ๋ฐ˜ ์นœํ™”๋„) ์„ค์ •์ด ์žˆ์–ด๋„ ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— taint ์˜ค๋ฅ˜๊ฐ€ ์˜ˆ์ƒ๋˜๋ฉฐ ์ฒซ ๋ฒˆ์งธ ์ด๋ฒคํŠธ์— ์ด๋ฏธ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค (taint๋Š” ์„ ํ˜ธ๋„ ๊ธฐ์ค€์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ).

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ˆ„๋ฝ ๋œ ๊ฒƒ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •์„ ํ™•์ธํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ๋…ธ๋“œ๊ฐ€ "๋ณด์ด์ง€ ์•Š๋Š”๋‹ค"๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 0/9 nodes are available ์ด ํ‘œ์‹œ๋˜๋ฉด ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์บ์‹œ์— ์žˆ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ด์œ ๊ฐ€ ์–ด๋”˜๊ฐ€์—์„œ ์žƒ์–ด๋ฒ„๋ฆฐ ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋ฏ€๋กœ ์ด๋ฒคํŠธ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์ด ๊ฐœ์ˆ˜๋Š” ํ•ญ์ƒ ์‹ค์ œ ๋…ธ๋“œ ๊ฐœ์ˆ˜์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋” ์„ค๋ช…์ ์ธ ์ด๋ฒคํŠธ ํ…์ŠคํŠธ๊ฐ€ ๋ชจ๋“  ๋…ธ๋“œ์— ์ œ๊ณต๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kube-scheduler ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ?

@zetaab์ด ์„ฑ๊ณตํ•˜์ง€ ์•Š๊ณ  ๊ทธ๊ฒƒ์„

๊ฐ€๋Šฅํ•˜๋ฉด 1.18.5๋„ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ˆ˜๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์‹ญ์‹œ์˜ค.

๋” ์ด์ƒ ๋กœ๊ทธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@dilyevsky ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค. ์‹คํŒจํ•œ ํ•„ํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์–ด๋–ป๊ฒŒ ๋“  ์‹๋ณ„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ds ํฌ๋“œ์— ๋Œ€ํ•œ ๋…ธ๋“œ์˜ metadata.name ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. pod yaml์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํฌ๋“œ yaml :

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: "2020-07-09T23:17:53Z"
  generateName: cilium-
  labels:
    controller-revision-hash: 6c94db8bb8
    k8s-app: cilium
    pod-template-generation: "1"
  managedFields:
    # managed fields crap
  name: cilium-d5n4f
  namespace: kube-system
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: cilium
    uid: 0f00e8af-eb19-4985-a940-a02fa84fcbc5
  resourceVersion: "2840"
  selfLink: /api/v1/namespaces/kube-system/pods/cilium-d5n4f
  uid: e3f7d566-ee5b-4557-8d1b-f0964cde2f22
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - us-central1-dilyevsky-master-qmwnl
  containers:
  - args:
    - --config-dir=/tmp/cilium/config-map
    command:
    - cilium-agent
    env:
    - name: K8S_NODE_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: spec.nodeName
    - name: CILIUM_K8S_NAMESPACE
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.namespace
    - name: CILIUM_FLANNEL_MASTER_DEVICE
      valueFrom:
        configMapKeyRef:
          key: flannel-master-device
          name: cilium-config
          optional: true
    - name: CILIUM_FLANNEL_UNINSTALL_ON_EXIT
      valueFrom:
        configMapKeyRef:
          key: flannel-uninstall-on-exit
          name: cilium-config
          optional: true
    - name: CILIUM_CLUSTERMESH_CONFIG
      value: /var/lib/cilium/clustermesh/
    - name: CILIUM_CNI_CHAINING_MODE
      valueFrom:
        configMapKeyRef:
          key: cni-chaining-mode
          name: cilium-config
          optional: true
    - name: CILIUM_CUSTOM_CNI_CONF
      valueFrom:
        configMapKeyRef:
          key: custom-cni-conf
          name: cilium-config
          optional: true
    image: docker.io/cilium/cilium:v1.7.6
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command:
          - /cni-install.sh
          - --enable-debug=false
      preStop:
        exec:
          command:
          - /cni-uninstall.sh
    livenessProbe:
      exec:
        command:
        - cilium
        - status
        - --brief
      failureThreshold: 10
      initialDelaySeconds: 120
      periodSeconds: 30
      successThreshold: 1
      timeoutSeconds: 5
    name: cilium-agent
    readinessProbe:
      exec:
        command:
        - cilium
        - status
        - --brief
      failureThreshold: 3
      initialDelaySeconds: 5
      periodSeconds: 30
      successThreshold: 1
      timeoutSeconds: 5
    resources: {}
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - SYS_MODULE
      privileged: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/cilium
      name: cilium-run
    - mountPath: /host/opt/cni/bin
      name: cni-path
    - mountPath: /host/etc/cni/net.d
      name: etc-cni-netd
    - mountPath: /var/lib/cilium/clustermesh
      name: clustermesh-secrets
      readOnly: true
    - mountPath: /tmp/cilium/config-map
      name: cilium-config-path
      readOnly: true
    - mountPath: /lib/modules
      name: lib-modules
      readOnly: true
    - mountPath: /run/xtables.lock
      name: xtables-lock
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: cilium-token-j74lr
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  hostNetwork: true
  initContainers:
  - command:
    - /init-container.sh
    env:
    - name: CILIUM_ALL_STATE
      valueFrom:
        configMapKeyRef:
          key: clean-cilium-state
          name: cilium-config
          optional: true
    - name: CILIUM_BPF_STATE
      valueFrom:
        configMapKeyRef:
          key: clean-cilium-bpf-state
          name: cilium-config
          optional: true
    - name: CILIUM_WAIT_BPF_MOUNT
      valueFrom:
        configMapKeyRef:
          key: wait-bpf-mount
          name: cilium-config
          optional: true
    image: docker.io/cilium/cilium:v1.7.6
    imagePullPolicy: IfNotPresent
    name: clean-cilium-state
    resources: {}
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
      privileged: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/cilium
      name: cilium-run
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: cilium-token-j74lr
      readOnly: true
  priority: 2000001000
  priorityClassName: system-node-critical
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: cilium
  serviceAccountName: cilium
  terminationGracePeriodSeconds: 1
  tolerations:
  - operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/disk-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/pid-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/unschedulable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/network-unavailable
    operator: Exists
  volumes:
  - hostPath:
      path: /var/run/cilium
      type: DirectoryOrCreate
    name: cilium-run
  - hostPath:
      path: /opt/cni/bin
      type: DirectoryOrCreate
    name: cni-path
  - hostPath:
      path: /etc/cni/net.d
      type: DirectoryOrCreate
    name: etc-cni-netd
  - hostPath:
      path: /lib/modules
      type: ""
    name: lib-modules
  - hostPath:
      path: /run/xtables.lock
      type: FileOrCreate
    name: xtables-lock
  - name: clustermesh-secrets
    secret:
      defaultMode: 420
      optional: true
      secretName: cilium-clustermesh
  - configMap:
      defaultMode: 420
      name: cilium-config
    name: cilium-config-path
  - name: cilium-token-j74lr
    secret:
      defaultMode: 420
      secretName: cilium-token-j74lr
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-07-09T23:17:53Z"
    message: '0/6 nodes are available: 5 node(s) didn''t match node selector.'
    reason: Unschedulable
    status: "False"
    type: PodScheduled
  phase: Pending
  qosClass: BestEffort

์ด๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 3 ๊ฐœ์˜ ๋งˆ์Šคํ„ฐ์™€ 3 ๊ฐœ์˜ ์ž‘์—…์ž ๋…ธ๋“œ (ํด๋Ÿฌ์Šคํ„ฐ API ์‚ฌ์šฉ)๋กœ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํšŒ์ „์‹œํ‚ค๊ณ  Cilium 1.7.6์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Cilium yaml :

---
# Source: cilium/charts/agent/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cilium
  namespace: kube-system
---
# Source: cilium/charts/operator/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cilium-operator
  namespace: kube-system
---
# Source: cilium/charts/config/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cilium-config
  namespace: kube-system
data:

  # Identity allocation mode selects how identities are shared between cilium
  # nodes by setting how they are stored. The options are "crd" or "kvstore".
  # - "crd" stores identities in kubernetes as CRDs (custom resource definition).
  #   These can be queried with:
  #     kubectl get ciliumid
  # - "kvstore" stores identities in a kvstore, etcd or consul, that is
  #   configured below. Cilium versions before 1.6 supported only the kvstore
  #   backend. Upgrades from these older cilium versions should continue using
  #   the kvstore by commenting out the identity-allocation-mode below, or
  #   setting it to "kvstore".
  identity-allocation-mode: crd

  # If you want to run cilium in debug mode change this value to true
  debug: "false"

  # Enable IPv4 addressing. If enabled, all endpoints are allocated an IPv4
  # address.
  enable-ipv4: "true"

  # Enable IPv6 addressing. If enabled, all endpoints are allocated an IPv6
  # address.
  enable-ipv6: "false"

  # If you want cilium monitor to aggregate tracing for packets, set this level
  # to "low", "medium", or "maximum". The higher the level, the less packets
  # that will be seen in monitor output.
  monitor-aggregation: medium

  # The monitor aggregation interval governs the typical time between monitor
  # notification events for each allowed connection.
  #
  # Only effective when monitor aggregation is set to "medium" or higher.
  monitor-aggregation-interval: 5s

  # The monitor aggregation flags determine which TCP flags which, upon the
  # first observation, cause monitor notifications to be generated.
  #
  # Only effective when monitor aggregation is set to "medium" or higher.
  monitor-aggregation-flags: all

  # ct-global-max-entries-* specifies the maximum number of connections
  # supported across all endpoints, split by protocol: tcp or other. One pair
  # of maps uses these values for IPv4 connections, and another pair of maps
  # use these values for IPv6 connections.
  #
  # If these values are modified, then during the next Cilium startup the
  # tracking of ongoing connections may be disrupted. This may lead to brief
  # policy drops or a change in loadbalancing decisions for a connection.
  #
  # For users upgrading from Cilium 1.2 or earlier, to minimize disruption
  # during the upgrade process, comment out these options.
  bpf-ct-global-tcp-max: "524288"
  bpf-ct-global-any-max: "262144"

  # bpf-policy-map-max specified the maximum number of entries in endpoint
  # policy map (per endpoint)
  bpf-policy-map-max: "16384"

  # Pre-allocation of map entries allows per-packet latency to be reduced, at
  # the expense of up-front memory allocation for the entries in the maps. The
  # default value below will minimize memory usage in the default installation;
  # users who are sensitive to latency may consider setting this to "true".
  #
  # This option was introduced in Cilium 1.4. Cilium 1.3 and earlier ignore
  # this option and behave as though it is set to "true".
  #
  # If this value is modified, then during the next Cilium startup the restore
  # of existing endpoints and tracking of ongoing connections may be disrupted.
  # This may lead to policy drops or a change in loadbalancing decisions for a
  # connection for some time. Endpoints may need to be recreated to restore
  # connectivity.
  #
  # If this option is set to "false" during an upgrade from 1.3 or earlier to
  # 1.4 or later, then it may cause one-time disruptions during the upgrade.
  preallocate-bpf-maps: "false"

  # Regular expression matching compatible Istio sidecar istio-proxy
  # container image names
  sidecar-istio-proxy-image: "cilium/istio_proxy"

  # Encapsulation mode for communication between nodes
  # Possible values:
  #   - disabled
  #   - vxlan (default)
  #   - geneve
  tunnel: vxlan

  # Name of the cluster. Only relevant when building a mesh of clusters.
  cluster-name: default

  # DNS Polling periodically issues a DNS lookup for each `matchName` from
  # cilium-agent. The result is used to regenerate endpoint policy.
  # DNS lookups are repeated with an interval of 5 seconds, and are made for
  # A(IPv4) and AAAA(IPv6) addresses. Should a lookup fail, the most recent IP
  # data is used instead. An IP change will trigger a regeneration of the Cilium
  # policy for each endpoint and increment the per cilium-agent policy
  # repository revision.
  #
  # This option is disabled by default starting from version 1.4.x in favor
  # of a more powerful DNS proxy-based implementation, see [0] for details.
  # Enable this option if you want to use FQDN policies but do not want to use
  # the DNS proxy.
  #
  # To ease upgrade, users may opt to set this option to "true".
  # Otherwise please refer to the Upgrade Guide [1] which explains how to
  # prepare policy rules for upgrade.
  #
  # [0] http://docs.cilium.io/en/stable/policy/language/#dns-based
  # [1] http://docs.cilium.io/en/stable/install/upgrade/#changes-that-may-require-action
  tofqdns-enable-poller: "false"

  # wait-bpf-mount makes init container wait until bpf filesystem is mounted
  wait-bpf-mount: "false"

  masquerade: "true"
  enable-xt-socket-fallback: "true"
  install-iptables-rules: "true"
  auto-direct-node-routes: "false"
  kube-proxy-replacement:  "probe"
  enable-host-reachable-services: "false"
  enable-external-ips: "false"
  enable-node-port: "false"
  node-port-bind-protection: "true"
  enable-auto-protect-node-port-range: "true"
  enable-endpoint-health-checking: "true"
  enable-well-known-identities: "false"
  enable-remote-node-identity: "true"
---
# Source: cilium/charts/agent/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cilium
rules:
- apiGroups:
  - networking.k8s.io
  resources:
  - networkpolicies
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - namespaces
  - services
  - nodes
  - endpoints
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - get
  - list
  - watch
  - update
- apiGroups:
  - cilium.io
  resources:
  - ciliumnetworkpolicies
  - ciliumnetworkpolicies/status
  - ciliumclusterwidenetworkpolicies
  - ciliumclusterwidenetworkpolicies/status
  - ciliumendpoints
  - ciliumendpoints/status
  - ciliumnodes
  - ciliumnodes/status
  - ciliumidentities
  - ciliumidentities/status
  verbs:
  - '*'
---
# Source: cilium/charts/operator/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cilium-operator
rules:
- apiGroups:
  - ""
  resources:
  # to automatically delete [core|kube]dns pods so that are starting to being
  # managed by Cilium
  - pods
  verbs:
  - get
  - list
  - watch
  - delete
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  # to automatically read from k8s and import the node's pod CIDR to cilium's
  # etcd so all nodes know how to reach another pod running in in a different
  # node.
  - nodes
  # to perform the translation of a CNP that contains `ToGroup` to its endpoints
  - services
  - endpoints
  # to check apiserver connectivity
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - cilium.io
  resources:
  - ciliumnetworkpolicies
  - ciliumnetworkpolicies/status
  - ciliumclusterwidenetworkpolicies
  - ciliumclusterwidenetworkpolicies/status
  - ciliumendpoints
  - ciliumendpoints/status
  - ciliumnodes
  - ciliumnodes/status
  - ciliumidentities
  - ciliumidentities/status
  verbs:
  - '*'
---
# Source: cilium/charts/agent/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cilium
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cilium
subjects:
- kind: ServiceAccount
  name: cilium
  namespace: kube-system
---
# Source: cilium/charts/operator/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cilium-operator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cilium-operator
subjects:
- kind: ServiceAccount
  name: cilium-operator
  namespace: kube-system
---
# Source: cilium/charts/agent/templates/daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: cilium
  name: cilium
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: cilium
  template:
    metadata:
      annotations:
        # This annotation plus the CriticalAddonsOnly toleration makes
        # cilium to be a critical pod in the cluster, which ensures cilium
        # gets priority scheduling.
        # https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        k8s-app: cilium
    spec:
      containers:
      - args:
        - --config-dir=/tmp/cilium/config-map
        command:
        - cilium-agent
        livenessProbe:
          exec:
            command:
            - cilium
            - status
            - --brief
          failureThreshold: 10
          # The initial delay for the liveness probe is intentionally large to
          # avoid an endless kill & restart cycle if in the event that the initial
          # bootstrapping takes longer than expected.
          initialDelaySeconds: 120
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 5
        readinessProbe:
          exec:
            command:
            - cilium
            - status
            - --brief
          failureThreshold: 3
          initialDelaySeconds: 5
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 5
        env:
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        - name: CILIUM_K8S_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: CILIUM_FLANNEL_MASTER_DEVICE
          valueFrom:
            configMapKeyRef:
              key: flannel-master-device
              name: cilium-config
              optional: true
        - name: CILIUM_FLANNEL_UNINSTALL_ON_EXIT
          valueFrom:
            configMapKeyRef:
              key: flannel-uninstall-on-exit
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTERMESH_CONFIG
          value: /var/lib/cilium/clustermesh/
        - name: CILIUM_CNI_CHAINING_MODE
          valueFrom:
            configMapKeyRef:
              key: cni-chaining-mode
              name: cilium-config
              optional: true
        - name: CILIUM_CUSTOM_CNI_CONF
          valueFrom:
            configMapKeyRef:
              key: custom-cni-conf
              name: cilium-config
              optional: true
        image: "docker.io/cilium/cilium:v1.7.6"
        imagePullPolicy: IfNotPresent
        lifecycle:
          postStart:
            exec:
              command:
              - "/cni-install.sh"
              - "--enable-debug=false"
          preStop:
            exec:
              command:
              - /cni-uninstall.sh
        name: cilium-agent
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - SYS_MODULE
          privileged: true
        volumeMounts:
        - mountPath: /var/run/cilium
          name: cilium-run
        - mountPath: /host/opt/cni/bin
          name: cni-path
        - mountPath: /host/etc/cni/net.d
          name: etc-cni-netd
        - mountPath: /var/lib/cilium/clustermesh
          name: clustermesh-secrets
          readOnly: true
        - mountPath: /tmp/cilium/config-map
          name: cilium-config-path
          readOnly: true
          # Needed to be able to load kernel modules
        - mountPath: /lib/modules
          name: lib-modules
          readOnly: true
        - mountPath: /run/xtables.lock
          name: xtables-lock
      hostNetwork: true
      initContainers:
      - command:
        - /init-container.sh
        env:
        - name: CILIUM_ALL_STATE
          valueFrom:
            configMapKeyRef:
              key: clean-cilium-state
              name: cilium-config
              optional: true
        - name: CILIUM_BPF_STATE
          valueFrom:
            configMapKeyRef:
              key: clean-cilium-bpf-state
              name: cilium-config
              optional: true
        - name: CILIUM_WAIT_BPF_MOUNT
          valueFrom:
            configMapKeyRef:
              key: wait-bpf-mount
              name: cilium-config
              optional: true
        image: "docker.io/cilium/cilium:v1.7.6"
        imagePullPolicy: IfNotPresent
        name: clean-cilium-state
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
          privileged: true
        volumeMounts:
        - mountPath: /var/run/cilium
          name: cilium-run
      restartPolicy: Always
      priorityClassName: system-node-critical
      serviceAccount: cilium
      serviceAccountName: cilium
      terminationGracePeriodSeconds: 1
      tolerations:
      - operator: Exists
      volumes:
        # To keep state between restarts / upgrades
      - hostPath:
          path: /var/run/cilium
          type: DirectoryOrCreate
        name: cilium-run
      # To install cilium cni plugin in the host
      - hostPath:
          path:  /opt/cni/bin
          type: DirectoryOrCreate
        name: cni-path
        # To install cilium cni configuration in the host
      - hostPath:
          path: /etc/cni/net.d
          type: DirectoryOrCreate
        name: etc-cni-netd
        # To be able to load kernel modules
      - hostPath:
          path: /lib/modules
        name: lib-modules
        # To access iptables concurrently with other processes (e.g. kube-proxy)
      - hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
        name: xtables-lock
        # To read the clustermesh configuration
      - name: clustermesh-secrets
        secret:
          defaultMode: 420
          optional: true
          secretName: cilium-clustermesh
        # To read the configuration from the config map
      - configMap:
          name: cilium-config
        name: cilium-config-path
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 2
    type: RollingUpdate
---
# Source: cilium/charts/operator/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    io.cilium/app: operator
    name: cilium-operator
  name: cilium-operator
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      io.cilium/app: operator
      name: cilium-operator
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      annotations:
      labels:
        io.cilium/app: operator
        name: cilium-operator
    spec:
      containers:
      - args:
        - --debug=$(CILIUM_DEBUG)
        - --identity-allocation-mode=$(CILIUM_IDENTITY_ALLOCATION_MODE)
        - --synchronize-k8s-nodes=true
        command:
        - cilium-operator
        env:
        - name: CILIUM_K8S_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        - name: CILIUM_DEBUG
          valueFrom:
            configMapKeyRef:
              key: debug
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTER_NAME
          valueFrom:
            configMapKeyRef:
              key: cluster-name
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTER_ID
          valueFrom:
            configMapKeyRef:
              key: cluster-id
              name: cilium-config
              optional: true
        - name: CILIUM_IPAM
          valueFrom:
            configMapKeyRef:
              key: ipam
              name: cilium-config
              optional: true
        - name: CILIUM_DISABLE_ENDPOINT_CRD
          valueFrom:
            configMapKeyRef:
              key: disable-endpoint-crd
              name: cilium-config
              optional: true
        - name: CILIUM_KVSTORE
          valueFrom:
            configMapKeyRef:
              key: kvstore
              name: cilium-config
              optional: true
        - name: CILIUM_KVSTORE_OPT
          valueFrom:
            configMapKeyRef:
              key: kvstore-opt
              name: cilium-config
              optional: true
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              key: AWS_ACCESS_KEY_ID
              name: cilium-aws
              optional: true
        - name: AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: AWS_SECRET_ACCESS_KEY
              name: cilium-aws
              optional: true
        - name: AWS_DEFAULT_REGION
          valueFrom:
            secretKeyRef:
              key: AWS_DEFAULT_REGION
              name: cilium-aws
              optional: true
        - name: CILIUM_IDENTITY_ALLOCATION_MODE
          valueFrom:
            configMapKeyRef:
              key: identity-allocation-mode
              name: cilium-config
              optional: true
        image: "docker.io/cilium/operator:v1.7.6"
        imagePullPolicy: IfNotPresent
        name: cilium-operator
        livenessProbe:
          httpGet:
            host: '127.0.0.1'
            path: /healthz
            port: 9234
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 10
          timeoutSeconds: 3
      hostNetwork: true
      restartPolicy: Always
      serviceAccount: cilium-operator
      serviceAccountName: cilium-operator

๋‹ค์Œ์€ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
I0709 23:08:22.055830 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:22.056081 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:23.137451 1 serving.go:313] Generated self-signed cert in-memory W0709 23:08:33.843509 1 authentication.go:297] Error looking up in-cluster authentication configuration: etcdserver: request timed out W0709 23:08:33.843671 1 authentication.go:298] Continuing without authentication configuration. This may treat all requests as anonymous. W0709 23:08:33.843710 1 authentication.go:299] To require authentication configuration lookup to succeed, set --authentication-tolerate-lookup-failure=false I0709 23:08:33.911805 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:33.911989 1 registry.go:150] Registering EvenPodsSpread predicate and priority function W0709 23:08:33.917999 1 authorization.go:47] Authorization is disabled W0709 23:08:33.918162 1 authentication.go:40] Authentication is disabled I0709 23:08:33.918238 1 deprecated_insecure_serving.go:51] Serving healthz insecurely on [::]:10251 I0709 23:08:33.925860 1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:33.926013 1 shared_informer.go:223] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:33.930685 1 secure_serving.go:178] Serving securely on 127.0.0.1:10259 I0709 23:08:33.936198 1 tlsconfig.go:240] Starting DynamicServingCertificateController I0709 23:08:34.026382 1 shared_informer.go:230] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:34.036998 1 leaderelection.go:242] attempting to acquire leader lease kube-system/kube-scheduler... I0709 23:08:50.597201 1 leaderelection.go:252] successfully acquired lease kube-system/kube-scheduler E0709 23:08:50.658551 1 factory.go:503] pod: kube-system/coredns-66bff467f8-9rjvd is already present in the active queue E0709 23:12:27.673854 1 factory.go:503] pod kube-system/cilium-vv466 is already present in the backoff queue E0709 23:12:58.099432 1 leaderelection.go:320] error retrieving resource lock kube-system/kube-scheduler: etcdserver: leader changed

์Šค์ผ€์ค„๋Ÿฌ ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ณด๋ฅ˜์ค‘์ธ ํฌ๋“œ๊ฐ€ ์ฆ‰์‹œ ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ํฌ๋“œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๊นŒ? ๋…ธ๋“œ์— ์˜ค์—ผ์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
์˜ˆ์•ฝ๋˜์ง€ ์•Š์€ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ? ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ๋˜๋Š” ๋ชจ๋“ 
๋…ธ๋“œ? ๋…ธ๋“œ์— ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๊นŒ?

2020 ๋…„ 7 ์›” 9 ์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 7:49 dilyevsky, [email protected]
์ผ๋‹ค :

ds ํฌ๋“œ์— ๋Œ€ํ•œ ๋…ธ๋“œ์˜ metadata.name ์ผ ๋ฟ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ฌ˜ํ•œ. pod yaml์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

apiVersion : v1kind : Podmetadata :
์ฃผ์„ :
scheduler.alpha.kubernetes.io/critical-pod : ""
creationTimestamp : "2020-07-09T23 : 17 : 53Z"
generateName : ์„ฌ๋ชจ-
๋ผ๋ฒจ :
์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ • ํ•ด์‹œ : 6c94db8bb8
k8s-app : ์„ฌ๋ชจ
pod-template-generation : "1"
managedFields :
# ๊ด€๋ฆฌ ํ•„๋“œ ์“ฐ๋ ˆ๊ธฐ
์ด๋ฆ„ : cilium-d5n4f
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-system
ownerReferences :

  • apiVersion : apps / v1
    blockOwnerDeletion : true
    ์ปจํŠธ๋กค๋Ÿฌ : ์ฐธ
    ์ข…๋ฅ˜ : DaemonSet
    ์ด๋ฆ„ : cilium
    uid : 0f00e8af-eb19-4985-a940-a02fa84fcbc5
    resourceVersion : "2840"
    selfLink : / api / v1 / namespaces / kube-system / pods / cilium-d5n4f
    uid : e3f7d566-ee5b-4557-8d1b-f0964cde2f22spec :
    ์œ ์—ฐ:
    nodeAffinity :
    requiredDuringSchedulingIgnoredDuringExecution :
    nodeSelectorTerms :
    -matchFields :
    -ํ‚ค : metadata.name
    ์—ฐ์‚ฐ์ž : In
    ๊ฐ’ :
    -us-central1-dilyevsky-master-qmwnl
    ์šฉ๊ธฐ :
  • ์ธ์ˆ˜ :

    • --config-dir = / tmp / cilium / config-map

      ๋ช…๋ น:

    • ์„ฌ๋ชจ ์ œ

      env :

    • ์ด๋ฆ„ : K8S_NODE_NAME

      valueFrom :

      fieldRef :

      apiVersion : v1

      fieldPath : spec.nodeName

    • ์ด๋ฆ„ : CILIUM_K8S_NAMESPACE

      valueFrom :

      fieldRef :

      apiVersion : v1

      fieldPath : metadata.namespace

    • ์ด๋ฆ„ : CILIUM_FLANNEL_MASTER_DEVICE

      valueFrom :

      configMapKeyRef :

      ํ‚ค : ํ”Œ๋ž€๋„ฌ ๋งˆ์Šคํ„ฐ ์žฅ์น˜

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

    • ์ด๋ฆ„ : CILIUM_FLANNEL_UNINSTALL_ON_EXIT

      valueFrom :

      configMapKeyRef :

      ํ‚ค : flannel-uninstall-on-exit

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

    • ์ด๋ฆ„ : CILIUM_CLUSTERMESH_CONFIG

      ๊ฐ’ : / var / lib / cilium / clustermesh /

    • ์ด๋ฆ„ : CILIUM_CNI_CHAINING_MODE

      valueFrom :

      configMapKeyRef :

      ํ‚ค : cni-chaining-mode

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

    • ์ด๋ฆ„ : CILIUM_CUSTOM_CNI_CONF

      valueFrom :

      configMapKeyRef :

      ํ‚ค : custom-cni-conf

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

      ์ด๋ฏธ์ง€ : docker.io/cilium/cilium:v1.7.6

      imagePullPolicy : IfNotPresent

      ์ˆ˜๋ช…์ฃผ๊ธฐ :

      postStart :

      exec :

      ๋ช…๋ น:



      • /cni-install.sh


      • --enable-debug = false


        preStop :


        exec :


        ๋ช…๋ น:


      • /cni-uninstall.sh


        livenessProbe :


        exec :


        ๋ช…๋ น:





        • ์„ฌ๋ชจ



        • ์ƒํƒœ



        • --๊ฐ„๊ฒฐํ•œ



          failureThreshold : 10



          initialDelaySeconds : 120



          periodSeconds : 30



          successThreshold : 1



          timeoutSeconds : 5



          ์ด๋ฆ„ : cilium-agent



          readinessProbe :



          exec :



          ๋ช…๋ น:



        • ์„ฌ๋ชจ



        • ์ƒํƒœ



        • --๊ฐ„๊ฒฐํ•œ



          failureThreshold : 3



          initialDelaySeconds : 5



          periodSeconds : 30



          successThreshold : 1



          timeoutSeconds : 5



          ๋ฆฌ์†Œ์Šค : {}



          securityContext :



          ๊ธฐ๋Šฅ :



          ๋”ํ•˜๋‹ค:



        • NET_ADMIN



        • SYS_MODULE



          ํŠน๊ถŒ : ์ฐธ



          TerminationMessagePath : / dev / termination-log



          shutdownMessagePolicy : ํŒŒ์ผ



          volumeMounts :






    • mountPath : / var / run / cilium

      ์ด๋ฆ„ : cilium-run

    • mountPath : / host / opt / cni / bin

      ์ด๋ฆ„ : cni-path

    • mountPath : /host/etc/cni/net.d

      ์ด๋ฆ„ : etc-cni-netd

    • mountPath : / var / lib / cilium / clustermesh

      ์ด๋ฆ„ : clustermesh-secrets

      readOnly : true

    • mountPath : / tmp / cilium / config-map

      ์ด๋ฆ„ : cilium-config-path

      readOnly : true

    • mountPath : / lib / modules

      ์ด๋ฆ„ : lib-modules

      readOnly : true

    • mountPath : /run/xtables.lock

      ์ด๋ฆ„ : xtables-lock

    • mountPath : /var/run/secrets/kubernetes.io/serviceaccount

      ์ด๋ฆ„ : cilium-token-j74lr

      readOnly : true

      dnsPolicy : ClusterFirst

      enableServiceLinks : true

      hostNetwork : true

      initContainers :

  • ๋ช…๋ น:

    • /init-container.sh

      env :

    • ์ด๋ฆ„ : CILIUM_ALL_STATE

      valueFrom :

      configMapKeyRef :

      ํ‚ค : ๊นจ๋—ํ•œ ์‹ค๋ฅจ ์ƒํƒœ

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

    • ์ด๋ฆ„ : CILIUM_BPF_STATE

      valueFrom :

      configMapKeyRef :

      ํ‚ค : clean-cilium-bpf-state

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

    • ์ด๋ฆ„ : CILIUM_WAIT_BPF_MOUNT

      valueFrom :

      configMapKeyRef :

      ํ‚ค : wait-bpf-mount

      ์ด๋ฆ„ : cilium-config

      ์„ ํƒ ์‚ฌํ•ญ : true

      ์ด๋ฏธ์ง€ : docker.io/cilium/cilium:v1.7.6

      imagePullPolicy : IfNotPresent

      ์ด๋ฆ„ : clean-cilium-state

      ๋ฆฌ์†Œ์Šค : {}

      securityContext :

      ๊ธฐ๋Šฅ :

      ๋”ํ•˜๋‹ค:



      • NET_ADMIN


        ํŠน๊ถŒ : ์ฐธ


        TerminationMessagePath : / dev / termination-log


        shutdownMessagePolicy : ํŒŒ์ผ


        volumeMounts :



    • mountPath : / var / run / cilium

      ์ด๋ฆ„ : cilium-run

    • mountPath : /var/run/secrets/kubernetes.io/serviceaccount

      ์ด๋ฆ„ : cilium-token-j74lr

      readOnly : true

      ์šฐ์„  ์ˆœ์œ„ : 2000001000

      priorityClassName : ์‹œ์Šคํ…œ ๋…ธ๋“œ ์ค‘์š”

      restartPolicy : ํ•ญ์ƒ

      schedulerName : ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ

      securityContext : {}

      serviceAccount : cilium

      serviceAccountName : cilium

      terminateGracePeriodSeconds : 1

      ๊ด€์šฉ :

  • ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoExecute
    ํ‚ค : node.kubernetes.io/not-ready
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoExecute
    ํ‚ค : node.kubernetes.io/unreachable
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoSchedule
    ํ‚ค : node.kubernetes.io/disk-pressure
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoSchedule
    ํ‚ค : node.kubernetes.io/memory-pressure
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoSchedule
    ํ‚ค : node.kubernetes.io/pid-pressure
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoSchedule
    ํ‚ค : node.kubernetes.io/unschedulable
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
  • ํšจ๊ณผ : NoSchedule
    ํ‚ค : node.kubernetes.io/network-unavailable
    ์—ฐ์‚ฐ์ž : ์กด์žฌ
    ๋ณผ๋ฅจ :
  • hostPath :
    ๊ฒฝ๋กœ : / var / run / cilium
    ์œ ํ˜• : DirectoryOrCreate
    ์ด๋ฆ„ : cilium-run
  • hostPath :
    ๊ฒฝ๋กœ : / opt / cni / bin
    ์œ ํ˜• : DirectoryOrCreate
    ์ด๋ฆ„ : cni-path
  • hostPath :
    ๊ฒฝ๋กœ : /etc/cni/net.d
    ์œ ํ˜• : DirectoryOrCreate
    ์ด๋ฆ„ : etc-cni-netd
  • hostPath :
    ๊ฒฝ๋กœ : / lib / modules
    ์œ ํ˜• : ""
    ์ด๋ฆ„ : lib-modules
  • hostPath :
    ๊ฒฝ๋กœ : /run/xtables.lock
    ์œ ํ˜• : FileOrCreate
    ์ด๋ฆ„ : xtables-lock
  • ์ด๋ฆ„ : clustermesh-secrets
    ๋น„๋ฐ€:
    defaultMode : 420
    ์„ ํƒ ์‚ฌํ•ญ : true
    secretName : cilium-clustermesh
  • configMap :
    defaultMode : 420
    ์ด๋ฆ„ : cilium-config
    ์ด๋ฆ„ : cilium-config-path
  • ์ด๋ฆ„ : cilium-token-j74lr
    ๋น„๋ฐ€:
    defaultMode : 420
    secretName : cilium-token-j74lrstatus :
    ์ •ํ™ฉ:
  • lastProbeTime : null
    lastTransitionTime : "2020-07-09T23 : 17 : 53Z"
    ๋ฉ”์‹œ์ง€ : '0/6 ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : 5 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋…ธ๋“œ ์„ ํƒ๊ธฐ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.'
    ์ด์œ  : ์˜ˆ์•ฝ ๋ถˆ๊ฐ€
    ์ƒํƒœ : "False"
    ์œ ํ˜• : PodScheduled
    ๋‹จ๊ณ„ : ๋ณด๋ฅ˜ ์ค‘
    qosClass : BestEffort

์ด๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2 ๊ฐœ์˜ ๋งˆ์Šคํ„ฐ๋กœ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํšŒ์ „์‹œํ‚ค๊ณ 
3 ๊ฐœ์˜ ์ž‘์—…์ž ๋…ธ๋“œ (ํด๋Ÿฌ์Šคํ„ฐ API ์‚ฌ์šฉ) ๋ฐ Cilium 1.7.6 ์ ์šฉ :

--- # ์ถœ์ฒ˜ : cilium / charts / agent / templates / serviceaccount.yamlapi ๋ฒ„์ „ : v1kind : ServiceAccountmetadata :
์ด๋ฆ„ : cilium
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-system
--- # ์ถœ์ฒ˜ : cilium / charts / operator / templates / serviceaccount.yamlapi ๋ฒ„์ „ : v1kind : ServiceAccountmetadata :
์ด๋ฆ„ : cilium-operator
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-system
--- # ์†Œ์Šค : cilium / charts / config / templates / configmap.yamlapi ๋ฒ„์ „ : v1kind : ConfigMapmetadata :
์ด๋ฆ„ : cilium-config
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-systemdata :

# ์‹ ์› ํ• ๋‹น ๋ชจ๋“œ๋Š” ์„ฌ๋ชจ๊ฐ„์— ์‹ ์›์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
์ €์žฅ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•˜์—ฌ ๋…ธ๋“œ # ๊ฐœ. ์˜ต์…˜์€ "crd"๋˜๋Š” "kvstore"์ž…๋‹ˆ๋‹ค.
#- "crd"๋Š” kubernetes์˜ ID๋ฅผ CRD (์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค ์ •์˜)๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
# ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฟผ๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค.
# kubectl get ciliumid
#- "kvstore"๋Š” kvstore, etcd ๋˜๋Š” consul์— ID๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
# ์•„๋ž˜์— ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1.6 ์ด์ „์˜ Cilium ๋ฒ„์ „์€ kvstore ๋งŒ ์ง€์›
# ๋ฐฑ์—”๋“œ. ์ด๋Ÿฌํ•œ ์˜ค๋ž˜๋œ cilium ๋ฒ„์ „์˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ๊ณ„์†ํ•ด์„œ
# ์•„๋ž˜์˜ identity-allocation-mode๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ kvstore ๋˜๋Š”
# "kvstore"๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์‹ ์› ํ• ๋‹น ๋ชจ๋“œ : crd

# ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ cilium์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด์ด ๊ฐ’์„ true๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.
๋””๋ฒ„๊ทธ : "false"

# IPv4 ์ฃผ์†Œ ์ง€์ •์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋˜๋ฉด ๋ชจ๋“  ์—”๋“œ ํฌ์ธํŠธ์— IPv4๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
# ์ฃผ์†Œ.
enable-ipv4 : "true"

# IPv6 ์ฃผ์†Œ ์ง€์ •์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋˜๋ฉด ๋ชจ๋“  ์—”๋“œ ํฌ์ธํŠธ์— IPv6๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
# ์ฃผ์†Œ.
enable-ipv6 : "๊ฑฐ์ง“"

# cilium ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ํŒจํ‚ท ์ถ”์ ์„ ์ง‘๊ณ„ํ•˜๋„๋กํ•˜๋ ค๋ฉด์ด ์ˆ˜์ค€์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
#- "๋‚ฎ์Œ", "์ค‘๊ฐ„"๋˜๋Š” "์ตœ๋Œ€". ๋ ˆ๋ฒจ์ด ๋†’์„์ˆ˜๋ก ์ ์€ ํŒจํ‚ท
# ๋ชจ๋‹ˆํ„ฐ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„ : ์ค‘๊ฐ„

# ๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„ ๊ฐ„๊ฒฉ์€ ๋ชจ๋‹ˆํ„ฐ ๊ฐ„์˜ ์ผ๋ฐ˜์ ์ธ ์‹œ๊ฐ„์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
ํ—ˆ์šฉ ๋œ ๊ฐ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์•Œ๋ฆผ ์ด๋ฒคํŠธ # ๊ฐœ.
#
# ๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„๊ฐ€ "์ค‘๊ฐ„"์ด์ƒ์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„ ๊ฐ„๊ฒฉ : 5 ์ดˆ

# ๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„ ํ”Œ๋ž˜๊ทธ๋Š” ์–ด๋–ค TCP ํ”Œ๋ž˜๊ทธ๋ฅผ
# ์ฒซ ๋ฒˆ์งธ ๊ด€์ฐฐ, ๋ชจ๋‹ˆํ„ฐ ์•Œ๋ฆผ์ด ์ƒ์„ฑ๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.
#
# ๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„๊ฐ€ "์ค‘๊ฐ„"์ด์ƒ์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ์ง‘๊ณ„ ํ”Œ๋ž˜๊ทธ : ๋ชจ๋‘

# ct-global-max-entries- *๋Š” ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
# ๋ชจ๋“  ์—”๋“œ ํฌ์ธํŠธ์—์„œ ์ง€์›๋˜๋ฉฐ ํ”„๋กœํ† ์ฝœ๋ณ„๋กœ ๋ถ„ํ•  : tcp ๋˜๋Š” ๊ธฐํƒ€. ํ•œ ์Œ
๋งต ์ˆ˜๋Š” IPv4 ์—ฐ๊ฒฐ ๋ฐ ๋‹ค๋ฅธ ๋งต ์Œ์—์ด ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# IPv6 ์—ฐ๊ฒฐ์—์ด ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
#
#์ด ๊ฐ’์ด ์ˆ˜์ •๋˜๋ฉด ๋‹ค์Œ Cilium ์‹œ์ž‘ ๋™์•ˆ
# ์ง„ํ–‰์ค‘์ธ ์—ฐ๊ฒฐ ์ถ”์ ์ด ์ค‘๋‹จ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ„๋žตํ•˜๊ฒŒ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
# ์ •์ฑ… ์‚ญ์ œ ๋˜๋Š” ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๊ฒฐ์ •์˜ ๋ณ€๊ฒฝ.
#
# Cilium 1.2 ๋˜๋Š” ์ด์ „ ๋ฒ„์ „์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ค‘๋‹จ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด
# ์—…๊ทธ๋ ˆ์ด๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์‹ญ์‹œ์˜ค.
bpf-ct-global-tcp-max : "524288"
bpf-ct-global-any-max : "262144"

# bpf-policy-map-max๋Š” ์—”๋“œ ํฌ์ธํŠธ์˜ ์ตœ๋Œ€ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
# ์ •์ฑ… ๋งต (์—”๋“œ ํฌ์ธํŠธ ๋‹น)
bpf-policy-map-max : "16384"

# ๋งต ํ•ญ๋ชฉ์˜ ์‚ฌ์ „ ํ• ๋‹น์„ ํ†ตํ•ด ํŒจํ‚ท ๋‹น ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ๋งต์˜ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์„ ํ–‰ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋น„์šฉ. ๊ทธ๋งŒํผ
# ์•„๋ž˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ ๊ธฐ๋ณธ ์„ค์น˜์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
# ์ง€์—ฐ์— ๋ฏผ๊ฐํ•œ ์‚ฌ์šฉ์ž๋Š” ์ด๊ฒƒ์„ "true"๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
#
#์ด ์˜ต์…˜์€ Cilium 1.4์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Cilium 1.3 ๋ฐ ์ด์ „ ๋ฒ„์ „ ๋ฌด์‹œ
#์ด ์˜ต์…˜์€ "true"๋กœ ์„ค์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
#
#์ด ๊ฐ’์ด ์ˆ˜์ •๋˜๋ฉด ๋‹ค์Œ Cilium ์‹œ์ž‘ ๋™์•ˆ ๋ณต์›
๊ธฐ์กด ์—”๋“œ ํฌ์ธํŠธ ์ˆ˜์™€ ์ง„ํ–‰์ค‘์ธ ์—ฐ๊ฒฐ ์ถ”์ ์ด ์ค‘๋‹จ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ์ด๋กœ ์ธํ•ด ์ •์ฑ…์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ฒฐ์ •์ด ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ํ•œ๋™์•ˆ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์›ํ•˜๋ ค๋ฉด ๋์ ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ์—ฐ๊ฒฐ.
#
# 1.3 ์ด์ „ ๋ฒ„์ „์—์„œ ๋‹ค์Œ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋™์•ˆ์ด ์˜ต์…˜์ด "false"๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ
# 1.4 ์ด์ƒ์ธ ๊ฒฝ์šฐ ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘์— ์ผํšŒ์„ฑ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
preallocate-bpf-maps : "false"

# ํ˜ธํ™˜๋˜๋Š” Istio ์‚ฌ์ด๋“œ์นด istio-proxy์™€ ์ผ์น˜ํ•˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹
# ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ด๋ฆ„
sidecar-istio-proxy-image : "cilium / istio_proxy"

# ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„์œ„ํ•œ ์บก์Šํ™” ๋ชจ๋“œ
# ๊ฐ€๋Šฅํ•œ ๊ฐ’ :
#-๋น„ํ™œ์„ฑํ™” ๋จ
#-vxlan (๊ธฐ๋ณธ๊ฐ’)
#-์ œ๋„ค๋ฐ”
ํ„ฐ๋„ : vxlan

# ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ด๋ฆ„. ํด๋Ÿฌ์Šคํ„ฐ ๋ฉ”์‹œ๋ฅผ ๊ตฌ์ถ• ํ•  ๋•Œ๋งŒ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„ : ๊ธฐ๋ณธ๊ฐ’

# DNS ํด๋ง์€ ๊ฐ matchName ์— ๋Œ€ํ•ด ์ •๊ธฐ์ ์œผ๋กœ DNS ์กฐํšŒ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.
# ์„ฌ๋ชจ ์ œ. ๊ฒฐ๊ณผ๋Š” ๋์  ์ •์ฑ…์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
# DNS ์กฐํšŒ๋Š” 5 ์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐ˜๋ณต๋˜๋ฉฐ
# A (IPv4) ๋ฐ AAAA (IPv6) ์ฃผ์†Œ. ์กฐํšŒ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์˜ IP
# ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. IP ๋ณ€๊ฒฝ์€ Cilium์˜ ์žฌ์ƒ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค
# ๊ฐ ์—”๋“œ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ •์ฑ… ๋ฐ cilium-agent ๋ณ„ ์ •์ฑ… ์ฆ๊ฐ€
# ์ €์žฅ์†Œ ๊ฐœ์ •.
#
#์ด ์˜ต์…˜์€ 1.4.x ๋ฒ„์ „๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ DNS ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜ ๊ตฌํ˜„์˜ #, ์ž์„ธํ•œ ๋‚ด์šฉ์€ [0]์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
# FQDN ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
# DNS ํ”„๋ก์‹œ.
#
# ์‰ฝ๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š”์ด ์˜ต์…˜์„ "true"๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€์ด๋“œ [1]์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
# ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ์œ„ํ•œ ์ •์ฑ… ๊ทœ์น™์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
#
# [0] http://docs.cilium.io/en/stable/policy/language/#dns ๊ธฐ๋ฐ˜
# [1] http://docs.cilium.io/en/stable/install/upgrade/#changes-that-may-require-action
tofqdns-enable-poller : "false"

# wait-bpf-mount๋Š” init ์ปจํ…Œ์ด๋„ˆ๊ฐ€ bpf ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋งˆ์šดํŠธ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒํ•ฉ๋‹ˆ๋‹ค.
wait-bpf-mount : "๊ฑฐ์ง“"

๊ฐ€์žฅ ๋ฌด๋„ํšŒ : "true"
enable-xt-socket-fallback : "true"
install-iptables-rules : "true"
auto-direct-node-routes : "false"
kube-proxy-replacement : "ํ”„๋กœ๋ธŒ"
enable-host-reachable-services : "false"
enable-external-ips : "false"
enable-node-port : "false"
node-port-bind-protection : "true"
enable-auto-protect-node-port-range : "true"
enable-endpoint-health-checking : "true"
enable-well-known-identities : "false"
enable-remote-node-identity : "true"
--- # ์ถœ์ฒ˜ : cilium / charts / agent / templates / clusterrole.yamlapi ๋ฒ„์ „ : rbac.authorization.k8s.io/v1kind : ClusterRolemetadata :
์ด๋ฆ„ : ciliumrules :

  • apiGroups :

    • network.k8s.io

      ์ž์›:

    • ๋„คํŠธ์›Œํฌ ์ •์ฑ…

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

  • apiGroups :

    • discovery.k8s.io

      ์ž์›:

    • ๋์ 

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

  • apiGroups :

    • ""

      ์ž์›:

    • ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค

    • ์„œ๋น„์Šค

    • ๋…ธ๋“œ

    • ๋์ 

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

  • apiGroups :

    • ""

      ์ž์›:

    • ํฌ๋“œ

    • ๋…ธ๋“œ

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

    • ์ตœ์‹  ์ •๋ณด

  • apiGroups :

    • ""

      ์ž์›:

    • ๋…ธ๋“œ

    • ๋…ธ๋“œ / ์ƒํƒœ

      ๋™์‚ฌ :

    • ๋ฐ˜์ 

  • apiGroups :

    • apiextensions.k8s.io

      ์ž์›:

    • customresourcedefinitions

      ๋™์‚ฌ :

    • ์ฐฝ์กฐํ•˜๋‹ค

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

    • ์ตœ์‹  ์ •๋ณด

  • apiGroups :

    • cilium.io

      ์ž์›:

    • ciliumnetworkpolicies

    • ciliumnetwork ์ •์ฑ… / ์ƒํƒœ

    • ์„ฌ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๋„คํŠธ์›Œํฌ ์ •์ฑ…

    • cilium ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๋„คํŠธ์›Œํฌ ์ •์ฑ… / ์ƒํƒœ

    • ์„ฌ๋ชจ ์ข…์ 

    • ciliumendpoints / status

    • ์„ฌ๋ชจ ๋…ธ๋“œ

    • ์„ฌ๋ชจ ์ ˆ / ์ƒํƒœ

    • ์„ฌ๋ชจ ์ •์ฒด์„ฑ

    • ciliumidentities / status

      ๋™์‚ฌ :

    • '*'

      --- # ์ถœ์ฒ˜ : cilium / charts / operator / templates / clusterrole.yamlapi ๋ฒ„์ „ : rbac.authorization.k8s.io/v1kind : ClusterRolemetadata :

      ์ด๋ฆ„ : cilium-operatorrules :

  • apiGroups :

    • ""

      ์ž์›:

      # [core | kube] dns ํฌ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜์—ฌ

      # Cilium์—์„œ ๊ด€๋ฆฌ

    • ํฌ๋“œ

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

    • ์ง€์šฐ๋‹ค

  • apiGroups :

    • discovery.k8s.io

      ์ž์›:

    • ๋์ 

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

  • apiGroups :

    • ""

      ์ž์›:

      # k8s์—์„œ ์ž๋™์œผ๋กœ ์ฝ๊ณ  ๋…ธ๋“œ์˜ pod CIDR์„ cilium์˜

      # etcd ๊ทธ๋ž˜์„œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ํฌ๋“œ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ 

      # ๋…ธ๋“œ.

    • ๋…ธ๋“œ

      # ToGroup ๊ฐ€ ํฌํ•จ ๋œ CNP๋ฅผ ๋์ ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค

    • ๋์ 

      # apiserver ์—ฐ๊ฒฐ ํ™•์ธ

    • ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค

      ๋™์‚ฌ :

    • ๊ฐ€์ ธ ์˜ค๊ธฐ

    • ๋ช…๋ถ€

    • ์†๋ชฉ ์‹œ๊ณ„

  • apiGroups :

    • cilium.io

      ์ž์›:

    • ciliumnetworkpolicies

    • ciliumnetwork ์ •์ฑ… / ์ƒํƒœ

    • ์„ฌ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๋„คํŠธ์›Œํฌ ์ •์ฑ…

    • cilium ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๋„คํŠธ์›Œํฌ ์ •์ฑ… / ์ƒํƒœ

    • ์„ฌ๋ชจ ์ข…์ 

    • ciliumendpoints / status

    • ์„ฌ๋ชจ ๋…ธ๋“œ

    • ์„ฌ๋ชจ ์ ˆ / ์ƒํƒœ

    • ์„ฌ๋ชจ ์ •์ฒด์„ฑ

    • ciliumidentities / status

      ๋™์‚ฌ :

    • '*'

      --- # ์ถœ์ฒ˜ : cilium / charts / agent / templates / clusterrolebinding.yamlapi ๋ฒ„์ „ : rbac.authorization.k8s.io/v1kind : ClusterRoleBindingmetadata :

      ์ด๋ฆ„ : ciliumroleRef :

      apiGroup : rbac.authorization.k8s.io

      ์ข…๋ฅ˜ : ClusterRole

      ์ด๋ฆ„ : ciliumsubjects :

  • ์ข…๋ฅ˜ : ServiceAccount
    ์ด๋ฆ„ : cilium
    ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-system
    --- # ์ถœ์ฒ˜ : cilium / charts / operator / templates / clusterrolebinding.yamlapi ๋ฒ„์ „ : rbac.authorization.k8s.io/v1kind : ClusterRoleBindingmetadata :
    ์ด๋ฆ„ : cilium-operatorroleRef :
    apiGroup : rbac.authorization.k8s.io
    ์ข…๋ฅ˜ : ClusterRole
    ์ด๋ฆ„ : cilium-operatorsubjects :
  • ์ข…๋ฅ˜ : ServiceAccount
    ์ด๋ฆ„ : cilium-operator
    ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-system
    --- # ์ถœ์ฒ˜ : cilium / charts / agent / templates / daemonset.yamlapi ๋ฒ„์ „ : apps / v1kind : DaemonSetmetadata :
    ๋ผ๋ฒจ :
    k8s-app : ์„ฌ๋ชจ
    ์ด๋ฆ„ : cilium
    ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-systemspec :
    ์„ ํƒ์ž:
    matchLabels :
    k8s-app : ์„ฌ๋ชจ
    ์ฃผํ˜•:
    ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ :
    ์ฃผ์„ :
    #์ด ์ฃผ์„๊ณผ CriticalAddonsOnly ํ—ˆ์šฉ ์˜ค์ฐจ๋Š”
    # ์„ฌ๋ชจ๋Š” ์„ฌ๋ชจ๋ฅผ ๋ณด์žฅํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ค‘์š”ํ•œ ๊ผฌํˆฌ๋ฆฌ๊ฐ€๋ฉ๋‹ˆ๋‹ค.
    # ์šฐ์„  ์˜ˆ์•ฝ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    # https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
    scheduler.alpha.kubernetes.io/critical-pod : ""
    ๋ผ๋ฒจ :
    k8s-app : ์„ฌ๋ชจ
    ํˆฌ๊ธฐ:
    ์šฉ๊ธฐ :

    • ์ธ์ˆ˜ :



      • --config-dir = / tmp / cilium / config-map


        ๋ช…๋ น:


      • ์„ฌ๋ชจ ์ œ


        livenessProbe :


        exec :


        ๋ช…๋ น:





        • ์„ฌ๋ชจ



        • ์ƒํƒœ



        • --๊ฐ„๊ฒฐํ•œ



          failureThreshold : 10



          # ํ™œ์„ฑ ์ƒํƒœ ํ”„๋กœ๋ธŒ์˜ ์ดˆ๊ธฐ ์ง€์—ฐ์€ ์˜๋„์ ์œผ๋กœ



          # ๋์—†๋Š” ์ข…๋ฃŒ ๋ฐ ์žฌ์‹œ์ž‘์ฃผ๊ธฐ๋ฅผ ํ”ผํ•˜์‹ญ์‹œ์˜ค.



          # ๋ถ€ํŠธ ์ŠคํŠธ๋ž˜ํ•‘์ด ์˜ˆ์ƒ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.



          initialDelaySeconds : 120



          periodSeconds : 30



          successThreshold : 1



          timeoutSeconds : 5



          readinessProbe :



          exec :



          ๋ช…๋ น:



        • ์„ฌ๋ชจ



        • ์ƒํƒœ



        • --๊ฐ„๊ฒฐํ•œ



          failureThreshold : 3



          initialDelaySeconds : 5



          periodSeconds : 30



          successThreshold : 1



          timeoutSeconds : 5



          env :





      • ์ด๋ฆ„ : K8S_NODE_NAME


        valueFrom :


        fieldRef :


        apiVersion : v1


        fieldPath : spec.nodeName


      • ์ด๋ฆ„ : CILIUM_K8S_NAMESPACE


        valueFrom :


        fieldRef :


        apiVersion : v1


        fieldPath : metadata.namespace


      • ์ด๋ฆ„ : CILIUM_FLANNEL_MASTER_DEVICE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ํ”Œ๋ž€๋„ฌ ๋งˆ์Šคํ„ฐ ์žฅ์น˜


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_FLANNEL_UNINSTALL_ON_EXIT


        valueFrom :


        configMapKeyRef :


        ํ‚ค : flannel-uninstall-on-exit


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_CLUSTERMESH_CONFIG


        ๊ฐ’ : / var / lib / cilium / clustermesh /


      • ์ด๋ฆ„ : CILIUM_CNI_CHAINING_MODE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : cni-chaining-mode


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_CUSTOM_CNI_CONF


        valueFrom :


        configMapKeyRef :


        ํ‚ค : custom-cni-conf


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


        ์ด๋ฏธ์ง€ : "docker.io/cilium/cilium:v1.7.6"


        imagePullPolicy : IfNotPresent


        ์ˆ˜๋ช…์ฃผ๊ธฐ :


        postStart :


        exec :


        ๋ช…๋ น:





        • "/cni-install.sh"



        • "--enable-debug = false"



          preStop :



          exec :



          ๋ช…๋ น:



        • /cni-uninstall.sh



          ์ด๋ฆ„ : cilium-agent



          securityContext :



          ๊ธฐ๋Šฅ :



          ๋”ํ•˜๋‹ค:







          • NET_ADMIN




          • SYS_MODULE




            ํŠน๊ถŒ : ์ฐธ




            volumeMounts :









      • mountPath : / var / run / cilium


        ์ด๋ฆ„ : cilium-run


      • mountPath : / host / opt / cni / bin


        ์ด๋ฆ„ : cni-path


      • mountPath : /host/etc/cni/net.d


        ์ด๋ฆ„ : etc-cni-netd


      • mountPath : / var / lib / cilium / clustermesh


        ์ด๋ฆ„ : clustermesh-secrets


        readOnly : true


      • mountPath : / tmp / cilium / config-map


        ์ด๋ฆ„ : cilium-config-path


        readOnly : true


        # ์ปค๋„ ๋ชจ๋“ˆ์„๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.


      • mountPath : / lib / modules


        ์ด๋ฆ„ : lib-modules


        readOnly : true


      • mountPath : /run/xtables.lock


        ์ด๋ฆ„ : xtables-lock


        hostNetwork : true


        initContainers :



    • ๋ช…๋ น:



      • /init-container.sh


        env :


      • ์ด๋ฆ„ : CILIUM_ALL_STATE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ๊นจ๋—ํ•œ ์‹ค๋ฅจ ์ƒํƒœ


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_BPF_STATE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : clean-cilium-bpf-state


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_WAIT_BPF_MOUNT


        valueFrom :


        configMapKeyRef :


        ํ‚ค : wait-bpf-mount


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


        ์ด๋ฏธ์ง€ : "docker.io/cilium/cilium:v1.7.6"


        imagePullPolicy : IfNotPresent


        ์ด๋ฆ„ : clean-cilium-state


        securityContext :


        ๊ธฐ๋Šฅ :


        ๋”ํ•˜๋‹ค:





        • NET_ADMIN



          ํŠน๊ถŒ : ์ฐธ



          volumeMounts :





      • mountPath : / var / run / cilium


        ์ด๋ฆ„ : cilium-run


        restartPolicy : ํ•ญ์ƒ


        priorityClassName : ์‹œ์Šคํ…œ ๋…ธ๋“œ ์ค‘์š”


        serviceAccount : cilium


        serviceAccountName : cilium


        terminateGracePeriodSeconds : 1


        ๊ด€์šฉ :



    • ์—ฐ์‚ฐ์ž : ์กด์žฌ

      ๋ณผ๋ฅจ :

      # ์žฌ์‹œ์ž‘ / ์—…๊ทธ๋ ˆ์ด๋“œ ์‚ฌ์ด์— ์ƒํƒœ ์œ ์ง€

    • hostPath :

      ๊ฒฝ๋กœ : / var / run / cilium

      ์œ ํ˜• : DirectoryOrCreate

      ์ด๋ฆ„ : cilium-run

      # ํ˜ธ์ŠคํŠธ์— cilium cni ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด

    • hostPath :

      ๊ฒฝ๋กœ : / opt / cni / bin

      ์œ ํ˜• : DirectoryOrCreate

      ์ด๋ฆ„ : cni-path

      # ํ˜ธ์ŠคํŠธ์— cilium cni ๊ตฌ์„ฑ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด

    • hostPath :

      ๊ฒฝ๋กœ : /etc/cni/net.d

      ์œ ํ˜• : DirectoryOrCreate

      ์ด๋ฆ„ : etc-cni-netd

      # ์ปค๋„ ๋ชจ๋“ˆ์„๋กœ๋“œํ•˜๋ ค๋ฉด

    • hostPath :

      ๊ฒฝ๋กœ : / lib / modules

      ์ด๋ฆ„ : lib-modules

      # ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค (์˜ˆ : kube-proxy)์™€ ๋™์‹œ์— iptable์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด

    • hostPath :

      ๊ฒฝ๋กœ : /run/xtables.lock

      ์œ ํ˜• : FileOrCreate

      ์ด๋ฆ„ : xtables-lock

      # clustermesh ๊ตฌ์„ฑ์„ ์ฝ์œผ๋ ค๋ฉด

    • ์ด๋ฆ„ : clustermesh-secrets

      ๋น„๋ฐ€:

      defaultMode : 420

      ์„ ํƒ ์‚ฌํ•ญ : true

      secretName : cilium-clustermesh

      # ๊ตฌ์„ฑ ๋งต์—์„œ ๊ตฌ์„ฑ์„ ์ฝ์œผ๋ ค๋ฉด

    • configMap :

      ์ด๋ฆ„ : cilium-config

      ์ด๋ฆ„ : cilium-config-path

      updateStrategy :

      rollingUpdate :

      maxUnavailable : 2

      ์œ ํ˜• : RollingUpdate

      --- # ์ถœ์ฒ˜ : cilium / charts / operator / templates / deployment.yamlapi ๋ฒ„์ „ : apps / v1kind : Deploymentmetadata :

      ๋ผ๋ฒจ :

      io.cilium / app : ์—ฐ์‚ฐ์ž

      ์ด๋ฆ„ : cilium-operator

      ์ด๋ฆ„ : cilium-operator

      ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค : kube-systemspec :

      ๋ณต์ œ๋ณธ : 1

      ์„ ํƒ์ž:

      matchLabels :

      io.cilium / app : ์—ฐ์‚ฐ์ž

      ์ด๋ฆ„ : cilium-operator

      ์ „๋žต:

      rollingUpdate :

      maxSurge : 1

      maxUnavailable : 1

      ์œ ํ˜• : RollingUpdate

      ์ฃผํ˜•:

      ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ :

      ์ฃผ์„ :

      ๋ผ๋ฒจ :

      io.cilium / app : ์—ฐ์‚ฐ์ž

      ์ด๋ฆ„ : cilium-operator

      ํˆฌ๊ธฐ:

      ์šฉ๊ธฐ :

    • ์ธ์ˆ˜ :



      • --debug = $ (CILIUM_DEBUG)


      • --identity-allocation-mode = $ (CILIUM_IDENTITY_ALLOCATION_MODE)


      • --synchronize-k8s-nodes = true


        ๋ช…๋ น:


      • ์„ฌ๋ชจ ์—ฐ์‚ฐ์ž


        env :


      • ์ด๋ฆ„ : CILIUM_K8S_NAMESPACE


        valueFrom :


        fieldRef :


        apiVersion : v1


        fieldPath : metadata.namespace


      • ์ด๋ฆ„ : K8S_NODE_NAME


        valueFrom :


        fieldRef :


        apiVersion : v1


        fieldPath : spec.nodeName


      • ์ด๋ฆ„ : CILIUM_DEBUG


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ๋””๋ฒ„๊ทธ


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_CLUSTER_NAME


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_CLUSTER_ID


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ํด๋Ÿฌ์Šคํ„ฐ ID


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_IPAM


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ipam


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_DISABLE_ENDPOINT_CRD


        valueFrom :


        configMapKeyRef :


        ํ‚ค : disable-endpoint-crd


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_KVSTORE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : kvstore


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_KVSTORE_OPT


        valueFrom :


        configMapKeyRef :


        ํ‚ค : kvstore-opt


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : AWS_ACCESS_KEY_ID


        valueFrom :


        secretKeyRef :


        ํ‚ค : AWS_ACCESS_KEY_ID


        ์ด๋ฆ„ : cilium-aws


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : AWS_SECRET_ACCESS_KEY


        valueFrom :


        secretKeyRef :


        ํ‚ค : AWS_SECRET_ACCESS_KEY


        ์ด๋ฆ„ : cilium-aws


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : AWS_DEFAULT_REGION


        valueFrom :


        secretKeyRef :


        ํ‚ค : AWS_DEFAULT_REGION


        ์ด๋ฆ„ : cilium-aws


        ์„ ํƒ ์‚ฌํ•ญ : true


      • ์ด๋ฆ„ : CILIUM_IDENTITY_ALLOCATION_MODE


        valueFrom :


        configMapKeyRef :


        ํ‚ค : ID ํ• ๋‹น ๋ชจ๋“œ


        ์ด๋ฆ„ : cilium-config


        ์„ ํƒ ์‚ฌํ•ญ : true


        ์ด๋ฏธ์ง€ : "docker.io/cilium/operator:v1.7.6"


        imagePullPolicy : IfNotPresent


        ์ด๋ฆ„ : cilium-operator


        livenessProbe :


        httpGet :


        ํ˜ธ์ŠคํŠธ : '127.0.0.1'


        ๊ฒฝ๋กœ : / healthz


        ํฌํŠธ : 9234


        ์ฒด๊ณ„ : HTTP


        initialDelaySeconds : 60


        periodSeconds : 10


        timeoutSeconds : 3


        hostNetwork : true


        restartPolicy : ํ•ญ์ƒ


        serviceAccount : cilium-operator


        serviceAccountName : cilium-operator



โ€”
๋‹น์‹ ์ด ํ• ๋‹น ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-656404841 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJ5E6BMTNCADT5K7D4PMF3R2ZJRVANCNFSM4NOTPEDA
.

๋กœ๊ทธ ์ˆ˜์ค€์„ ๋†’์ด๊ณ  grep์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ํ•„ํ„ฐ๋ง ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด ํฌ๋“œ?

2020 ๋…„ 7 ์›” 9 ์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 7:55 dilyevsky, [email protected]
์ผ๋‹ค :

๋‹ค์Œ์€ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

I0709 23 : 08 : 22.056081 1 registry.go : 150] EvenPodsSpread ์ˆ ์–ด ๋ฐ ์šฐ์„  ์ˆœ์œ„ ํ•จ์ˆ˜ ๋“ฑ๋ก
I0709 23 : 08 : 23.137451 1 serving.go : 313] ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ
W0709 23 : 08 : 33.843509 1 authentication.go : 297] ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ธ์ฆ ๊ตฌ์„ฑ ์กฐํšŒ ์˜ค๋ฅ˜ : etcdserver : ์š”์ฒญ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
W0709 23 : 08 : 33.843671 1 authentication.go : 298] ์ธ์ฆ ๊ตฌ์„ฑ์—†์ด ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์š”์ฒญ์„ ์ต๋ช…์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค.
W0709 23 : 08 : 33.843710 1 authentication.go : 299] ์ธ์ฆ ๊ตฌ์„ฑ ์กฐํšŒ๊ฐ€ ์„ฑ๊ณตํ•˜๋„๋ก ์š”๊ตฌํ•˜๋ ค๋ฉด --authentication-tolerate-lookup-failure = false๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
I0709 23 : 08 : 33.911805 1 registry.go : 150] EvenPodsSpread ์ˆ ์–ด ๋ฐ ์šฐ์„  ์ˆœ์œ„ ํ•จ์ˆ˜ ๋“ฑ๋ก
I0709 23 : 08 : 33.911989 1 registry.go : 150] EvenPodsSpread ์ˆ ์–ด ๋ฐ ์šฐ์„  ์ˆœ์œ„ ํ•จ์ˆ˜ ๋“ฑ๋ก
W0709 23 : 08 : 33.917999 1 authorization.go : 47] ์ธ์ฆ์ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
W0709 23 : 08 : 33.918162 1 authentication.go : 40] ์ธ์ฆ์ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
I0709 23 : 08 : 33.918238 1 deprecated_insecure_serving.go : 51] [::] : 10251์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ healthz ์ œ๊ณต
I0709 23 : 08 : 33.925860 1 configmap_cafile_content.go : 202] client-ca :: kube-system :: extension-apiserver-authentication :: client-ca-file ์‹œ์ž‘
I0709 23 : 08 : 33.926013 1 shared_informer.go : 223] client-ca :: kube-system :: extension-apiserver-authentication :: client-ca-file์— ๋Œ€ํ•ด ์บ์‹œ๊ฐ€ ๋™๊ธฐํ™”๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
I0709 23 : 08 : 33.930685 1 secure_serving.go : 178] 127.0.0.1:10259์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฒŒ์žฌ
I0709 23 : 08 : 33.936198 1 tlsconfig.go : 240] DynamicServingCertificateController ์‹œ์ž‘ ์ค‘
I0709 23 : 08 : 34.026382 1 shared_informer.go : 230] ์บ์‹œ๊ฐ€ client-ca :: kube-system :: extension-apiserver-authentication :: client-ca-file์— ๋Œ€ํ•ด ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
I0709 23 : 08 : 34.036998 1 leaderelection.go : 242] ๋ฆฌ๋” ์ž„๋Œ€ kube-system / kube-scheduler๋ฅผ ์ทจ๋“ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค ...
I0709 23 : 08 : 50.597201 1 leaderelection.go : 252] kube-system / kube-scheduler ์ž„๋Œ€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํš๋“ํ–ˆ์Šต๋‹ˆ๋‹ค.
E0709 23 : 08 : 50.658551 1 factory.go : 503] pod : kube-system / coredns-66bff467f8-9rjvd๊ฐ€ ์ด๋ฏธ ํ™œ์„ฑ ๋Œ€๊ธฐ์—ด์— ์žˆ์Šต๋‹ˆ๋‹ค.
E0709 23 : 12 : 27.673854 1 factory.go : 503] pod kube-system / cilium-vv466์ด ์ด๋ฏธ ๋ฐฑ ์˜คํ”„ ๋Œ€๊ธฐ์—ด์— ์žˆ์Šต๋‹ˆ๋‹ค.
E0709 23 : 12 : 58.099432 1 leaderelection.go : 320] ๋ฆฌ์†Œ์Šค ์ž ๊ธˆ ๊ฒ€์ƒ‰ ์˜ค๋ฅ˜ kube-system / kube-scheduler : etcdserver : leader changed

์Šค์ผ€์ค„๋Ÿฌ ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ณด๋ฅ˜์ค‘์ธ ํฌ๋“œ๊ฐ€ ์ฆ‰์‹œ ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ํ• ๋‹น ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-656406215 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJ5E6E4QPGNNBFUYSZEJC3R2ZKHDANCNFSM4NOTPEDA
.

๋‹ค์Œ์€ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.
```์ด๋ฒคํŠธ :
์œ ํ˜• ์ด์œ  ๋ฉ”์‹œ์ง€์˜ ๋‚˜์ด
---- ------ ---- ---- -------
๊ฒฝ๊ณ  FailedSchedulingdefault-scheduler 0/6 ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 5 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋…ธ๋“œ ์„ ํƒ๊ธฐ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ฒฝ๊ณ  FailedSchedulingdefault-scheduler 0/6 ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 5 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋…ธ๋“œ ์„ ํƒ๊ธฐ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

The node only has two taints but the pod tolerates all existing taints and yeah it seems to only happen on masters:

์˜ค์—ผ : node-role.kubernetes.io/ master : NoSchedule
node.kubernetes.io/network-un ์‚ฌ์šฉ ๊ฐ€๋Šฅ : NoSchedule

There is enough space and pod is best effort with no reservation anyway:
```  Resource                   Requests    Limits
  --------                   --------    ------
  cpu                        650m (32%)  0 (0%)
  memory                     70Mi (0%)   170Mi (2%)
  ephemeral-storage          0 (0%)      0 (0%)
  hugepages-1Gi              0 (0%)      0 (0%)
  hugepages-2Mi              0 (0%)      0 (0%)
  attachable-volumes-gce-pd  0           0

์ด์ œ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ ์ˆ˜์ค€์„ ๋†’์—ฌ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํฌ๋“œ yaml์—๋Š” ์‹ค์ œ๋กœ node-role.kubernetes.io/master ํ—ˆ์šฉ ์˜ค์ฐจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์Šคํ„ฐ์—์„œ ์˜ˆ์•ฝํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”! ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐํฌ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ˜์นœ ํ™”์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋“œ๊ฐ€ ๊ฐ ๋…ธ๋“œ ๋˜๋Š” ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ํฌ๋“œ ์„ ํƒ๊ธฐ์—์„œ ์˜ˆ์•ฝ๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.
์‹คํŒจํ•œ ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์„ค์ •๋œ ๋…ธ๋“œ ์„ ํƒ๊ธฐ๋กœ ํฌ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์˜ˆ์•ฝ์ด ์‹คํŒจ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 5 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ 6 ๋ฒˆ์งธ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฌด์–ธ๊ฐ€๊ฐ€ ์บ์‹œ๋˜๊ณ  ๋…ธ๋“œ์—์„œ ์Šค์ผ€์ค„๋ง์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ „์— ๋งํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” ์‹คํŒจ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

์‹คํŒจํ•œ ๋ฐฐํฌ๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ์ŠคํŠธ๋ผ์ดํ”„ํ–ˆ์Šต๋‹ˆ๋‹ค (์‹คํŒจํ•œ ๋งˆ์Šคํ„ฐ์—์„œ ์˜ค์—ผ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค).

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
      restartPolicy: Always
      schedulerName: default-scheduler
      nodeSelector:
        kubernetes.io/hostname: master-2

๋งˆ์Šคํ„ฐ๊ฐ€ ์˜ค์—ผ์„ ๋ฐ›์•˜์„ ๋•Œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๋ฐฐํฌ์‹œ ์˜ค์—ผ์— ๋Œ€ํ•œ ๋‚ด์„ฑ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ๋ชฌ ์…‹, ๊ด€์šฉ ๋˜๋Š” ์นœ ํ™”์„ฑ / ๋ฐ˜ ์นœํ™” ์„ฑ๊ณผ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ์˜ˆ์•ฝ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 1.18.2์—์„œ 1.18.5๊นŒ์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (1.18.0 ๋˜๋Š” .1๋กœ ์‹œ๋„ํ•˜์ง€ ์•Š์Œ).

์‹คํŒจํ•œ ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์„ค์ •๋œ ๋…ธ๋“œ ์„ ํƒ๊ธฐ๋กœ ํฌ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์˜ˆ์•ฝ์ด ์‹คํŒจ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ํฌ๋“œ๋ฅผ ๋งŒ๋“  ํ›„ ๋˜๋Š” ์ด์ „์— ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋…ธ๋“œ์—๋Š” ํฌ๋“œ๊ฐ€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ค์—ผ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

@nodo ๋Š” ์žฌํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. NodeSelector์˜ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ์ถ”๊ฐ€ ๋กœ๊ทธ ํ–‰์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ธ์‡„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • kube-scheduler์˜ PID ๊ฐ€์ ธ ์˜ค๊ธฐ : $ pidof kube-scheduler
  • ํŠธ๋ฆฌ๊ฑฐ ํ ๋คํ”„ : $ sudo kill -SIGUSR2 <pid> . ์ด๊ฒƒ์€ ์Šค์ผ€์ค„๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ์—์„œ "Dump of cached NodeInfo", "Dump of schedule queue"๋ฐ "cache comparer started"๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

/ priority critical-urgent

/ ํ• ๋‹น ํ•ด์ œ

์ด ํ…Œ์ŠคํŠธ ๋ฐฐํฌ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ์ผ๋ถ€ ๋ฐ๋ชฌ ์…‹๊ณผ ๋ฐฐํฌ๊ฐ€ "๋ณด๋ฅ˜ ์ค‘"์— ๋ฉˆ์ถฐ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์•˜์œผ๋ฏ€๋กœ ์ด๋ฏธ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค์—ผ ๋ฌผ์งˆ์ด ๋…ธ๋“œ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋” ์ด์ƒ ๋ณด์ด์ง€ ์•Š๋„๋ก ๋…ธ๋“œ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ ํ™˜๊ฒฝ์„ ์žƒ์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์‚ฐํ•˜์ž๋งˆ์ž ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ๋Œ์•„์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•œ ๊ณผ๊ฑฐ์— ์ด๊ฒƒ์„ ์žฌํ˜„ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์‹คํŒจ ์‚ฌ๋ก€์— ๋” ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์˜ค์—ผ๊ณผ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

I0716 14:47:52.768362       1 factory.go:462] Unable to schedule default/test-deployment-558f47bbbb-4rt5t: no fit: 0/6 nodes are available: 5 node(s) didn't match node selector.; waiting
I0716 14:47:52.768683       1 scheduler.go:776] Updating pod condition for default/test-deployment-558f47bbbb-4rt5t to (PodScheduled==False, Reason=Unschedulable)
I0716 14:47:53.018781       1 httplog.go:90] verb="GET" URI="/healthz" latency=299.172ยตs resp=200 UserAgent="kube-probe/1.18" srcIP="127.0.0.1:57258": 
I0716 14:47:59.469828       1 comparer.go:42] cache comparer started
I0716 14:47:59.470936       1 comparer.go:67] cache comparer finished
I0716 14:47:59.471038       1 dumper.go:47] Dump of cached NodeInfo
I0716 14:47:59.471484       1 dumper.go:49] 
Node name: master-0-bug
Requested Resources: {MilliCPU:1100 Memory:52428800 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}
Allocatable Resources:{MilliCPU:2000 Memory:3033427968 EphemeralStorage:19290208634 AllowedPodNumber:110 ScalarResources:map[hugepages-1Gi:0 hugepages-2Mi:0]}
Scheduled Pods(number: 9):
...
I0716 14:47:59.472623       1 dumper.go:60] Dump of scheduling queue:
name: coredns-cd64c8d7c-29zjq, namespace: kube-system, uid: 938e8827-5d17-4db9-ac04-d229baf4534a, phase: Pending, nominated node: 
name: test-deployment-558f47bbbb-4rt5t, namespace: default, uid: fa19fda9-c8d6-4ffe-b248-8ddd24ed5310, phase: Pending, nominated node: 

๋ถˆํ–‰ํžˆ๋„ ๋„์›€์ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์บ์‹œ๋ฅผ ๋คํ”„ํ•˜๋Š” ๊ฒƒ์€ ๋””๋ฒ„๊น…์„์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋คํ”„๋ฅผ ํฌํ•จ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ์ด๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด pod yaml ๋ฐ ๋…ธ๋“œ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ ๋ฒ„๋ ค์ง„ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋คํ”„์—์„œ coredns ํฌ๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์“ฐ๋ ˆ๊ธฐ์žฅ์—์„œ ๋ฌด์—‡์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” yamls๋ฅผ ๊ฐ€์ ธ์˜ฌ๊ฑฐ์•ผ

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋…ธ๋“œ์™€ ํฌ๋“œ๋ฅผ ๋‹ค๋“ฌ ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ํ•ด๋‹น ๋…ธ๋“œ์— ๋Œ€ํ•ด ์˜ˆ์•ฝ ๋œ ํฌ๋“œ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ณ„์‚ฐ์— ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ.

Requested Resources: {MilliCPU:1100 Memory:52428800 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}

AllowedPodNumber: 0 ์ด ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋‹ค๋ฅธ ํฌ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
` name: kube-controller-manager-master-0-bug, namespace: kube-system, uid: 095eebb0-4752-419b-aac7-245e5bc436b8, phase: Running, nominated node: name: kube-proxy-xwf6h, namespace: kube-system, uid: 16552eaf-9eb8-4584-ba3c-7dff6ce92592, phase: Running, nominated node: name: kube-apiserver-master-0-bug, namespace: kube-system, uid: 1d338e26-b0bc-4cef-9bad-86b7dd2b2385, phase: Running, nominated node: name: kube-multus-ds-amd64-tpkm8, namespace: kube-system, uid: d50c0c7f-599c-41d5-a029-b43352a4f5b8, phase: Running, nominated node: name: openstack-cloud-controller-manager-wrb8n, namespace: kube-system, uid: 17aeb589-84a1-4416-a701-db6d8ef60591, phase: Running, nominated node: name: kube-scheduler-master-0-bug, namespace: kube-system, uid: 52469084-3122-4e99-92f6-453e512b640f, phase: Running, nominated node: name: subport-controller-28j9v, namespace: kube-system, uid: a5a07ac8-763a-4ff2-bdae-91c6e9e95698, phase: Running, nominated node: name: csi-cinder-controllerplugin-0, namespace: kube-system, uid: 8b16d6c8-a871-454e-98a3-0aa545f9c9d0, phase: Running, nominated node: name: calico-node-d899t, namespace: kube-system, uid: e3672030-53b1-4356-a5df-0f4afd6b9237, phase: Running, nominated node:

๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋คํ”„์˜ ์š”์ฒญ ๋œ ๋ฆฌ์†Œ์Šค์—์„œ allowedPodNumber๋ฅผ 0์œผ๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋…ธ๋“œ๋Š” ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

yaml ๋…ธ๋“œ :

apiVersion: v1
kind: Node
metadata:
  annotations:
    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
    node.alpha.kubernetes.io/ttl: "0"
    volumes.kubernetes.io/controller-managed-attach-detach: "true"
  creationTimestamp: "2020-07-16T09:59:48Z"
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/instance-type: 54019dbc-10d7-409c-8338-5556f61a9371
    beta.kubernetes.io/os: linux
    failure-domain.beta.kubernetes.io/region: regionOne
    failure-domain.beta.kubernetes.io/zone: nova
    kubernetes.io/arch: amd64
    kubernetes.io/hostname: master-0-bug
    kubernetes.io/os: linux
    node-role.kubernetes.io/master: ""
    node.kubernetes.io/instance-type: 54019dbc-10d7-409c-8338-5556f61a9371
    node.uuid: 00324054-405e-4fae-a3bf-d8509d511ded
    node.uuid_source: cloud-init
    topology.kubernetes.io/region: regionOne
    topology.kubernetes.io/zone: nova
  name: master-0-bug
  resourceVersion: "85697"
  selfLink: /api/v1/nodes/master-0-bug
  uid: 629b6ef3-3c76-455b-8b6b-196c4754fb0e
spec:
  podCIDR: 192.168.0.0/24
  podCIDRs:
  - 192.168.0.0/24
  providerID: openstack:///00324054-405e-4fae-a3bf-d8509d511ded
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
status:
  addresses:
  - address: 10.0.10.14
    type: InternalIP
  - address: master-0-bug
    type: Hostname
  allocatable:
    cpu: "2"
    ephemeral-storage: "19290208634"
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 2962332Ki
    pods: "110"
  capacity:
    cpu: "2"
    ephemeral-storage: 20931216Ki
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 3064732Ki
    pods: "110"
  conditions:
  - lastHeartbeatTime: "2020-07-16T10:02:20Z"
    lastTransitionTime: "2020-07-16T10:02:20Z"
    message: Calico is running on this node
    reason: CalicoIsUp
    status: "False"
    type: NetworkUnavailable
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has sufficient memory available
    reason: KubeletHasSufficientMemory
    status: "False"
    type: MemoryPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has no disk pressure
    reason: KubeletHasNoDiskPressure
    status: "False"
    type: DiskPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has sufficient PID available
    reason: KubeletHasSufficientPID
    status: "False"
    type: PIDPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T10:19:44Z"
    message: kubelet is posting ready status. AppArmor enabled
    reason: KubeletReady
    status: "True"
    type: Ready
  daemonEndpoints:
    kubeletEndpoint:
      Port: 10250
  nodeInfo:
    architecture: amd64
    bootID: fe410ed3-2825-4f94-a9f9-08dc5e6a955e
    containerRuntimeVersion: docker://19.3.11
    kernelVersion: 4.12.14-197.45-default
    kubeProxyVersion: v1.18.5
    kubeletVersion: v1.18.5
    machineID: 00324054405e4faea3bfd8509d511ded
    operatingSystem: linux
    systemUUID: 00324054-405e-4fae-a3bf-d8509d511ded

๊ทธ๋ฆฌ๊ณ  ํฌ๋“œ :

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-07-16T10:13:35Z"
  generateName: pm-node-exporter-
  labels:
    controller-revision-hash: 6466d9c7b
    pod-template-generation: "1"
  name: pm-node-exporter-mn9vj
  namespace: monitoring
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: pm-node-exporter
    uid: 5855a26f-a57e-4b0e-93f2-461c19c477e1
  resourceVersion: "5239"
  selfLink: /api/v1/namespaces/monitoring/pods/pm-node-exporter-mn9vj
  uid: 0db09c9c-1618-4454-94fa-138e55e5ebd7
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - master-0-bug
  containers:
  - args:
    - --path.procfs=/host/proc
    - --path.sysfs=/host/sys
    image: ***
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 3
      httpGet:
        path: /
        port: 9100
        scheme: HTTP
      initialDelaySeconds: 5
      periodSeconds: 5
      successThreshold: 1
      timeoutSeconds: 1
    name: pm-node-exporter
    ports:
    - containerPort: 9100
      hostPort: 9100
      name: metrics
      protocol: TCP
    resources:
      limits:
        cpu: 200m
        memory: 150Mi
      requests:
        cpu: 100m
        memory: 100Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /host/proc
      name: proc
      readOnly: true
    - mountPath: /host/sys
      name: sys
      readOnly: true
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: pm-node-exporter-token-csllf
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  hostNetwork: true
  hostPID: true
  nodeSelector:
    node-role.kubernetes.io/master: ""
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: pm-node-exporter
  serviceAccountName: pm-node-exporter
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/disk-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/pid-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/unschedulable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/network-unavailable
    operator: Exists
  volumes:
  - hostPath:
      path: /proc
      type: ""
    name: proc
  - hostPath:
      path: /sys
      type: ""
    name: sys
  - name: pm-node-exporter-token-csllf
    secret:
      defaultMode: 420
      secretName: pm-node-exporter-token-csllf
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-07-16T10:13:35Z"
    message: '0/6 nodes are available: 2 node(s) didn''t have free ports for the requested
      pod ports, 3 node(s) didn''t match node selector.'
    reason: Unschedulable
    status: "False"
    type: PodScheduled
  phase: Pending
  qosClass: Burstable

๋ชจ๋“  ์ •๋ณด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @nodo ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ 

/๋„์›€

@maelk ๋Š” ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  PR์„ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. ์ถ”๊ฐ€ ํ•œ ๋กœ๊ทธ ๋ผ์ธ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ์—ฌ์ž์—๊ฒŒ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

@alculquicondor :
์ด ์š”์ฒญ์€ ๊ธฐ์—ฌ์ž์˜ ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ์ด ์—ฌ๊ธฐ์— ๋‚˜์—ด๋œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธ

์ด ์š”์ฒญ์ด ๋” ์ด์ƒ ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋ผ๋ฒจ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/remove-help ๋ช…๋ น์œผ๋กœ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์— ๋Œ€ํ•œ ์‘๋‹ต ์ด :

/๋„์›€

@maelk ๋Š” ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  PR์„ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. ์ถ”๊ฐ€ ํ•œ ๋กœ๊ทธ ๋ผ์ธ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ์—ฌ์ž์—๊ฒŒ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

PR ๋Œ“๊ธ€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ kubernetes / test-infra ์ €์žฅ์†Œ์— ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์„ธ์š”.

/์–‘์ˆ˜์ธ

@maelk ์ด ๋ฌธ์ œ๊ฐ€ ์ฒ˜์Œ ๋ฐœ์ƒํ•˜๋Š” ํƒ€์ด๋ฐ์— ํŠน์ •ํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ๋…ธ๋“œ๊ฐ€ ์‹œ์ž‘๋œ ์งํ›„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ผ์ •์ด ์žกํžˆ๊ณ  ์ž˜ ์‹คํ–‰๋˜๋Š” ํฌ๋“œ๊ฐ€ ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋” ์ด์ƒ ์˜ˆ์•ฝ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ผ€์ด์Šค๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋‚ฎ ์ถฅ๋‹ˆ ๋‹ค.

์ถ”๊ฐ€ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด์žˆ๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ๊ฒƒ์€ ๋งˆ์Šคํ„ฐ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๋…ธ๋“œ ๋ชฉ๋ก์—์„œ ์™„์ „ํžˆ ์‚ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ 6 ๊ฐœ์˜ ๋…ธ๋“œ (์Šค๋ƒ… ์ƒท์—์„œ)๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

I0720 13:58:28.246507       1 generic_scheduler.go:441] Looking for a node for kube-system/coredns-cd64c8d7c-tcxbq, going through []*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ํ›„์—๋Š” 5 ๊ฐœ ์ด์ƒ์˜ ๋…ธ๋“œ ๋งŒ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

I0720 13:58:28.247420       1 generic_scheduler.go:505] pod kube-system/coredns-cd64c8d7c-tcxbq : processed 5 nodes, 0 fit

๋”ฐ๋ผ์„œ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž ์žฌ์  ๋…ธ๋“œ ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์ถฉ๋ถ„ํ•œ ๋กœ๊น…์ด ์—†์—ˆ์ง€๋งŒ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋ผ์ธ ๋ณ„ ์ฝ”๋“œ ์ฐธ์กฐ :

  1. https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R441
  2. https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R505

@maelk
%v/%v on node %v, too many nodes fit ๋Œ€ํ•œ ์ค„์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด @pancernik ์—์„œ workqueue.ParallelizeUntil(ctx, 16, len(allNodes), checkNode) ์—์„œ ๋ฒ„๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ํ•ด๋‹น ๋กœ๊ทธ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณ‘๋ ฌํ™”์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๋” ์ผ์ฐ ํ•„ํ„ฐ๋ง ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํŒจํ•œ ๊ฒฝ์šฐ : https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R464 ๋กœ๊ทธ afaik์— ํŠนํžˆ ๋” ๋งŽ์€ ๋””๋ฒ„๊ทธ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์™€ ๋ณ‘๋ ฌํ™”.

ํ•œ ๋…ธ๋“œ๊ฐ€ ํ•„ํ„ฐ๋ง์„ ๋‘ ๋ฒˆ ๊ฑฐ์น˜๋Š” ๊ฒƒ์„ ๋ฐฉ๊ธˆ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค!

๋กœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

I0720 13:58:28.246507       1 generic_scheduler.go:441] Looking for a node for kube-system/coredns-cd64c8d7c-tcxbq, going through []*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}
I0720 13:58:28.246793       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.246970       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler : status is not success
I0720 13:58:28.246819       1 taint_toleration.go:71] Checking taints for pod kube-system/coredns-cd64c8d7c-tcxbq for node master-0-scheduler : taints : []v1.Taint{v1.Taint{Key:"node-role.kubernetes.io/master", Value:"", Effect:"NoSchedule", TimeAdded:(*v1.Time)(nil)}} and tolerations: []v1.Toleration{v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"CriticalAddonsOnly", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40d90)}, v1.Toleration{Key:"node.kubernetes.io/unreachable", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40db0)}}
I0720 13:58:28.247019       1 taint_toleration.go:71] Checking taints for pod kube-system/coredns-cd64c8d7c-tcxbq for node master-2-scheduler : taints : []v1.Taint{v1.Taint{Key:"node-role.kubernetes.io/master", Value:"", Effect:"NoSchedule", TimeAdded:(*v1.Time)(nil)}} and tolerations: []v1.Toleration{v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"CriticalAddonsOnly", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40d90)}, v1.Toleration{Key:"node.kubernetes.io/unreachable", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40db0)}}
I0720 13:58:28.247144       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-2-scheduler, fits: false, status: &v1alpha1.Status{code:2, reasons:[]string{"node(s) didn't match pod affinity/anti-affinity", "node(s) didn't satisfy existing pods anti-affinity rules"}}
I0720 13:58:28.247172       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-2-scheduler : status is not success
I0720 13:58:28.247210       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-7dt1xd4k-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247231       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-7dt1xd4k-scheduler : status is not success
I0720 13:58:28.247206       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247297       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler : status is not success
I0720 13:58:28.247246       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-hyk0hg7r-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247340       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-hyk0hg7r-scheduler : status is not success
I0720 13:58:28.247147       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-0-scheduler, fits: false, status: &v1alpha1.Status{code:2, reasons:[]string{"node(s) didn't match pod affinity/anti-affinity", "node(s) didn't satisfy existing pods anti-affinity rules"}}
I0720 13:58:28.247375       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-0-scheduler : status is not success
I0720 13:58:28.247420       1 generic_scheduler.go:505] pod kube-system/coredns-cd64c8d7c-tcxbq : processed 5 nodes, 0 fit
I0720 13:58:28.247461       1 generic_scheduler.go:430] pod kube-system/coredns-cd64c8d7c-tcxbq After scheduling, filtered: []*v1.Node{}, filtered nodes: v1alpha1.NodeToStatusMap{"master-0-scheduler":(*v1alpha1.Status)(0xc000d824a0), "master-2-scheduler":(*v1alpha1.Status)(0xc000b736c0), "worker-pool1-60846k0y-scheduler":(*v1alpha1.Status)(0xc000d825a0), "worker-pool1-7dt1xd4k-scheduler":(*v1alpha1.Status)(0xc000b737e0), "worker-pool1-hyk0hg7r-scheduler":(*v1alpha1.Status)(0xc000b738c0)}
I0720 13:58:28.247527       1 generic_scheduler.go:185] Pod kube-system/coredns-cd64c8d7c-tcxbq failed scheduling:
  nodes snapshot: &cache.Snapshot{nodeInfoMap:map[string]*nodeinfo.NodeInfo{"master-0-scheduler":(*nodeinfo.NodeInfo)(0xc000607040), "master-1-scheduler":(*nodeinfo.NodeInfo)(0xc0001071e0), "master-2-scheduler":(*nodeinfo.NodeInfo)(0xc000326a90), "worker-pool1-60846k0y-scheduler":(*nodeinfo.NodeInfo)(0xc000952000), "worker-pool1-7dt1xd4k-scheduler":(*nodeinfo.NodeInfo)(0xc0007d08f0), "worker-pool1-hyk0hg7r-scheduler":(*nodeinfo.NodeInfo)(0xc0004f35f0)}, nodeInfoList:[]*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}, havePodsWithAffinityNodeInfoList:[]*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000607040)}, generation:857} 
  statuses: v1alpha1.NodeToStatusMap{"master-0-scheduler":(*v1alpha1.Status)(0xc000d824a0), "master-2-scheduler":(*v1alpha1.Status)(0xc000b736c0), "worker-pool1-60846k0y-scheduler":(*v1alpha1.Status)(0xc000d825a0), "worker-pool1-7dt1xd4k-scheduler":(*v1alpha1.Status)(0xc000b737e0), "worker-pool1-hyk0hg7r-scheduler":(*v1alpha1.Status)(0xc000b738c0)} 

๋ณด์‹œ๋‹ค์‹œํ”ผ worker-pool1-60846k0y-scheduler ๋…ธ๋“œ๋Š” ํ•„ํ„ฐ๋ง์„ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ํ•ด๋‹น ๋กœ๊ทธ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณ‘๋ ฌํ™”์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๋” ์ผ์ฐ ํ•„ํ„ฐ๋ง ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํŒจํ•œ ๊ฒฝ์šฐ : Nordix @ 5c00cdf # diff -c237cdd9e4cb201118ca380732d7f361R464 ๋กœ๊ทธ afaik์—์„œ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŠนํžˆ ํ•จ์ˆ˜ ๋ฐ ๋ณ‘๋ ฌํ™” ์ฃผ์œ„์— ๋””๋ฒ„๊ทธ ํ•ญ๋ชฉ์„ ๋” ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์˜ค๋ฅ˜๋Š” ํฌ๋“œ ์ด๋ฒคํŠธ์—์„œ ์˜ˆ์•ฝ ์˜ค๋ฅ˜๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ•œ ๋…ธ๋“œ๊ฐ€ ํ•„ํ„ฐ๋ง์„ ๋‘ ๋ฒˆ ๊ฑฐ์น˜๋Š” ๊ฒƒ์„ ๋ฐฉ๊ธˆ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค!

์†”์งํžˆ ๋ณ‘๋ ฌํ™”์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์—ฌ์ „ํžˆ ํ™•์ธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค). ๋…ธ๋“œ ๋‘ ๋ฒˆ. ์ƒํƒœ๋Š” ๋งต์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ ๋ผ์ธ์—์„œ 5 ๊ฐœ์˜ ๋…ธ๋“œ ๋งŒ "๋ณด๋Š”"๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค (1.18 ํŒ) https://github.com/kubernetes/kubernetes/blob/ec73e191f47b7992c2f40fadf1389446d6661d6d/pkg/scheduler/internal/cache/cache.go#L203

cc @ ahg-g

์Šค์ผ€์ค„๋Ÿฌ์˜ ์บ์‹œ ๋ถ€๋ถ„, ํŠนํžˆ ๋…ธ๋“œ ์ถ”๊ฐ€ ๋ฐ ์—…๋ฐ์ดํŠธ, ์Šค๋ƒ… ์ƒท ์ฃผ๋ณ€์— ๋งŽ์€ ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋กœ๊ทธ์˜ ๋งˆ์ง€๋ง‰ ์ค„์—์„œ ์Šค๋ƒ… ์ƒท์ด ์‹ค์ œ๋กœ ์˜ฌ ๋ฐ”๋ฅด๊ณ  ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์Šค๋ƒ… ์ƒท์— ๋Œ€ํ•ด ์ž‘์—… ํ•  ๋•Œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋“  ๋‚˜์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์บ์‹œ! = ์Šค๋ƒ… ์ƒท

์บ์‹œ๋Š” ์ด๋ฒคํŠธ์—์„œ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์‚ด์•„์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šค๋ƒ… ์ƒท์€ ๊ฐ ์Šค์ผ€์ค„๋ง์ฃผ๊ธฐ ์ „์— ์บ์‹œ์—์„œ ์—…๋ฐ์ดํŠธ๋˜์–ด ์ƒํƒœ๋ฅผ "์ž ๊ธˆ"ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งˆ์ง€๋ง‰ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™”๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @maelk! ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์— ๋”ฐ๋ฅด๋ฉด ๋ณ‘๋ ฌ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— (*nodeinfo.NodeInfo)(0xc000952000) ์ด ์ด๋ฏธ https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R441์—์žˆ๋Š” ๋ชฉ๋ก์— ์ค‘๋ณต๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ ์Šค๋ƒ… ์ƒท์ด ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์ „์— ๋ณต์ œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ์ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ์ด์ „์— ๋ฐœ์ƒํ•˜๋Š” ์Šค๋ƒ… ์ƒท์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R161. ๋”ฐ๋ผ์„œ https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R436์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์Šค๋ƒ… ์ƒท์˜ ๋‚ด์šฉ์— ์ค‘๋ณต์ด์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ์Šค๋ƒ… ์ƒท ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ด๋ฏธ ๋ณต์ œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ์Šค๋ƒ… ์ƒท ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ด๋ฏธ ๋ณต์ œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์Šค๋ƒ… ์ƒท์€ ์Šค์ผ€์ค„๋ง์ฃผ๊ธฐ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ์Šค๋ƒ… ์ƒท ์—…๋ฐ์ดํŠธ ์ค‘์ด๊ฑฐ๋‚˜ ๊ทธ ์ด์ „์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -659465008์˜ ๋คํ”„์— ๋”ฐ๋ฅด๋ฉด ์บ์‹œ๋Š” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ž˜๋ชป ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. "์™„๋ฃŒ"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. :)

PR ์ตœ์ ํ™” ์—…๋ฐ์ดํŠธ ์Šค๋ƒ… ์ƒท์€ 1.18์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค : https://github.com/kubernetes/kubernetes/pull/85738 ๋ฐ https://github.com/kubernetes/kubernetes/pull/86919

๋…ธ๋“œ ํŠธ๋ฆฌ์—๋„ ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ ํŠธ๋ฆฌ์—๋„ ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@maelk ์บ์‹œ์—์žˆ๋Š” ์ „์ฒด ๋…ธ๋“œ ๋ชฉ๋ก์˜ ๋คํ”„๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

NodeInfoList์—์„œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ / ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํŠธ๋ฆฌ์—์„œ ์ „์ฒด ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ค‘๋ณต ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ํŠธ๋ฆฌ์—์„œ ๋‚˜์˜ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด:
1) ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” 6 ๊ฐœ์˜ ๋…ธ๋“œ (๋งˆ์Šคํ„ฐ ํฌํ•จ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
2) ํฌ๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์ „ํ˜€ ๊ฒ€์‚ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (๋กœ๊ทธ ๋ผ์ธ์ด ์—†์Œ). ์ด๋Š” NodeInfoList์— ์ „ํ˜€ ํฌํ•จ๋˜์ง€ ์•Š์•˜ ์Œ์„ ์˜๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3) NodeInfoList์— 6 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ ํŠธ๋ฆฌ์—๋„ ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@maelk ์บ์‹œ์—์žˆ๋Š” ์ „์ฒด ๋…ธ๋“œ ๋ชฉ๋ก์˜ ๋คํ”„๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ ๋…ธ๋“œ ํŠธ๋ฆฌ, ๋ชฉ๋ก ๋ฐ ๋งต์„ ๋คํ”„ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์–ป๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋™์•ˆ ์ž‘์€ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

I0720 13:37:30.530980       1 node_tree.go:100] Removed node "worker-pool1-60846k0y-scheduler" in group "" from NodeTree
I0720 13:37:30.531136       1 node_tree.go:86] Added node "worker-pool1-60846k0y-scheduler" in group "regionOne:\x00:nova" to NodeTree

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ์ •ํ™•ํ•œ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์˜ ๋งˆ์ง€๋ง‰ ๋ฐœ์ƒ์€ 13:37:24์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์Šค์ผ€์ค„๋ง์—์„œ ๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒ„๊ทธ๊ฐ€ node_tree์˜ ์—…๋ฐ์ดํŠธ / follows์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋Š” ํ•ด๋‹น ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑฐ์น˜๋ฉฐ,์ด ์ž‘์—…์ž 608์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์บ์‹œ๋ฅผ ๋คํ”„ ํ•  ๋•Œ (SIGUSR2 ์‚ฌ์šฉ) 6 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์—ฌ๊ธฐ์— ๋‚˜์—ด๋˜๋ฉฐ ๋…ธ๋“œ์—์„œ ์ค‘๋ณต ๋˜๋Š” ๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์—†์ด ํฌ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์Šค๋ƒ… ์ƒท ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋””๋ฒ„๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค : https://github.com/Nordix/kubernetes/commit/53279fb06536558f9a91836c771b182791153791

NodeTree์—์„œ ""๊ทธ๋ฃน์˜ "worker-pool1-60846k0y-scheduler"๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ œ๊ฑฐ / ์ถ”๊ฐ€๋Š” updateNode ํ˜ธ์ถœ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜์—ญ ํ‚ค๋Š” ์ œ๊ฑฐ์‹œ ๋ˆ„๋ฝ๋˜์—ˆ์ง€๋งŒ ์ถ”๊ฐ€์‹œ ์กด์žฌํ•˜๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜์—ญ ๋ฐ ์ง€์—ญ ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ด ๋…ธ๋“œ์™€ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋กœ๊น…์ด ์ถ”๊ฐ€ ๋œ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ์˜ฌ๊ฒŒ์š”

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์–ป๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋™์•ˆ ์ž‘์€ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

I0720 13:37:30.530980       1 node_tree.go:100] Removed node "worker-pool1-60846k0y-scheduler" in group "" from NodeTree
I0720 13:37:30.531136       1 node_tree.go:86] Added node "worker-pool1-60846k0y-scheduler" in group "regionOne:\x00:nova" to NodeTree

๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋…ธ๋“œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ์„ ์ง€์  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @maelk , ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์œ ์‚ฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๊นŒ? @ ahg-g๋กœ์„œ ๋…ธ๋“œ๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ํ† ํด๋กœ์ง€ ๋ ˆ์ด๋ธ”์„๋ฐ›์„ ๋•Œ ์˜ˆ์ƒ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์šฐ์—ฐ์˜ ์ผ์น˜๋Š”์ด ๋…ธ๋“œ๊ฐ€ ํŠนํžˆ ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋œ ๋…ธ๋“œ์ด๊ณ  ์ •ํ™•ํ•œ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๋ฝ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋กœ๊ทธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?

๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋กœ๊ทธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?

๋กค,์ด ์งˆ๋ฌธ์„ ์ž…๋ ฅํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ธฐ ์ „์— ์ „์ฒด ์˜์—ญ์ด ํŠธ๋ฆฌ์—์„œ ์‚ญ์ œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด PR์„ ์ž์œ ๋กญ๊ฒŒ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋กœ๊ทธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์˜์—ญ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Œ์„ โ€‹โ€‹๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ ๋ฒ„๊ทธ์˜ ์›์ธ์— ๋Œ€ํ•œ ๋‹จ์„œ๊ฐ€ ์•„์ง ์—†์ง€๋งŒ ๋ฐœ๊ฒฌ์— ๊ฐ€๊นŒ์›Œ์ง€๋ฉด PR ๋˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์˜์—ญ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Œ์„ โ€‹โ€‹๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด "๋ˆ„๋ฝ ๋œ ๋…ธ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ์ •ํ™•ํ•œ ์ง€์ "์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ด€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํŒŒ์ผ์—์žˆ๋Š” ๋ชจ๋“  ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒˆ ๋กœ๊น…์œผ๋กœ ์žฌํ˜„ ํ•  ๋•Œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ํ•ญ๋ชฉ์—์„œ ์‹ค์ œ๋กœ ํ•ด๋‹น ์—…๋ฐ์ดํŠธ ์งํ›„์˜ ํฌ๋“œ ์˜ˆ์•ฝ์ด ์‹คํŒจํ•œ ์ฒซ ๋ฒˆ์งธ ํฌ๋“œ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์‚ฌ์ด์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด ๋‚ฌ๋Š”์ง€ ์•Œ ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณ„์† ์ง€์ผœ๋ด์ฃผ์‹ญ์‹œ์˜ค ...

@maelk ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ์—์„œ snapshot state is not consistent ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

์ „์ฒด ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ํ•ด๋‹น ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ŠคํŠธ๋ผ์ดํ”„ ๋‹ค์šด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋จผ์ € ์Šค๋ƒ… ์ƒท ์ฃผ๋ณ€์— ๋” ๋งŽ์€ ๋กœ๊ทธ๊ฐ€ ํฌํ•จ ๋œ ์ถœ๋ ฅ์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋ชจ๋“  ๋…ธ๋“œ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” nodeTree next () ํ•จ์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/blob/release-1.18/pkg/scheduler/internal/cache/node_tree.go#L147

์—ฌ๊ธฐ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/blob/release-1.18/pkg/scheduler/internal/cache/node_tree_test.go#L443

{
    name:           "add nodes to a new and to an exhausted zone",
    nodesToAdd:     append(allNodes[5:9], allNodes[3]),
    nodesToRemove:  nil,
    operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
    expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
},

์ฃผ๋œ ๋ฌธ์ œ๋Š” ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•  ๋•Œ ์ผ๋ถ€ ์˜์—ญ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œํ•œ ๋‘ ๊ฐœ์˜ ์˜์—ญ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ์˜์—ญ๋ณด๋‹ค ์งง๊ณ  ํ•˜๋‚˜๋Š” ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ํ˜ธ์ถœ ํ•  ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ 0์œผ๋กœ ์„ค์ •๋˜์ง€ ์•Š์€ ๋” ๊ธด ์˜์—ญ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•จ๊ป˜ํ–ˆ๋˜ ์ˆ˜์ • ์‚ฌํ•ญ์€ next ()๋ฅผ ์ฒ˜์Œ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ธ๋ฑ์Šค๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด PR์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ž‘์—…ํ•ด์˜จ ๊ฒƒ์ด๋ฏ€๋กœ 1.18 ๋ฆด๋ฆฌ์Šค์— ์œ„๋ฐฐ๋˜์ง€๋งŒ, ์ฃผ๋กœ ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋Š” ๋ฐฉ๋ฒ•์„ ๋…ผ์˜ํ•˜๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋˜๋Š” next () ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๊ณ ์น  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ PR์„ ์—ด๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‚˜์ค‘์— ๋ฐฑ ํฌํŠธ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ณต์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šค๋ƒ… ์ƒท์˜ ๋ณต์ œ๋ณธ์— ์—ฐ๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‚˜์š”, @maelk?

์˜ˆ, ๋‚ด๊ฐ€ ๋„ฃ์€ ์ž‘์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ œ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์Šค๋ƒ… ์ƒท์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ์„ค์ •์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€ @igraecao ์—๊ฒŒ ํฐ ์—„์ง€ ์†๊ฐ€๋ฝ

์ด ์•…๋ช… ๋†’์€ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น… ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— ์ƒ‰์ธ์„ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋ฏ€๋กœ 1.18 ๋ฐ 1.19 ํŒจ์น˜์— ๋Œ€ํ•ด์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ ์ ์ ˆํ•œ ์ˆ˜์ •์„ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

next ํ•จ์ˆ˜์˜ ๋ชฉ์ ์€ NodeInfoList์˜ ๋„์ž…์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ™•์‹คํžˆ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํŠธ๋ฆฌ์—์„œ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ„๋‹จํžˆ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ธ toList ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งค๋ฒˆ.

์ด์ œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์˜์—ญ์ด ์†Œ์ง„๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์€ ๊ฐ ์˜์—ญ์—์„œ์ด "UpdateSnapshot"ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•œ ์œ„์น˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ค, ๊ณ ๋ฅด์ง€ ์•Š์€ ์˜์—ญ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@maelk๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด์ „ ๋ฒ„์ „์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งค๋ฒˆ ํŠธ๋ฆฌ ํŒจ์Šค๋ฅผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 1.18์—์„œ๋Š” ํŠธ๋ฆฌ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ฒฐ๊ณผ๋ฅผ ์Šค๋ƒ… ์ƒทํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ผ์šด๋“œ ๋กœ๋นˆ ์ „๋žต์ด generic_scheduler.go์—์„œ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฏ€๋กœ PR์ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ UpdateSnapshot ์ „์— ๋ชจ๋“  ์นด์šดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

https://github.com/kubernetes/kubernetes/blob/02cf58102a61b6d1e021e256381ff750573ce55d/pkg/scheduler/core/generic_scheduler.go#L357

@ ahg-g๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์ถ”๊ฐ€ / ์ œ๊ฑฐ ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์•„ ์ฃผ์‹  @maelk ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋‹ค์Œ ํ•จ์ˆ˜์˜ ๋ชฉ์ ์€ NodeInfoList์˜ ๋„์ž…์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ™•์‹คํžˆ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํŠธ๋ฆฌ์—์„œ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๊ณ  ๋งค๋ฒˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ธ toList๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cache.nodeTree.next() ๊ฐ€ ์Šค๋ƒ… ์ƒท nodeInfoList๋ฅผ ๋นŒ๋“œ ํ•  ๋•Œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ nodeTree ๊ตฌ์กฐ์ฒด์—์„œ ์ธ๋ฑ์Šค (zoneIndex ๋ฐ nodeIndex ๋ชจ๋‘)๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋„ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ์˜์—ญ / ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฐ„๋‹จํ•œ nodeIterator() ํ•จ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค.

BTW : https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -662663090์— ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

{
    name:           "add nodes to a new and to an exhausted zone",
    nodesToAdd:     append(allNodes[6:9], allNodes[3]),
    nodesToRemove:  nil,
    operations:     []string{"add", "add", "next", "next", "add", "add", "next", "next", "next", "next"},
    expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
    // with codecase on master and 1.18, its output is [node-6 node-7 node-3 node-8 node-6 node-3]
},

@ ahg-g๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์ถ”๊ฐ€ / ์ œ๊ฑฐ ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

generic_scheduler.go์˜ ๋…ผ๋ฆฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ๋˜์—ˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”ผํ•ด์•ผ ํ•  ์ฃผ์š” ์‚ฌํ•ญ์€ ๋งค๋ฒˆ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฌ๋“œ๋ฅผ ์˜ˆ์•ฝํ•˜๊ณ  ํฌ๋“œ๊ฐ„์— ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ์ข‹์€ ๊ทผ์‚ฌ์น˜ ๋งŒ ์žˆ์œผ๋ฉด๋ฉ๋‹ˆ๋‹ค.

cache.nodeTree.next ()๊ฐ€ ์Šค๋ƒ… ์ƒท nodeInfoList๋ฅผ ๋นŒ๋“œ ํ•  ๋•Œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ nodeTree ๊ตฌ์กฐ์ฒด์—์„œ ์ธ๋ฑ์Šค (zoneIndex ๋ฐ nodeIndex ๋ชจ๋‘)๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋„ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ์˜์—ญ / ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฐ„๋‹จํ•œ nodeIterator () ํ•จ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค.

์˜ˆ, ๋งค๋ฒˆ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ๋ชจ๋“  ์˜์—ญ / ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ํ•ด๋‹น ๋ฒ„๊ทธ์— ๋Œ€ํ•ด snapshotlist๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ PR์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์šด๋“œ ๋กœ๋นˆ์—†์ด ์˜์—ญ๊ณผ ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก next () ํ•จ์ˆ˜๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ์š”. ์ข‹๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ, ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์˜์—ญ ์‚ฌ์ด๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์—ฌ๊ธฐ์„œ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๊ณ  ์—ฌ์ „ํžˆ ์˜์—ญ๊ฐ„์— ๋ผ์šด๋“œ ๋กœ๋นˆ์„ ์ง„ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์˜์—ญ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ์˜์—ญ ์”ฉ ๋‚˜์—ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ๊ฐ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๋‘ ๊ฐœ์˜ ์˜์—ญ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ˆœ์„œ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ์˜์—ญ์„ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ z1: {n11, n12} ๋ฐ z2: {n21, n22} ๋ฐ {n11, n21, n12, n22} ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•Œ์•˜์–ด, ๊ณ ๋งˆ์›Œ. ์ƒ๊ฐํ•ด ๋ณผ๊ฒŒ. ๊ทธ๋™์•ˆ ๋น ๋ฅธ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? btw, ์ผ๋ถ€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋‚ด PR๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋“ค์€ ํ”Œ๋ ˆ์ดํฌ์ž…๋‹ˆ๋‹ค. 1.18์—๋„ ํŒจ์น˜๋ฅผ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.

์•Œ์•˜์–ด ํ• ๊ฒŒ. ๊ฐ์‚ฌ

{
  name:           "add nodes to a new and to an exhausted zone",
  nodesToAdd:     append(allNodes[5:9], allNodes[3]),
  nodesToRemove:  nil,
  operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
  expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
},

@maelk ,์ด ํ…Œ์ŠคํŠธ๊ฐ€ 'node-5'๋ฅผ ๋ฌด์‹œํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ?

https://github.com/kubernetes/kubernetes/pull/93516 ์—์„œ ์ถ”๊ฐ€๋ฅผ ์ˆ˜์ • ํ•œ ํ›„ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณต ํ•  ์ˆ˜์žˆ๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

{
            name:           "add nodes to a new and to an exhausted zone",
            nodesToAdd:     append(append(make([]*v1.Node, 0), allNodes[5:9]...), allNodes[3]),
            nodesToRemove:  nil,
            operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
            expectedOutput: []string{"node-5", "node-6", "node-3", "node-7", "node-8", "node-5"},
},

node-5, 6, 7, 8, 3์€ ๋ฐ˜๋ณต ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ญ”๊ฐ€ ์˜คํ•ด๊ฐ€ ์žˆ์œผ๋ฉด ์šฉ์„œ ํ•ด์ฃผ์„ธ์š”.

์˜ˆ, ๊ฑฐ๊ธฐ์— ์žˆ๋˜ ๊ฒƒ์— ๊ทผ๊ฑฐํ•œ ์˜๋„์  ์ธ ๊ฒƒ์ด์—ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋น„๋ฐ€ ์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ถ”๊ฐ€๊ฐ€ ๋” ๋ช…ํ™•ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŒจ์น˜ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜์ „์— ์กด์žฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? 1.17? 1.16? ๋ฐฉ๊ธˆ AWS์˜ 1.17์—์„œ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜๊ณ  ์˜ˆ์•ฝ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@judgeaxl ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋กœ๊ทธ ๋ผ์ธ, ์บ์‹œ ๋คํ”„ ๋“ฑ. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ ๋™์ผํ•œ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -662746695์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด์ด ๋ฒ„๊ทธ๋Š” ์ด์ „ ๋ฒ„์ „์— ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ผ์‹œ์ ์ธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@maelk ๋ฅผ ์กฐ์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜์—ญ์—์„œ ๋…ธ๋“œ ๋ฐฐํฌ๋„ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค.

@alculquicondor ๋ถˆํ–‰ํžˆ๋„ ์ง€๊ธˆ์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

@alculquicondor ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‹ค๋ฅธ ์ด์œ ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ–ˆ์ง€๋งŒ ๋‹ค์ค‘ az ๋ฐฐํฌ์™€ ๊ด€๋ จ๋œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฒฐํ•จ์ด์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์‹œ์ž‘๋œ ์„œ๋ธŒ๋„ท์—์„œ ๋ฐœ์ƒ ํ–ˆ์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ๋งฅ๋ฝ. ๋‹ค์‹œ ์•Œ์•„ ์ฐจ๋ฆฌ๋ฉด ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ!

/ retitle ์˜์—ญ ๋ถˆ๊ท ํ˜•์ด์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ถ€ ๋…ธ๋“œ๋Š” ์˜ˆ์•ฝ์—์„œ ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰