Kubernetes 다중 클러스터 context 추가 및 에러 발생 시나리오
Kubernetes 다중 클러스터
쿠버네티스를 관리하기 위한 가장 기본적인 툴로는 kubectl이 존재한다.
주 클러스터 1번에서 2번 클러스터를 관리하기 위한 context 추가 및 발생 가능한 에러에 대해 다뤄본다.
( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.
이는 정확한 정보가 아닐 수 있음을 알려드립니다. )
공식 사이트
( 광고 클릭은 큰 힘이 됩니다! )
다중 클러스터 접근 구성
이 페이지에서는 구성 파일을 사용하여 다수의 클러스터에 접근할 수 있도록 설정하는 방식을 보여준다. 클러스터, 사용자, 컨텍스트가 하나 이상의 구성 파일에 정의된 다음 kubectl config use-conte
kubernetes.io
context 추가
주 클러스터 ~/.kube 경로에 2번 클러스터의 context를 추가한다.
config 파일 명은 크게 제약이 없으나 통일성을 위해 config2로 지정한다.
-rw-rw-r-- 1 admin admin 11212 10월 22 13:31 config
-rw-rw-r-- 1 admin admin 5674 10월 22 13:28 config2
필수적으로 처음부터 새로운 파일을 만들어야 하는것은 아니다.
또한, kubectl config set-* 명령어로 수동 생성이 가능하지만 상당히 귀찮기 때문에 파일 추가를 추천한다.
export를 통해 새로운 config 파일 적용(수출) 시키기
export KUBECONFIG=~/.kube/config:~/.kube/config2
추가된 config 확인
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
kubernetes-admin-2@kubernetes-2 kubernetes-2 kubernetes-admin-2
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
추가된 config 하나의 파일로 merge 적용
kubectl config view --merge --flatten > ~/.kube/merged-config
• --merge: 여러 설정 파일을 병합하여 하나의 출력으로 만든다.
• --flatten: 설정 파일 내에 참조된 사용자, 클러스터, 컨텍스트 정보를 병합된 파일에 직접 포함한다.
기존 config backup
mv ~/.kube/config ~/.kube/config.back
mv ~/.kube/merged-config ~/.kube/config
export 재적용
export KUBECONFIG=~/.kube/config
kubectl config view 확인
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.60.180:6443
name: kubernetes
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.60.177:6443
name: kubernetes-2
contexts:
- context:
cluster: kubernetes-2
user: kubernetes-admin-2
name: kubernetes-admin-2@kubernetes-2
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
- name: kubernetes-admin-2
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
에러 발생 시나리오
1. 통신불가
주 클러스터 1번에서 2번 클러스터의 6443 포트, 혹은 그에 맞는 API 포트로 통신이 불가능한 경우 응답을 받아 올 수 없어 응답이 없다 타임아웃이 난다.
Unable to connect to the server: dial tcp 192.168.60.177:6443: i/o timeout
방화벽이나 통신 상황을 확인하자
2. 중복 아이디 클러스터
쿠버네티스 context를 추가할땐 당연하게 클러스터 네임을 구분해야하며, 또한 클러스터 네임뿐만 아니라 유저 및 context명 또한 구분해야한다. 당연한 말처럼 들리겠지만 사실 생각보다 테스트 베드 구축에는 클러스터명, 유저, context명을 기본으로 계속 사용하는 경우가 대부분이다. 그럼 어떻게 위 요소들을 수정하는지 대부분 모르고 넘어간다는 소리다. 그 후 막상 context를 추가하면 아래와 같은 상황이 발생한다.
error: error loading config file "/home/admin/.kube/config": error converting
... 중략
무슨 생전 처음보는 에러를 뱉는다 혹은 Bad TLS 뱉던가 한다.
수정 방법
별거 없다 그냥 복사한 config의 모든 구간에 구분자를 입력하면된다.
변경 전
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
server: https://192.168.60.177:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
변경 후
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
server: https://192.168.60.177:6443
name: kubernetes-2
contexts:
- context:
cluster: kubernetes-2
user: kubernetes-admin-2
name: kubernetes-admin-2@kubernetes-2
current-context: kubernetes-admin-2@kubernetes-2
kind: Config
preferences: {}
users:
- name: kubernetes-admin-2
user:
잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.