일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 코테
- Algorithm
- 동적계획법과최단거리역추적
- cos pro 1급
- 백준
- Vue
- Python
- 분할정복
- DART
- codingtest
- C++
- 동적계획법
- cos pro
- 안드로이드스튜디오
- issue
- 파이썬
- 코드품앗이
- AndroidStudio
- Flutter
- vuejs
- android
- 안드로이드
- django
- BAEKJOON
- DFS
- 개발
- 알고리즘
- DFS와BFS
- 코딩테스트
- cos
- Today
- Total
Development Artist
[k8s, Issue] Pod 스케줄링 실패, Calico 네트워크 설정 실패, Pod Sandbox 재생성 본문
[k8s, Issue] Pod 스케줄링 실패, Calico 네트워크 설정 실패, Pod Sandbox 재생성
JMcunst 2025. 1. 31. 09:32상황 발생
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
'TroubleShooting > Devops Issue' 카테고리의 다른 글
[ArgoCD, Calico, k8s] ClusterInformation: connection is unauthorized: Unauthorized (0) | 2025.02.01 |
---|