클라우드 네이티브 애플리케이션 부트캠프 알림

티스토리 뷰

kubernetes클러스터를 구성한 후, 자신이 사용할 VM에 사용 환경을 하는 방법을 설명합니다. 

작업순서는 아래와 같습니다. 

 

1. docker와 kubectl 설치하기

2. 사용할 OS계정 생성하기 

3. k8s클러스터 접근 설정하기

4. 다른 k8s클러스터로 접근 설정 바꾸기

 


1. docker와 kubectl 설치하기

root 권한으로 실행합니다. 

1) docker 설치

# yum install -y yum-utils device-mapper-persistent-data lvm2

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# yum install docker-ce -y

# systemctl start docker && systemctl enable docker 

# docker version

 

2) kubectl 설치

www.kwangsiklee.com/2019/02/kubectl-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/

 

kubectl 설치하기

개요 kubectl 설치법을 간단하게 정리해둔다. 우분투 및 데비안 계열 sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s | sudo apt-key add – echo “deb kubernetes-xenial main” …

www.kwangsiklee.com

작업 VM에서 root user로 k8s cluster를 admin권한으로 접근하려면, 아래 작업만 하시면 됩니다.

작업할 머신/VM에서 아래와 같이 작업하여 master node의 /root/.kube/config 파일을 복사합니다.

$ mkdir ~/.kube

$ scp root@<master node ip>:~/.kube/config ~/.kube/

$ kubectl get nodes

 

다른 OS user를 사용하는 경우는 이후의 작업도 수행하십시오.

 


2. 사용할 OS계정 생성하기 

이제 사용할 VM에 사용자 OS계정을 만듭니다. 

아래는 ubuntu룰 사용하는 경우입니다.

centos

centos는 아래 링크를 참조하세요

happycloud-lee.tistory.com/129?category=832818

 

Red Hat System Administration I: 사용자/그룹 관리

user관리 파일 Linux의 user 유형에는 3가지가 있습니다. root: 전체 관리 권한 user service user: Linux시스템관리를 위한 특수한 user user : 일반 사용자 /etc/passwd의 내용을 보면 전체 user목록을 볼 수 있..

happycloud-lee.tistory.com

 

ubuntu

그룹부터 만듭니다. 예를 들면 아래와 같이 devgroup이라고 먼저 만듭니다.

$ addgroup devgroup

 

사용자OS 계정을 만들고 위에서 만든 그룹에 멤버로 추가합니다.

$ export u=<user명> && adduser $u && usermod -g <그룹명> $u

예) export u=ocean && adduser $u && usermod -g devgroup $u

 

공통

sudo명령(root 권한으로 수행)을 이용할 수 있도록 /etc/sudoers에 등록합니다. 

vi로 해야 하며 저장시에는 :wq! 명령으로 강제 저장을 해 줘야 합니다.

$ vi /etc/sudoers

 


3. k8s클러스터 접근 설정하기

1) Service Account 생성 및 Role binding

먼저 kubernetes에 Service Account가 등록되어 있어야 하고, 그 SA에 적절한 권한이 binding되어 있어야 합니다.

여기 예에서는 'kube-admin'이라는 계정에 'cluseter-admin' ROLE을 binding하겠습니다.

$ export u=kube-admin

$ kubectl create sa $u -n kube-system

$ kubectl create clusterrolebinding rb-$u --clusterrole cluster-admin --serviceaccount=kube-system:$u

 

다음으로 cluster의 api server주소를 얻어, 역시 복사해 놓습니다.

$ kubectl cluster-info

 

 

2) 클러스터 접근 설정하기

k8s cluster 접근 config파일을 복사합니다. 

아래 예제는 'gappa'라는 유저를 위한 config파일 복사 예시입니다. 본인의 유저 이름에 맞게 변경하여 수행하십시오. 

[root@bastion ~]# mkdir /home/gappa/.kube
[root@bastion ~]# cp ~/.kube/config /home/gappa/.kube
[root@bastion ~]# chown -R gappa:gappa /home/gappa

이제 사용자 OS계정으로 바꾸고 수행하십시오.

$ su - <user 계정명>

예) su - ocean

 

아래 sample을 참조하여 내용을 수정합니다.  cluster명, api-server 주소, token만 바꾸면 됩니다.

- shell파일을 작성합니다.

$ vi setup-context


#!/bin/bash

clusters=`kubectl config get-clusters | tr "\n" "|" | sed "s/NAME//g" -`

read -p "Cluster 이름(현재: ${clusters}): " cluster
read -p "API Server 주소(https://<IP>:<PORT>): " server
read -p "Context 이름: " context
read -p "service account: " user
read -p "namespace: " namespace

token=$(kubectl -n kube-system get secret $(kubectl get secret -n kube-system | grep $user | awk '{print $1}') -o jsonpath='{.data.token}' | base64 --decode)

kubectl config set-cluster $cluster --server=$server --insecure-skip-tls-verify=true
kubectl config set-context $context --cluster=$cluster
kubectl config set-credentials $user --token=$token
kubectl config set-context $context --user=$user --namespace=$namespace
kubectl config use-context $context

exit 0

실행파일로 만듭니다.

$ chmod +x setup-context

shell을 실행합니다. 추가할 cluster, context는 임의로 적절히 부여합니다.

[root@demo install]# ./setup-context
Cluster 이름(현재: |demo-cluster|kubernetes|): demo-cluster
API Server 주소(https://<IP>:<PORT>): https://169.56.84.34:6443
Context 이름: demo-context
service account: kube-admin
namespace: default
Cluster "demo-cluster" set.
Context "demo-context" modified.
User "kube-admin" set.
Context "demo-context" modified.
Switched to context "demo-context".

 

현재 namespace를 변경하려면 아래 명령을 이용하십시오.

$ kubectl config set-context $(kubectl config current-context) --namespace <namespace>

참고로 추가한 cluster, context를 삭제하려면 아래와 같이 하십시오.

$ kubectl config use-context <바꿀 context명>
$ kubectl config delete-cluster $cluster
$ kubectl config delete-context $context

 

수정된 명령들을 전체 복사하여 VM콘솔에 붙여넣습니다. 마지막 명령은 Enter를 치면 수행될겁니다.

아래 명령을 수행하면, 바뀐 configuration을 볼 수 있습니다. 

또한 ~/.kube/config라는 파일이 생긴것도 확인할 수 있을 겁니다.

$ kubectl config view

 

아래 명령으로 제대로 연결이 되는 지 확인합니다.

$ kubectl get all

 

TIP:  config를 수정하려면 ~/.kube/config파일 내용을 바꾸고 저장하면 바로 적용됩니다.

변경 저장 후 kubectl config view를 수행해 보십시오.


4. 다른 k8s클러스터로 접근 설정 바꾸기

다른 클러스터로 바꾸는 것도 위와 동일합니다. 

새로운 cluster명, api-server주소, token값만 바꾸고 실행하면 됩니다.

만약, 또 다른 cluster가 있다면 한번 수행해 보시기 바랍니다.

 

 

댓글

클라우드 네이티브 애플리케이션 부트캠프 알림