PromleeBlog
sitemap
aboutMe

posting thumbnail
쿠버네티스 실습 YAML로 Nginx 배포하기 - DevOps 컨테이너에서 클러스터까지 5편
Kubernetes Hands-on Deploying Nginx with YAML - DevOps from Containers to Clusters Part 5

📅

🚀

들어가기 전에 🔗

지난 시간에는 kubectl create deployment라는 명령어를 사용해 Nginx Pod를 간단히 만들어보았습니다.
이 방식은 빠르고 편리하지만, 어떤 설정으로 만들었는지 기록이 남지 않고, 나중에 수정하거나 다른 사람과 공유하기 어렵다는 단점이 있습니다.

그래서 실제 현업에서는 거의 모든 쿠버네티스 리소스를
YAML
이라는 텍스트 파일로 작성하여 관리합니다.
이것을
선언적(Declarative) 방식
이라고 부릅니다.
마치 "Nginx Pod 3개를 만들어줘" 라고 명령하는 대신, "Nginx Pod 3개가 있는 상태가 내가 원하는 최종 상태야" 라고 적힌 설계도를 쿠버네티스에 제출하는 것과 같습니다.

이번 시간에는 쿠버네티스의 설계도인 YAML 파일을 직접 작성하는 방법을 배우겠습니다.
4편에서 배운 Deployment와 Service를 YAML 파일로 정의하여 Nginx 웹 서버를 배포하고, 외부에서 접속할 수 있도록 노출시키는 전체 과정을 차근차근 실습해보겠습니다.

🚀

YAML: 쿠버네티스에게 보내는 설계도 🔗

YAML(야믈)은 사람이 읽고 쓰기 쉬운 데이터 형식입니다.
쿠버네티스는 우리가 YAML 파일에 "원하는 상태"를 적어서 제출하면, 현재 상태를 파악해서 그 차이만큼을 알아서 작업해줍니다.

모든 쿠버네티스 YAML 파일은 크게 4가지 공통된 구조를 가집니다.

YAML to Kubernetes
YAML to Kubernetes

🚀

Deployment YAML로 Pod 생성하기 🔗

이제 Nginx Pod 3개를 실행하는 Deployment를 YAML 파일로 직접 만들어 보겠습니다.

프로젝트 폴더에 nginx-deployment.yaml 파일을 만들고 아래 내용을 입력해주세요.
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

이제 이 설계도를 쿠버네티스에 제출할 차례입니다.
터미널에서 아래 명령어를 실행해주세요.
kubectl apply -f nginx-deployment.yaml
apply 명령어는 YAML 파일의 내용대로 클러스터의 상태를 만들거나 업데이트해줍니다.

kubectl get pods 명령어로 확인해보면, nginx-deployment-로 시작하는 Pod 3개가 성공적으로 실행되고 있는 것을 볼 수 있습니다.

🚀

Service YAML 🔗

Pod를 3개나 띄웠지만, 아직 외부에서는 이 Pod들에 접속할 방법이 없습니다.

이제 Service 리소스를 만들어 외부와 통하는 문을 열어주겠습니다.
Service는 어떤 종류의 문을 열어줄지에 따라 몇 가지 타입이 있습니다.


우리는 Minikube 환경에서 실습 중이므로, 외부 접속이 가장 간편한 NodePort 타입을 사용하겠습니다.

nginx-service.yaml 파일을 새로 만들고 아래와 같이 작성합니다.
nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

YAML 파일을 작성했으면 똑같이 apply 명령어로 적용합니다.
kubectl apply -f nginx-service.yaml
Minikube 환경에서는 아래 명령어를 통해 우리가 만든 서비스에 바로 접속할 수 있는 URL을 얻을 수 있습니다.
minikube service nginx-service
이 명령어를 실행하면 자동으로 웹 브라우저가 열리면서 "Welcome to nginx!" 페이지가 나타날 것입니다.

🚀

ConfigMap으로 Nginx 설정 바꾸기 (선택) 🔗

만약 Nginx의 기본 설정이 아닌 우리만의 설정을 적용하고 싶다면 어떻게 해야 할까요?

이때
ConfigMap
Volume
을 사용할 수 있습니다.
ConfigMap은 설정 파일을 저장하는 곳이고, Volume은 그렇게 저장된 파일을 Pod 안으로 가져오는 방법입니다.

먼저, /custom 경로로 접속하면 다른 메시지를 보여주는 nginx.conf 파일을 만듭니다.
그리고 kubectl create configmap 명령어로 ConfigMap을 생성하고, Deployment YAML에 volumesvolumeMounts를 추가하여 Pod에 적용할 수 있습니다.

이 내용은 심화 과정이므로, 쿠버네티스가 설정 파일을 어떻게 다루는지 궁금하신 분들은 공식 문서를 참고하여 직접 도전해보시는 것을 추천합니다.

🚀

결론 🔗

오늘은 쿠버네티스를 다루는 표준 방식인
YAML
파일 작성법을 배웠습니다.

명령어로 하나씩 리소스를 만드는 대신, nginx-deployment.yamlnginx-service.yaml이라는 두 개의 설계도를 작성했습니다.
kubectl apply라는 단 하나의 명령어로 설계도에 적힌 그대로 Nginx Pod 3개를 배포하고, NodePort 타입의 Service를 통해 외부 세상에 서비스를 안전하게 노출시키는 데 성공했습니다.

다음 시간에는 여기서 한 걸음 더 나아가, 트래픽에 따라 Pod의 개수를 자동으로 조절하거나, 애플리케이션을 중단 없이 업데이트하는 등 쿠버네티스의 고급 활용법에 대해 알아보겠습니다.

참고 🔗