Deployment
Deployment

ReplicaSet
은 Pod 집합을 식별하기 위한 .spec.selector
, 유지하고 싶은 Pod 수를 지정하는 .spec.replicas
, 새로 생성될 Pod 정보인 .spec.template
을 가지고 있습니다.
Deployment
는 ReplicaSet
을 생성하고 컨트롤하는 데 사용되는 리소스입니다. Deployment
에 의해 생성된 ReplicaSet
은 사용자가 직접 관리하면 안됩니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3 # 유지하고 싶은 Pod 수
minReadySeconds: 10 # readinessProbe 성공 후 최소 준비 시간, 의도적으로 업데이트 속도를 늦출 수 있음
strategy:
type: RollingUpdate # RollingUpdate(default)|Recreate
rollingUpdate:
# replicas - maxUnavailable <= 사용 가능 Pod <= replicas + maxSurge
maxSurge: 25% # 정수 또는 비율(%, ceil(replicas * maxSurge))
maxUnavailable: 25% # 정수 또는 비율(%, floor(replicas * maxUnavailable))
selector: # 관리하고 싶은 Pod의 정보
matchLabels:
app: my-app
template: # 새로 생성될 Pod
metadata:
labels: # .spec.selector에 의해 선택 될 수 있도록 설정
app: my-app
spec:
containers:
- image: [<url>/]<image>[:tag]
name: my-app
ports:
- name: http # Pod 내에서 특별해야하며, service에 의해 참조될 수 있음
containerPort: 8080
protocol: TCP # TCP(default)|UDP|SCTP
label
.metadata.labels
을 이용하면 오브젝트들을 특정 집합으로 매핑할 수 있어서 유용합니다. 여러 label을 사용하면 교집합 합집합 등에 대한 선택이 가능합니다.
key
<prefix>/<name>
형식의 문자열을 사용- prefix는 DNS 하위 도메인으로 해야하며
kubernetes.io/
,k8s.io/
는 예약된 값 - name은 63자 이하, 시작과 끝은
[a-zA-Z0-9]
, 중간에[-\._]
를 사용할 수 있음
info
.metadata.annotation
은 label처럼 selector 같은 것은 없지만 상대적으로 긴 값을 설정할 수 있습니다. 새로운 기능을 추가하기 전, spec에 추가할 값을 우선 annotation에 추가해서 테스트 해보는 경우가 있습니다.
namespace
.metadata.namespace
는 클러스터 내에서 리소스 그룹을 격리하는 기능입니다. 사용자가 적은 경우 label만으로 충분 할 수 있습니다.
kubectl config set-context --current --namespace <namespace>
명령어를 통해 현재 컨텍스트의 기본 namespace를 변경할 수 있습니다.
rollout
kubectl rollout <subcommand> <resource> <name>
<subcommand>
pause
: 일시 중지resume
: 일시 중지 해제restart
: 재시작status
: rollout이 완료될 때까지 진행 상태를 출력history
: revision 목록,--revision <int>
을 설정하면 자세한 정보를 확인 할 수 있음undo
: 이전 revision 로 되돌리기,--to-revision <int>
을 설정하면 해당 revision으로 되돌릴 수 있음
<resource>
deployment
statefulset
daemonset
Reference
- https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment
- https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/