CKA를 준비해보자 36일차 - Trouble shooting

0

CKA

목록 보기
36/43

Control Plane Failure

만약 kubernetes control plane component들이 kubeadm으로 설치되었다면, kubectl 명령어로 접근이 가능하다. 반면에, service로 배포되었다면 다음의 명령어로 상태를 확인할 수 있다.

  • control plane
service kube-apiserver status
service kube-controller-manager status
service kube-scheduler status
  • worker node
service kubelet status
service kube-proxy status

log를 확인할 때는 journalctl을 사용하면 된다.

sudo journalctl -u kube-apiserver

Worker node failure

kubelet에 대한 설정 파일은 /var/lib/kubelet/config.yaml에 정의되어 있다.

API server와 통신하기 위한 kubelet의 client 설정은 /etc/kubernetes/kubelet.conf이다.

kubelet의 상태를 보고 수정해줘야 한다. 가령 control plane의 apiserver 주소와 포트가 잘못되었는 지 등을 확인해야한다.

Network TroubleShooting

kubernetes에서는 DNS를 CoreDNS를 통해서 제공한다.

CoreDNS는 deployment로 만들어지고 config file은 configmap으로 존재한다. port 53이 CoreDNS의 DNS결정에 쓰이는 port이다.

  • CoreDNS가 pending상태에 있을 때
  1. 먼저 CNI Plugin이 설치되었는 지 확인
  • CoreDNS가 CrashLoopBackOff거나 Error state라면
  1. SE linux의 경우 old version의 docker로 구동하면 coredns pod가 동작하지 않는다. 여기에는 다음의 해결방법이 있다.
    1. docker버전 업그레이드
    2. SELinux를 끄기
    3. coredns deployment의 allowPrivilegeEscalation를 true로 두기

kube-proxy는 network proxy로 각 node마다 실행된다. kube-proxy는 network rule과 node를 유지하는데, 이러한 network rule들은 cluster내의 pod들의 network이 가능하게 해준다.

kubeadm으로 설치 시에 kube-proxy는 damonset으로 설치된다.

kube-proxy는 service와 endpoint에 대해 관리하며, client가 service의 virtualIP로 요청을 보낼 때, 실제 Pod에 해당 traffic을 전달하는 기능을 한다.

kube-proxy의 설정값은 kube-proxy configmap에 있는데, 해당 configmap은 /var/lib/kube-proxy/config.conf로 마운트된다.

0개의 댓글