다중 클러스터 접근 구성 - Kubernetes kubectl context
쿠버네티스 클러스터를 관리하는 kubectl은 환경을 변경하며 클러스터를 관리할 수 있는 context 기능을 제공한다.
이는 config 구성 파일을 활용하여 다수의 클러스터에 접근할 수 있도록 설정하며 사용자는 커맨드 사용으로 빠르게 클러스터를 변경할 수 있다.
설정 방법
context는 kubectl cli를 설치하면 생성되는 ~/.kube/config 파일에서 설정한다. (클러스터는 설치되어있다고 가정한다.)
추가로 kubectl이 설치되었는지 확인하기 위해서는 $kubectl version --client를 통해 확인한다.
config 파일 예시
아래는 config 파일의 예시이다. (구글 공식 문서 참고)
개발 작업을 위한 클러스터와 스크래치 작업을 위한 클러스터를 가지고 있다고 가정한다.
- development 클러스터에서는 frontend 개발자들이 frontend namespace에서 작업을 하며, storage 개발자들은 storage namespace에서 작업을 한다.
- scratch 클러스터에서는 개발자들이 default namespace에서 개발하거나 필요에 따라 보조 namespace들을 생성한다.
- development 클러스터에 접근하기 위해서는 인증서가 필요하며, scratch 클러스터에 접근하기 위해서는 사용자 이름과 패스워드로 인증이 필요하다.
apiVersion: v1 clusters: - cluster: certificate-authority: fake-ca-file server: https://1.2.3.4 name: development - cluster: insecure-skip-tls-verify: true server: https://5.6.7.8 name: scratch users: - name: developer user: client-certificate: fake-cert-file client-key: fake-key-file - name: experimenter user: password: some-password username: exp contexts: - context: cluster: development namespace: frontend user: developer name: dev-frontend - context: cluster: development namespace: storage user: developer name: dev-storgae - context: cluster: scratch namespace: default user: experimenter name: exp-scratch current-context: "" kind: Config preferences: {}
구성 요소
config 파일을 구성하는 항목에는 크게 아래 3가지로 분류할 수 있다.
- clusters
쿠버네티스의 클러스터 정보로, development / scratch 클러스터에 대한 정보를 볼 수 있다.
처음 클러스터 생성 시 복잡한 이름으로 생성되므로 name을 지정하여 알아보기 쉽게 바꿔주는 것이 좋다.
- users
클러스터에 접근할 유저의 정보이다.
development 클러스터의 경우 인증서가, scratch 클러스터의 경우 패스워드가 필요한 것처럼 각 환경마다 필요한 값을 명시한다.
- context
cluster와 user를 조합하여 생성된 값이다.
cluster의 name과 user의 name을 속성값으로 지정한 것을 확인 할 수 있다.
dev-frontend 라는 context는 developer라는 user 정보로 development 클러스터의 frontend 네임스페이스에 접근하는 하나의 set이 되는 것이다.
context 조회 및 변경
# exp-scratch로 context 변경 $ kubectl config --kubeconfig=config use-context exp-scratch # exp-scratch context 설정 조회 $ kubectl config --kubeconfig=config view --minify # 모든 context 조회 $ kubectl config get-contexts # 현재 설정된 context 조회 $ kubectl config current-contexts # context에 설정사항 추가 (ex.development cluster) $ kubectl config --kubeconfig=config set-cluster development {option}
kubectx 도구 활용
간단하게 brew로 설치할 수 있는 도구로 context를 쉽게 변경할 수 있게 도움을 준다.
kubectl config use-context exp-scratch 와 같이 긴 명령어를 사용하지 않아도 간편하게 context를 변경할 수 있다.
# 사용 예 $ kubectx dev-frontend dev-storage exp-scratch # context 변경 $ kubectx dev-frontend Switched to context "dev-fronted". # 이전 context로 돌아가기 $ kubectx -
(참고) https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/