[Kubernetes] 쿠버네티스 설치 및 클러스터 설정

2019. 11. 20. 11:41Engineering/Container&Kubernetes

Contents

1. Docker 설치

2. Kubernetes 설치

3. Kubernetes Cluster 소개

4. Kubernetes Cluster 설정

5. Worker Node 추가

6. 마치며


 

 

Kubernetes Cluster를 구성하기 위한 Docker 및 Kubernetes 설치 방법, Kubernetes Cluster 설정 방법에 대해 알아봅니다.


1. Docker 설치

도커의 설치는 다른 블로그들에서도 설명되어 있을 뿐만 아니라,

도커에서 제공하는 guide 문서만 따라하더라도, 정말 간단하고 쉽게 설치 가능합니다.
다른 솔루션 패키지들과 비교 하였을 , 설치과정이 에러도 없고 .. 간단합니다.

또한 컨테이너의 장점이 아닐까 싶습니다.

 

따라서 여러분 또한, 도커를 아주 쉽게 설치할 있을거라 믿으며 (?)

참고할만한 블로그를 아래 링크로 소개 드립니다.

https://hiseon.me/linux/ubuntu/install-docker/
 

블로그에서 소개하는 설치 과정은 도커에서 제공하는 가이드의 내용과 동일합니다.

아래 링크는 도커에서 제공하는 설치 가이드 입니다.
https://docs.docker.com/install/linux/docker-ce/ubuntu/

 

Get Docker Engine - Community for Ubuntu

To get started with Docker Engine - Community on Ubuntu, make sure you meet the prerequisites, then install Docker. Prerequisites Docker EE customers To install Docker Enterprise Edition (Docker EE),...

docs.docker.com

 

2. Kubernetes 설치 

Kubernetes 설치 또한 도커만큼 쉽습니다.

마찬가지로, 가이드가 시키는대로만 설치하면 문제 없으며,
참고할만한 블로그를 아래 링크로 소개 드립니다.
https://hiseon.me/linux/ubuntu/ubuntu-kubernetes-install/
 

 

3. Kubernetes Cluster 소개 

Docker Kubernetes 설치하는 방법에 적응이 되셨다면.

Kubernetes 사용해 Docker기반의 Container들을 배포할 'Cluster' 만들 있습니다.

 

Cluster 여러 머신들의 묶음입니다.

특히 Kubernetes Cluster '마스터 노드'라는 녀석과 '워커 노드(편의상 노드라고 부르기도 )'라는 녀석으로 구성됩니다.

(자세한 Kubernetes Cluster 구조는 추후에 다른 시리즈의 글에서 소개 드리도록 하겠습니다.)

 

Kubernetes Cluster (출처 : https://www.google.com/url?sa=i&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwjz--ypxfflAhXQF4gKHaSYDxYQjhx6BAgBEAI&url=https%3A%2F%2Fmedium.com%2Fkubecost%2Funderstanding-kubernetes-cluster-autoscaling-675099a1db92&psig=AOvVaw1njcVJ7o5WFWOS2loL6oGp&ust=1574296397617780)

 

여기서는 '노드', '마스터 노드', '워커 노드' 라는 용어의 의미만 소개 하겠습니다.

 

'노드' Cluster 내부의 임의의 머신 입니다.

 

'마스터 노드' Cluster 내부의 노드들 중에, Cluster 관리를 위한 명령을 내리고 총괄하는 역할을 하는 노드를 말합니다. 주로 Cluster 속한 다른 노드들을 관리하고, Container 생성 요청에 따라 어떤 노드에 Container 띄울지 결정하는 역할을 합니다.

 

'(워커) 노드' 마스터 노드의 명령에 따라 Container 생성하는 노드 입니다.

뿐만 아니라, 워커 노드는 해당 노드 위에서 실행되고 있는 Container들의 상태를 주기적으로 마스터 노드에 보고하기도 합니다.

 

 

4. Kubernetes Cluster 설정

이제 본격적으로 Kubernetes Cluster 만들어 봅시다.

무엇보다 Kubernetes Cluster 만들어줄 물리적인 서버(또는 VM)들이 필요합니다. 

그리고 어떤 서버를 '마스터 노드' 할지 결정합니다.



글에서는 간단하게, 마스터 노드 1 워커 노드 1개로 구성된 Cluster 만들어보겠습니다.

 

 

기본적으로 Cluster 구성하는 모든 노드에는 Kubernetes Docker(또는 kubernetes 지원하는 다른 컨테이너 런타임) 설치되어 있어야 합니다.

이제부터는 모든 노드에 Docker Kubernetes 설치되어 있는 상황에서 설명을 시작하겠습니다.

 

Kubernetes Cluster 설정의 흐름부터 보고 가시죠.

Kubernetes Cluster 설정 순서는 아래와 같습니다.
  1)
