Kubernetes에서의 좌충우돌: Control Plane 프로비저닝

발행: (2026년 5월 10일 AM 10:30 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

Google Kubernetes Engine(GKE)과 같은 관리형 플랫폼을 사용할 때는 플랫폼이 대신 처리해 주기 때문에 신경 쓸 필요가 없는 일들이 많이 있습니다. 하지만 그 단순한 겉면 아래에서 어떤 메커니즘이 작동하고 있는지 생각해 본 적이 있나요? 아마도 직접 해볼 수 있는 방법이나 최소한 시도해 볼 방법이 궁금했을지도 모릅니다.

제가 이 프로젝트를 시작한 동기는 간단했습니다. 직접 해보면서 쿠버네티스의 핵심을 진정으로 이해하고 싶었기 때문입니다. 관리형 서비스의 추상화를 넘어, 저는 레이어를 하나씩 벗겨 핵심 구성 요소를 살펴보기로 했습니다. 이 방법은 표준 Google Compute Engine(GCE) 가상 머신을 설정하고, 모든 구성 요소를 수동으로 설치·설정하며, 네트워킹을 직접 연결하는 과정을 포함합니다. 이러한 의도적인 직접 작업은 효과적인 문제 해결, 최적화 및 자체 클러스터를 더 잘 이해하는 데 필요한 기본 지식을 쌓는 데 도움이 됩니다.

전제 조건

  • Google Cloud Platform (GCP) 계정.
  • 로컬 머신에 설치되고 인증된 gcloud CLI.

Step 1 – Provision the Base Instance

우리는 “시드” 또는 기본 인스턴스를 만드는 것부터 시작합니다. 이 VM은 모든 필수 소프트웨어를 설치하는 기반이 되며, Kubernetes 노드/VM이 어떻게 구성되는지에 대한 명확한 템플릿을 제공합니다. E2 시리즈는 GCP에서 가장 비용 효율적인 VM을 제공하므로, Kubernetes 컨트롤 플레인에 적합한 성능‑대‑비용 균형을 위해 자주 선택됩니다. 우리는 Kubernetes가 최소 2 vCPU와 2 GB RAM을 편안히 실행하기 때문에 e2-standard-2 머신 타입을 사용합니다.

gcloud compute instances create k8s-seed \
    --zone=us-central1-a \
    --machine-type=e2-standard-2 \
    --image-project=ubuntu-os-cloud \
    --image-family=ubuntu-2204-lts \
    --boot-disk-size=50GB

생성된 후, 머신에 SSH 접속합니다:

gcloud compute ssh k8s-seed --zone=us-central1-a

Step 2 – Configure the OS

Kubernetes는 기본 Linux OS에 대한 특정 요구 사항이 있습니다. 커널 모듈을 로드하고 네트워크 설정을 조정하여 Kubernetes가 트래픽을 올바르게 조작할 수 있도록 해야 합니다.

1. Load Kernel Modules

이 모듈들은 Kubernetes가 Pod와 Service의 네트워크 트래픽을 조작할 수 있게 해 줍니다.

cat  /dev/null

2. Install containerd

sudo apt-get update
sudo apt-get install -y containerd.io

3. Configure systemd Cgroups

Kubernetes는 systemd를 cgroup 드라이버로 사용할 것을 권장합니다.

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd

단계 4 – Kubernetes 도구 설치

이제 “빅 쓰리”를 설치합니다:

  • kubeadm – 부트스트래퍼.
  • kubelet – 노드 에이전트.
  • kubectl – CLI.
# Add Kubernetes repo
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | \
    sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' | \
    sudo tee /etc/apt/sources.list.d/kubernetes.list

# Install
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

이제 기본 VM이 준비되어 추가 Kubernetes 부트스트래핑(예: kubeadm init으로 컨트롤 플레인 초기화)을 수행할 수 있습니다. 남은 단계—네트워킹 설정, 워커 노드 조인, 그리고 파드 네트워크 배포—를 진행하여 원시 GCE VM에서 완전하게 작동하는 자체 관리 Kubernetes 클러스터를 구축하십시오.

단계 5 – 클러스터 초기화

이 시점에서, 우리의 “시드” 머신은 완전히 준비되었습니다. 이제 이를 사용하여 컨트롤 플레인을 초기화합니다.

1. Init 실행

우리는 선택한 네트워킹 플러그인(Calico)과 호환되는 pod 네트워크 CIDR을 지정합니다.

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

2. Kubectl 구성

새 클러스터에 대해 명령을 실행하려면:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Step 6 – 네트워킹 설치 (Calico)

노드들은 컨테이너 네트워크 인터페이스(CNI)가 설치될 때까지 통신할 수 없습니다. 우리는 Calico를 사용할 것입니다.

Calico는 캡슐화나 오버레이 없이 배포함으로써 고성능 네트워킹을 제공하고, 유연한 네트워크 정책 적용을 위한 분산 방화벽을 제공합니다.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml

kubectl get nodes를 실행하세요; 1분 이내에 노드가 Ready 상태로 전환되는 것을 확인할 수 있습니다.

GKE만 사용했다면 어떨까요?

우리가 방금 한 작업을 이해하려면, 단일 Google Kubernetes Engine (GKE) 명령 하나로 완전 관리형, 프로덕션 수준의 동등한 환경을 구축할 수 있다는 점을 기억하세요:

gcloud container clusters create k8s-easy \
    --zone us-central1-a \
    --machine-type e2-standard-2 \
    --num-nodes 3

이 한 줄 명령은 제어 플레인을 프로비저닝하고(구글이 관리), 워커 노드를 생성하며, 네트워킹을 구성하고, 인증을 설정합니다. 일부를 수동으로 구축함으로써, 이제 이러한 구성 요소들이 어떻게 함께 작동하는지 이해하게 된 것입니다.

다음 단계는?

축하합니다! 이제 처음부터 기능적인 Kubernetes 제어 플레인을 성공적으로 구축했습니다.

클러스터를 “다소 어려운 방법”으로 구축함으로써 관리형 서비스의 사용자 수준을 넘어 현대 컨테이너화된 애플리케이션을 조정하는 구성 요소들을 이해하게 되었습니다. 이 기반은 프로덕션‑급 Kubernetes 환경을 문제 해결하고, 최적화하며, 확장하는 데 핵심입니다.

다음 단계:

  • 기존 클러스터에 워커 노드를 추가하세요.
  • Calico를 사용한 고급 네트워킹 정책을 탐색하세요.
  • 영구 스토리지, 모니터링 및 로깅 솔루션을 구현하세요.
  • RBAC, 감사 로깅 및 네트워크 정책으로 제어 플레인을 강화하세요.

참고: 우리는 apt-mark hold를 사용하여 자동 업데이트가 클러스터를 손상시키는 것을 방지합니다.

0 조회
Back to Blog

관련 글

더 보기 »