본문 바로가기
DevOps

Kubernetes Context 적용방법

by NEMNE 2022. 6. 28.

 

쿠버네티스를 사용하다 보면 비단 로컬 환경뿐만이 아니라 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