10장. 배포
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
지금까지 애플리케이션을 컨테이너로 패키징하고, 복제된 컨테이너 세트를 생성하고, 인그레스 컨트롤러를 사용하여 서비스에 대한 트래픽 부하를 분산하는 방법을 살펴보았습니다. 이러한 모든 오브젝트(파드, 레플리카셋, 서비스)를 사용하여 애플리케이션의 단일 인스턴스를 구축할 수 있습니다. 그러나 애플리케이션의 새 버전을 릴리즈하는 일일 또는 주간 주기를 관리하는 데는 거의 도움이 되지 않습니다. 실제로, 파드와 레플리카셋은 모두 변경되지 않는 특정 컨테이너 이미지에 연결될 것으로 예상됩니다.
배포 개체는 새 버전의 릴리스를 관리하기 위해 존재합니다. 배포는 특정 버전을 초월하는 방식으로 배포된 애플리케이션을 나타냅니다. 또한 배포를 사용하면 코드의 한 버전에서 다음 버전으로 쉽게 이동할 수 있습니다. 이 "롤아웃" 프로세스는 구체적이고 신중합니다. 개별 파드를 업그레이드하는 사이에 사용자가 구성 가능한 시간 동안 기다립니다. 또한 상태 검사를 사용하여 새 버전의 애플리케이션이 올바르게 작동하는지 확인하고 너무 많은 오류가 발생하면 배포를 중지합니다.
디플로이먼트를 사용하면 다운타임이나 오류 없이 새 소프트웨어 버전을 간단하고 안정적으로 롤아웃할 수 있습니다. 디플로이먼트가 수행하는 소프트웨어 롤아웃의 실제 메커니즘은 Kubernetes 클러스터 자체에서 실행되는 디플로이먼트 컨트롤러에 의해 제어됩니다. 즉, 배포를 무인으로 진행해도 여전히 정확하고 안전하게 작동할 수 있습니다. 따라서 배포를 수많은 지속적 배포 도구 및 서비스와 쉽게 통합할 수 있습니다. 또한 서버 측에서 실행하면 인터넷 연결 상태가 좋지 않거나 간헐적으로 연결되는 곳에서도 안전하게 롤아웃을 수행할 수 있습니다. 지하철을 타는 동안 휴대폰에서 새 버전의 소프트웨어를 롤아웃한다고 상상해 보세요. 배포를 사용하면 이 모든 것이 가능하고 안전합니다!
참고
Kubernetes가 처음 출시되었을 때 가장 인기 있었던 데모 중 하나는 "롤링 업데이트"로, 단일 명령어를 사용하여 다운타임 없이 요청 손실 없이 실행 중인 애플리케이션을 원활하게 업데이트하는 방법을 보여주었습니다. 이 원래 데모는 명령줄 도구에서 여전히 사용할 수 있는 kubectl rolling-update 명령을 기반으로 했지만, 그 기능은 대부분 Deployment 개체에 포함되었습니다.
첫 번째 배포
Kubernetes의 모든 오브젝트와 마찬가지로, 디플로이먼트는 실행하려는 것에 대한 세부 정보를 제공하는 선언적 YAML 오브젝트로 표현할 수 있다. 다음 사례에서, 디플로이먼트는 kuard 애플리케이션의 단일 인스턴스를 요청하고 있다:
apiVersion: apps/v1 kind: Deployment metadata: name: kuard labels: run: kuard spec: selector: matchLabels: run: kuard replicas: 1 template: ...