Kubernetes Context 적용방법
쿠버네티스를 사용하다 보면 비단 로컬 환경뿐만이 아니라 EKS, GKE, on-premise 등 다양한 환경에서 사용하게 된다. 이때 로컬 환경도 사용하고 싶고 다른 환경도 같이 사용하고 싶을 때 쉽게 전환하기 위해 K8s에서는 use-context라는 명령어를 지원하고 있다.
이번 글에서는 여러 클러스터의 config 정보를 하나로 합쳐서 use-context를 통해 쉽게 전환할 수 있는 방법을 소개하려고 한다.
사전에 필요한 것들
위 글은 쿠버네티스 구축에 대한 이야기를 담고 있지 않기 때문에 사전에 내 쿠버네티스 환경에 추가할 외부 클러스터 config를 아래와 같이 준비한다.
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <값>
server: <주소>
name: on-premise
contexts:
- context:
cluster: on-premise
namespace: <기본으로 사용할 네임스페이스 지정 가능>
user: on-premise
name: on-premise
current-context: on-premise
kind: Config
preferences: {}
users:
- name: on-premise
user:
client-certificate-data: <값>
client-key-data: <값>
+) 추가로 해당 config 파일에서 namespace 속성에 특정 namespace 값을 넣어 default namespace를 변경할 수도 있다.
~/.ssh/config에 정보를 추가
적용할 외부 클러스터와 통신하기 위해 ~/.ssh/config에 관련 정보를 입력해준다.
예시
Host "Cluster-1"
HostName <주소>
User nemne
기존 config 파일과 합치기
적용할 외부 클러스터에 대해 config 파일이 있듯이 현재 내 로컬 클러스터에 관한 config 파일도 존재하는데
이는 cat ~/.kube/config 에서 확인이 가능하다.
이제 서로 합치기 전에 혹시 모를 상황에 대비해 기존 config를 백업시킨다.
cp ~/.kube/config ~/.kube/config.bak
그리고 서로 합칠 config를 별도의 폴더를 생성하여 모아둔다.
cd ~/.kube
mkdir clusters
mv ~/on-premise-config ./clusters
mv ./config ./clusters
KUBECONFIG에 아래와 같이 할당한 후에 kubectl config view —flatten을 실행시키고 해당 결과 값을 저장한다.
KUBECONFIG=~/.kube/clusters/on-premise.config:~/.kube/clusters/config-bak.config kubectl config view --flatten > ~/config
최종 config를 ~/.kube/config에 덮어 씌운다.
mv ~/config ~/.kube/config
최종적으로 잘 적용된 것을 확인할 수 있다.
현재 글에서는 안다루지만 Service Account나 Resource Quota를 통해 논리적으로 독립적이게 하여 특정 네임스페이스만을 사용하게 할 수도 있다.
참고
How to merge Kubernetes kubectl config files
Sometimes when working with a new Kubernetes cluster you will be given a config file to use when authenticating with the cluster. This…
medium.com
Using multiple kubeconfig files and how to merge to a single – Oueta
Reference: Kubernetes Documentation When it’s the case that you are managing multiple Kubernetes clusters, you will have to do with multiple kubeconfig files. There are multiple ways that you can deal with this, my favorite is to keep the files separate,
www.oueta.com