티스토리 뷰
반응형
쿠버네티스 실습: YAML 매니페스트로 Nginx 배포하기
앞선 글에서는 kubectl create 명령으로 Deployment와 Service를 직접 만들었습니다. 하지만 운영 환경에서는 이런 방식보다는 YAML 매니페스트 파일을 작성해 선언적으로 리소스를 관리하는 게 표준입니다.
이번 글에서는 동일한 Nginx 배포를 YAML로 정의하고, 적용/수정/삭제하는 과정을 실습합니다.
1) 왜 YAML 매니페스트인가?
- kubectl create는 임시성입니다. 명령으로 만든 리소스를 수정하려면 다시 긴 옵션을 입력해야 합니다.
- YAML은 **쿠버네티스 오브젝트의 상태(Desired State)**를 코드로 기록합니다.
- Git에 보관할 수 있어 **GitOps, IaC(인프라 코드화)**를 구현할 수 있습니다.
즉, 운영자 입장에서는 리소스를 사람이 기억하는 대신 코드로 관리하는 게 핵심입니다.
2) Deployment 매니페스트 작성
nginx-deployment.yaml 파일을 작성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-nginx
labels:
app: hello-nginx
spec:
replicas: 2
selector:
matchLabels:
app: hello-nginx
template:
metadata:
labels:
app: hello-nginx
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
설명
- apiVersion: 쿠버네티스 API 그룹. Deployment는 apps/v1.
- kind: 리소스 종류. 여기서는 Deployment.
- metadata: 리소스 이름(hello-nginx)과 라벨.
- replicas: 동일 Pod 개수(=2).
- selector: 어떤 라벨을 가진 Pod를 관리할지 정의.
- template: Pod 템플릿. (여기서 nginx:1.27 이미지와 80포트 노출)
3) Service 매니페스트 작성
반응형
nginx-service.yaml 파일을 작성합니다.
apiVersion: v1
kind: Service
metadata:
name: hello-nginx-svc
spec:
type: NodePort
selector:
app: hello-nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
설명
- kind: Service → Pod 묶음을 외부에서 접근할 수 있는 고정 엔드포인트 제공.
- type: NodePort → 로컬 환경에서 외부 접근을 허용.
- selector → 라벨이 app=hello-nginx인 Pod를 찾음.
- ports
- port: 서비스 내부 포트(고정)
- targetPort: Pod 컨테이너가 열고 있는 포트(nginx:80)
- nodePort: 노드에서 열릴 실제 포트(30080)
4) 리소스 생성하기
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
적용 확인:
kubectl get pods
kubectl get svc
예상 출력:
NAME READY STATUS RESTARTS AGE
hello-nginx-7d59c7cfcf-abc12 1/1 Running 0 20s
hello-nginx-7d59c7cfcf-def34 1/1 Running 0 20s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-nginx-svc NodePort 10.96.245.143 <none> 80:30080/TCP 20s
5) 서비스 접속 검증
방법 A (자동 URL 제공)
minikube service hello-nginx-svc
방법 B (수동 접속)
curl -I http://$(minikube ip):30080
정상 응답 예시:
HTTP/1.1 200 OK
Server: nginx/1.27.x
6) 수정과 롤링 업데이트
Deployment에서 replicas: 2를 replicas: 3으로 수정한 뒤, 다시 적용합니다.
kubectl apply -f nginx-deployment.yaml
kubectl get pods
Pod가 자동으로 1개 더 추가되는 걸 확인할 수 있습니다.
롤링 업데이트 동작 구조
- 새 ReplicaSet을 생성 → 새 Pod 띄우기 → 기존 Pod 줄이기
- 다운타임 없이 새로운 버전 배포 가능
7) 삭제(정리)
kubectl delete -f nginx-deployment.yaml
kubectl delete -f nginx-service.yaml
8) 정리
- kubectl create는 빠르게 체험용,
- YAML 매니페스트(apply -f)는 재현 가능하고 운영 친화적.
- Deployment와 Service를 함께 정의하면 언제든지 클러스터에 동일한 앱을 재배포할 수 있다.
다음 글에서는 ConfigMap과 Secret을 활용해 Nginx에 사용자 정의 설정 파일을 주입하는 실습을 진행하겠습니다.
쿠버네티스,YAML매니페스트,Minikube,DevOps,컨테이너,Nginx배포,NodePort,Pod,ReplicaSet,서비스노출
'project > 맥미니로 시작하는 쿠버네티스' 카테고리의 다른 글
| 쿠버네티스 실습: Redis 배포와 NestJS 애플리케이션 연동 (0) | 2025.08.27 |
|---|---|
| 쿠버네티스 실습: StatefulSet으로 PostgreSQL 배포하기 (PVC 연동) (0) | 2025.08.26 |
| 쿠버네티스 실습: PersistentVolume과 PersistentVolumeClaim으로 데이터 저장하기 (0) | 2025.08.25 |
| 쿠버네티스 실습: ConfigMap과 Secret으로 환경 설정 관리하기 (0) | 2025.08.22 |
| 쿠버네티스 첫 걸음: 맥미니에서 로컬 클러스터 시작하기 (Minikube + kubectl 완전 실습) (0) | 2025.08.20 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- node.js
- JAX
- 생성형AI
- SEO최적화
- 개발블로그
- rag
- Redis
- Prisma
- Python
- 딥러닝
- REACT
- ai철학
- seo 최적화 10개
- nextJS
- CI/CD
- 백엔드개발
- 쿠버네티스
- flax
- Docker
- 웹개발
- PostgreSQL
- Next.js
- LangChain
- DevOps
- Express
- JWT
- NestJS
- fastapi
- kotlin
- llm
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
글 보관함
반응형

