DevOps/K8S

[Kubernetes] 우분투 환경에서 클러스터 구성하기(4) - 마스터노드, 워커노드 구성하기

IT록흐 2023. 9. 26. 05:24
반응형

 

 

[Kubernetes] 우분투 환경에서 클러스터 구성하기(3) - 넷필터 브릿지

[Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl [Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기 [Kubernetes] Google Cloud에서 VM인스턴스 만들기 [Kubernetes]

lordofkangs.tistory.com

 

지난 포스팅에서 넷필터 브릿지 설정을 완료하였다.

이번 포스팅에서는 본격적으로 쿠버네티스 클러스터를 구성해보겠다. 

 

 

1) 마스터 노드 생성하기 

 

sudo kubeadm init

 

마스터 노드로 설정할 노드를 선택하여 sudo kubeadm init 을 입력한다. 성공문구가 뜨면 클러스터에 마스터노드(Control-Plane)가 생성된 것이다. 그러면 성공 문구와 함께 가이드 하나가 제공된다. 

 

가이드(Guide)

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.138.0.24:6443 --token 3yhxmo.w7attv7go3zeefus \
        --discovery-token-ca-cert-hash sha256:b464e0dd394257e9b7b7bfdf4fc5806528266b47a8b4c9e2fae6052f8302d40b

 

가이드를 따라 설정을 진행해보자. 

 

 

2) 리눅스 사용자 계정을 클러스터 관리자 계정으로 설정하기

 

 

마스터 노드에 kubectl 명령을 내리면 커넥션 에러가 발생한다. 이는 클러스터 관리자 권한이 없는 계정이 마스터 노드에 kubectl 명령을 내렸기 때문이다.  그럼 마스터노드에 kubectl 명령을 내릴 수 있는 관리자 권한을 가진 계정을 생성해보자. 

 

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

 

sudo kubeadm init을 실행하면 /etc/kuvernetes/admin.conf 파일이 생성된다. admin.conf에는 클러스터 및 admin 정보가 들어있고 이 파일에 접근 가능한 계정이 클러스터 관리자 계정이다. /etc/kuvernetes/admin.conf 파일은 root계정 전용파일이다. 일반 사용자 계정이 접근할 수 있는 admin.conf 파일은 따로 복사하여 만들어야 한다.

 

$HOME/.kube/config 폴더는 일반 사용자 계정의 admin.conf 파일이 위치하도록 약속된 장소이다. 그곳에 sudo 권한으로 admin.conf 파일을 복사(cp)하고 config 폴더의 소유주를 일반 사용자계정으로 전환(chown)한다.  이후 일반 사용자 계정으로 kubectl 명령을 수행하면 약속된 위치의 admin.conf 파일을 읽어 클러스터 관리자 계정임을 확인하고 명령을 수행한다.

 

 

 kubectl 명령이 정상 수행되었음을 확인할 수 있다. 이로써 리눅스 사용자 계정을 클러스터 관리자 계정으로 사용가능해졌다. 만약 루트 계정이라면 아래 명령으로 환경변수에 admin.conf 파일 위치를 고정한다. 

 

export KUBECONFIG=/etc/kubernetes/admin.conf

 

 

3) 워커노드 클러스터에 조인하기

 

마스터 노드 설정이 마무리 되었다. 그럼 워커노드를 클러스터에 조인시켜 보자. 

 

sudo kubeadm join 10.138.0.24:6443 --token 3yhxmo.w7attv7go3zeefus \
        --discovery-token-ca-cert-hash sha256:b464e0dd394257e9b7b7bfdf4fc5806528266b47a8b4c9e2fae6052f8302d40b

 

가이드(Guide) 가장 아래를 보면 조인할 워커노드에 실행해야 하는 명령이 있다. 

 

10.138.0.24:6443는 마스터 노드의 ip주소와 포트번호이다. 워커노드는 마스터노드에 토큰을 가지고 접속한다. 토큰은 클러스터에 조인할 워커노드를 인증하는 수단이다. 토큰을 가지고 접근하는 워커노드는 클러스터에 조인된다.

 

 

 

 

kubectl get nodes를 수행하면 클러스터에 조인된 노드를 확인할 수 있다. 워커노드 2개가 조인 되었다. 

 

그런데 Status를 보면 NotReady 상태이다. 아직까지는 노드만 클러스터에 합류했을 뿐이다. 쿠버네티스는 노드 안 컨테이너 간 네트워킹이 중요하고 복잡하다. 그러므로 컨테이너간 네트워크 폴리시를 제공하는 플러그인이 필요하다. 

 

