Cloud Architect 꿈꾸기

Cloud Computing/Kubernetes

Kubernetes 환경 세팅

HwanJae 2021. 1. 7. 17:01

처음 Kubernetes를 사용해보기 위해서 간단하게 환경 구축을 해주겠다.

가상 머신 내부에서 돌리기 위해 Vagrant를 통해 가상 환경을 구축해주고 내부에 kubernetes를 설치하겠다.

먼저 가상머신을 만들 Vagrantfile부터 만들겠다.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.hostname = "master"
  config.vm.network "private_network", ip: "192.168.111.110"
  config.vm.synced_folder ".", "/home/vagrant/sync", disabled: true
  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 2
    vb.memory = 2048
  end
end

vagrant를 통해 ssh에 접속했으면 도커와 쿠버네티스를 설치하겠다.

 

1. docker 설치 과정

vagrant@master:~$ sudo su
root@master:/home/vagrant# cd
root@master:~# apt update
root@master:~# apt upgrade


#3 도커 설치 및 설정
root@master:~# apt install docker.io -y
root@master:~# usermod -a -G docker vagrant
root@master:~# service docker restart
root@master:~# chmod 666 /var/run/docker.sock

root@master:~# docker version

k8s 설치 과정

https://kubernetes.io/ko/docs/tasks/tools/install-kubectl/

 

kubectl 설치 및 설정

쿠버네티스 커맨드 라인 도구인 kubectl을 사용하면, 쿠버네티스 클러스터에 대해 명령을 실행할 수 있다. kubectl을 사용하여 애플리케이션을 배포하고, 클러스터 리소스를 검사 및 관리하며 로그

kubernetes.io

3. swap memory off

쿠버네티스는 메모리 스왑을 고려하지 않고 설계했기 때문에 노드를 사용할 머신들은 swap 메모리를 비활성화 해주어야한다.

vagrant@master:~$ sudo swapoff -a

재부팅시에 초기화 되기 때문에 다음 명령어를 커맨드라인에 입력해서 완전히 비활성화 시킨다.

vagrant@master:~$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

4. br_netfilter 모드 활성화와 bridge-nf-call-iptables 활성화

vagrant@master:~$ sudo modprobe br_netfilter

vagrant@master:~$ sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
vagrant@master:~$ sudo sysctl --system

 

5. 쿠버네티스 설치

vagrant@master:~$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
vagrant@master:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
vagrant@master:~$ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
vagrant@master:~$ sudo apt-get update
vagrant@master:~$ sudo apt-get install -y kubelet kubeadm kubectl
vagrant@master:~$ sudo apt-mark hold kubelet kubeadm kubectl

6. 가상머신 복제

워커 노드로 이용할 두 개의 가상 머신을 사용하기 위해 만들어둔 가상 머신을 중지시키고 완전한 복제를 한다.

워커 노드는 총 두 개를 사용하기 때문에 woker-node01과 worker-node02를 만들어주었다.

 

7. 워커 노드 ip 설정

각 가상머신을 기동시킨 후 먼저 이름을 변경해준다.

vagrant@master:~$ sudo su
root@master:~$ hostnamectl set-hostname node01

다음으로 ip설정의 차례이다.

root@master:~$ vi /etc/netplan/50-vagrant.yaml

node01은 192.168.111.111을, node02는 192.168.111.112를 사용하겠다.

설정 이후 reboot 를 통해 재시작 해준다.

 

8. master 노드를 실행시켜 ping 확인

네트워크 설정이 잘 이루어졌는지 확인하기 위해 master 노드를 기동시켜 ping을 확인한다.

node1과 node2 모두 정상적으로 통신이 이루어지는 것을 확인할 수 있다.

 

9. 클러스터 생성

이제 master 노드에 클러스터를 구축해줄 차례이다.

kubeadm init을 실행하면 kube-apiserver, scheduler 등이 설치되는데 CNI 네트워크 대역과 겹치는 것을 피하기 위해 옵션을 주어 ip를 살짝 바꿔준다.

vagrant@master:~$ sudo kubeadm init \
--apiserver-advertise-address="192.168.111.110" \
--apiserver-cert-extra-sans="192.168.111.110" \
--node-name "master" \
--pod-network-cidr=172.16.0.0/16

설치가 끝나면 두 가지 명령어가 제공된다.

클러스터의 접속 정보 설정이기 때문에 위의 명령어는 마스터에, 아래의 명령어는 각 노드에 적어서 join 시킨다.

추가가 완료되었으면 master 노드상에서 join된 노드를 확인할 수 있다.

kubectl get nodes

만약 클러스터 설치 과정에서 문제가 발생하면 

# kubernetes 초기화
kubeadm reset
systemctl restart kubelet

iptables에 있는 데이터를 리셋하기 위해 재부팅
reboot 

을 통해 청소하고 init을 다시해준다.

 

10. CNI (Container Network Interface) 설치

쿠버네티스의 클러스터를 제어하기 위한 네트워크 플러그인으로 Control-Plane을 설치하는데

쿠버네티스가 지원하는 CNI중 Calico를 설치하려 한다.

curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml

설치가 완료되면 아래와 같이 Running 상태가 된 것을 볼 수 있다.

kubectl get po -n kube-system

 

 

 

 

3. minikube 설치 과정 (지움)

https://kubernetes.io/ko/docs/tasks/tools/install-minikube/

root@ubuntu:~# curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
root@ubuntu:~# mkdir -p /usr/local/bin/
root@ubuntu:~# install minikube /usr/local/bin/

 

kubernetes의 클러스터를 시작하는 명령어는

minikube start

를 통해 실행 가능하다.

minikube의 실행 중지와 삭제는

minikube stop
minikube delete

를 통해 실행 가능하다.

'Cloud Computing > Kubernetes' 카테고리의 다른 글

Kubernetes Object - ConfigMap, Secret  (0) 2021.01.13
Kubernetes Object - Volume  (0) 2021.01.12
Kubernetes Object - Service  (0) 2021.01.12
Kubernetes Object - Pod, Label, Node Schedule  (0) 2021.01.12
Kubernetes 시작하기  (0) 2021.01.11