채널톡 아이콘

인프런 커뮤니티 질문&답변

보르코님의 프로필 이미지

작성한 질문수 2

그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}

7.8.파드 어피니티(affinity) 그리고 안티 어피니티

7.8. w3-affinity-leader 적용 에러 문제 질문드립니다.

작성

·

29

0

질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다.
다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다!

[질문 전 답변]
1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요]
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요]
3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요]
(https://www.inflearn.com/blogs/1719)
4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다.
(https://inf.run/Ljaer)

[질문 하기]

k apply -f ./w1-affinity-leader.yaml 

k apply -f ./deployment-podAffinity.yaml 

k get po -o wide # w1에만 배포 확인 

k apply -f ./w3-affinity-leader.yaml

안녕하세요
현재 위와 같이 실습 중 w3-affinity-leader 가
계속 pending 상태인데 어떻게 해결해야 할지 몰라 질문드립니다.

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# cat w3-affinity-leader.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: sleepy
    affinity: leader 
  name: w3-affinity-leader 
spec:
  containers:
  - image: sysnet4admin/sleepy
    name: sleepy
  nodeSelector:
    kubernetes.io/hostname: w3-k8s
root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k describe po w3-affinity-leader 
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  12s (x2 over 5m29s)  default-scheduler  0/4 nodes are available: 1 node(s) had untolerated taint {DB: customer-info}, 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.

답변 2

0

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요

우선 확인해 보면 좋을 내용이

k get node
k get po,svc -A

일 것 같습니다.

제 생각 혹은 예상에는 w3-k8s가 정상처럼 보이지만, calico-node 이슈가 아닐까 생각이 되긴 합니다. (이거 때문에 지금 고민이..)

 

위의 것대로 실행하셨다면

kubectl rollout restart ds calico-node -n kube-system

를 실행해 보시겠어요? CNI에 대해서는 좀 고민이 있습니다. ㅠ

 

보르코님의 프로필 이미지
보르코
질문자

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get node
NAME     STATUS   ROLES           AGE     VERSION
cp-k8s   Ready    control-plane   6d23h   v1.30.1
w1-k8s   Ready    <none>          6d23h   v1.30.1
w2-k8s   Ready    <none>          6d23h   v1.30.1
w3-k8s   Ready    <none>          6d23h   v1.30.1
root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get po,svc -A
NAMESPACE        NAME                                           READY   STATUS    RESTARTS      AGE
default          pod/deploy-podaffinity-b694cd868-8rggg         1/1     Running   0             3m5s
default          pod/deploy-podaffinity-b694cd868-h7nsq         1/1     Running   0             3m5s
default          pod/deploy-podaffinity-b694cd868-hzxrw         1/1     Running   0             3m5s
default          pod/deploy-podaffinity-b694cd868-s6vwv         1/1     Running   0             3m5s
default          pod/net                                        1/1     Running   3 (21m ago)   6d22h
default          pod/nfs-client-provisioner-6957dcc4d9-bs6zz    1/1     Running   2 (21m ago)   4d1h
default          pod/w1-affinity-leader                         1/1     Running   0             3m13s
default          pod/w3-affinity-leader                         0/1     Pending   0             2m52s
kube-system      pod/calico-kube-controllers-546f76d588-rbgrs   1/1     Running   3 (21m ago)   6d23h
kube-system      pod/calico-node-4w8g4                          1/1     Running   3 (21m ago)   6d23h
kube-system      pod/calico-node-gkkx2                          1/1     Running   3 (21m ago)   6d23h
kube-system      pod/calico-node-slrwv                          1/1     Running   3 (21m ago)   6d23h
kube-system      pod/calico-node-vfmqc                          1/1     Running   3 (21m ago)   6d23h
kube-system      pod/coredns-7db6d8ff4d-nfnvw                   1/1     Running   3 (21m ago)   6d23h
kube-system      pod/coredns-7db6d8ff4d-snf5m                   1/1     Running   3 (21m ago)   6d23h
kube-system      pod/etcd-cp-k8s                                1/1     Running   4 (21m ago)   6d23h
kube-system      pod/kube-apiserver-cp-k8s                      1/1     Running   4 (21m ago)   6d23h
kube-system      pod/kube-controller-manager-cp-k8s             1/1     Running   4 (21m ago)   6d23h
kube-system      pod/kube-proxy-5qmxr                           1/1     Running   3 (21m ago)   6d23h
kube-system      pod/kube-proxy-c5jpx                           1/1     Running   3 (21m ago)   6d23h
kube-system      pod/kube-proxy-m5wtx                           1/1     Running   3 (21m ago)   6d23h
kube-system      pod/kube-proxy-xsdts                           1/1     Running   3 (21m ago)   6d23h
kube-system      pod/kube-scheduler-cp-k8s                      1/1     Running   4 (21m ago)   6d23h
metallb-system   pod/controller-57cf8fbb89-8ctv5                1/1     Running   3 (21m ago)   6d23h
metallb-system   pod/speaker-n97pz                              1/1     Running   6 (20m ago)   6d23h
metallb-system   pod/speaker-t278g                              1/1     Running   6 (20m ago)   6d23h
metallb-system   pod/speaker-t7wgf                              1/1     Running   6 (20m ago)   6d23h
metallb-system   pod/speaker-xvqdk                              1/1     Running   6 (20m ago)   6d23h

 

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# kubectl rollout restart ds calico-node -n kube-system
daemonset.apps/calico-node restarted
root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k describe po w3-affinity-leader

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  103s  default-scheduler  0/4 nodes are available: 1 node(s) had untolerated taint {DB: customer-info}, 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.


안녕하세요
현재 제공해주신 명령어를 실행해보아도 똑같은 오류가 발생하고있습니다.
혹시 궁금해서 그런데 calico-node, CNI 관련해서 어떤 문제인지 답변 괜찮으실까요?


조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

CNI 관련은 간헐적으로 발생하는 문제라 아직 조사 중이고요. calico 간의 인증 같은데 해당 문제가 발생하면 CNI가 동작하지 않으므로 image pull이 되지 않습니다.


그리고 어제 저녁에 확인해 봤는데 다음과 같이 잘 동작합니다.

NAME                                  READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
deploy-podaffinity-7ff5d86cd9-9rcn7   1/1     Running   0          2m9s    172.16.221.141   w1-k8s   <none>           <none>
deploy-podaffinity-7ff5d86cd9-fshf9   1/1     Running   0          2m9s    172.16.221.142   w1-k8s   <none>           <none>
deploy-podaffinity-7ff5d86cd9-gds4l   1/1     Running   0          2m9s    172.16.221.135   w1-k8s   <none>           <none>
deploy-podaffinity-7ff5d86cd9-q4gcx   1/1     Running   0          2m9s    172.16.221.144   w1-k8s   <none>           <none>
w1-affinity-leader                    1/1     Running   0          2m32s   172.16.221.140   w1-k8s   <none>           <none>
w3-affinity-leader                    1/1     Running   0          72s     172.16.132.55    w3-k8s   <none>           <none>

다음과 같이 레이블이 적용되었는지 확인 가능하실까요?

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get node --show-labels 
NAME     STATUS   ROLES           AGE   VERSION   LABELS
cp-k8s   Ready    control-plane   20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=cp-k8s,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
w1-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w1-k8s,kubernetes.io/os=linux
w2-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w2-k8s,kubernetes.io/os=linux
w3-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w3-k8s,kubernetes.io/os=linux

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get deployments.apps --show-labels 
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE     LABELS
deploy-podaffinity   4/4     4            4           4m27s   app=deploy-podaffinity

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get po --show-labels 
NAME                                  READY   STATUS    RESTARTS   AGE     LABELS
deploy-podaffinity-7ff5d86cd9-9rcn7   1/1     Running   0          4m33s   app=deploy-podaffinity,pod-template-hash=7ff5d86cd9
deploy-podaffinity-7ff5d86cd9-fshf9   1/1     Running   0          4m33s   app=deploy-podaffinity,pod-template-hash=7ff5d86cd9
deploy-podaffinity-7ff5d86cd9-gds4l   1/1     Running   0          4m33s   app=deploy-podaffinity,pod-template-hash=7ff5d86cd9
deploy-podaffinity-7ff5d86cd9-q4gcx   1/1     Running   0          4m33s   app=deploy-podaffinity,pod-template-hash=7ff5d86cd9
w1-affinity-leader                    1/1     Running   0          4m56s   affinity=leader,run=sleepy
w3-affinity-leader                    1/1     Running   0          3m36s   affinity=leader,run=sleepy

 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

혹시나 해서 다음의 노드 레이블도 확인이 함께 필요할 것 같습니다.

root@cp-k8s:~/_Lecture_k8s_learning.kit/ch7/7.8# k get node --show-labels 
NAME     STATUS   ROLES           AGE   VERSION   LABELS
cp-k8s   Ready    control-plane   20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=cp-k8s,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
w1-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w1-k8s,kubernetes.io/os=linux
w2-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w2-k8s,kubernetes.io/os=linux
w3-k8s   Ready    <none>          20h   v1.32.2   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=w3-k8s,kubernetes.io/os=linux

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 보르코님께서 겪고 계신 w3-affinity-leader Pod의 Pending 문제에 대해 도움을 드리겠습니다.

Pod가 Pending 상태로 남아있고, FailedScheduling 이벤트가 발생한 경우는 주로 노드 스케줄링 관련 설정에 문제가 있을 때 발생합니다. 제공해 주신 로그에 따르면 w3-k8s에 태인트(Taint)가 적용되어 있어서 노드가 스케줄링되지 않고 있는 것으로 보입니다. 해결 방법은 노드의 태인트를 확인하고, 해당 Pod에 적절한 톨러레이션(Toleration)을 추가하여 태인트를 허용해야 합니다.

해결 방법:

  1. 노드의 태인트 확인:

    kubectl describe node w3-k8s
    

    이 명령어를 통해 w3-k8s 노드에 설정된 태인트를 확인하세요. 현재 메시지에 따르면 {DB: customer-info}라는 태인트가 설정되어 있는 것을 확인할 수 있습니다.

  2. 톨러레이션(Toleration)을 Pod에 추가:
    w3-affinity-leader.yaml 파일을 편집하여 톨러레이션을 추가합니다. 예를 들어, 태인트 {DB: customer-info}가 있다면 다음과 같이 설정할 수 있습니다:
    ”`yaml
    spec:
    tolerations:

    • key: “DB”
      operator: “Equal”
      value: “customer-info”
      effect: “NoSchedule”

    ”`
    이렇게 하면 Pod는 해당 태인트를 가진 노드에도 스케줄링될 수 있습니다.

  3. Pod 적용 및 상태 확인:

    kubectl apply -f w3-affinity-leader.yaml
    kubectl get pods -o wide
    

관련하여 기존 답변이 포함된 질문 게시물을 확인하실 수 있습니다:
- 7.8 실습문의 - Taints와 Tolerations 관리에 대한 유용한 정보들이 담겨 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.