- Published on
5단계: YAML 구성 요소 익히기
Kubernetes 리소스를 정의하는 YAML
- 모든 K8s 리소스(Pod, Deployment, Service 등)는 선언형 YAML로 정의
- 기본 구조:
apiVersion: v1 or apps/v1
kind: 리소스 종류 (Pod, Deployment 등)
metadata:
name: 리소스 이름
spec:
(리소스별 구성 내용)
주요 리소스 예시
(1) Pod
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myapp
image: nginx
(2) Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
(3) Service
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
실습: nginx 앱을 YAML로 배포
kubectl apply -f my-nginx-deploy.yaml
kubectl apply -f my-nginx-svc.yaml
kubectl get all
요약
- Kubernetes는 YAML 기반 선언형 방식으로 리소스를 정의한다.
- Pod → Deployment → Service 흐름을 명확히 이해하는 것이 중요하다.
kubectl apply
를 통해 변경 사항을 재적용할 수 있다.
심화학습
Q1: Deployment에서 replicas
항목은 실제로 어떤 역할을 하는가?
A: 동일한 Pod를 몇 개 유지할지를 지정한다. ReplicaSet이 이 개수를 자동으로 유지하도록 관리한다.
Q2: Pod과 Deployment의 관계는 어떻게 연결되어 있는가?
A: Deployment는 ReplicaSet을 통해 Pod를 생성하고 관리하며, Pod는 Deployment의 템플릿(spec.template)에 따라 생성된다.
Q3: Service가 없는 Pod는 외부에서 접근 가능한가?
A: 기본적으로 불가능하다. Service를 통해 접근 포트를 노출하거나 Ingress 등을 설정해야 외부에서 접근할 수 있다.