본문 바로가기

Cloud/Kubernetes

네이버 클라우드 플랫폼을 이용하여 Kubernetes 설치하기

0. 환경 구성

- Ubuntu를 써본게 너무 오랜만이라... 조금 애먹었다.

서버끼리 공유하기 위해 Private Subnet을 만들어주었다.

그리고 각각에게 부여해주었다.

Master는 외부에서 붙기 위해 Public IP를 부여해주었다.

ACG도 kubernetes 환경에 맞게 구성하여 적용해주었다.

1. hosts 알려주기

vi /etc/hosts

master노드와 worker노드들의 각각 내부 IP를 적어준다.

192.168.100.X master
192.168.100.Y worker001
192.168.100.Z worker002

나는 이렇게 생성하였다. 물론 hostname도 역할에 맞게 바꾸어주어야 한다.

hostnamectl set-hostname master

쿠버네티스는 swap 영역과 충돌이 있어 미리 주석처리 해주어야 한다.

swapoff -a

스왑을 꺼주고 /etc/fstab에 들어가 주석처리해준다.

vi /etc/fstab

UUID=9c551311-c7c0-4f39-80ed-beb1a1218883 /               ext4    errors=remount-ro 0       1
# swap was on /dev/xvda2 during installation
#UUID=2c7c4d72-3ef2-4d79-9b8d-183535d83e42 none            swap    sw              0       0

2. 도커를 설치해준다.

apt-get install apt-transport-https ca-certificates curl software-properties-common -y

도커 설치에 필요한 레포지토리를 먼저 설정해준다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

GPG 키도 등록해준다.

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

stable 버전을 다운받아준다.

apt-get update -y
apt-get install docker-ce -y

레포지토리를 업데이트 해준 이후, docker-ce 버전을 설치해준다.

root@master:~# docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:21:35 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89e8a
  Built:            Thu Jul 25 21:20:09 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

 docker version으로 설치를 확인한다.

3. 쿠버네티스를 설치해준다.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

마찬가지로 GPG 키를 등록해준다.

echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list

레포지토리도 등록해준다.

apt-get update -y
apt-get install kubelet kubeadm kubectl -y

업데이트 이후 필요한 것을 설치한다. 위 모든 과정은 마스터 + 워커에게 모두 해주어야 한다.

4. 마스터 설정

kubeadm init  --pod-network-cidr=192.168.100.0/24 --apiserver-advertise-address=192.168.100.X

kubeadm init를 통해 마스터를 설정해준다. 이 때에 대역은 내 마스터의 대역을 따라야한다.

You can now join any number of machines by running the following on each node
as root:
kubeadm join --token

제대로 설정이 되면 토큰이 생기는데 이 토큰을 추후를 위해 메모해둔다.

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

kubectl이 하라는대로 명령어를 입력하고 nodes가 떳는지 확인해본다.

NAME          STATUS     ROLES     AGE       VERSION
master   NotReady   master    14m       v1.15.3

안떠있는데 이유는 컨테이너 네트워크 인터페이스가 설정되어 있지 않아서이다. 버전에 맞는 CNI를 설정해준다. 나는 이거 썼다.

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

pod들을 확인하여 pending 상태인지 확인하고 전부 run이 뜨면 nodes의 상태를 확인해본다.

root@master:~# kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-etcd-zcn8f                          1/1     Running   0          30m

간이 조금 걸리므로 기다렸다가 확인한다.

root@master:~# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
master      Ready    master   35m   v1.15.3

4. worker들을 설정한다. 간단하다. 

kubeadm join --token

worker에게 가서 token을 입력한 다음에 successfully가 뜨는 것을 확인한다.

This node has joined the cluster:
* Certificate signing request was sent to master and a response
  was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.

master에게 간 후 nodes를 확인하면 잘 떠있는 것을 알 수 있다.

root@master:~# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
master      Ready    master   37m   v1.15.3
worker001   Ready    <none>   30m   v1.15.3
worker002   Ready    <none>   28m   v1.15.3