EC2에 Docker와 Kubernetes 설치 (마스터 노드 구성)

y001·2025년 3월 9일
post-thumbnail

1. 왜 이 실습을 하는가?

최근 멀티 클라우드 환경에서 Kubernetes를 활용하는 방법을 익히기 위해 여러 실습을 진행 중이다. 직접 클러스터를 구성하면서 내부 동작을 깊이 이해하는 것이 중요하다고 느꼈다.
이 글에서는 EC2 인스턴스를 생성하고, Docker와 Kubernetes를 설치하여 마스터 노드를 구성하는 과정을 정리한다.


2. EC2 인스턴스 생성

2.1 EC2 인스턴스 생성 방법

  1. AWS 콘솔 접속EC2 서비스로 이동
  2. 인스턴스 시작 버튼 클릭
  3. AMI 선택: Ubuntu 22.04 LTS 선택
  4. 인스턴스 유형 선택: t3.medium (CPU 2개, RAM 4GB)
    (처음에는 더 적은 메모리를 가진 인스턴스를 선택했지만, Kubernetes 설치 과정에서 메모리 부족 오류가 발생했다. API 서버가 정상적으로 실행되지 않거나 네트워크 플러그인이 동작하지 않는 문제가 있었기 때문에, 최소한의 리소스를 확보하기 위해 t3.medium을 선택했다.)
  5. 스토리지 설정: 30GB
  6. 보안 그룹 설정:
    • SSH(22) 포트 열기: 내 IP로 제한
    • Kubernetes API (6443) 포트 열기: 마스터-워커 노드 간 통신을 위해 필요
    • 노드 간 통신 포트(10250, 10255, 30000-32767) 오픈
  7. 키 페어 생성 및 다운로드: SSH 접속을 위해 필요
  8. 인스턴스 시작 클릭

2.2 SSH로 EC2 접속

인스턴스가 실행되면, 아래 명령어를 사용하여 SSH로 접속한다.

ssh -i <키_파일.pem> ubuntu@<EC2_퍼블릭_IP>

3. Docker 설치

Kubernetes를 설치하기 전에 먼저 Docker를 설치해야 한다.

3.1 Docker 설치 스크립트 실행

아래 스크립트를 실행하여 Docker를 설치한다.

#!/bin/bash

# 필수 패키지 설치
sudo apt update -y
sudo apt install -y ca-certificates curl gnupg lsb-release

# 기존 Docker 저장소 및 GPG 키 삭제 (오류 방지)
sudo rm -rf /etc/apt/sources.list.d/docker.list
sudo rm -rf /etc/apt/keyrings/docker.gpg

# GPG 키 추가 및 저장소 설정
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker 설치
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Docker 서비스 활성화 및 시작
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager

# 현재 사용자를 Docker 그룹에 추가 (sudo 없이 사용 가능)
sudo usermod -aG docker $USER

# 설치 확인
docker --version && echo "[SUCCESS] Docker 설치 완료! 터미널을 다시 실행하세요."

3.2 설치 확인

아래 명령어를 실행하여 Docker가 정상적으로 설치되었는지 확인한다.

docker --version
docker run hello-world

4. Kubernetes 설치 및 마스터 노드 초기화

4.1 Kubernetes 설치

#!/bin/bash

# 필수 패키지 설치
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl

# Kubernetes GPG 키 추가 및 저장소 설정
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo tee /etc/apt/keyrings/kubernetes-apt-keyring.asc > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.asc] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null

# Kubernetes 패키지 설치
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl  # 자동 업데이트 방지

# Swap 비활성화
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

# Containerd 설정
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable --now containerd

4.2 마스터 노드 초기화

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 | tee kubeadm-init.log

클러스터가 정상적으로 초기화되면 다음을 실행한다.

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

4.3 네트워크 플러그인 설치 (Calico)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

네트워크 플러그인 설치 후 확인

kubectl get pods -n kube-system

5. 설치 확인

설치가 제대로 완료되었는지 확인하려면 다음 명령어를 실행한다.

5.1 Docker 확인

docker --version
docker run hello-world

✅ Docker 버전이 출력되고, hello-world 컨테이너가 정상 실행되면 설치 성공

5.2 Kubernetes 설치 확인

kubectl version --client
kubectl get nodes

kubectl version --client 실행 시 클라이언트 버전이 출력되면 정상
kubectl get nodes 실행 시 마스터 노드가 Ready 상태이면 정상

5.3 네트워크 플러그인 확인

kubectl get pods -n kube-system

calico 관련 Pod들이 Running 상태라면 정상


6. 마무리

이제 EC2 인스턴스를 삭제해도 AMI 이미지를 사용하여 동일한 환경을 빠르게 복원할 수 있다.
이 실습을 통해 Kubernetes의 기본 설정, 네트워크 플러그인의 중요성, 컨테이너 런타임 설정에 대해 좀 더 깊이 이해할 수 있었다. 다음 포스팅에서는 워커 노드를 추가하고, 마스터 노드와 연결하는 과정을 다룬다.

0개의 댓글