<Docs>
디플로이먼트는 파드와 레플리카셋에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 의도하는 상태를 설명하고, 디플로이먼트 컨트롤러는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경한다. 새 레플리카셋을 생성하는 디플로이먼트를 정의하거나 기존 디플로이먼트를 제거하고, 모든 리소스를 새 디플로이먼트에 적용할 수 있다.
디플로이먼트란
쿠버네티스에서 상태가 없는(stateless) 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러
레플리카셋을 관리하며 앱 배포를 더 세밀하게 관리하는 것이다.
⇒ 레플리카셋 기능을 활용해 실행되는 파드(애플리케이션)을 무중단으로 업데이트하는 기능
디플로이먼트로 가능한 것.
- Pod의 롤아웃, 롤백
- 롤아웃 방식의 지정
- 롤아웃 조건이나 속도 제어
컨테이너 이미지 버전업등의 업데이트가 있을 때 새로운 사양의 레플리카셋을 작성하고 순서대로 새로운 파드로 대체하여 롤아웃을 수행한다. 디플로이먼트는 이력을 관리하기 때문에 1세대 이전으로 돌리는 롤백이 가능하다.
기본적인 매니페스트 파일 작성
# deployment-nginx.yaml
# [1] 기본 항목
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deployment
# [2] Deployment 스펙
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
# [3] Pod 템플릿
template:
metadata:
labels:
app: nginx-deployment
# [4] Pod 스펙
spec:
containers:
- name: nginx-deployment
image: nginx # 컨테이너 이미지 위치
ports:
- containerPort: 80 # 포트 번호
매니페스트 기본 항목
- apiVersion: API버전, 존재하지 않는 값을 설정하면 오류가 난다고한다. ex) apps/v1
- kind: 쿠버네티스 리소스의 종류 ex) Deployment
- metadata: 레플리카셋의 이름이나 Label과 같은 메타데이터 ex) name: nginx-deployment
- spec: 레플리카셋의 상세정보를 설정한다.
디플로이먼트 스펙
- replicas: 클러스터 안에서 가동시킬 파드의 수, default = 1
- selector: 어떤 파드를 가동시킬지에 대한 셀렉터, 파드의 템플릿에 설정된 라벨과 일치해야한다.
- template: 실제 클러스터에서 동작하는 파드의 수가 replicas에 설정된 파드의 수를 만족시키지 않는 경우에 새로 작성되는 파드의 템플릿
- 주의: Selector에 설정된 라벨과 Pod의 Template에 설정된 라벨은 일치해야한다.
Pod template
- metadata: 템플릿의 이름이나 라벨과 같은 데이터
- spec: 파드의 상세정보
디플로이먼트 사용
디플로이먼트 생성
- 생성 코드: kubectl apply -f deploy-nginx.yaml
- 확인을 위해서 다음 명령을 입력한다. kubectl get deploy,rs,pods
- deploy = deployment, rs = replica set, pods = pod
- 파드의 이름은 다음 형태로 구성된다.
- deployment 이름 + replica set 이름 + 해시
디플로이먼트 수정
업데이트의 방법은 크게 세 가지가 존재한다.
- kubectl set 명령으로 직접 컨테이너 이미지를 지정
- kubectl edit 명령으로 현재 파드의 설정 정보를 연 다음 컨테이너 이미지 정보를 수정
- 처음 적용했던 템플릿의 컨테이너 이미지 정보를 수정한 다음 kubectl apply 명령을 이용
kubectl set 명령으로 직접 컨테이너 이미지를 지정
- code: kubectl set image deployment/nginx-deployment nginx-deployment=nginx:1.9.1
디플로이먼트 롤백
- 컨테이너 이미지 변경 내역 확인: kubectl rollout history deploy {deployment_name}
- 만약에 버전이 변경된다면 버전2가 추가된다. ⇒ 2가 현재버전이 되는거!
- 리비전 2의 상세 내용을 확인하는 코드: kubectl rollout history deploy {deployment_name} --version=1
- 버전1로 롤백하는 코드: kubectl rollout undo deploy {deployment_name} —to-revision={revision_number}
- 롤아웃 히스토리 확인: kubectl rollout history deploy {deployment_name}
참고 및 출처
https://kimjingo.tistory.com/133
[k8s] 디플로이먼트(Deployment)
디플로이먼트 디플로이먼트(Deployment)는 쿠버네티스에서 상태가 없는(stateless) 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러입니다. 쿠버네티스가 처음 등장했을 때는 Replication Controller에서
kimjingo.tistory.com
https://huisam.tistory.com/entry/k8s-deployment
[k8s/쿠버네티스] - Deployment로 애플리케이션 배포
안녕하세요~ 오늘은 쿠버네티스 환경에서 Application을 배포하는 과정에 대한 설명으로 간단하게 Deployment 를 소개해드릴까 합니다 ㅎㅎ 제가 최근에 도커 이미지를 만들어보는 Dockerfile만들기라는
huisam.tistory.com
'Infra & Container > k8s' 카테고리의 다른 글
k8s > GCE를 이용해서 설치하기(6) - Service, Service Type (0) | 2024.05.14 |
---|---|
k8s > GCE를 이용해서 설치하기(5) - Deployment 생성해보기 (0) | 2024.05.11 |
k8s > kubernetes를 배우는 이유, Master & worker node (0) | 2024.04.29 |
k8s > GCE를 이용해서 설치하기(4) - Pod생성해보기 (0) | 2024.04.24 |
k8s > GCE를 이용해서 설치하기(3) - CNI (1) | 2024.04.19 |