모든 노드에 Kubernetes, Docker(컨테이너 런타임) 설치
  2) 마스터 노드 초기화
  3)
워커 노드를 마스터 노드에 join.

 

그런데 ?????

사실 2장에서 소개 드린 블로그에 내용이 모두 소개 되어 있습니다.

다시 링크를 보여드리니, 천천히 따라해 보시기 바랍니다.

https://hiseon.me/linux/ubuntu/ubuntu-kubernetes-install/

 

우분투 Kubernetes 설치 방법 - HiSEON

우분투 Kubernetes 설치 방법 Kubernetes를 설치 후 Master 노드를 초기화하고, Pod Network 를 추가 한 뒤에 Slave 노드를 추가하도록 하겠습니다. 그리고 마지막으로 Dashboard를 설정하는 방법까지 함께 설명드리도록 하겠습니다.

hiseon.me

 

 

블로그 내용에 추가하여 설명이 필요한 부분만 소개 하겠습니다.

'Master 노드 초기화' 쪽에서 kubeadm 사용하게 됩니다.

, 아래 사진과 같이
[ERROR Swap]: running with swap on is not supported. Please disable swap 이라는 에러 발생한다면 swapoff 필요 합니다.

 

아래 명령어를 통해 swapoff 있습니다.

$ swapoff -a

 

 

다음으로 블로그에서는 노드 추가에 필요한 명령줄을,

마스터 노드 초기화 ($kubeadm init ~~) 로그에서 출력되는 명령줄을 복사하여 사용하고 있습니다.

 

 

Kubeadm 워커 노드 추가를 위한 명령줄을 마스터 노드 초기화 시점이 아닌 다른 시점에도 출력해주는 옵션을 제공합니다.

다음장에서 자세히 설명하도록 하겠습니다.

 

 

5. 워커 노드 추가

워커 노드 추가 명령줄을 살펴 보시면 아래와 같은 형태 입니다.

 

$ kubeadm join [APISERVER_IP]:[APISERVER_PORT] --token [TOKEN] --discover-token-ca-cert-hash [CA_CERT]

 

 

물론 워커 노드 추가를 위해 각각의 APISERVER_IP, APISERVER_PORT, TOKEN, CA_CERT 값을 수동으로 조사하여 명령줄에 대입 하셔도 됩니다.

 

그런데 kubeadm 모든 값들을 알아서 조사해서, join 명령줄을 출력 하는 옵션 제공 합니다.

 


@
마스터노드
join 명령줄 조회는 마스터 노드에서 실행합니다.

 

아래와 같은 명령어를 통해, 새로운 token 생성하고

해당 token 사용한 워커노드 join 명령어를 출력 합니다.
 

$ kubeadm token create --print-join-command


 

@워커노드

마스터 노드에서 조회한 join명령을 복사해서

Cluster 추가하고자 하는 워커 노드에서 실행해주시면 됩니다.

 

$ kubeadm join [....]

 

 

 

@마스터 노드
마스터
노드로 돌아와 워커 노드가 정상적으로 Cluster 추가되었는지 확인 있습니다.

 

아래 명령어는 마스터 노드가 관리하는 Cluster 내의 모든 노드들(마스터 노드 포함) 정보를 출력합니다.

 

$ kubectl get nodes

 

명령 실행 결과는 아래와 유사한 형태 입니다.

 

사진에서는 개의 노드들이 보여집니다.

eyoh-worker 새로 추가한 워커 노드이며,

Eyohmaster 마스터 노드 입니다.

Eyoh-gpu 노드는 무시하셔도 됩니다.

(문제가 생긴 노드를 클러스터에서 안전하게 제거하는 방법에 대해 추후 소개해드릴 예정으로, 준비해둔 예시 입니다)

 

새로 추가한 워커 노드인 eyoh-worker 노드는 일정 시간 동안 NotReady 상태 였다가, cluster로의 join 모두 완료되면 Ready 상태로 조회 됩니다.

 

Join 수행을 했지만, 노드 상태가 NotReady 조회되더라도 당황하지 마시고 1-2분정도 기다려 보시기 바랍니다.

 

6. 마치며

마지막으로, 워커 노드를 Cluster에서 제거하는 방법을 글에서 소개하려 했는데.

생각보다 내용이 많아질 같아.

다음 글에서 소개하도록 하겠습니다.

 

왜냐하면 '안전한' 워커 노드의 삭제를 위헤서는

삭제하려는 노드에 이상 새로운 컨테이너를 배치하지 않도록 지시하는 작업,

삭제하려는 노드 위에 실행되고 있던 컨테이너들을 다른 노드로 옮겨주는 작업

등등 신경써작업 하셔야 부분이 있기 때문입니다.

 

그럼 다음 글에서 뵙겠습니다. :)