개발자 블로그를 위한 세걸음
기본적인 서버 구성이 완료되었고 블로그를 위한 작업을 한 발자국 더 나아가도록 하겠습니다. 이번에는 Ubuntu 서버에 Kubernates(이하 쿠버네티스) 설치입니다. 쿠버네티스 이외에도 여러가지 서비스 방법이 있지만, 중요하게 생각한 관점은 경제성에 포함된 노동력을 생각해 '내가 적게 일하면서 많은 것을 자동화하기' 이었습니다.

Kubernates 설치

컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장 및 운영하는 오픈 소스입니다. 클러스터 기반으로 여러 서버에 컨테이너를 분배하는....
라는 내용인데, 간단하게 "확장이 자유로운 규격화된 가상화를 운영하는 플랫폼" 이라 요약하고 넘어가도록 하겠습니다. 또한 쿠버네티스의 공식 자격증인 CKA의 내용이 2025년 1월을 기준으로 helm이 시험내용에 포함되는 필수적인 도구로 자리잡았기 때문에 helm을 활용하고 아래에서 간략하게 설명 드리겠습니다.

OS설치 후 패키지를 설치하거나 변경된 설정이 없는 초기 상태로 진행했습니다.
1.swap 제거
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
2.kubernetes용 네트워크 설정
# 1. Ensure the modules are loaded on boot
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 2. Load the necessary kernel modules immediately
sudo modprobe overlay
sudo modprobe br_netfilter
# 3. Set up sysctl parameters for Kubernetes networking
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 4. Apply the sysctl settings
sudo sysctl --system
3.containerd 설치
# Docker repository 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# containerd 설치
sudo apt-get update
sudo apt-get install -y containerd.io
# containerd 설정 및 재시작
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
# 설정값 수정
#default값 변경
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# config.toml 파일에서 SystemdCgroup 설정값 확인 및 변경 🔥
# SystemdCgroup 값이 false 라면 true 로 변경해야 함 🔥
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# containerd.service 변경사항 적용
sudo systemctl restart containerd
4.kubernetes 설치
# kubenetes keyring 추가
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# kubenetes 레포지토리 추가
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
# kube 설치
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
5.kubernetes 초기화
#아이피 주의!! 이전 포스팅에서 스태픽으로 고정한 아이피 입력
kubeadm init --apiserver-advertise-address=192.168.0.100 --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///run/containerd/containerd.sock
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6.control-plane 테인트 제거
# 온프레미스 단일서버로 구축했기 때문에 설정
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
7.helm 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
8.cilium 설치
#helm 레포추가
helm repo add cilium https://helm.cilium.io/
helm repo update
# 아이피 주의
# kube-proxy 대신 strict 사용을 위해 kubeProxyReplacement=true
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=192.168.0.100 \
--set k8sServicePort=6443
kubectl patch deployment cilium-operator -n kube-system -p '{"spec": {"replicas": 1}}'
# 레플리카 수 변경 # 클러스터가 단일노드로 구성될 경우 1/2로 표기되므로..
9.kubernetes 설치확인
kubectl get nodes
kubectl get all -A

본 쿠버네티스 설치 방법은 쿠버네티스 공식 설치방법인 kubeadm을 통한 설치 방법이며, 단일 서버에서 클러스터로 구성되는 설치입니다. 기존에 경량 또는 테스트 용도로 사용되는 k3s나 kubespray 등의 설치방법에 비해 추후 확장 가능성과 범용성에서 보다 나은 선택이라 생각했습니다.
Helm이란?
Helm은 쿠버네티스 환경에서 애플리케이션을 더 쉽고, 빠르게 배포하고 관리할 수 있도록 도와주는 패키지 매니저입니다.
쿠버네티스로 많은 서비스를 배포하거나 관리할 때 효율적인 방법이 필요했고 이때 등장하는 도구가 'Helm' 입니다. 쿠버네티스의 차트(chart)라는 패키지 형식을 사용하여 애플리케이션 배포를 단순화하는 도구입니다.
여기서 차트를 공유할 수 있고 받을 수도 있습니다. 심지어 각 서비스들의 공식 사이트에서 차트를 작성하여 공유해주기도 하고, 업데이트에 맞추어 차트의 최신화해주기도 합니다.
주요 기능
- 애플리케이션 배포 간소화:
복잡한 쿠버네티스 YAML 파일을 관리하지 않고도 Helm 차트를 통해 애플리케이션을 배포할 수 있습니다. - 버전 관리:
애플리케이션 배포의 버전을 기록하고, 쉽게 업그레이드하거나 롤백할 수 있습니다. - 공유 가능한 패키지:
다른 사용자와 차트를 공유하거나, 오픈소스 차트를 활용하여 빠르게 배포를 시작할 수 있습니다.
애플리케이션 배포를 단순화하고 운영 및 관리를 줄이는 데 큰 도움이 되며, 다양한 오픈소스 차트와 함께 사용할 수 있어 높은 생산성을 제공합니다. 쿠버네티스를 효율적으로 활용하고 싶다면 Helm을 사용을 적극적으로 권장합니다.