Kubernetes에서 애플리케이션을 배포하는 방법

Kubernetes는 호스트 또는 노드 클러스터에서 애플리케이션 컨테이너를 배포, 확장 및 운영하기 위한 가장 널리 사용되는 자동화 플랫폼 중 하나입니다.

이 기사에서는 Kubernetes의 중심 개체 중 하나인 배포에 대해 설명합니다. 목표는 해당 동작과 생성, 업데이트 및 삭제 방법을 이해하는 것입니다.

배포란 무엇입니까?

Deployment는 Pod를 시작하는 데 사용되는 객체 중 하나입니다. Kubernetes 모범 사례는 상태 비저장 애플리케이션에 배포 사용을 권장합니다. 배포가 없으면 여러 Pod를 수동으로 생성, 업데이트 및 삭제해야 하므로 많은 Pod에 지루하고 실행 불가능합니다.

배포는 Pod를 생성할 뿐만 아니라 최신 상태로 실행되고 있는지 확인하는 단일 객체를 YAML로 선언합니다. Kubernetes에 배포를 사용하여 애플리케이션을 쉽게 자동 확장할 수도 있습니다. 따라서 배포는 Pod에서 애플리케이션 버전을 확장, 배포 및 롤백하는 데 사용됩니다.

배포는 또한 우리가 실행할 Pod 사본 수를 Kubernetes에 알려주고 나머지는 Kubernetes가 처리합니다. 연결된 컨트롤러는 배포를 생성할 때 구성에서 ReplicaSet을 생성합니다. ReplicaSet과 연결된 컨트롤러는 ReplicaSet 구성에서 일련의 파드를 생성합니다.

ReplicaSet을 직접 생성하는 대신 배포를 사용하면 다음과 같은 이점이 있습니다.

  • 개체 기록: 개체의 각 변경(“적용” 또는 “편집”을 통해)은 이전 버전의 백업을 생성합니다.
  • 롤아웃 및 롤백 관리: 이전 지점과 연결된 구성으로 돌아갈 수 있습니다.

배포 만들기

Kubernetes 배포를 만드는 데 사용할 수 있는 두 가지 방법이 있습니다.

명령적 방법

Kubernetes API를 사용하면 구성 파일이나 YAML 형식의 매니페스트 없이 보다 직접적이고 명령적인 접근 방식을 사용할 수 있습니다. 이 접근 방식에서 우리가 해야 할 일은 우리가 하고 싶은 일을 말하는 것뿐이며 Kubernetes는 예상 결과를 달성하기 위해 수행해야 하는 일을 정의하는 책임을 집니다.

명령형 방법을 사용하려면 아래 명령을 사용하십시오.

kubectl create deployment nginx-deployment --image nginx --port=80

선언적 방법

이 방법에서는 모든 것을 선언해야 하며 이 코드를 사용할 때 Kubernetes는 정의를 읽고 표시되거나 선언된 대로 정확하게 생성합니다.

  장치 관리자 전원 관리 문제 수정

선언적 배포를 사용하려면 YAML 파일을 만들어야 합니다.

이름이 new_deployment.yaml인 배포용 YAML 파일:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

이 YAML 파일에는 Kubernetes API 버전, 생성 중인 개체 유형 및 배포 이름을 정의한 후 사양 섹션이 있습니다. 이 섹션에서는 먼저 배포에서 활성 상태를 유지해야 하는 Pod 인스턴스 수를 나타내는 복제본 키를 정의합니다.

선택기 레이블을 사용하여 배포에서 Pod를 식별합니다. 이를 위해 배포 레이블을 사용할 수 있습니다. 이 레이블은 이러한 레이블과 일치하는 모든 포드가 배포에서 그룹화됨을 알려줍니다.

그런 다음 배포 사양 내에 Pod 모델이 있는 템플릿 개체가 있습니다. 배포가 Pod를 생성할 때 이 템플릿을 사용하여 생성합니다. 일반 포드의 사양은 템플릿 키 아래에서 찾을 수 있습니다.

