Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- IAC
- EKS
- asyncio
- 자바스크립트
- Service
- AZ-900
- terraform
- leetcode
- 쿠버네티스
- Kubernetes
- Deployment
- intervals
- FastAPI
- EC2
- asgi
- ansible
- K8S
- POD
- ebs
- docker
- WSGI
- AWS
- AZURE
- Network
- dockerfile
- Python
- DevOps
- Django
- event loop
- elasticsearch
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ k8s ] Deployment YAML 본문
Deployment:
Replicaset의 상위 개념으로 볼 수 있으며 Deployment로 Replicaset을 생성할 수도 있고, 배포 작업을 좀 더 세분화하여 롤링 업데이트 등을 컨트롤 할 수 있습니다. 이러한 이유로 Replicaset만을 사용하기보다 Deployment사용이 보편적입니다.
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- apiVersion apps/v1 → 쿠버네티스의 apps/v1 API를 사용 합니다.
- kind: Deployment → Deployment의 작업으로 명시 합니다.
- metadata.name → Deployment의 이름을 설정 합니다.
- metadata.labels.app → Deployment의 레이블을 설정 합니다.
- spec.replicas → 파드의 개수를 몇개 유지할 것 인지 설정 합니다. 기본값은 1 입니다. (Deployment는 Replicaset을 생성하고, 생성된 Replicaset이 spec.replicas에 기술한 Pod개수를 유지해줍니다.
- spec.selector → 어떤 레이블의 파드를 선택하여 관리할지에 대한 설정 입니다. 생성된 Replicaset이 관리할 Pod를 찾는 방법을 정의합니다. Pod template에서 규칙을 충족한다면 더 정교한 규칙도 가능합니다. 즉, Pod의 레이블을 식별하여 해당되는 파드들을 관리하며, 이 필드가 없을 경우 spec.template.metadata.labels에 설정된 내용들을 기본값으로 사용 합니다. .spec.selector.matchLabels 필드는 {key,value}의 쌍으로 매핑되어있다. matchLabels 에 매핑된 단일 {key,value}은 matchExpressions 의 요소에 해당하며, key 필드는 "key"에 그리고 operator는 "In"에 대응되며 value 배열은 "value"만 포함한다. 매칭을 위해서는 matchLabels 와 matchExpressions 의 모든 요건이 충족되어야 한다.
- spec.template.metadata → 어떤 파드를 실행할지에 대한 정보를 하위에 설정 합니다.
- spec.template.metadata.name → 생성될 파드의 이름을 지정 합니다.
- spec.template.metadata.labels.app→ 파드는 metadata.lables.app필드를 이용하여 식별될 레이블을 생성합니다.
- spec.spec → 이 하위의 옵션들은 컨테이너에 대한 설정을 합니다. 위 코드에선 컨테이너 명, 이미지, 포트를 지정 했습니다.
- containers → 하나 이상의 container가 포함될 수 있으며 container의 name, image, ports들을 기술합니다.
YAML validator: https://onlineyamltools.com/validate-yaml
deployment관련 kubectl명령어
deployment container image update:
- kubectl set image deployment/[디플로이먼트이름] [컨테이너이름]=[이미지]:[버전]
deployment rollback/rollout history조회: deployment로 이전으로 돌아가거나, 작업했던 기록을 확인 가능합니다. 롤아웃 기록은 기본적으로 10까지 저장하며 더 많은 기록을 저장하기 위해서는 따로 설정이 필요 합니다.
롤아웃 기록 조회 명령은 아래와 같습니다.
- kubectl rollout history deployment [디플로이먼트 이름]
롤백할 때는 아래 명령어를 사용하면 됩니다.
- kubectl rollout undo deployment [디플로이먼트 이름] --to-revision=[숫자]
deployment 일시 중지, 시작, 재시작
- 배포 일시 중지 : kubectl rollout pause deployment/[디플로이먼트 이름]
- 배포 시작 : kubectl rollout resume deployment/[디플로이먼트 이름]
전체 파드 재시작이 필요할 경우에는 아래 명령어를 사용합니다. deployment 재 시작 시
새로운 레플리카셋 생성 -> 새로운 파드 생성 -> 기존 파드 종료 -> 기존 레플리카셋 비활성화 과정을 거칩니다.
- kubectl rollout restart deployment/[디플로이먼트 이름]
'DevOps' 카테고리의 다른 글
[ k8s ] kubernetes 개념 (node, control plane) (0) | 2023.02.13 |
---|---|
[ k8s ] Service YAML 작성 (0) | 2023.02.07 |
[ k8s ] pod, deployment, service (0) | 2023.02.06 |
[ AWS ] ECR이란? (0) | 2023.02.05 |
[ AWS ] Auto Scaling Group (0) | 2023.01.25 |
Comments