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)