대표적으로 Cilium, WeavNet, Calico 등이 있다. 

 

 

4) 컨테이너 간 네트워크 설정하기 

 

curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install

 

Cilium이 제공하는 웹리소스에 curl 명령어로 접속하여 tar를 파일을 하나 가져온다. 

tar 압축을 풀고 install을 진행한다. 

 

cilium status

 

cilium status 명령으로 cilium이 잘 설치되었는지 확인 한다. 

 

kubectl get nodes

 

 

잘 설치 되었으면 위와 같이, Node의 Status가 Ready로 바뀐다. 

 

 

여기까지 클러스터 구성을 완료하였다. 

그럼 클러스터를 테스트 하기위해 컨테이너를 생성 및 배포해보자. 

 

 

5) 컨테이너 생성 및 배포하기 

 

kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080

 

create deploy 명령으로 컨테이너를 생성 및 배포하고 expose deploy 명령으로 서비스를 생성 및 배포하였다. 

 

 

 

 

그럼 사진과 같이, tc컨테이너 5개와 tc 서비스 1개가 생성됨을 확인할 수 있다.

 

여기까지가 일반적인 우분투 환경에서 쿠버네티스 클러스터 구성을 해보았다. 그 간의 과정을 살펴보면 아래와 같다. 

 

 

1) swap 설정 및 컨테이너 런타임 환경 구성하기 

 

[Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기

[Kubernetes] Google Cloud에서 VM인스턴스 만들기 [Kubernetes] GKE 클러스터에서 톰캣 컨테이너 배포 및 외부접속하기 [Kubernetes] 클러스터 구성하기(1) - GKE 클러스터 구글에서 제공하는 쿠버네티스 엔진(Goo

lordofkangs.tistory.com

 

2) kubeadm, kubectl, kubelet 구성하기 

 

[Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl

[Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기 [Kubernetes] Google Cloud에서 VM인스턴스 만들기 [Kubernetes] GKE 클러스터에서 톰캣 컨테이너 배포 및 외부접속하기 [Kubernetes] 클러

lordofkangs.tistory.com

 

3) 넷필터 브릿지 구성하기 

 

[Kubernetes] 우분투 환경에서 클러스터 구성하기(3) - 넷필터 브릿지

[Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl [Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기 [Kubernetes] Google Cloud에서 VM인스턴스 만들기 [Kubernetes]

lordofkangs.tistory.com

 

4) 마스터 노드 및 워커노드 설정하기

 

[Kubernetes] 우분투 환경에서 클러스터 구성하기(4) - 마스터노드, 워커노드 구성하기

[Kubernetes] 우분투 환경에서 클러스터 구성하기(3) - 넷필터 브릿지 [Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl [Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이

lordofkangs.tistory.com

 

 

 

구글쿠버네티스엔진(GKE)에서 제공하는 클러스터를 사용하면 위 설정 및 구성 과정은 생략해도 되지만 비어있는 환경에서 클러스터를 구성하려면 위와 같은 복잡한 과정을 거쳐야 한다. 

 

 

 


 

 

참고자료

 

쿠버네티스 admin.conf

쿠버네티스를 나름 이제 알았다 생각했는데 새로운 것이 참 많다.이번에는 admin.conf를 사용해서 사용자를 추가하고 접속하는 방법을 알아보자.쿠버네티스는 /etc/kubernets/admin.conf 파일을 가지고

velog.io

 

 

0부터 시작하는 Kubernetes 공부 - admin.conf & Ingress-NodePort 구조 & Volume 사용 구조 및 활용

admin.conf / Ingress & NodePort 구조 / Volume 사용 구조 / Volume 활용하기 ( 22.09.07 )

velog.io

 

Calico?Weave? CNI에 관하여

Kubernetes를 설치하여 사용할때 항상 CNI를 설치해야 core-DNS서비스가 정상동작하고, 네트워크 폴리시 등의 보안 정책을 적용할 수 있었기에, 그냥 무의식적으로 설치하여 사용했었는데 막상 다시

ykarma1996.tistory.com

 

 

데브옵스(DevOps)를 위한 쿠버네티스 마스터 - 인프런 | 강의

컨테이너 기반 오픈 소스 가상화 프로젝트인 "쿠버네티스"를 이용한 컨테이너 환경의 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 활용하는 방법을 입문부터 활용까지 다룹니다., [

www.inflearn.com

 

반응형