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 등을 설정해야 외부에서 접근할 수 있다.