우아한 프로그래밍
article thumbnail

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

# Ubunto 기준
sudo vi /etc/hostname

# 파일이 열리며 원하는 이름으로 수정

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

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

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

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

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

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

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

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

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

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

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

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

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

# 클러스터 초기화 
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

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

# 클러스터 초기화
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

클러스터 참여 (Worker 실행)

# 이미 설치되어 있는 경우초기화 후 실행
sudo kubeadm reset

# 클러스터 참여
sudo kubeadm join 10.0.2.10:6443 --token wbd65g.7xwz0spgpjy3kxzw      --discovery-token-ca-cert-hash sha256:e51044a97a3106c48cb0a19e4c21806da091454819beb60041953c570f30e8e9

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

kubeadm token create --print-join-command

에러시 수행 해야 할 것들

# [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

우아한 프로그래밍

@자바조아!

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