
최근 멀티 클라우드 환경에서 Kubernetes를 활용하는 방법을 익히기 위해 여러 실습을 진행 중이다. 직접 클러스터를 구성하면서 내부 동작을 깊이 이해하는 것이 중요하다고 느꼈다.
이 글에서는 EC2 인스턴스를 생성하고, Docker와 Kubernetes를 설치하여 마스터 노드를 구성하는 과정을 정리한다.
EC2 서비스로 이동Ubuntu 22.04 LTS 선택t3.medium (CPU 2개, RAM 4GB)t3.medium을 선택했다.)인스턴스가 실행되면, 아래 명령어를 사용하여 SSH로 접속한다.
ssh -i <키_파일.pem> ubuntu@<EC2_퍼블릭_IP>
Kubernetes를 설치하기 전에 먼저 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 설치 완료! 터미널을 다시 실행하세요."
아래 명령어를 실행하여 Docker가 정상적으로 설치되었는지 확인한다.
docker --version
docker run hello-world
#!/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
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
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
네트워크 플러그인 설치 후 확인
kubectl get pods -n kube-system
설치가 제대로 완료되었는지 확인하려면 다음 명령어를 실행한다.
docker --version
docker run hello-world
✅ Docker 버전이 출력되고, hello-world 컨테이너가 정상 실행되면 설치 성공
kubectl version --client
kubectl get nodes
✅ kubectl version --client 실행 시 클라이언트 버전이 출력되면 정상
✅ kubectl get nodes 실행 시 마스터 노드가 Ready 상태이면 정상
kubectl get pods -n kube-system
✅ calico 관련 Pod들이 Running 상태라면 정상
이제 EC2 인스턴스를 삭제해도 AMI 이미지를 사용하여 동일한 환경을 빠르게 복원할 수 있다.
이 실습을 통해 Kubernetes의 기본 설정, 네트워크 플러그인의 중요성, 컨테이너 런타임 설정에 대해 좀 더 깊이 이해할 수 있었다. 다음 포스팅에서는 워커 노드를 추가하고, 마스터 노드와 연결하는 과정을 다룬다.