Orchestration/Kubernates (k8s)

[Mac OS] Deployment 란? (디플로이먼트, Deployment)

chanstory 2023. 2. 13. 21:08
반응형

 

Deployment (디플로이먼트)

파드를 업데이트 하기 위한 선언적 명세
Deployment 리소스를 통한 설정 가능한 기능
- 레플리카셋, 즉 복제본 구성을 이용하여 파드를 원하는 개수만큼 실행시킬 수 있음 
- Control Plane 을 이용하여 파드를 업데이트 할 수 있음
- 파드를 롤백할 수 있음

 

 

*복습* 다양한 배포 전략

어플리케이션 복제본에 대한 새버전 업데이트 배포 전략
1. 재생성 (Recreate) : 이전 버전을 삭제하고 새 버전 생성
2. 블루/그린 배포 : 한번에 이전 버전에서 새 버전으로 연결을 전환
3. 롤링 배포 : 이전 버전을 Scale down 하고, 새 버전을 Scale up 하는 방식으로 단계별로 교체  (롤아웃 이라고도 함)
4. 카나리 배포 : 새 버전이 잘 작동한닫고 판단되면, 이전 버전을 교체

 

Q. 디플로이먼트가 지원하는 배포 전략에서 블루/그린이나 카나리는 찾아볼 수 없다. 어떻게 블루/그린이나 카나리 배포를 할 수 있을까?

=> 블루/그린 배포
     - 구버전의 인스턴스 크기와 동일하게 신버전의 인스턴스를 구성하고 로드밸런서를 통해 신버전을 업데이트 한다. 
     - 구버전과  신버전이 동시에 존재하는 시간이 있으며 서비스 오류에 대한 롤백이 빠르다 


=> 카나리 배포
     - 구버전과 신버전을 동시에 배포하며 pods의 개수를 전체 적은% 만큼 배포를 시작하여 신버전의 트래픽을 서서히 늘리다 오류 없이 잘 배포 된다면 최종적으로 신버전의 트래픽을 100%로 늘린다.

 

 

** Deployment 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment            # 디플로이먼트 이름
  labels:                           
    app: nginx                      
spec:
  replicas: 3                       # 유지하고자 하는 Pod 개수 (정상동작)
  selector:                         # 관리하고자 하는 Pod를 선택하기 위한 조건 정의
    matchLabels:                    
      app: nginx
  template:                         # 관리되고자 하는 Pod에 대해 정의하는 필드
    # 여기서부터 파드 템플릿이다
    metadata:                       # Pod의 metadata와 label은 반드시 
      labels:                       # Deployment의 selector 와 match 되어야 한다
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
    # 여기까지 파드 템플릿이다

공식 문서를 통한 디플로이먼트 실습

디플로이먼트 적용

% kubectl apply -f <디플로이먼트_파일>
위 Deployment 예시를 활용하여 디플로이먼트 적용

응답 : deployment.apps/nginx-deployment created

% kubectl get deployment
응답 : 서비스 중인 deployment 정보 출력


% kubectl get pods
응답 : replica 개수가 3 이므로 3개의 pods 확인


% kubectl delete pod,service nginx
pod & service 삭제

 

** pod, service, deployment 삭제

#service확인 
% kubectl get service

#service 삭제 
% kubectl delete service <서비스이름>
  
#deployment 확인 
% kubectl get deployments.apps

#deployment 삭제 
% kubectl delete deployments.apps deploy-nginx
    
#pod확인 
% kubectl get pod

#pod 삭제 
% kubectl delete pod nginx

 

 

쿠버네티스 실습하기 
대화형 튜토리얼 앱 배포하기
https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive/

 

대화형 튜토리얼 - 앱 배포하기

<!DOCTYPE html> 파드는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 각 파드는 클러스터에서 실행중인 워크로드의 일부를 나타낸다. 파드에 대해 더 자세히 알아본다. 터미널로 상호 작용하기

kubernetes.io

 

디플로이먼트로 스테이트리스 어플리케이션 실행

https://kubernetes.io/ko/docs/tasks/run-application/run-stateless-application-deployment/

 

디플로이먼트(Deployment)로 스테이트리스 애플리케이션 실행하기

이 페이지에서는 쿠버네티스 디플로이먼트 오브젝트를 사용하여 애플리케이션을 실행하는 방법을 설명한다. 목적 nginx 디플로이먼트 생성하기 kubectl을 사용하여 디플로이먼트 정보 나열하기

kubernetes.io

 

반응형