개발자 블로그를 위한 세걸음

개발자 블로그를 위한 세걸음

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

개발자 블로그를 위한 두걸음
블로그 호스팅 방향이 정해졌으니 블로그를 위한 작업을 한 걸음 더 나아가 보겠습니다. 서버를 당장 구매하기 보다는 이미 사용했던 컴퓨터에 이용해 서버로 구축해 보려고 합니다. 실제 운영중인 이 블로그는 포스팅 내용에 구축하는 서버에서 동작하고, 포스팅은 이전에 남겨두었던 기록과 스크린샷을 기반으로 작성됩니다. 개발자 블로그를 위한 첫걸음처음 “hello world”를 찍었을 때부터 언젠가는

Kubernates 설치

컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장 및 운영하는 오픈 소스입니다. 클러스터 기반으로 여러 서버에 컨테이너를 분배하는....

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

Releases
The Kubernetes project maintains release branches for the most recent three minor releases (1.32, 1.31, 1.30). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1.18 and older received approximately 9 months of patch support. Kubernetes versions are expressed as x.y.z, where x is the major version, y is the minor version, and z is the patch version, following Semantic Versioning terminology. More information in the version skew policy document.
💡
kubernetes의 최신 릴리즈는 1.32이고 Ubuntu 24.04에 설치합니다.
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)라는 패키지 형식을 사용하여 애플리케이션 배포를 단순화하는 도구입니다.

여기서 차트를 공유할 수 있고 받을 수도 있습니다. 심지어 각 서비스들의 공식 사이트에서 차트를 작성하여 공유해주기도 하고, 업데이트에 맞추어 차트의 최신화해주기도 합니다.

주요 기능

  1. 애플리케이션 배포 간소화:
    복잡한 쿠버네티스 YAML 파일을 관리하지 않고도 Helm 차트를 통해 애플리케이션을 배포할 수 있습니다.
  2. 버전 관리:
    애플리케이션 배포의 버전을 기록하고, 쉽게 업그레이드하거나 롤백할 수 있습니다.
  3. 공유 가능한 패키지:
    다른 사용자와 차트를 공유하거나, 오픈소스 차트를 활용하여 빠르게 배포를 시작할 수 있습니다.

애플리케이션 배포를 단순화하고 운영 및 관리를 줄이는 데 큰 도움이 되며, 다양한 오픈소스 차트와 함께 사용할 수 있어 높은 생산성을 제공합니다. 쿠버네티스를 효율적으로 활용하고 싶다면 Helm을 사용을 적극적으로 권장합니다.

Read more

푸름이세요? 아니요 구름인데요

푸름이세요? 아니요 구름인데요

클라우드 컴퓨팅(Cloud Computing) 이란? 클라우드 컴퓨팅은 IT 인프라를 손쉽게 관리할 수 있도록 도와주며, 확장성과 유연성을 제공하는 기술입니다. 물리적인 서버를 직접 구매하지 않아도 되며, 필요한 만큼의 자원을 사용하고 비용을 절감할 수 있다는 점에서 많은 기업과 개인이 활용하고 있습니다. 클라우드 서비스의 유형을 크게 세 가지 모델로 나눌 수 있습니다. 인프라스트럭처 서비스(

By hyobin
빔슬람(Vimslam)이 되보자

빔슬람(Vimslam)이 되보자

Vim이란? Vim은 서버에서 작업하는 사람들 사이에서 유용한 텍스트 편집기입니다. UNIX 시스템에서 표준 편집기였던 VI의 개선판으로 Vi Improved의 약자입니다. 그래서 대부분의 유닉스기반(리눅스를 포함한) 운영체재에 설치되어있고 작동합니다. Vim은 다음과 같은 특징을 갖고 있습니다. * 모드 기반 편집 Vim은 입력 모드와 명령 모드로 구분됩니다. 사용자는 명령 모드에서 편집, 삭제, 검색 등을 빠르게 할

By hyobin