Kubernetes Command line

SIMWOOHYUN·2025년 5월 15일
post-thumbnail

Kubernetes 완전 가이드

1. 쿠버네티스란?

Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화해주는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.
Google이 개발하고 CNCF(Cloud Native Computing Foundation)에 기부하여 현재는 다양한 클라우드 벤더에서 사용되고 있습니다.


2. 쿠버네티스의 핵심 구성요소

📦 2.1 Pod (포드)

  • 컨테이너의 최소 단위
  • 하나 이상의 컨테이너가 함께 묶여 실행됨
  • 동일한 네트워크 네임스페이스를 공유
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
      ports:
        - containerPort: 80

🚀 2.2 Deployment

  • 포드의 선언적 업데이트 및 관리
  • 포드를 자동으로 롤링 업데이트하거나 롤백 가능
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: mycontainer
          image: nginx:1.24

📡 2.3 Service

  • 포드들의 집합에 대한 지속적인 접근점
  • 로드 밸런싱 기능 제공

Service 종류

  • ClusterIP: 클러스터 내부에서만 접근 가능
  • NodePort: 노드의 IP와 지정된 포트를 통해 접근
  • LoadBalancer: 클라우드 환경에서 외부 IP 제공
  • ExternalName: 외부 도메인으로 트래픽을 프록시
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30007

🗃️ 2.4 Volume

  • 컨테이너가 재시작되더라도 유지되는 데이터 저장소
  • 여러 종류 지원: emptyDir, hostPath, NFS, PVC 등
apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
    - name: app
      image: busybox
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      emptyDir: {}

⚙️ 2.5 ConfigMap & Secret

  • 환경 변수, 설정 파일 등을 외부화
  • Secret은 민감 정보 저장용
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  APP_ENV: production

3. 쿠버네티스 클러스터 구조

[ Master Node ]
 ├── API Server
 ├── Scheduler
 └── Controller Manager

[ Worker Node ]
 ├── Kubelet
 ├── Kube Proxy
 └── Container Runtime (Docker, containerd 등)

4. 실제 쿠버네티스 사용 예시

📦 4.1 포드 배포

kubectl apply -f my-pod.yaml

🔍 4.2 포드 상태 확인

kubectl get pods
kubectl describe pod my-pod

🔄 4.3 롤링 업데이트

kubectl set image deployment/my-deploy mycontainer=nginx:1.25

↩️ 4.4 롤백

kubectl rollout undo deployment/my-deploy

5. 업데이트 & 복구

✔️ 롤링 업데이트

  • 서비스 중단 없이 점진적으로 새 버전으로 변경
kubectl rollout status deployment/my-deploy

❌ 문제가 생겼을 때 롤백

kubectl rollout undo deployment/my-deploy

📌 전략 설정 (Recreate, RollingUpdate)

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1

6. Persistent Volume (PV) & Persistent Volume Claim (PVC)

✅ PV (실제 저장소 정의)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

✅ PVC (사용자가 요청)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

7. 쿠버네티스에서 컨테이너 다루기

Docker와의 관계

  • Docker는 쿠버네티스에서 사용할 수 있는 Container Runtime 중 하나
  • 최근에는 containerd가 더 많이 사용됨

쿠버네티스의 컨테이너 실행 방식

  • 모든 컨테이너는 포드 안에 존재
  • 쿠버네티스는 포드 단위로 스케줄링

8. 쿠버네티스 클러스터 실습 환경

도구설명
Minikube로컬 쿠버네티스 클러스터
kindDocker 컨테이너 기반 클러스터
k3s경량 쿠버네티스 배포
GKE, EKS, AKS클라우드 기반 쿠버네티스 서비스

9. 보너스: kubectl 명령어 모음

# 클러스터 상태 확인
kubectl cluster-info

# 포드 목록 조회
kubectl get pods

# 서비스 목록 확인
kubectl get svc

# 디플로이 롤아웃 상태
kubectl rollout status deployment/my-deploy

# 로그 확인
kubectl logs my-pod

# 포드 쉘 접속
kubectl exec -it my-pod -- /bin/bash

10. 참고 링크

0개의 댓글