이 문서에서는 표준 순차적 업데이트를 간략하게 설명한 후, 특별한 종류의 순차적 업데이트인 일시 급증 업데이트를 자세하게 설명합니다. 표준 순차적 업데이트와 달리 일시 급증 업데이트를 사용하면 업데이트 속도를 구성할 수 있습니다. 일시 급증 업데이트를 사용하면 중단된 업데이트가 워크로드에 미치는 영향을 어느 정도 제어할 수 있습니다.
AWS용 GKE에 일시 급증 업데이트를 사용 설정하고 구성하는 방법은 노드 풀의 일시 급증 업데이트 구성을 참조하세요.
표준 순차적 업데이트 작동 방식
노드 풀의 주석을 수정할 때와 같이 노드 풀 업데이트 시 노드를 다시 시작할 필요가 없으므로 순차적 업데이트가 필요하지 않습니다. AWS용 GKE가 리소스를 다시 시작하거나 다시 만들 필요 없이 노드 풀에 변경사항을 적용할 수 있으면 중단이 방지됩니다.
그러나 대부분의 AWS용 GKE의 노드 풀 업데이트에서는 일반적으로 기존 노드를 종료하고 업데이트된 설정으로 새 노드를 실행합니다. 기존 노드 종료 프로세스는 워크로드를 방해할 수 있습니다.
기본적으로 AWS용 GKE는 표준 순차적 업데이트를 수행합니다. 이 방법은 노드를 한 번에 하나씩 업데이트하고 '만들기 전에 종료' 방식을 사용하여 노드를 대체합니다. 즉, 노드가 먼저 종료된 후 새로 업데이트된 노드가 실행됩니다. 특정 시점에 노드 하나만 종료되고 교체되므로 중단이 최소화됩니다.
다음은 표준 순차적 업데이트 중에 AWS용 GKE가 수행하는 단계입니다.
- 노드 풀에서 노드를 선택하고 새 포드가 시작되지 않도록 노드를 사용 불가로 표시합니다. 이 작업을 차단이라고 합니다.
- 활성 포드를 차단된 노드에서 클러스터 내 다른 사용 가능한 노드로 재배치합니다. 다른 노드에 충분한 용량이 있으면 제거된 포드를 수용합니다. 그렇지 않으면 표준 순차적 업데이트 중에 활성 상태로 유지되는 클러스터 자동 확장 처리에서 수직 확장을 시작하고 제거된 포드를 예약하기에 충분한 용량이 있는지 확인하기 위해 추가 노드를 프로비저닝합니다. 이 프로세스 중에 워크로드를 보호하기 위한 취한 조치에 대한 자세한 내용은 크기 조절 중 워크로드 보호를 참조하세요.
- 차단된 노드를 종료합니다.
- 차단된 노드를 업데이트된 설정이 있는 새 노드로 대체합니다.
- 새로 작동하는 노드에서 상태 점검을 수행합니다. 노드 풀에서 상태 점검을 실패하면
DEGRADED
상태로 표시됩니다.gcloud container aws node-pools describe
명령어를 실행하면 이 상태를 볼 수 있습니다. 노드 풀이DEGRADED
로 표시되면 새 포드가 해당 풀 내의 노드에 예약되지 않을 수 있습니다. - 풀의 모든 노드가 업데이트될 때까지 노드별로 업데이트가 계속됩니다.
일시 급증 업데이트 작동 방식
AWS용 GKE에서 표준 순차적 방법은 노드를 한 번에 하나씩 업데이트합니다. 순차적 업데이트 형태인 일시 급증 업데이트를 사용하면 여러 노드를 동시에 업데이트할 수 있습니다. 따라서 일시 급증 업데이트는 표준 순차적 업데이트보다 빠릅니다. 그러나 여러 노드를 동시에 업데이트하면 워크로드가 중단될 수 있습니다. 이 문제를 완화하기 위해 일시 급증 업데이트에는 워크로드 중단 수준을 조정할 수 있는 옵션이 제공됩니다.
일시 급증 업데이트와 표준 순차적 업데이트와의 또 다른 차이점은 노드를 교체한다는 점입니다. 표준 순차적 업데이트는 '만들기 전에 종료' 전략을 사용하여 노드를 교체합니다. 선택한 설정에 따라 일시 급증 업데이트는 '종료 전에 만들기' 전략, '만들기 전에 종료' 전략 또는 이 두 전략을 조합하여 사용할 수 있습니다.
클러스터 자동 확장 처리는 표준 순차적 업데이트보다 일시 급증 업데이트에서 더 중요한 역할을 합니다. 이는 일시 급증 업데이트 중에 AWS용 GKE 수행하는 작업의 다음 목록에서 중요한 이유입니다.
- 새 자동 확장 그룹 만들기:AWS용 GKE는 update 명령어로 지정된 수정사항으로 새 노드를 프로비저닝하고 이러한 새 노드를 새 AWS 자동 확장 그룹(ASG)에 할당합니다.
- 클러스터 자동 확장 처리 동작: 일시 급증 업데이트가 시작되면 새 자동 확장 그룹에 클러스터 자동 확장 처리가 활성화됩니다. 원래 자동 확장 그룹의 클러스터 자동 확장 처리는 비활성화됩니다. 이렇게 하면 모든 확장 작업이 새 그룹만 타겟팅합니다.
- 노드 교체: 일시 급증 업데이트 매개변수에 따라 서로 다른 노드 교체 전략이 사용됩니다.
- '종료하기 전에 만들기':
max-surge-update
매개변수가 0보다 큰 값으로 설정되면 이 전략이 활성화됩니다. 서비스 중단이 최소화되도록 원래 ASG에서 이전 노드가 종료되기 전에 새 ASG에서 새 노드가 생성됩니다. - '만들기 전에 종료': 이 방법은
max-surge-update
매개변수가 0으로 설정되고max-unavailable-update
매개변수 값이 0보다 크면 트리거됩니다. 원래 ASG의 노드가 먼저 종료된 후 새 ASG에서 새 노드가 생성됩니다.
- '종료하기 전에 만들기':
- 노드 풀 크기 조정: 업데이트 중에 노드 풀 크기(이전 ASG와 새 ASG의 노드 합계)가 노드 풀에 있는 노드의 원래 수보다 증가하거나 감소한 후에 업데이트가 시작될 수 있습니다. 특히 AWS용 GKE는 (
original_count
-max-unavailable-update
)~(original_count
+max-surge-update
) 범위 내의 총 노드 수를 유지하려고 합니다. 결국 이전 ASG(original_count
)의 노드가 새 ASG의 업데이트된 노드로 바뀝니다. 포드가 예약할 수 없지만min-nodes
및max-nodes
에서 정의한 한도 내에서 유지되면 클러스터 자동 확장 처리가 새 ASG에서 더 많은 노드를 실행할 수 있습니다.
프로세스 설명 예시
일시 급증 업데이트 작동 방식을 더 잘 이해하려면 다음 예시를 살펴보세요. 노드 5개가 포함된 노드 풀이 있고 다음 명령어를 실행한다고 가정해 보겠습니다.
gcloud container aws node-pools update production-node-pool
--cluster my-cluster \
--location us-west1 \
--max-surge-update 2 \
--max-unavailable-update 1 \
--node-version 1.27.6-gke.700
이 예시에서는 max-surge-update
가 2로, max-unavailable-update
가 1로 설정되고 개발자가 새 노드 풀 버전을 제공합니다. 즉, 노드 풀의 노드에서 실행되는 GKE 버전을 변경합니다.
이 명령어를 실행하면 일시 급증 업데이트가 트리거되고 AWS용 GKE가 다음 작업을 수행합니다.
max-surge-update
값이 2이므로 추가 노드를 2개 만듭니다.- 이러한 추가 노드 2개를 새 AWS 자동 확장 그룹에 할당합니다.
- 새 노드가 작동하면 원래 자동 확장 그룹에서 노드를 삭제합니다. AWS용 GKE는 노드를 최대 3개까지(
max-surge-update
및max-unavailable-update
의 결합된 값)를 종료하지만max-unavailable-update
값이 1이므로 항상 노드 최대 1개만 사용할 수 없게 됩니다. - 노드 풀의 모든 노드가 새 GKE 버전으로 업데이트될 때까지 이러한 단계를 반복합니다.
이 업데이트 중에 노드 풀에는 운영 노드 4~7개가 포함됩니다.
일시 급증 업데이트를 실행하기 전에 고려해야 하는 사항
일시 급증 업데이트를 실행하기 전에 다음 사항에 유의하세요.
- 이 일시 급증 단계의 일부로 생성된 추가 인스턴스에서 AWS 인스턴스 할당량 한도를 초과할 수 있습니다. 할당량이 부족하고 이러한 추가 인스턴스를 프로비저닝할 수 없으면 업데이트가 실패할 수 있습니다.
max-unavailable-update
가 0으로 설정되면 포드가 제거되고 새 노드에 다시 예약되므로 여전히 워크로드가 중단될 수 있습니다.- 동시에 업데이트할 수 있는 최대 노드 수는
max-surge-update
및max-unavailable-update
의 합계와 동일하며 20개로 제한됩니다.
필요에 따라 올바른 일시 급증 설정 선택
표준 순차적 업데이트에서는 주로 '만들기 전에 종료' 방식을 사용하지만 일시 급증 업데이트는 유연성을 더 높여줍니다. 구성에 따라 일시 급증 업데이트는 '종료 전에 만들기' 전략, '만들기 전에 종료' 전략 또는 이 두 가지의 조합을 따를 수 있습니다. 이 섹션에서는 워크로드에 가장 적합한 방법을 선택하는 데 도움이 되도록 다양한 구성을 설명합니다.
다음 표에서는 3가지 설정 예시를 보여주고 업데이트 속도와 워크로드 중단 가능성에 미치는 영향을 주로 설명합니다.
이름 | Description(설명) | 구성 |
균형 있는 설정(기본값) | 균형, 느림, 중단 최소화 | maxSurge=1, maxUnavailable=0 |
추가 리소스 없이 빠른 업데이트 | 빠름, 일시 급증 리소스 없음, 중단 최대 | maxSurge=0, maxUnavailable=20 |
중단을 보다 적게 유발하는 빠른 업데이트 | 빠름, 일시 급증 리소스가 가장 많음, 중단을 덜 유발함 | maxSurge=20, maxUnavailable=0 |
표의 각 설정은 다음 섹션에서 설명됩니다.
균형 있는 설정(기본값)
일시 급증 업데이트를 사용하는 가장 간단한 방법은 max-surge-update=1
및 max-unavailable-update=0
의 기본 구성을 사용하는 것입니다. 이 구성은 업데이트 중에 일시 급증 노드 1개만 노드 풀에 추가하고 '종료 전에 만들기' 방법을 따라 한 번에 노드 1개만 업데이트됩니다. (max-surge-update=0
, max-unavailable-update=1
)에 해당하는 표준 비일시 급증 순차적 업데이트와 달리 이 방법은 업데이트 중에 중단을 덜 유발하고 포드 재시작을 가속화하며 진행 중에는 더욱 보수적입니다.
균형 있는 설정을 채택하면 업데이트 중에 추가된 일시 급증 노드로 인해 추가 비용이 발생할 수 있습니다. 이 추가 노드가 활성 상태인 동안에는 비용이 증가하므로 일시 급증 노드가 없는 방법에 비해 전체 비용이 약간 증가합니다.
추가 리소스 없이 빠른 업데이트
중단을 허용할 수 있는 워크로드의 경우 더 빠른 업데이트 방식이 적합할 수 있습니다. max-surge-update=0
및 max-unavailable-update=20
을 구성하면 이 업데이트 방식을 수행할 수 있습니다. 이 구성을 사용하면 일시 급증 노드를 추가하지 않고도 노드 20개를 동시에 업데이트할 수 있습니다. 이 업데이트 방법은 '만들기 전에 종료' 방식을 따릅니다. 프로세스 중에 추가 일시 급증 노드가 도입되지 않으므로 이 방법이 가장 경제적이며 임시 노드와 관련된 추가 비용이 방지됩니다.
중단을 보다 적게 유발하는 빠른 업데이트
워크로드가 중단에 민감한 경우 max-surge-update=20
및 max-unavailable-update=0
설정을 사용하여 업데이트 속도를 높일 수 있습니다. 이 구성은 '종료 전에 만들기' 방식으로 노드 20개를 동시에 업데이트합니다.
그러나 워크로드에 PodDisruptionBudgets
(PDB)를 설정한 경우 업데이트 전체 속도가 제한될 수 있습니다. PDB가 특정 시점에 드레이닝할 수 있는 포드 수를 제한하기 때문입니다. PDB 구성은 다양할 수 있지만, 노드 풀에서 실행되는 워크로드 하나 이상에 값이 1인 maxUnavailable
을 사용하여 PDB를 만들면 이러한 워크로드 중 포드 하나만 한 번에 제거될 수 있으므로 전체 업그레이드 동시로드가 제한됩니다.
업데이트 프로세스 시작 시 일시 급증 노드 여러 개를 시작하면 특히 업데이트 중에 추가 노드를 추가하지 않거나 노드 몇 개를 추가하지 않는 구성에 비해 일시적으로 비용이 증가할 수 있습니다.
다음 단계
AWS용 GKE에 일시 급증 업데이트를 사용 설정하고 구성하는 방법은 노드 풀의 일시 급증 업데이트 구성을 참조하세요.