본문 바로가기

서버

Kubernetes : Deployment

디플로이먼트 

- 파드의 개수를 관리 : 시스템의 처리 능력, 서비스를 중단하지 않는 가용성, 비용 측면에서 매우 중요하다.

- 레플리카셋과 함께 동작한다.

- 서버 타입의 워크로드에 적합한 컨트롤러

- 기능 : 스케일 / 롤아웃 / 롤백 / 자동 복구

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3 # 생성하고 유지할 파드의 개수
  selector:
    matchLabels: # 컨트롤러와 파드를 대응시키는 라벨
      app: web
  template:
    metadata:
      labels:
        app: web # 파드의 라벨. 컨트롤러의 matchLabels와 일치해야함.
    spec:
      containers:
      - name: nginx
        image: nginx:1.16

스케일

- 레플리카의 값을 변경하여 파드의 개수를 조절하여 처리 능력을 높이거나 낮추는 기능

- 수동으로 레플리카의 값을 변경

- 자동으로 CPU 사용률과 연동하는 오토스케일도 있음

- 클러스터의 가용 자원을 확인하여 노드의 증설을 검토해야 한다.

 

 

롤아웃 / 롤백

- 롤아웃 : 컨테이너의 업데이트

- 사전에 새로운 이미지를 빌드 > 레포지터리에 등록 -> kubectl apply -f 적용

- 롤백 : 롤아웃 전에 사용하던 예전 컨테이너로 되돌린다

   ex : kubectl rollout undo deployment web-deploy

- 서비스를 유지하면서 파드를 교체한다

- 애플리케이션의 설계와 구현도 뒷받침되어야 한다.

 

자동 복구

- 노드 수준에서 장애가 발생했을 때 파드를 복구하는 기능이다

- 디플로이먼트의 자동 복구는 파드 단위로 복구하고, 파드는 컨테이너 수준에 대해 자동 복구를 시도한다.

 

 

kubectl scale 레플리카 값을 변경
kubectl rollout 롤아웃의 상태 표시, 일시정지와 재개, 취소, 이력 표시
kubectl drain <노드명> 가동 중인 파드를 다른 노드로 이동
kubectl cordon <노드명> 노드에 새로운 파드의 스케줄 금지
kubectl uncordon <노드명> 노드에 새로운 파드의 스케줄을 재개

* 디플로이먼트 + 퍼시스턴트 볼륨 + 서비스 컨트롤러 = HA 구성

 


파드의 트러블슈팅

 

P1. 파드의 상태가 ImagePullBackOff 이면서 가동하지 않는 경우

- STATUS 가 ContainerCreating > ErrImagePull - ImagePullBackOff를 반복

A1. 'kubectl get events | grep 파드명' 수행. 원인 분석

- ex. pull access denied, repository does not exist or may require 'dokcer login'

 

P2. 파드의 상태가 ContainerCreating에서 진행하지 않는 경우

A2. kubectl get event | grep.

- ex. MountVolume.Setup failed for volume 'tls-cert' : secretes 'cert' not found

 

P3. 파드가 재시작을 반복

- STATUS가 ContainerCreating > Error > CrashLoopBackOff를 반복하여 RESTARTS의 값이 증가

A3-1. kubectl describe po 파드명. Exit 코드를 확인

- ex. Exit 코드 1로 종료된 것 확인

A3-2. kubectl logs -f 파드명. 로그에 남은 메시지를 바탕으로 원인 파악함

 

P4. 컨테이너 시작 실패

- STATUS가 RunContainerError > CrashLoopBackOff를 반복

A4. kubectl desribe po 파드명. 원인 분석

 

P5. 애플리케이션 실행 중 이상 종료

A5-1. kubectl logs 파드명. 로그를 확인

A5-2. 로그에도 없다면, 매니페스트에서 command를 오버라이드 하여 애플리케이션 실행을 중단하고, 파드에 접속 후 직접 어플리케이션 실행 후 원인을 찾아본다

ex) YAML파일의 command 오버라이드 - command : ["tail", "-f", "/dev/"null"]

 

P6. 일정한 빈도로 서비스 응답이 비정상인 경우

- 잘못 설정된 라벨에 의해 의도치 않은 파드에 요청이 전송되고 있을 가능성이 있다.

- ex) 매니페스트의 selector : app=web - 해당 파드에 요청이 전송된다.

 

728x90

'서버' 카테고리의 다른 글

Kubernetes : Service  (0) 2022.08.22
Kubernetes : Pod & Manifest  (0) 2022.08.07