Kubernetes 트러블슈팅
Kubernetes 트러블슈팅 (Troubleshooting)
Cilium 설치를 검증하고 문제를 진단하는 방법을 설명해요. DaemonSet 상태 확인, 실패한 파드 로그 분석, 클러스터 외부에 있는 Apiserver 관련 주의점을 다뤄요.
출처: Troubleshooting
본문
설치 검증 (Verifying the installation)
DaemonSet의 상태를 확인하고 모든 원하는 인스턴스가 "ready" 상태인지 확인하세요:
$ kubectl --namespace kube-system get ds
NAME DESIRED CURRENT READY NODE-SELECTOR AGE
cilium 1 1 0 <none> 3s
이 예시에서 desired 상태는 1인데 ready는 0이에요. 이는 문제를 나타내요. 다음 단계는 k8s-app=cilium 라벨로 매칭해 모든 cilium 파드를 나열하고, 각 파드의 재시작 횟수로 목록을 정렬해 실패한 파드를 쉽게 식별하는 것이에요:
$ kubectl --namespace kube-system get pods --selector k8s-app=cilium \
--sort-by='.status.containerStatuses[0].restartCount'
NAME READY STATUS RESTARTS AGE
cilium-813gf 0/1 CrashLoopBackOff 2 44s
파드 cilium-813gf가 실패했고 이미 2번 재시작됐어요. 원인을 조사하기 위해 해당 파드의 로그 파일을 출력해 볼게요:
$ kubectl --namespace kube-system logs cilium-813gf
INFO _ _ _
INFO ___|_| |_|_ _ _____
INFO | _| | | | | | |
INFO |___|_|_|_|___|_|_|_|
INFO Cilium 0.8.90 f022e2f Thu, 27 Apr 2017 23:17:56 -0700 go version go1.7.5 linux/amd64
CRIT kernel version: NOT OK: minimal supported kernel version is >= 4.8
이 예시에서 실패 원인은 워커 노드에서 실행 중인 Linux 커널이 System Requirements를 충족하지 못하는 것이에요.
이 간단한 단계로 문제 원인이 명확하지 않다면, Cilium Slack에서 도움을 요청하세요.
클러스터 외부의 Apiserver (Apiserver outside of cluster)
어떤 이유로 Kubernetes Apiserver를 클러스터 외부에서 실행 중이라면(예: 마스터 노드를 방화벽 뒤에 두는 경우), 마스터 노드에서도 Cilium을 실행해야 해요. 그렇지 않으면 Apiserver가 만든 Kubernetes 파드 프록시가 파드 IP로 라우팅할 수 없게 되고, 파드로 트래픽을 프록시하려 할 때 오류가 발생할 수 있어요.
Cilium을 static pod로 실행하거나 Cilium DaemonSet에 tolerations을 설정해서 Cilium 파드가 마스터 노드에 스케줄링되도록 보장할 수 있어요. 정확한 방법은 설정에 따라 달라져요.