Study_note
[kubernetes] Multi Cluster 환경 구성 및 플러그인 kubectx 사용 본문
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 등 보다 다양한 측면에서 보다 효율으로 운영관리가 될 거라 생각한다.
'Kubernetes' 카테고리의 다른 글
[kubernetes] Prometheus 및 모니터링 룰 추가 (2) | 2023.02.18 |
---|---|
[kubernetes] Serviceaccount, context를 사용한 개발자 계정 생성 (0) | 2022.12.07 |
[kubernetes] 쿠버네티스 플러그인 패키지 관리자 Krew 및 자주 사용하는 플러그인 tree, neat 사용 (0) | 2022.12.01 |
[kubernetes] EFS를 POD에 동적 마운팅 (0) | 2022.11.30 |
[kubernetes]AWS Secrets Manager를 통한 쿠버네티스 Secret관리 (0) | 2022.11.29 |