상세 컨텐츠

본문 제목

K8S node Internal IP 변경

Ops/Kubernetes

by 크리두 2020. 4. 23. 16:44

본문

반응형

k8s node trouble shooting

 

최근 k8s 운영관리하면서 kubectl 명령어가 먹지 않는 것을 확인하였다.

네트워크나 master token 등 node join에 문제가 있는 것인지 다 찾아보았지만 처음에는 발견을 못하였다.

 

그래서 하나하나 node들의 정보가 어떤 식으로 들어가 있는지 확인을 해보려고 명령어를 찾아보았다.

각 node들의 정보를 조회하고 나니 docker에서 기본적으로 제공하는 virtual ip를 이용하는 것을 보았다.

이유는 아직 명확하지는 않지만 internal ip가 docker로 되어 있으니 서로 통신을 하지 못해서 생긴 문제였다.

아래에는 문제 해결을 하는 방법을 기록하였다.

다음 이슈는 internal ip가 과연 k8s는 무엇을 보고 결정을 하는지 제대로 확인해봐야겠다.

 

이슈 상황

K8S node join이 되어 Master에서 확인 가능

pod도 조회 가능

그러나 kubectl 명령어가 먹히지 않음

pod distribution 후 exec 명령어 시 다음과 같은 에러 발생

error: unable to upgrade connection: pod does not exist

 

다시 설정하고 다시 조인하고 IP도 바꾸고 여러 삽질을 하다가...

노드 정보 확인을 하다보니 문제를 발견

kubectl get nodes -o wide

 

Internal IP가 잘못 되어있는 것이었다.

현재 pod을 통해 배분한 docker 이미지가 바로 host network를 사용하게 되어있는데

docker0 인터페이스로 Internal IP가 잡혀있어서 발생한 문제이다.

간혹 다른 IP가 잡히는 경우가 있는데 아직 원인은 더 찾아봐야겠다.

 

1. 다음 경로의 파일에 들어가서 마지막 --node-ip를 추가한다.

마지막 줄에 보면 --node-ip 뒤에 빨간색에 공인 ip를 추가하고 저장하면 된다.

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig
=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_AR
GS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user
 should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should b
e sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_A
RGS --node-ip <hostip>

 

2. systemctl daemon-reload && systemctl restart kubelet 실행

systemctl daemon-reload && systemctl restart kubelet

3. 노드 정보 확인

kubectl get nodes -o wide

이제 정상적으로 적용이 되었는지 확인을 해야하니 위에 있는 명령어를 실행한다.

정상적으로 Internal IP가 수정되어 kubectl도 정상적으로 동작함

 

갑자기 문제가 발생하여서 식겁했는데 다행이 금방 조치할 수 있어서 문제는 없었다.

반응형

'Ops > Kubernetes' 카테고리의 다른 글

RBAC Authorization  (0) 2021.10.20
K8S ingress에 대하여  (0) 2021.06.24
Private 도커 Registry 설치 및 설정  (0) 2020.11.10
K8S Master Clustering 설치 및 구성  (0) 2020.05.28
Docker 설치 및 세팅(CentOS 7)  (0) 2020.01.07

관련글 더보기

댓글 영역