지돌이의 블로그 입니다!

뭐 production 상황에서는 발생할 일이 거의 없긴 하지만..

테스트 환경에서 단일 K8s를 구축하고 IP를 변경할 일이 있어서 변경하는 중 삽질의 과정...은 생략하고 방법을 적는다.

인증서 변경

# root 권한에서..

# 먼저 백업을 한다
cp -rf /etc/kubernetes /etc/kubernetes.bak

# ca를 제외한 모든 인증서 및 키 파일을 제거한다.
rm /etc/kubernetes/pki/....

# 인증서를 재발급한다.
kubeadm init phase certs

# /etc/kubernetes 하위에 있는 모든 conf를 열어 IP를 변경한다.

kubeadm 및 configmap 변경

( 옛날 버전에서는 (언제부턴진 모르지만 18이하) sudo kubeadm config view & sudo kubeadm config upload from-file --config 으로 한다. )

$ kubectl -n kube-system get cm kubeadm-config -o yaml > ~/kubeadm-config.yaml
$ vim ~/kubeadm-config.yaml

controlPlaneEndpoint: "(바꾸는IP):6443"

으로 변경한다.

$ kubectl -n kube-system get cm kube-proxy -o yaml > ~/kube-proxy.yaml
$ vim ~/kube-proxy.yaml

kubeconfig.conf에서 clusters => cluster => server 를 바꾸는 IP(혹은 도메인)로 변경한다.

추가로 LB를 사용하는 경우 kubeadm할 때 미리 config를 만들어서 apiServer > certSANs 를 적어주고 Control Plane에 Virtual IP나 Domain으로 써서 접근할 수 있다.

기타 설정

(calico쓰는 경우) 나는 calicoctl에서 node에서도 설정을 변경해주었다. 제대로 구성하면 자동으로 되는진 모르겠다..

재시작

# 완벽하게 진행했던건 아니지만.. 리부팅이 깔끔했다..^^
# 될진 모르겠지만.. 아래를 시도해봐도 좋다.

# calico쓰는경우
$ kubectl -n calico-system delete pod --force --grace-period=0 $(kubectl -n calico-system get pods | cut -d' ' -f1 | grep -v NAME)

$ kubectl -n kube-system delete pod --force --grace-period=0 $(kubectl -n kube-system get pods | cut -d' ' -f1 | grep -v NAME)

$ sudo systemctl restart kubelet

사설..

예전엔.. 삽질하다가 결국 포기했었는데.. 이번엔 성공했다

삽질.. FAQ

정확하진 않은 FAQ... 기억에 의존...

 

1. 10.96.0.1 에 접속할 수 없다는 로그..

error getting ClusterInformation: Get \"https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default\": dial tcp 10.96.0.1:443: i/o timeout"

pod describe혹은 kube-system에 어떤 파드의 로그에 이러한 로그가 많이 떴다.
이것은 calico 등 Network Plugin이 정상적으로 작동하지 못해서 네트워크를 사용할 수 없다는 의미이다.
calico 가 먼저 살아나야 한다.

 

2. calico 등이 Pending 인 경우
잘 기억이 안난다... 암튼 문제가 있는 경우

 

3. calico 가 죽는 경우
kube-proxy 의 설정을 바꾸지 않아서 그랬다.

Comment +0