kubernetes 설치하기

mhlee·2021년 5월 25일
0

1. 들어가기

virtual box를 이용해서 kubernetes 설치를 합니다.
master node (1EA)
worker node (2EA)
ubuntu 18.04

2. virtual box 설정

MAC 주소 생성 정책

VM을 생성할때 혹은 생성후 아래와 같이 MAC주소 정책에 "모든 네트워크 어댑터의 새 MAC 주소 생성"옵션을 주어야 한다.

NAT 네트워크 생성

vm 인스턴스간 통신을 위해, 아래와 같이 NAT 네트워크를 생성한다.
파일 > 환경설정으로 이동하여, 네트워크 탭에서 우측의 + 버튼 아이콘을 눌러 네트워크를 생성한다.

3. 인스턴스 설정

vm 네트워크 설정

3개의 vm에 ubuntu 18.04를 설치한다.
각각의 인스턴스의 환경설정에서 네트워크 정보를 아래와 같이 변경한다.
3개의 vm들이 서로 통신하기 위한 NAT 네트워크 설정이다.

vm host name 변경

각각의 인스턴스의 이름을 변경하자.
master, work1, work2 이렇게 설정한다.

[master, work1, work2] 노드에서 실행

sudo vi /etc/hostname
-> vm에 각각 hostname을 입력

swap 사용하지 않도록

k8s를 설치하려면 swap이 off되어야 한다.
k8s가 서버의 성능을 극단적으로 사용하기 위해 만들어졌다고 한다.
즉, swap이 발생하지 않는 선에서 최고의 성능을 사용하기 위함이라고 한다.
아래 명령을 사용하여, swap을 사용하지 않도록 설정한다.

[master, work1, work2] 노드에서 실행

sudo swapoff -a  

# 재부팅후에도 swap을 사용하지 않도록 하기 위해서..
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

4. docker 설치

이제 준비가 끝났다.
k8s는 docker 기반으로 동작하니 당연히 docker를 설치한다.

[master, work1, work2] 노드에서 실행

sudo apt install docker.io -y

5. kubernetes 설치

이제 k8s를 설치하자.
아래 공식 홈페이지 install 설명의 debian 패키지를 참조한다.
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

[master, work1, work2] 노드에서 실행

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

각각의 vm에 kubelet, kubeadm, kubectl이 설치되었다.

6. kubernetes 초기화 & node join

이제 마스터노드에서 init을 수행하자.

[master] 노드에서만 실행

sudo kubeadm init

3~5분정도 소요되니 천천히 기다리자.

정상적으로 종료되었다면 아래와 같은 화면이 보일것이다.
만약 에러에 Please disable swap이라는 내용이 표시된다면 swap disable이 되지 않은것이니 swap을 설정을 다시 수행한다.
(이창은 일단 닫지말고, 이대로 유지하자)

메세지 상단에 보면 일반 유저로 실행하라는 명령이 있다.
마스터 노드의 일반유저로 아래 명령을 수행한다.

[master] 노드의 일반유저(로그인유저) 실행

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

정상적으로 명령을 수행했다면 node 상태를 조회해 본다.

[master] 노드의 일반유저(로그인유저) 실행

kubectl get node

아직 worker노드가 join하지 않았으니, master 노드만 보일것이다.

다시, kubeadmin init을 수행했던 터미널창 하단을 보자.
kubeadm join 10.0.2.15:63443 --token fkjalfdjalk --discovery ...이러한 메세지가 보일것이다.

이 부분을 복사해서 worker노드에서 수행한다. 이때 root의 권한이 있어야 한다.

[work1, work2] 노드의 root권한으로 실행

kubeadm join 10.0.2.15:6443 --token 10py4f.w3vmj6mievenvzov \
	--discovery-token-ca-cert-hash sha256:066eb910dfa59572fd1b28a2796e90f2dc492a0e9e4efc6ccf68f71b5910c1a0
-> 이건 예시이고, 실제 수행한 결과에 나온 명령행을 실행해야 합니다.

이제 다시 node 상황을 알아보자.
이제 master와 work1, work2 총 3개의 node가 보일것이다.

[master] 노드의 일반유저로 실행

kubectl get node

7. kubernetes 네트워크 설정

kubectl get node로 노드 상황을 알아보면, STATUS값이 모두 "NotReady"인것을 알수 있다.
네트워크 애플리케이션이 설치되지 않았기 때문이다.
아래 weave.works의 문서를 참조해서 weave net을 설치한다. (마스터 노드에서 실행)
https://www.weave.works/docs/net/latest/kubernetes/kube-addon/

[master] 노드의 일반유저로 실행

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

정상적으로 수행되었다면, STATUS가 Ready로 변경된것을 확인할수 있다.
변경되는데 조금 시간이 걸릴수 있으니, 여전히 NotReady라면 잠시 시간여유를 두고 조회해 보자.

8. nginx 테스트

정상적으로 k8s가 설치되었다면 nginx를 실행해보자.

kubectl run nginx --image=nginx

아래 명령을 실행하면 pod(컨테이너로 이해하자) 상황을 볼수 있다.
nginx가 실행된것을 확인할수 있다.

kubectl get pod

마지막으로 port forwarding을 설정해준다.
(컨테이너가 기동되는데, 약간 시간이 걸릴수 있다.)

kubectl port-forward nginx 8080:80

그리고 브라우저에서 localhost:8080으로 접속해보자.
nginx 페이지가 열리면 정상적으로 접속된것이다.

profile
삽질하는 개발자

0개의 댓글