※쿠버네티스의 설치 및 실행까지의 목적을 가짐
1.쿠버네티스 설치 환경
※참조 : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
| 구분 | 설명 | 비고 |
| HOST OS | Ubuntu 22.04.3 LTS (x64) | 6.2.0-36-generic |
| kubeadm | v1.28.2 | |
| kubectl | Client : v1.28.2 | Server : v1.28.3 |
| kubelet | v1.28.2 | |
| containerd | containerd 1.7.2 | |
| 마스터 노드 설정 | IP 대역 :192.168.75.10 ~ 192.168.75.19 (NAT) | 4(2x2) Processors, 8G RAM |
| 워커 노드 설정 | IP 대역 : 192.168.75.100 ~ 192.168.75.110 (NAT) | 2(2x1) Processors, 2G RAM |
2.설치 과정
1) OS 설정 (마스터노드 / 워커노드 공통 설정)
※쿠버네티스는 리소스 자원을 구분하여 활용하기에, 하드디스크 용량을 가상의 메모리처럼 이용하는 'swap memory' 기능이 활성화된 경우에는 장애가 발생할 수 있으므로 비활성화 설정
# swap memory off
sudo swapoff -a
# reboot 시, 재활성화가 되지 않도록 설정 #swap 기능 주석 처리
sudo vi /etc/fstab
/swapfile > #/swapfile
#재부팅 시에도 유지되도록 설정
cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
#재부팅 없이 적용kube
sudo sysctl --system
#또 다른 방식
SOURCE_FILE="/etc/sysctl.conf"
LINE_INPUT="net.bridge.bridge-nf-call-iptables = 1"
grep -qF "$LINE_INPUT" "$SOURCE_FILE" || echo "$LINE_INPUT" | sudo tee -a "$SOURCE_FILE"
sudo echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward
sudo modprobe overlay
sudo modprobe br_netfilter
#값 확인
cat /proc/sys/net/ipv4/ip_forward
※쿠버네티스 apt 리포지터리 이용을 위한 환경 구성
#apt update 및 쿠버네티스 apt 리포지터리 이용 패키지 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
#구글 클라우드의 공개 서명키 다운로드
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
#위의 명령어가 안되는 경우, 아래의 명령어 이용
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
#쿠버네티스 apt 리포지터리 추가
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
#apt 패키지 update 후 kubeadm, kubectl, kubelet을 설치 후 버전 고정
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
#아래 명령어 꼭 기억하자. 안 했다가, kube-apiserver 계속 중지됨
sudo kubeadm config images pull
※컨테이너 런타임 설치 (ubuntu 22.04에서는 기본 지원)
#기존 컨테이너 런타임 도구는 docker CRI를 이용하였으나 1.24부터 변경
#containerd / https://github.com/containerd/containerd/blob/main/docs/getting-started.md
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
2) 마스터노드 설정
※아래의 명령어를 통해 클러스터 삭제 시 OS 설정 값도 삭제됨으로, 재설정이 필요함
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd/
※클러스터 생성
#클러스터 생성
kubeadm init
#생성 후 나온 결과 값 중 마스터 노드와 워커 노드에서 실행될 명령어가 표시됨

※아래의 명령어는 마스터 노드에서 수행
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
※CLI 설정
- 컨테이너 관리 시, Docker에서 지원하는 CLI를 사용하지 않으므로 CLI 설정이 필요
- Containerd 사용을 명시적으로 설정
#config 파일 생성
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
#config.toml 파일 내 아래의 false 값을 true로 변경
#Containerd를 명시적으로 runtime 도구로 이용하겠다고 설정
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = false > true
※CNI 설치
- 컨테이너 간 네트워킹을 제어할 수 있는 플러그인으로 다양한 종류가 존재하며, Weave net 이용
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
3) 워커노드 설정
※아래의 명령어를 워커 노드에서 실행하여, 마스터 노드를 지정
kubeadm join 192.168.75.10:6443 --token j7za4g.4k9nr2dxroi6qkdn \
--discovery-token-ca-cert-hash sha256:597a331970073ae2c8fb3af2fa0dee7ae1dd998ccbe36571b078873360426821


4) 워커노드 추가
※ 지금까지 설정한 워커노드를 복제하여, 워커노드를 추가한다.
- 마스터 노드에 'join' 과정을 수행하고, IP 및 Host를 변경
#join을 위한 토큰 정보를 잊었다면, 아래의 명령어로 확인
sudo kubeadm token create --print-join-command


5) hosts 설정
※원활한 테스트 진행을 위해 hosts 정보를 추가
#/etc/hosts
192.168.75.10 master1.test.com
192.168.75.100 worker1.test.com
192.168.75.110 worker2.test.com
3.에러 처리
※ OS 설정이 잘못된 경우로, OS 설정 값을 재설정해준다.

※ 아래 메시지는 다양한 원인으로 발생한다.

- 서버 설정, 권한 리소스 부족
> 마스터 노드는 4processors cores를 최소 사양 실행, 리소스 부족으로 api-server가 중단된 현상이 발생
- 추가적으로 '/etc/containerd/config.toml' 설정이 필요
> CLI 도구를 명시적으로 '무엇'을 사용하는지 설정이 필요
#config 파일 생성
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
#config.toml 파일 내 아래의 false 값을 true로 변경
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = false > true
※kube-apiserver가 중단되는 원인을 제거하였더니, 이제 pod가 실행되지 않음
- 이제 Pod 설치 및 실행을 수행하여 문제를 해결해보자.

'기초 공부 > 시스템' 카테고리의 다른 글
| [kubernetes] Trivy를 이용한 이미지 점검 (1) | 2024.08.16 |
|---|---|
| [Kubernetes] Kubernetes 설치 (ubuntu 22.04/Containerd/Flannel) (0) | 2024.02.15 |
| [Docker] Docker 기본 명령어 (Docker? 도커?) (0) | 2023.06.15 |
| [Docker] Docker 설치 (feat.Rocky Linux 9.1) (0) | 2023.06.09 |
| [Linux] Rocky Linux 9.1 설치 (feat.DNF) (0) | 2023.05.02 |