- HyperGROOVE
- Hood Rabbit의 맥(Mac) 갤러리
- 울지않는벌새 : Security, Mo⋯
- :: 붕어IQ의 세상사는 이야기 ::
- DATA FILEE STYLE
- 하얀잉크의 해피컨텐츠
- 이카루스의 리뷰토피아
- Kurien's Blog
- 사진은 권력이다
- 우리집 고양이는 TV를 본다
- 못된준코의 세상리뷰
- 에우르트는 나쁜남자 -_-
- 아이엠피터
- 김용택의 참교육이야기
- 다락방의 추억 상자
- All you need are LOVE
- 천추의 IT 이야기
- 서관덕의 시간이 머문 작은공간
- 티비의 세상구경
- TB의 SNS 이야기
- 그래서 난 아직도 ing :Seas⋯
- 자로의 꿈
- 꿈 많은 개발자가 되자! Tae-⋯
- 다산인권센터
- 아이폰주무르기
- 신씨's 쌀롱
- 구브의 잡동사니
- 해리의 문화예술 다이어리
- 꿈꾸는자의 생각의 파편들...
- 밀양765kV송전탑OUT
- 기묘한 블로그
- 소비자와 함께 만드는 공간⋯
- 투명사회를 위한 정보공개센터
- 아는만큼 쓰는 블로그
- 작은outsider의 생각누리
- Script Programming(스크립트⋯
- 선대인의 인사이트
- Programming is Fun
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 세월호
- Openshift
- mongodb
- 가상화
- Ubuntu 9.10
- k8s
- 100년의기업
- Ansible-playbook
- 100년의가게
- 창업
- Docker
- external-dns
- openSUSE
- OpenShift Origin
- opensuse 11.3
- centos
- mysql
- container
- git
- ubuntu
- statefulset
- 경영
- Route53
- Virtualization
- 세월호 참사
- Linux
- Kubernetes
- Xen
- Open vSwitch
- glusterfs
- Today
- 40
- Total
- 1,112,609
Bryan's Tech-Log
[Kubernetes Cluster 관리] 클러스터 컨텍스트 변경과 kubectl을 통한 multi-cluster 접속 본문
[Kubernetes Cluster 관리] 클러스터 컨텍스트 변경과 kubectl을 통한 multi-cluster 접속
Barracuda 2017. 12. 20. 13:13Kubernetes 를 사용하다 보면 서로 분리된 환경에 설치된 여러 클러스터에 번갈아 접속해야 할 경우가 종종 발생한다. 예를 들어 한 쪽은 개발&테스트, 다른 한 쪽은 실제 서비스 클러스터 환경, 이런 식이다. 접속 터미널을 따로 띄워서 간편히 사용하는 경우가 많겠지만, 필요에 따라 하나의 kubectl 클라이언트로 서로 다른 클러스터에 접속할 수 있도록 설정하는 방법을 정리한다(K8s 1.6.x~1.8.x 기준).
클러스터 이름과 관리자 이름 변경
Kubernetes 를 구글 repo를 통해 기본 설치로 진행하면, kubectl을 통한 클러스터 접속용 설정 파일(yaml 형식)은 위의 캡처 이미지와 같은 모양으로 나타나게 된다(root 유저일 경우 KUBECONFIG 환경변수의 값은 '/root/.kube/config' 값을 가진다). 파일을 열어 보면, 클러스터명은 kubernetes, 사용자는 kubernetes-admin' 으로 자동 설정 되고, kubeadm을 통한 설치시에 만들어 진 보안 인증키 값들이 인코딩 되어 사용된다. Minikube 를 로컬 PC에 자체 설치하였어도 전체적인 설정파일의 구조는 동일하다고 볼 수 있다.
이와 같이, 유사한 방식으로 쿠버네티스를 여러 환경에 설치하더라도 해당 클러스터명과 사용자명이 동일하게 되지 않도록 구분을 지어 주어야만 context를 스위칭하면서 kubectl 에서 각각의 클러스터에 접속을 할 수 있게 된다.
캡처이미지에도 표시하였지만, 박스로 표시된 부분에 대해 각 이름의 일관성을 유지하면서 원하는 값으로 바꾸어 저장하도록 한다. 여기서는 클러스터 이름을 k8s-vbox로, 사용자(관리자) 이름을 k8s-vbox-admin 으로 변경한다.
<첫 번 째 클러스터 KUBECONFIG 파일 변경>
[root@kubemaster ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
[root@kubemaster ~]# vi $KUBECONFIG
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://10.255.10.170:6443
name: k8s-vbox
contexts:
- context:
cluster: k8s-vbox
user: k8s-vbox-admin
name: k8s-vbox-admin@k8s-vbox
current-context: k8s-vbox-admin@k8s-vbox
kind: Config
preferences: {}
users:
- name: help
user:
as-user-extra: {}
- name: k8s-vbox-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
[root@kubemaster ~]# systemctl daemon-reload
[root@kubemaster ~]# systemctl restart kubelet
[root@kubemaster ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* k8s-vbox-admin@k8s-vbox k8s-vbox k8s-vbox-admi
이번에는 또 다른 클러스터 이름을 k8s-vmw로, 사용자(관리자) 이름을 k8s-vmw-admin 으로 변경한다.
<두 번 째 클러스터 KUBECONFIG 파일 변경>
[root@kubemaster ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
[root@kubemaster ~]# cat $KUBECONFIG
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.60.170:6443
name: k8s-vmw
contexts:
- context:
cluster: k8s-vmw
user: k8s-vmw-admin
name: k8s-vmw-admin@k8s-vmw
current-context: k8s-vmw-admin@k8s-vmw
kind: Config
preferences: {}
users:
- name: k8s-vmw-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
[root@kubemaster ~]# systemctl daemon-reload
[root@kubemaster ~]# systemctl restart kubelet
[root@kubemaster ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since 화 2017-12-19 02:07:47 EST; 9s ago
...
[root@kubemaster ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* k8s-vmw-admin@k8s-vmw k8s-vmw k8s-vmw-admin
두 개 클러스터의 config 병합 & kubectl 접속
각 클러스터마다 config 를 수정하여 이름 부분이 잘 변경 되었다면, 양쪽 클러스터에 모두 접속할 수 있는 kubectl 클라이언트 계정의 config 파일에 또 다른 클러스터의 config 내용을 병합하여 아래와 같이 변경해 둔다. 내용을 잘 보면 두 개 클러스터의 config 파일 내용 중 'clusters' 영역과 'contexts' 영역 그리고 'users' 영역의 내용이 각각 병합되어 구성됨을 알 수 있을 것이다.
[root@kubemaster ~]# cd ,kube
[root@kubemaster .kube]# cp config config.old
[root@kubemaster .kube]# vi config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://10.255.10.170:6443
name: k8s-vbox
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.60.170:6443
name: k8s-vmw
contexts:
- context:
cluster: k8s-vbox
user: k8s-vbox-admin
name: k8s-vbox-admin@k8s-vbox
- context:
cluster: k8s-vmw
user: k8s-vmw-admin
name: k8s-vmw-admin@k8s-vmw
current-context: k8s-vbox-admin@k8s-vbox
kind: Config
preferences: {}
users:
- name: help
user:
as-user-extra: {}
- name: k8s-vbox-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: k8s-vmw-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
이제 다음과 같이 두 개의 클러스터를 전환하면서 kubectl 명령을 사용할 수 있게 된다.
[root@kubemaster .kube]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* k8s-vbox-admin@k8s-vbox k8s-vbox k8s-vbox-admin
k8s-vmw-admin@k8s-vmw k8s-vmw k8s-vmw-admin
[root@kubemaster ~]# kubectl get pods -nkube-system -l tier=control-plane -o wide
NAME READY STATUS RESTARTS AGE IP NODE
etcd-kubemaster 1/1 Running 5 4d 10.255.10.170 kubemaster
kube-apiserver-kubemaster 1/1 Running 6 4d 10.255.10.170 kubemaster
kube-controller-manager-kubemaster 1/1 Running 5 4d 10.255.10.170 kubemaster
kube-scheduler-kubemaster 1/1 Running 5 4d 10.255.10.170 kubemaster
* 현재 접속된 클러스터의 pod 구성을 확인(control-plane 에 해당하는 pod 정보만 조회)
[root@kubemaster ~]# kubectl config use-context k8s-vmw-admin@k8s-vmw
Switched to context "k8s-vmw-admin@k8s-vmw".
[root@kubemaster ~]# kubectl get pods -nkube-system -l tier=control-plane -o wide
NAME READY STATUS RESTARTS AGE IP NODE
etcd-kubemaster 1/1 Running 36 50d 192.168.60.170 kubemaster
kube-apiserver-kubemaster 1/1 Running 17 50d 192.168.60.170 kubemaster
kube-controller-manager-kubemaster 1/1 Running 45 50d 192.168.60.170 kubemaster
kube-scheduler-kubemaster 1/1 Running 43 50d 192.168.60.170 kubemaster
* 접속할 클러스터를 전환하여 pod 구성을 확인
- Barracuda -
'Technical > Cloud, Virtualization, Containers' 카테고리의 다른 글
[Kubernetes - CI/CD] Customized Jenkins 제작과 활용 - 2/2 (0) | 2018.04.03 |
---|---|
[Kubernetes - CI/CD] Customized Jenkins 제작과 활용 - 1/2 (0) | 2018.03.20 |
[Kubernetes Cluster 관리] 클러스터 컨텍스트 변경과 kubectl을 통한 multi-cluster 접속 (0) | 2017.12.20 |
[Kubernetes RBAC] API 연결로 확인해 보는 RBAC 설정 방법 (0) | 2017.12.01 |
[Kubernetes ingress part-1] Nginx ingress 구현과 사용 방법 (0) | 2017.11.03 |
[Kubernetes] Hyper-converged GlusterFs integration with Heketi -4/4 (0) | 2017.08.25 |