우분투 18.04에 쿠버네티스 설치

우분투 18.04에 쿠버네티스 설치

다음 명령어는 master 노드와 worker(slave) 노드 모두 설치한다.

단, 몇 개 명령어 제외

Kubernetes Installaion

이 글에서는 2개의 worker (slave) 노드와 한 개의 master 노드로 쿠버네티스를 설치한다.

Step 1 : 도커 설치

1
$ sudo apt install docker.io

설치 후 도커 버전 확인

1
$ docker --version

Step 2 : 도커 활성화

1
$ sudo systemctl enable docker

Step3 : Kubernetes signing key 추가

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

— 만약 Curl 이 설치되지 않았다면?

1
$ sudo apt install curl

Step 4 : Xenial Kubernetes Repository 추가

1
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

Step 5 : Kubeadm 설치

1
$ sudo apt install kubeadm

apt install로 설치가 안될 시 :

1
$ sudo snap install kubeadm --classic

설치 후 kubeadm 버전 확인

1
$ kubeadm version

Step 6 : Kubelet 설치

1
$ sudo snap install kubelet --classic

Kubernetes Deployment

Step 1 : swap memory 비활성화

swap memory를 사용하는 시스템에서는 kubernetes 가 제대로 작동하지 않는다.

1
$ sudo swapoff -a

Step 2 : 각 노드에 hostname 부여

master 노드

1
$ sudo hostnamectl set-hostname master-node

Worker (slave) 노드

1
$ sudo hostnamectl set-hostname slave-node

Step 3 : Kubernetes 초기화

master 노드

1
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

[ERROR Port-10250] Port 10250 is in use

1
$ sudo kubeadm reset

####[preflight] WARNING: ebtables not found in system path

####[preflight] WARNING: ethtool not found in system path

1
$ sudo apt install ebtables ethtool
1
2
3
4
5
6
7
8
9
10
$ sudo vim /etc/docker/daemon.json

{
	"exec-opts" : ["native.cgroupdriver=systemd"],
	"log-driver" : "json-file",
	"log-opts": {
		"max-size":"100m"
	},
	"storage-driver" : "overlay2"
}

기타 ..error 발생시 (추천하지 않음)

1
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all

이 명령어는 다소 시간이 걸린다.

명령어 실행이 끝나면 ‘kubeadm join …….. ‘ 이라는 결과가 나온다.

이를 기록해라

cluster를 시작하기 위해 다음의 명령어를 입력해야한다.

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

모든 과정을 끝낸 후에 다음의 명령어로 master 노드의 상태를 확인할 수 있다.

1
$ kubectl get nodes

결과값을 보면 master 노드의 상태가 “not ready” 인 것을 볼 수 있다.

master 노드에 아직 pod가 배치되지 않았기 때문에 컨테이너 네트워크 인터페이스가 비어 있기 때문이다.

Step 4 : 마스터 노드를 통해 Pod Network 배포

Pod network는 네트워크의 노드들 사이의 통신 수단이다.

해당 블로그에서는 cluster에 “flannel pod network”를 사용한다.

1
$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

다음 명령어를 통해 네트워크 상태를 볼 수 있다.

1
$ kubectl get pods --all-namespaces

이후에 다시 노드의 상태를 확인하면, master 노드의 상태가 “Ready” 인 것을 볼 수 있다.

1
1
$ sudo kubectl get nodes

Step 5 : 클러스터를 구성하기 위해 네트워크에 worker (slave) 노드 추가

Worker (slave) 노드

master 노드에서 ‘kubeadm init’ 명령어를 실행 후 나온 결과값을 입력한다.

1
$ kubeadm join ....

그 후 다음 명령어로 노드의 상태를 확인할 수 있다.

1
1
$ sudo kubectl get nodes

두 개의 Worker (slave) 노드와 한 개의 mater 노드가 모두 “running” 상태 인 것을 볼 수 있다.


master 노드가 아닌 worker (slave) 노드에서 kubectl 명령어를 사용하면 다음과 같은 오류가 난다.

The connection to the server localhost:8080 was refused

kubectl 명령어는 master 노드에서만 사용할 수 있다. 다른 노드에서 kubectl 명령어를 사용하려면 master 노드에서 생성한 admin.conf 파일을 복사해 온 후 다음 명령어를 입력하면 된다.

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

출처

https://vitux.com/install-and-deploy-kubernetes-on-ubuntu/

https://kubernetes.io/docs/setup/independent/troubleshooting-kubeadm/

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04

https://github.com/kubernetes/kubeadm/issues/1145

https://medium.com/htc-research-engineering-blog/install-a-kubernetes-cluster-with-kubeadm-on-ubuntu-step-by-stepff-c118514bc5e0

https://www.ibm.com/support/knowledgecenter/ko/SSBS6K_2.1.0.3/troubleshoot/kubelet_fails.html

https://www.oops4u.com/2360

https://kubernetes.io/ko/docs/setup/cri/