Record

[k8s] 쿠버네티스 resource 관리 본문

CS/클라우드

[k8s] 쿠버네티스 resource 관리

now-record 2026. 3. 3. 16:53
반응형

배포 전략 (Deployment Strategies)

Rolling Update (기본 전략)

  • 원리: 구버전 Pod를 하나씩 제거함과 동시에 신버전 Pod를 하나씩 생성하여 교체
  • 특징: 추가 자원이 거의 들지 않지만, 배포 중에는 구버전과 신버전이 공존
  • 실습 포인트: maxSurge(동시 생성 허용량)와 maxUnavailable(동시 삭제 허용량) 값을 통해 배포 속도를 조절 kubectl rollout undo로 즉시 이전 버전 복구가 가능
  •  
  • kubectl rollout undo deploy nginx-deploy

 

  1. Blue/Green Update

  • 원리: 신버전(Green)을 구버전(Blue)과 동일한 규모로 미리 다 띄워놓고, 서비스(LoadBalancer)의 selector를 수정해 트래픽을 한꺼번에 전환
  • 특징: 버전 간 혼선이 없고 롤백이 매우 빠르지만, 자원이 평소의 2배가 필요
  • 실습 포인트: Service YAML의 selector 라벨(version: blue → green)만 바꿔서 순식간에 서비스 주체를 바꾸는 것이 핵심

2. Canary Update

  • 원리: 신버전을 1~2개만 먼저 띄워 전체 트래픽의 일부만 유입시켜 테스트한 후, 문제가 없으면 점진적으로 늘림
  • 특징: 실사용자 환경에서 위험성을 최소화하며 테스트
  • 실습 포인트: 동일한 app: nginx 라벨을 가진 두 개의 Deployment(stable, canary)를 띄우고, 서비스가 라벨을 통해 두 그룹의 Pod 모두에게 트래픽을 나누어 보내게 만듬

오토스케일링 (Autoscaling)

부하량에 따라 Pod의 개수를 자동으로 늘리거나 줄여 자원 효율성을 높이는 기술

 

HPA (Horizontal Pod Autoscaler)

  • 핵심 조건: 반드시 Metrics Server가 설치되어 있어야 Pod의 상태(CPU/Memory)를 체크할 수 있
  • 동작: kubectl top pods로 확인되는 실시간 사용량이 설정한 목표치(예: CPU 50%)를 넘으면 replicas를 자동으로 증가
  • # metrics server install
    kubectl create -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    # metrics server 확인
    kubectl get apiserver v1beta1.metrics.k8s.io
  • # autoscale 설정
    kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  • kubectl run -i --tty load-generator --rm \
    --image=busybox --restart=Never \
    -- /bin/sh \
    -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
    If you don't see a command prompt, try pressing enter.
    OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!
    OK!OK!OK!OK!OK!OK!OK!OK!OK!....
    
    # 실행해둔 상태로 terminal 새로 열고 pod 개수 확인
    watch -n 1 kubectl get deploy, pod
    
    # 실행했던 내용 ctrl+c로 종료하고 scale-in 확인

 

Quota

1. 주요 역할 및 특징

  • 자원 독점 방지: 특정 네임스페이스가 클러스터의 CPU나 메모리를 과도하게 점유하는 것을 막음
  • 범위: 개별 Pod가 아닌 네임스페이스 전체의 합계를 기준으로 제한
  • 강제성: 설정된 할당량을 초과하는 리소스 생성 요청이 들어오면, 쿠버네티스 API 서버는 해당 요청을 거부(Forbidden)

2. 제한할 수 있는 항목 (Hard Limit)

  • 컴퓨팅 리소스: 모든 Pod의 requests.cpu, limits.memory 등의 총합.
  • 객체 개수: 네임스페이스 내에 생성할 수 있는 services, pods, replicationcontrollers 등의 최대 개수
# limit-01.yaml
apiVersion: v1
kind: Pod
metadata:
  name: demo-01
spec:
  containers:
  - name: demo-01
    image: polinux/stress
    resources:
      requests:
        memory: "300Mi"
      limits:
        memory: "600Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "650M", "--vm-hang","1"]

이건 pod에서 limit를 제한  / quota아님

# resource.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: memory-limit
  namespace: ns-quota
spec:
  hard:
    requests.memory: 1Gi
    limits.memory: 2Gi
    services: 3

quota 만듦 네임스페이스에 있는 pod의 메모리 총 2gb가 넘으면 안됌 

kubectl apply -f rs.yaml
replicaset.apps/demo-02 created

kubectl get pod -n ns-quota
No resources found in ns-quota namespace.

kubectl get rs -n ns-quota
NAME      DESIRED   CURRENT   READY   AGE
demo-02   3         0         0       25s

현재 pod가 3개 생성되고 있고 memory가 1gb씩 담당하고 있기 때문에 형성이 안됨 

 

kubectl apply -f rs.yaml
replicaset.apps/demo-02 configured

kubectl get rs,pod -n ns-quota
NAME                      DESIRED   CURRENT   READY   AGE
replicaset.apps/demo-02   3         1         1       19m

NAME                READY   STATUS    RESTARTS   AGE
pod/demo-02-bq2ng   1/1     Running   0          8s

 

메모리를 하나에 600mb 할당하니 돌아간다 

'CS > 클라우드' 카테고리의 다른 글

AWS 기초  (0) 2026.04.01
[k8s] 쿠버네트스 3 tier 구성  (0) 2026.02.27
[K8s] 쿠버네티스 사용 1  (0) 2026.02.26
[K8s] 쿠버네티스 설치  (0) 2026.02.25
[K8s] 쿠버네티스란 ?  (0) 2026.02.24