우아한 프로그래밍
article thumbnail

1. 호스트네임 변경 (Master, Worker 동일)

<code />
# Ubunto 기준 sudo vi /etc/hostname # 파일이 열리며 원하는 이름으로 수정

호스트 네임은 아래 클러스터 Name으로 사용되니 잘 설정하도록 하자

주의점은 클러스터가 구성된 이후 hostname을 변경하면 노드의 상태를 조회해오지 못해서 Status가 NotReady로 표시되니 주의 하도록 하자

2. Swap 메모리 비활성화 (Master, Worker에 각각 수행)

<code />
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

쿠버네티스를 설치할 때 "sudo swapoff -a" 명령어를 사용하여 스왑 메모리를 비활성화 하는 이유는 주로 성능 및 안정성과 관련이 있습니다. 스왑 메모리는 물리적인 RAM이 부족할 때 운영체제가 디스크 공간을 가상 메모리로 사용하는데, 이는 일반적으로 성능을 저하시킬 수 있습니다.쿠버네티스는 대규모 분산 시스템을 관리하기 위한 도구이며, 이런 환경에서는 안정적인 메모리 사용이 매우 중요합니다.

스왑 메모리를 사용하는 경우 디스크 I/O가 높아질 수 있고, 이는 애플리케이션 및 쿠버네티스 컴포넌트 간의 통신에 영향을 미칠 수 있습니다.

또한, 쿠버네티스의 일부 컴포넌트들은 메모리 요구 사항이 높을 수 있어 스왑 메모리를 사용하는 것보다는 더 많은 물리적인 RAM이 확보되는 것이 선호됩니다. 스왑 메모리를 비활성화하면 물리적인 메모리를 더 효율적으로 사용할 수 있어 성능이 향상되고 안정성이 개선될 수 있습니다.

따라서 쿠버네티스 설치 전에 스왑 메모리를 비활성화하는 것이 권장되는데, 이는 쿠버네티스 환경에서 안정적이고 최적화된 성능을 보장하기 위한 조치 중 하나입니다.

3. 쿠버네티스 설치전 세팅 (Master, Worker에 각각 설치)

<code />
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF

4. kubeadm, kubelet, kubectl 설치 (Master, Worker에 각각 설치)

<code />
sudo apt update # 인증키 다운로드 sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg 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 sudo apt-get update #쿠버네티스 패키지 설치 sudo apt install -y kubeadm kubelet kubectl #패키지가 자동으로 설치, 업그레이드, 제거되지 않도록 hold함. sudo apt-mark hold kubelet kubeadm kubectl # 설치 완료 확인 kubeadm version kubelet --version kubectl version

5. Calico CNI로 클러스터 생성 ( Master 실행)

<code />
# 클러스터 초기화 sudo kubeadm init --pod-network-cidr=192.168.0.0/16 # 사용자 계정에서 kubectl 명령어를 사용하기 위한 설정 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 클러스터 참여 관련 스크립트 복사 # CNI 설치 kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml # 확인 kubectl get nodes

6. Flannel CNI로 클러스터 생성 ( Master 실행)

<code />
# 클러스터 초기화 sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.2.10 # 사용자 계정에서 kubectl 명령어를 사용하기 위한 설정 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 클러스터 참여 관련 스크립트 복사 # CNI 설치 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 확인 kubectl get nodes

7. 클러스터 참여 (Worker 실행)

<code />
# 이미 설치되어 있는 경우초기화 후 실행 sudo kubeadm reset # 클러스터 참여 sudo kubeadm join 10.0.2.10:6443 --token wbd65g.7xwz0spgpjy3kxzw --discovery-token-ca-cert-hash sha256:e51044a97a3106c48cb0a19e4c21806da091454819beb60041953c570f30e8e9

8. 토큰 재생성 방법 (Master 실행)

<code />
kubeadm token create --print-join-command

9. 에러시 수행 해야 할 것들

<code />
# [ERROR CRI]: container runtime is not running 발생 시 수행 (보류) # sudo rm /etc/containerd/config.toml # sudo systemctl restart containerd # The connection to the server 10.0.2.10:6443 was refused - did you specify the right host or port? # [ERROR CRI]: container runtime is not running 발생 시 수행 # 6443 refused, apiserver, proxy, flannel crashbackoff 관련 오류 해결 방법 sudo containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml sudo service containerd restart sudo service kubelet restart
profile

우아한 프로그래밍

@자바조아!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!