Kubernetes 설치 및 설정

Master Node 1대, Worker Node 다수로 구성된 Kubernetes 환경을 구축 한다.


1. 구성 환경

Role OS Ver. Docker Ver. Kubernetes Ver.
Master Node 1 ubuntu 14.04.6 LTS 18.06.1 v1.14.1
Worker Node 1 ubuntu 14.04.6 LTS 18.06.1 v1.14.1
Worker Node 2 ubuntu 14.04.6 LTS 19.03.5 v1.14.1
Worker Node 3 ubuntu 14.04.6 LTS 18.06.1 v1.14.1

*각 Worker Node 구성의 수행방법은 동일


2. Node 공통 설치

2-1. 필수 설치

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

2-2. Docker 설치

$ curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add -
$ sudo add-apt-repository \
"deb \[arch=amd64\] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) \
$(lsb\_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
$ sudo usermod -aG docker $USER

Docker 상태 확인

$ docker ps
CONTAINER ID IMAGE  COMMAND  CREATED  STATUS PORTS  NAMES

2-3. Kubernetes 설치

$ curl -s [https://packages.cloud.google.com/apt/doc/apt-key.gpg](https://packages.cloud.google.com/apt/doc/apt-key.gpg) | sudo apt-key add
$ sudo add-apt-repository "deb [https://apt.kubernetes.io/](https://apt.kubernetes.io/) kubernetes-$(lsb\_release -cs) main"
$ sudo apt-get update
$ sudo apt-get install kubelet=1.14.1-00 kubeadm=1.14.1-00 kubectl=1.14.1-00 

3. Master Node 구성

$ kubeadm init
$ kubectl get nodes
NAME              STATUS   ROLES    AGE    VERSION
masternode01      Ready    master   6d5h   v1.14.1
$ kubeadm token create –ttl 0
$ kubeadm token list
TOKEN                     TTL         EXPIRES   USAGES                   DESCRIPTION   EXTRA GROUPS
AAAAAAAAAAAAA   <forever>   <never>   authentication,signing   <none>        system:bootstrappers:kubeadm:default-node-token
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
ABCABCABCABCABC

Cluster join을 위해 token 이 필요하며, 최초 생성된 token은 만료기간이 있으므로 재생성 작업을 수행한다.


4. Worker Node 구성

$ sudo kubeadm join 192.168.0.1:6443 --token AAAAAAAAAAAAA \
--discovery-token-ca-cert-hash sha256:ABCABCABCABCABC

token과 hash는 바로 위에서 생성된 값을 사용한다.
(Master Node 수행)

$ kubectl get nodes
NAME              STATUS   ROLES    AGE    VERSION
masternode01      Ready    master   6d5h   v1.14.1
workernode01      Ready    worker   6d4h   v1.14.1
workernode02      Ready    worker   5d3h   v1.14.1
workernode03      Ready    worker   2d5h   v1.14.1

5. Toubleshooting

5-1. ERROR Swap

5-1-1. 증상

(Worker Node)

$ sudo kubeadm join 192.168.0.1:6443 --token AAAAAAAAAAAAA \
--discovery-token-ca-cert-hash sha256:ABCABCABCABCABC
[preflight] Running pre-flight checks
    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
$ free
total        used        free      shared  buff/cache   available
Mem:       16318240      564132    14961060      106056      793048    15306024
Swap:      16671740           0    16671740
$ cat /proc/swaps
Filename                Type        Size    Used    Priority
/dev/sda3               partition    16671740    0    -2

5-1-2. 조치

Kubernetes가 swap를 관리하므로, filesystem에 적용된 swap을 off 시킨다.

$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^/#/' /etc/fstab
$ sudo systemctl mask dev-sda3.swap
$ sudo reboot

fstab을 별도로 관리하였으면 swap이 기술된 UUID를 주석처리 한다.
재기동 시에도 swap off를 적용하기 위해 swap unit을 mask하여 비활성화 한다. (dev-파티션명.swap)

'Kubernetes' 카테고리의 다른 글

Kubernetes Persistent Volume 구성 - nfs  (0) 2020.02.12
Kubernetes Dashboard 설치  (3) 2020.02.12

+ Recent posts