1. 쿠버네티스 롤링 업데이트는 기존 버전과 새버전이 동시에 존재할 수 있는 단점은 있지만, 시스템을 무 장애로 업데이트할 수 있다는 장점이 있다.
롤링 업데이트는 가장 많이 사용되는 배포 방식 중의 하나이다. 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 해준다. 새로운 파드는 가용한 자원을 보유한 노드로 스케줄될 것이다. 새 버전을 배포하면서, 새 버전 인스턴스를 하나씩 늘려나가고, 기존 버전을 하나씩 줄여나가는 방식이다.
2. 쿠버네티스는 Deployment, StatefulSets, DaemonSet, Job, CronJob등 다양한 배포 방식을 지원한다.
Deployment는 새로운 버전의 애플리케이션을 다양한 전략으로 무중단 배포 가능하고, StatefulSets은 실행 순서를 보장하고 호스트 이름과 볼륨을 일정하게 사용할 수 있어 순서나 데이터가 중요한 경우에 사용 가능하며 로그나 모니터링 등 모든 노드에 설치가 필요한 경우엔 DaemonSet을 이용하고 배치성 작업은 Job이나 CronJob을 이용한다.
롤링 업데이트 / Deployment / ConfigMap
1. 롤링 업데이트
- 일반적으로 애플리케이션을 배포하는 방법은 블루/그린, 카날리 배포, 롤링 업데이트 등이 존재
- 롤링 업데이트는 가장 많이 사용되는 배포 방식 중의 하나
- 롤링 업데이트는 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 하는 방법
- 사용자들은 애플리케이션이 항상 가용한 상태일 것이라 여기고 개발자들은 하루에 여러번씩 새로운 버전을 배포하도록 요구됨.
(시스템을 무 장애로 업데이트할 수 있다는 장점)
1-1. 롤링 업데이트 방식
- 여러 개의 인스턴스를 동작 시키도록 애플리케이션을 스케일하는 것은 애플리케이션의 가용성에 영향을 미치지 않으면서 업데이트를 수행하는 것에 대한 요구
- 기본적으로 업데이트가 이루어지는 동안 이용 불가한 파드의 최대 개수와 생성 가능한 새로운 파드의 최대 개수는 하나
- 애플리케이션 스케일링과 유사하게 디플로이먼트가 외부로 노출되면, 서비스는 업데이트가 이루어지는 동안 오직 가용한 파드에게만 트래픽을 로드밸런스 할 것이다. 가용한 파드란 애플리캐이션의 사용자들에게 가용한 상태의 인스턴스를 의미
1-2. 롤링 업데이트
- 하나의 환경에서 또 다른 환경으로의 애플리캐이션Promotion(컨테이너 이미지 업데이트를 통해)
- 이전 버전으로의 Rollback
- 서비스 중단 없는 애플리케이션의 지속적인 통합과 지속적인 전달
*디플로이먼트가 외부로 노출되면, 서비스는 업데이트가 이루어지는 동안 오직 가용한 파드에게만 트래픽을 로드밸런스 할 것이다.
---------------------------------------------------------------------------------------------------------------------------------------------
1. 디플로이먼트의 개념
- K8S에서 일반적으로 Replicatoin Controller(RC)를 이용해서 배포하지 않고 Deployment라는 개념 사용
- 복제된(replicated) 애플리케이션을 관리하는 API 객체
- 각 레플리카는 각각 하나의 Pod로 대표되며, 그러한 Pod들은 클러스터 내 노드들에 걸쳐 배포된다.
- ReplicaSet(+Pod) 생성
- 롤링 업데이트 등을 할 때 RC를 두 개를 만들어야 하고 하나씩 Pod의 수를 수동으로 조정해야 하기 때문에 이를 자동화해서 추상화한 개념이 Deployment
- Deployment는 기본적으로 Replicatoin Controller(RC)를 생성하고 이를 관리하는 역할
2. 디플로이먼트의 특징
- 디플로이먼트는 K8S가 애플리캐이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시
- 디플로이먼트가 만들어지면, K8S 마스터가 해당 애플리캐이션 인스턴스를 클러스터의 개별 노드에 스케줄
- 애플리캐이션 인스턴스가 생성되면, K8S 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를 모니터링
- 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 매커니즘을 제공
* 디플로이먼트는 애플리캐이션 인스턴스를 생성하고 업데이트하는 역할을 담당
- kubectl 이라는 cli를 통해 디플로이먼트를 생성 및 관리
- kubectl은 클러스터와 상호 작용하기 위해 K8S API를 사용
- 디플로이먼트를 생성할 때, 애플리캐이션에 대한 컨테이너 이미지와 구동시키고자 하는 복제 수를 지정
* 애플리케이션이 K8S 상에 배포되려면 지원되는 컨테이너 형식 중 하나로 패키지 되어야 한다.
---------------------------------------------------------------------------------------------------------------------------------------------
1. ConfigMap 개념
- 컨테이너에서 필요한 환경설정 내용을 컨테이너와 분리해서 제공해 주기 위한 기능 / 클라우드 네이티브 아키텍처에서 컨테이너는 변하지 않는 자원
- 비 기밀 데이터를 key-value 쌍으로 저장하기 위해 사용하는 API 객체
- 컨테이너 이지미에서 설정 데이터를 분리(decouple)시키기 위한 것
- 컨테이너 이미지에서 사용하는 환경변수와 같은 세부 정보를 분리하고, 그 환경변수에 대한 값을 외부로 노출 시키지 않고 내부에 존재하는 스토리지에 저장해서 사용하는 방법
- 환경변수, 커맨드라인 인자, 볼륨 내의 설정파일로 사용 가능
- ConfigMap을 사용하면 컨테이너 이미지에서 해당 환경에 국한된 설정을 분리 가능 / 애플리케이션을 어디로든 쉽게 이전 가능(portable)
- ConfigMap을 변경하더라도 Running 상태의 Pod에 곧바로 적용되지 않으며 Pod를 재기동 해야 한다.
- 생성된 ConfigMap은 kubectl get configmap 명령으로 확인
2. ConfigMap 사용법 : ConfigMap을 컨테이너에서 가져다 사용하는 방법은 3가지
- File systme : Pod에 ConfigMap을 mount할 수 있다. Key 이름에 따라 각 항목의 파일이 생성됨 / 해당 파일의 내용은 값으로 설정
- Enviroment variable : ConfigMap을 사용해 환경변수의 값을 동적으로 설정
- Command-line arguement : K8S는 ConfigMap 값을 기반으로 컨테이너에 대한 명령줄을 동적으로 생성하도록 지원
3. K8S에서 애플리케이션을 배포하는 방법은 블루/그린, 카날리 배포, 롤링 업데이트 등에 존재한다. 롤링 업데이트는 Pod 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 하는 방법이다.
K8S 디플로이먼트는 복제된(replicated) 애플리케이션을 관리하는 API 객체로 각 레플리카는 각각 하나의 Pod로 대표되며, 그러한 Pod들은 클러스터 내 노드들에 걸쳐 배포된다.
ConfigMap은 비 기밀 데이터를 key-value 쌍으로 저장하기 위해 사용하는 API 객체로 컨테이너에서 필요한 환경설정 내용을 컨테이너와 분리해서 제공해 주기 위한 기능을 제공한다.
'개발 및 관리 > 클라우드' 카테고리의 다른 글
K8S 클러스터 네트워킹 (0) | 2023.09.13 |
---|---|
K8S 모니터링 시스템 , 모니터링 아키텍처 및 시스템 구축 (0) | 2023.09.10 |
K8S, Volume 기본 개념 (0) | 2023.09.08 |
K8S 아키텍처, 마스터 노드 (0) | 2023.09.07 |
(K8S 기본 오브젝트) Pod, Volume, Service, Namespace, Label, Controller (0) | 2023.09.07 |