반응형

참고사이트: https://computingforgeeks.com/install-kubernetes-cluster-ubuntu-jammy/

 

1. 인프라 준비

인프라 환경은 Hyper-V를 활용하여 master node 1대, worker 노드 2대로 구성한다.

  • 네트워크: 가상 스위치 관리자에서 외부 네트워크 브릿지를 생성한다. (k8s-bridge-switch)

  • Master Node : 8core, 16G Ram, 80G Hdd, 192.168.1.50 IP Address, Ubuntu 22.04 Server
  • Worker Node 1 : 16core, 32G Ram, 100G Hdd, 192.168.1.51 IP Address, Ubuntu 22.04 Server
  • Worker Node 2 : 16core, 32G Ram, 100G Hdd, 192.168.1.52 IP Address, Ubuntu 22.04 Server

 

2. Ubuntu Server업그레이드 (Master, Worker 노드 모두 필요)

다음과 같이 업데이트를 해준다

$sudo apt update
$sudo apt -y full-upgrade
$sudo reboot -f

 

3. kubelet, kubeadm, kubectl 설치 (Master, Worker노드 모두 필요)

다음과 같이 kubenetes관련 프로그램을 설치한다

$sudo apt install curl apt-transport-https -y
$curl -fsSL  https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/k8s.gpg
$curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

$sudo apt update
$sudo apt install wget curl vim git kubelet kubeadm kubectl -y
$sudo apt-mark hold kubelet kubeadm kubectl

다음과 같이 설치된 버전을 확인한다.

$kubectl version --client && kubeadm version

 

4. Swap 비활성화 및 커널모듈 설정 (Master,Worker노두 모두 필요)

다음과 같이 swap 을 비활성화 한다.

$sudo swapoff -a

/etc/fstab에서 swap.img에 대한 부분을 주석 처리 한다. (swam.img 라인 앞에 # 추가)

overlay, br_netfilter에 대해서 커널 모듈을 활성화 시킨다

$sudo modprobe overlay
$sudo modprobe br_netfilter

커널 모듈에 대한 k8s설정

$sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

sysctl에 설정 추가 및 Reload

$sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

$sudo sysctl --system

 

5. Container Runtime 설치 (Master, Worker 노드 모두 필요)

Container실행을 위한 Container Runtime을 생성한다. 이번 포스팅에서는 CRI-O만 설명한다. Docker, Containerd, CRI-O등에 대한 설명은 따로 포스팅하도록 하겠다.

 

CRI-O 리파지토리 설정

$sudo -i
#OS="xUbuntu_22.04"
#VERSION=1.24
#echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
#echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
#curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
#curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -

CRI-O 설치 및 서비스

#apt update
#apt install cri-o cri-o-runc

#systemctl daemon-reload
#systemctl restart crio
#systemctl enable crio
#systemctl status crio

 

6. Control plane 초기화

kubelet을 활성화 시킨다.

$sudo systemctl enable kubelet

필요한 컨테이너 이미지를 가져온다

$sudo kubeadm config images pull

host설정 /etc/hosts파일에 makster, worker등에 대한 호스트 정보를 설정한다. 다음은 호스트 파일 설정 예이다

192.168.1.50    k8-master.cluster.local k8s-master
192.168.1.51    k8-worker1.cluster.local k8s-worker1
192.168.1.52    k8-worker2.cluster.local k8s-worker2

Cluster를 생성한다. 

$sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --upload-certs --control-plane-endpoint=k8-master.cluster.local

최종적으로 다음의 메시지가 나오면 성공한 것이다.

출력결과에 나온 것처럼 .kube/config에 대하여 설정한다.

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

kubectl로 클러스터 정보를 확인한다.

$kubectl cluster-info

 

7. Network plugin 설정

Network plugin을 설정한다. Network plugin은 여러가지가 있으나, calico를 사용하도록 한다.

$ curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
$ kubectl apply -f calico.yaml

 

8. Worker Node 조인

worker1노드의 host를 6의 호스트 설정과 동일하게 설정한다

192.168.1.50    k8-master.cluster.local k8s-master
192.168.1.51    k8-worker1.cluster.local k8s-worker1
192.168.1.52    k8-worker2.cluster.local k8s-worker2

kubeadm init할때 나왔던 join 명령어를 worker node에서 실행한다.

$sudo kubeadm join k8-master.cluster.local:6443 --token 72jelc.q9gi7g1n7ifm80q7 \
    --discovery-token-ca-cert-hash sha256:aa7fbed16aca6379166b81c4ba75f4ff01d619493b2be2541ca4395211cb14ab

master노드에서 다음의 명령어로 join여부를 확인한다

$kubectl get nodes

 

Worker2도 동일하게 join하고 $kubectl get nodes하게 되면 다음과 같이 나오게 된다.

반응형
Posted by alias
,