Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[kubernetes] Multi Cluster 환경 구성 및 플러그인 kubectx 사용 본문

Kubernetes

[kubernetes] Multi Cluster 환경 구성 및 플러그인 kubectx 사용

Study_note 2022. 12. 2. 21:02

EKS 사용 고객 중 Multi Cluster 환경 도입 예정이여서 해당 환경 구성 방법과 운영 팁을 달라했던 문의가 있었다.

 

그럼 왜 Multi Cluster 환경을 구성할까?

예를들어 DEV, PRO 환경 처럼 환경 별로 구성이 다를 때 아님 서울과 버지니아 서로 다른 두 곳에서 클러스터를 운영할때 운영의 편리함으로 인해 Multi Cluster환경으로 구조하는 경향이 있다.

 

Kubernetes 클러스터를 처음 생성하면 ~/.kube 디렉토리에 config 파일이 생성되는데 해당 config 파일은 kubeconfig 파일이며, Kubernetes 클러스터와의 연결에 대한 정보를 저장하는데 사용된다.

 

여기서 config파일은 Cluster(클러스터 정보들), User(클러스터에 접근할 유저들의 정보 및 인증키)를 조합한 Context라는 오브젝트 형태로 제공한다.

 

+ 추가로 공부하다 알았는데 Context에는 namespace도 포함되어 namespace에 따라  Context를 구분 가능하며

하나의 Cluster를 여러개의 논리적인 Cluster로 동작하게 관리할 수 있다

 

아래 그림과 같이 cat ~/.kube/config를 통하여  kubeconfig 파일을 확인해보면 User의 인증키와 context를 확인 가능하며context 구조는  Cluster, User이며 namespace를 명시하지 않음 default로 적용된다.

cat ~/.kube/config

 

이제 이 config 파일과 context를 사용해서 Multi Cluster 환경을 구성해 본다

 

구성 전에 간단한 config 명령어는 아래와 같다.

# 현재 context 확인
k config get-contexts

# 전체 cluster 리스트
k config get-clusters 

# 전체 context 리스트
k config get-contexts

# context 변경
k config use-context cluster-name

# kubeconfig 확인
k config view

# 현재 사용중인 context의 정보만 확인
kubectl config view --minify

# context 추가
k config set-context context-name --naemspace=namespace-name --cluster=cluster-name

# kubeconfig 삭제
kubectl config unset clusters.cluster-name or contexts.cluster-name or users.cluster-name

 

아래와 같이 2개의 클러스터 및 context가 있다.

각 클러스터에서 생성된 kubeconfig 파일을 아래와 같이 config2라는 파일이름으로 서로 다른 리전에 복사해서 해당 경로에 넣어준다.

 

정상적으로 넣었다면 다시 config get-context를 통해 config파일을 리스트 하면 아래와 같이 2개의 context와 클러스터들을 확인할 수 있다.

2번째 사진의 *는 현재 위치해 있는 클러스터를 의미한다.

 

이제 현재 클러스터에서 다른 클러스터로 이동하면 아래와 같다.

현재 위치를 의미하는 *이 다른 context에 있는것을 확인 가능하며 switch 된것 또한 확인 가능하다

 

kubeconfig 및 context의 정보는 view 또는 view --minify를 명령어를 통해 확인 가능하며

 

아래와 같이 set-context를 사용하여 하나의 Cluster를 namespace를 사용하여 여러개의 논리적인 클러스터로 구성도 가능하다.

이름은 eks-test이고 namespace은 kube-system이자  Cluster는 기존 사용했던 클러스터인것을 확인가능며 마직막으로 삭제한다 

 

여기까지가 플러그인 없이 Multi Cluster 환경에서 사용하는 클러스터 스위칭이다

여기서 더 편하게 Multi Cluster를 운영하기 위해 만든게 kubectx + kubens 플러그인이다.

 

kubectx + kubens란?

 

kubectx : Context 변경 및 확인 삭제 등을 해주는 플러그인으로  -c 옵션으로 CurrentContext를 확인할 수 있으며, -d 옵션으로 삭제할 수 있으며, - 옵션으로 이전 Context로 돌아오지만 set과 같은 일부 옵션을 지원하지 않는다.

 

kubens  : 현재  Context의 Namespace를 확인 및 변경해주는 플러그인으로 -c 옵션으로 CurrentNamespace를 확인할 수 있으며, - 옵션으로 이전 Namespace로 돌아온다.

 

보통 kubectx, kubens 2개를 다운 받고 사용한다.

 

우선 kubectx, kubens 플러그인을 사용하려면 krew라는 플러그인 패키지 관리자를 설치 해줘야 한다.

 

링크 건 내용을 확인 하면 아래와 같이 ctx와 ns는 쉽게 설치할 수 있다.

krew를 통해 ctx와 ns를 설치한 후 바로 사용 가능하지만 조금더 간단하게 kubectx 명령어 하나로만 사용하기 위해아래 작업까지 해준다.

# kubectx에 대한 공인 git 레포지터리에서 kubectx파일 클론  
sudo git clone https://github.com/ahmetb/kubectx ./kubectx

# sbin 경로로 복사 해준다
sudo cp kubectx /usr/local/sbin/
sudo cp kubens /usr/local/sbin/

 

kubectx 명령어 하나로 현재 컨텍스트를 확인 가능하며 스위칭도 가능한것을 확인 가능

kubens 또한 하나의 Cluster에서 namespace로 논리적으로 나뉘어질경우 사용하여 쉽게 context를 관리할 수 있다.

 

최근에 kubernetes환경에서 Multi Cluster환경으로 사용하기 위해 많이 시도하는것 같은데 플러그인을 사용하면 쉽게 context를 개발/테스트/운영 환경 또는 namespace 등 보다 다양한 측면에서 보다 효율으로 운영관리가 될 거라 생각한다.

Comments