디플로이먼트
- 파드의 개수를 관리 : 시스템의 처리 능력, 서비스를 중단하지 않는 가용성, 비용 측면에서 매우 중요하다.
- 레플리카셋과 함께 동작한다.
- 서버 타입의 워크로드에 적합한 컨트롤러
- 기능 : 스케일 / 롤아웃 / 롤백 / 자동 복구
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 - 해당 파드에 요청이 전송된다.
'서버' 카테고리의 다른 글
Kubernetes : Service (0) | 2022.08.22 |
---|---|
Kubernetes : Pod & Manifest (0) | 2022.08.07 |