Development Artist

[k8s, Issue] Pod 스케줄링 실패, Calico 네트워크 설정 실패, Pod Sandbox 재생성 본문

TroubleShooting/Devops Issue

[k8s, Issue] Pod 스케줄링 실패, Calico 네트워크 설정 실패, Pod Sandbox 재생성

JMcunst 2025. 1. 31. 09:32
728x90
반응형

상황 발생

0/3 nodes are available: 3 node(s) didn't match pod anti-affinity rules. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod.

 

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "[SandBox]": plugin type="calico" failed (add): error getting ClusterInformation: connection is unauthorized: Unauthorized

 

Successfully assigned [Pod] to [Node]

 

Pod sandbox changed, it will be killed and re-created.

해석

스케줄링 실패 (0/3 nodes are available)

🔹 무슨 일이 있었을까?

Pod가 스케줄링되지 않음: 0/3 nodes are available → 클러스터 내 3개의 노드가 있지만, Pod를 배치할 수 없음.

Pod 안티-어피니티(Anti-Affinity) 규칙에 맞지 않음:

Pod가 특정 노드에 배치되지 않도록 설정되어 있음 (podAntiAffinity 정책).

기존에 실행 중인 Pod들과 겹치지 않도록 하는 규칙 때문일 수 있음.

만약 클러스터 내에서 적절한 노드가 없다면, 스케줄링이 계속 실패함.

Preemption(선점) 실패:

기존의 다른 Pod를 종료시켜서라도 배치해야 하지만, 선점할 수 있는 Pod가 없음.

결과적으로, 이 Pod를 실행할 수 있는 노드가 없음.

 

🔹 가능한 원인

podAntiAffinity 정책이 너무 강하게 설정되어 적절한 노드가 없음.

클러스터의 리소스 부족(CPU, Memory 부족).

특정 taints가 적용되어 있어 Pod가 배치되지 못함.

 

🔹 해결 방법

kubectl describe pod <pod-name> 명령어로 정확한 원인 확인.

podAntiAffinity 설정을 완화하여 더 많은 노드에 배치할 수 있도록 수정.

kubectl get nodes -o wide 로 각 노드 상태 확인.

필요하면 kubectl taint nodes --all 을 사용하여 Taint 제거.

네트워크 문제로 Pod Sandbox 생성 실패

🔹 무슨 일이 있었을까?

Pod Sandbox를 생성하려 했지만 실패: Failed to create pod sandbox

네트워크 설정 실패:

CNI(Network Plugin)인 Calico가 네트워크 설정을 하지 못함.

ClusterInformation을 가져오려고 했지만, Unauthorized(권한 부족) 에러 발생.

 

🔹 가능한 원인

Calico 인증 문제:

Calico 컨트롤러(Pod 또는 데몬셋)가 비정상 상태.

클러스터 내의 calico-node Pod가 충돌(crash)했거나 제대로 실행되지 않음.

RBAC(Role-Based Access Control) 설정이 잘못되어 Calico가 클러스터 정보를 가져올 수 없음.

API Server 인증 문제:

Calico가 Kubernetes API Server와 통신해야 하는데, 토큰 또는 인증서가 만료되었거나 올바르지 않음.

calicoctl을 사용하여 연결 테스트가 필요함.

1. Calico 관련 로그 확인:

kubectl logs -n kube-system -l k8s-app=calico-node

2. calicoctl을 사용하여 클러스터 상태 확인:

calicoctl node status

3. Calico Pod 상태 점검:

kubectl get pods -n kube-system | grep calico

4. RBAC 설정 확인:

kubectl get clusterrolebinding | grep calico

Pod가 특정 노드에 성공적으로 배치됨

🔹 무슨 일이 있었을까?

이전 스케줄링 실패 후, Kubernetes가 Pod를 특정 노드(bugatti)에 할당하는 데 성공함.

하지만 네트워크 설정이 실패했으므로, 아직 정상적으로 실행되지는 않음.

 

🔹 이후 단계

kubectl describe pod [Pod] -n [Namespace] 실행하여 Pod 상태 확인.

Pod Sandbox가 변경되었고, 재시작됨

🔹 무슨 일이 있었을까?

Pod Sandbox가 예상치 않게 변경됨:

Pod Sandbox는 컨테이너 런타임이 Pod를 관리하는 기본 단위.

이전 Sandbox에서 네트워크 설정이 실패했기 때문에, 새로운 Sandbox를 생성하려고 함.

이제 Pod가 다시 생성될 예정.

 

🔹 가능한 원인

네트워크 문제가 지속됨 → 새로운 Sandbox에서 다시 시도.

기존 Pod가 삭제되고 다시 생성됨.

 

🔹 해결 방법

1. Pod 상태 확인:

kubectl get pod -n [Namespace]

2. Sandbox 문제 해결 (만약 반복된다면):

컨테이너 런타임 로그 확인 (containerd 또는 docker):

journalctl -u containerd -f

Calico 재배포:

kubectl rollout restart daemonset calico-node -n kube-system
728x90
반응형
Comments