본문 바로가기
WIKI 기술 지식 베이스

롤링 업데이트

원문 보기 위키 갱신

롤링 업데이트 (Rolling updates)

오퍼레이터를 이용하면 애플리케이션이 계속 실행 중인 상태에서도 클러스터에 사용되는 PostgreSQL 버전을 바꿀 수 있어요.

롤링 업그레이드는 다음 경우에 트리거돼요:

  • 클러스터 스펙에서 imageName 속성을 바꿀 때;

  • 클러스터 스펙의 .spec.postgresql.extensions stanza에 있는 확장 이미지 목록을 바꿀 때;

  • 이미지 카탈로그가 클러스터에서 사용 중인 메이저 버전용 새 이미지로 업데이트될 때;

  • PostgreSQL 구성 변경이 적용되기 위해 재시작이 필요할 때;

  • Cluster의 .spec.resources 값을 바꿀 때;

  • 오퍼레이터가 업데이트되어 Pod들이 최신 인스턴스 매니저를 실행하도록 보장될 때 (인플레이스 업데이트가 활성화된 경우는 제외).

롤링 업그레이드 동안 오퍼레이터는 가장 높은 시리얼(serial)을 가진 Pod부터 시작해서 모든 레플리카를 한 번에 하나씩 업그레이드해요.

프라이머리가 항상 마지막으로 업그레이드되는 노드예요.

롤링 업데이트는 구성 가능하며, 완전 자동(unsupervised) 또는 사람의 개입이 필요한(supervised) 방식 중 하나로 동작할 수 있어요.

업그레이드는 데이터를 다시 클로닝하지 않고 CloudNativePG의 정체성을 유지해요. Pod는 삭제되었다가 같은 PVC와 (필요하다면) 새 이미지로 다시 생성돼요.

롤링 업데이트 절차 동안 각 서비스의 엔드포인트는 클러스터 상태를 반영해 이동하므로, 애플리케이션은 업데이트 중인 노드를 무시할 수 있어요.

출처: 문서

본문

자동 업데이트 (unsupervised)

primaryUpdateStrategy가 unsupervised로 설정되면 롤링 업데이트 프로세스는 쿠버네티스가 관리하며 완전히 자동으로 진행돼요. 레플리카가 업그레이드되면 선택된 primaryUpdateMethod 작업이 프라이머리에서 실행돼요. 무감독(unsupervised) 업데이트가 기본 동작이에요.

primaryUpdateMethod 옵션은 다음 값 중 하나를 받아요:

  • restart: 가능하다면 프라이머리 인스턴스가 실행 중인 Pod의 자동 재시작을 수행해요. 불가능하면 재시작 요청은 무시되고 스위치오버(switchover)가 발행돼요. 이것이 기본 동작이에요.

  • switchover: 스위치오버 작업이 자동으로 수행되어, 가장 정렬된(aligned) 레플리카를 새 대상 프라이머리로 설정하고 이전 프라이머리 Pod를 종료해요.

:::warning primaryUpdateMethod가 switchover로 설정되면 이미지 이름과 PostgreSQL 구성 파라미터를 동시에 변경할 수 없어요. 오퍼레이터는 이런 업데이트를 검증 오류로 거부해요. 이미지와 구성을 둘 다 업데이트해야 한다면 변경을 순차적으로 수행해야 해요: 이미지를 먼저 업데이트하고 롤링 업데이트가 완료될 때까지 기다린 다음 구성을 업데이트하거나(또는 그 반대로), 그렇게 해야 해요. 이 제한은 새 이미지 버전에 묶인 구성 변경이 스위치오버 과정에서 아직 옛 이미지를 실행 중인 Pod에 적용되면 PostgreSQL이 실패할 수 있기 때문이에요. :::

업데이트 방법에 대한 일률적인 구성은 없어요. 데이터베이스의 실제 작업량, RPO와 RTO 요구사항, PostgreSQL 아키텍처가 공유(shared)인지 쉐어드 낫싱(shared nothing)인지 등 여러 요소에 따라 달라지죠.

실제로 PostgreSQL은 프라이머리/스탠바이 아키텍처 DBMS이기 때문에, 업데이트 과정은 필연적으로 애플리케이션에 다운타임을 만든다. 여러분의 상황에서 고려해야 할 중요한 측면 중 하나는 Pod가 새 PostgreSQL 컨테이너 이미지를 내려받는 데 걸리는 시간인데, 이는 쿠버네티스 클러스터 설정과 사양에 따라 달라져요. switchover 방식은 승격된 인스턴스가 이미 대상 컨테이너 이미지 버전을 실행하고 있음을 보장해요. 반면 restart 방식은 프라이머리 Pod가 종료된 뒤 오리진 레지스트리에서 이미지를 내려받아야 할 수도 있어요. 롤링 업데이트 절차에서 데이터베이스에 restart와 switchover 중 어느 것이 더 나은지 결정하는 것은 여러분의 몫이에요.

수동 업데이트 (supervised)

primaryUpdateStrategy가 supervised로 설정되면, 모든 레플리카가 업그레이드된 직후 롤링 업데이트 프로세스가 일시 중지돼요.

이 단계는 수동 스위치오버나 인플레이스 재시작으로만 완료할 수 있어요. 이미지 업그레이드는 인플레이스 재시작으로 적용할 수 없으므로, 그런 경우에는 스위치오버가 필요하다는 점을 기억하세요.

스위치오버는 다음과 같이 트리거할 수 있어요:

kubectl cnpg promote [cluster] [new_primary]

재시작은 다음과 같이 트리거할 수 있어요:

kubectl cnpg restart [cluster] [current_primary]

더 자세한 정보는 cnpg 플러그인 페이지에서 확인할 수 있어요.

더 알아보기 (Learn more)