서론
쿠버네티스(Kubernetes)는 현대 소프트웨어 개발과 운영에서 필수적인 도구로 자리 잡았습니다. 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화할 수 있어 개발자와 운영팀 모두에게 많은 이점을 제공합니다. 이번 포스팅에서는 초보자도 쉽게 따라할 수 있도록 간단한 애플리케이션을 쿠버네티스에 배포하는 실습을 진행합니다. 실습을 통해 쿠버네티스의 기본 개념과 명령어 사용법을 익히게 될 것입니다.
본론
사전 준비
애플리케이션을 배포하기 전에 필요한 도구와 환경을 준비해야 합니다.
- 쿠버네티스 클러스터: 로컬 환경에서는 Minikube 또는 Docker Desktop을 사용하여 쿠버네티스 클러스터를 실행할 수 있습니다. 클라우드 환경에서는 GKE, EKS, AKS와 같은 관리형 쿠버네티스 서비스를 이용할 수 있습니다.
- kubectl: 쿠버네티스 클러스터를 제어하는 CLI 도구입니다. kubectl 설치 가이드를 참고하여 설치합니다.
간단한 애플리케이션 배포
이번 실습에서는 간단한 Nginx 웹 서버 애플리케이션을 배포합니다. Nginx는 가볍고 널리 사용되는 웹 서버로, 쿠버네티스 배포 실습에 적합합니다.
1. 디플로이먼트 파일 작성
먼저, Nginx 웹 서버를 배포하기 위한 디플로이먼트 YAML 파일을 작성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
이 파일은 Nginx 웹 서버를 3개의 복제본(replica)으로 배포하는 디플로이먼트를 정의합니다. 각 컨테이너는 nginx:1.14.2
이미지를 사용하고, 포트 80을 엽니다.
2. 디플로이먼트 생성
작성한 YAML 파일을 사용하여 디플로이먼트를 생성합니다.
kubectl apply -f nginx-deployment.yaml
이 명령어를 실행하면 쿠버네티스 클러스터에 Nginx 디플로이먼트가 생성됩니다.
3. 디플로이먼트 상태 확인
디플로이먼트가 정상적으로 생성되었는지 확인합니다.
kubectl get deployments
이 명령어는 현재 네임스페이스의 모든 디플로이먼트를 조회합니다. Nginx 디플로이먼트가 실행 중임을 확인할 수 있습니다.
kubectl get pods
이 명령어는 생성된 파드를 조회합니다. Nginx 디플로이먼트에 의해 생성된 3개의 파드가 모두 실행 중인지 확인합니다.
4. 서비스 파일 작성
이제 Nginx 웹 서버에 외부에서 접근할 수 있도록 서비스를 정의합니다.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
이 서비스 파일은 Nginx 디플로이먼트를 선택하고, 외부 트래픽을 포트 80에서 받아 Nginx 파드의 포트 80으로 전달합니다. type: LoadBalancer
는 클라우드 환경에서 외부 IP 주소를 할당받아 서비스에 접근할 수 있게 합니다. 로컬 환경에서는 NodePort를 사용할 수 있습니다.
5. 서비스 생성
작성한 YAML 파일을 사용하여 서비스를 생성합니다.
kubectl apply -f nginx-service.yaml
이 명령어를 실행하면 쿠버네티스 클러스터에 Nginx 서비스가 생성됩니다.
6. 서비스 상태 확인
서비스가 정상적으로 생성되었는지 확인합니다.
kubectl get services
이 명령어는 현재 네임스페이스의 모든 서비스를 조회합니다. Nginx 서비스가 실행 중임을 확인할 수 있습니다.
7. 애플리케이션 접근
클라우드 환경에서는 서비스에 할당된 외부 IP 주소를 통해 Nginx 웹 서버에 접근할 수 있습니다.
kubectl get services
이 명령어를 실행하여 Nginx 서비스의 외부 IP 주소를 확인한 후, 웹 브라우저에서 해당 IP 주소로 접속합니다.
로컬 환경에서는 Minikube의 경우 다음 명령어를 사용하여 서비스에 접근할 수 있습니다.
minikube service nginx-service
이 명령어는 웹 브라우저를 열고, Nginx 웹 서버 페이지를 표시합니다.
YAML 파일 이해하기
이번 실습에서 사용한 YAML 파일의 각 부분을 자세히 살펴보겠습니다.
디플로이먼트 파일
apiVersion
: 쿠버네티스 API 버전을 지정합니다. 디플로이먼트는apps/v1
버전을 사용합니다.kind
: 생성할 리소스의 유형을 지정합니다. 여기서는Deployment
입니다.metadata
: 리소스의 이름과 라벨을 정의합니다.spec
: 디플로이먼트의 원하는 상태를 정의합니다.replicas
: 파드의 복제본 수를 정의합니다.selector
: 디플로이먼트가 관리할 파드를 선택하는 라벨을 정의합니다.template
: 생성할 파드의 템플릿을 정의합니다.containers
: 파드 내의 컨테이너를 정의합니다. 각 컨테이너의 이름, 이미지 및 포트를 설정합니다.
서비스 파일
apiVersion
: 쿠버네티스 API 버전을 지정합니다. 서비스는v1
버전을 사용합니다.kind
: 생성할 리소스의 유형을 지정합니다. 여기서는Service
입니다.metadata
: 리소스의 이름을 정의합니다.spec
: 서비스의 원하는 상태를 정의합니다.selector
: 서비스가 노출할 파드를 선택하는 라벨을 정의합니다.ports
: 서비스의 포트를 정의합니다.type
: 서비스의 유형을 정의합니다.LoadBalancer
는 외부 IP 주소를 할당받아 서비스에 접근할 수 있게 합니다.
결론
이번 포스팅에서는 쿠버네티스에 간단한 애플리케이션을 배포하는 실습을 진행했습니다. Nginx 웹 서버를 디플로이먼트와 서비스로 구성하여 쿠버네티스 클러스터에 배포하고, 외부에서 접근하는 방법을 학습했습니다. YAML 파일의 구조와 각 구성 요소를 이해함으로써, 쿠버네티스의 기본 원리를 파악할 수 있었습니다. 이를 바탕으로 실무에서 더욱 복잡한 애플리케이션을 배포하고 관리하는 데 도움이 되기를 바랍니다.