본문 바로가기
software engineering/k8s

Deployments - Writing a Deployment Spec

by _블로그 2021. 2. 16.

Writing a Deployment Spec

Pod Template

.spec.template와 .spec.selector로 배포할 Pod을 선택한다. .spec.template는 Pod의 schema와 apiVersion, kind 필드가 없다는 것 외에 동일.

당연히 labels는 다른 controllers와 겹치지 않게 해야 한다. ? 겹치면 어떻게 되지? 예측 불가능한 동작을 할 수 있다고 했었던 듯.

Replicas

기본값 1

Selector

.spec.selector는 .spec.template.metadata.labes랑 반드시 매치가 되어야 하고 비워둘 경우 자동으로 매치해주지 않으므로 반드시 명시적으로 선언해야 한다. 그리고 .spec.selector는 immutable하여 생성 이후에는 update 불가.

Strategy

.spec.strategy는 Recreate(기존 Pod 모두 종료 후 새로 생성), RollingUpdate가 있고 RollingUpdate가 기본값.

Rolling Update Deployment

Max Unavailable

말 그대로 rolling update 중에 가용 불가한 최대 Pod 개수. rolling update 시 종료하는 최대 Pod 수라고 보면 될 듯. .spec.strategy.rollingUpdate.maxUnavailable으로 설정 가능. maxSurge가 0이면 0이 될 수 없다. 기본값은 25%.

Max Surge

rolling update 중에 새로 생성 가능한 최대 Pod 개수. .spec.strategy.rollingUpdate.maxSurge로 설정 가능. maxUnavailable이 0이면 0이 될 수 없음. 기본값은 25%.

 

예를 들어 30%라고 설정하면 rolling update 시 기존 Pod과 새로운 Pod의 최대 개수는 130%이다.

Progress Deadline Seconds

말 그대로 progress 최대 시간(s). 이 시간이 지나면 Type=Progressing, Status=False, Reason=ProgressDeadlineExceeded로 변경된다. 기본값은 600. 향후에 자동롤백 기능이 추가되면 롤백을 자동으로 시도할 예정.

Min Ready Seconds

Pod 기동 후 어떠한 containers crashing 없이 정상적으로 동작해야 할 최소 시간(s). 기본값은 0.

Revision History Limit

rs history 최대 개수. 기본값 10.

Paused

이 값이 true이면 rollout이 트리거되지 않는다. 기본값 false. 즉 새로운 rs만 준비하고 실제 rollout은 하지 않은 채 paused된다는 얘기. ? 이걸 언제 쓰지?

 

 

LIST

댓글