이 배포를 통해 레이블이 있는 Nginx 이미지가 Pod에 배포됩니다. 게다가 이 점 또한 주의해야 하고, Pod는 Kubernetes의 확장성 단위이므로 동일한 Pod에 여러 컨테이너를 넣을 경우 사용할 패턴을 생각해야 합니다.

다음으로 new_deployment.yaml Yaml 파일을 적용하고 다음 명령을 사용합니다.

kubectl apply -f new_deployment.yaml

몇 초 후에 다음을 사용하여 배포 상태를 얻을 수 있습니다.

kubectl get all

배포 검색 및 업데이트

생성된 Pod, 배포 및 Replicaset이 있습니다. 따라서 배포는 항상 Replicaset을 생성하고 관리합니다. 이제 다음 명령을 사용하여 배포를 설명할 수 있습니다.

kubectl describe deployment nginx-deployment 

이제 배포에 대한 전체 설명이 있습니다. 업데이트가 RollingUpdate로 정의되었을 때 포드를 생성/재구축하는 데 사용된 전략을 강조 표시합니다.

RollingUpdate 전략을 사용하면 애플리케이션의 한 버전을 새 버전으로 순차적으로 마이그레이션할 수 있습니다. Kubernetes에서 사용되는 기본 전략입니다.

이 외에도 다음과 같은 전략이 있습니다.

  • 재생성: 현재 실행 중인 Pod 인스턴스를 종료하고 새 버전으로 ‘재생성’합니다.
  • Blue/Green: 이 전략은 두 개의 별개이지만 동일한 환경을 만듭니다. 블루 환경에서는 애플리케이션이 그대로 실행되는 반면, 그린 환경에서는 애플리케이션이 미래에 그대로 실행됩니다.
  • 카나리아: 일부 사용자가 애플리케이션 또는 서비스의 증분 릴리스에 관여하는 배포 전략입니다.
  MetroPCS에서 기지국을 업데이트하는 방법

“롤링 업데이트”를 선택하면 원하는 복제본 수에 대한 동작을 구성할 수 있습니다.

  • maxSurge를 사용하면 현재 구성된 복제본 수 외에 생성할 수 있는 파드 수를 백분율 또는 절대적으로 표시할 수 있습니다.
  • maxUnavailable을 사용하면 구성된 복제본 수에 따라 업데이트 중에 “사용할 수 없는” Pod 수를 백분율 또는 절대적으로 나타낼 수 있습니다.

애플리케이션과 자동 확장 처리에 따라 이러한 구성을 통해 QoS를 보장하거나 배포 속도를 높일 수 있습니다.

다음으로 Pod를 10으로 확장하고 Nginx 이미지 태그를 최신으로 변경해야 합니다.

kubectl scale deployment nginx-deployment --replicas=10

5개의 컨테이너가 생성되고 있으며 10개의 Pod 중 5개를 사용할 수 있습니다.

몇 초 후 다음 명령을 사용합니다.

kubectl get all

여기에서 모든 Pod가 생성되었고 컨테이너가 실행 중임을 확인할 수 있습니다.

배포 삭제

Kubernetes 배포를 삭제하려면 다음 명령을 사용할 수 있습니다.

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: 배포 간소화

수십 또는 수백 개의 Kubernetes 리소스를 사용하는 복잡한 애플리케이션을 배포하려는 경우 kubectl 도구가 적합하지 않게 되어 Helm 도구가 개발되었습니다. Helm은 kubectl을 기반으로 구축되고 애플리케이션 배포를 단순화하는 Kubernetes용 패키지 관리자입니다.

Helm 용어에서 애플리케이션을 릴리스라고 합니다. 이는 차트, 즉 Kubernetes 리소스를 설명하는 템플릿 및 전역 변수를 포함하는 YAML 형식의 구성 파일 모음과 연결됩니다.

결론

배포는 필수 Kubernetes 개체입니다. 큰 권한은 큰 책임을 의미하므로 구성할 때 주의해야 하며 그렇지 않으면 예기치 않은 동작이 발생할 위험이 있습니다. 배포 구성을 더 진행하려면 Kubernetes 설명서를 참조하세요.

또한 처음부터 배우고 전문가가 되기 위해 최고의 Kubernetes 자습서를 탐색할 수도 있습니다.