다음을 통해 공유


업그레이드 실패 동작 제어

개요

이 가이드에서는 컨테이너 CNF(네트워크 함수)에 대한 AOSM(Azure Operator Service Manager) 업그레이드 실패 동작 기능에 대해 설명합니다. 이러한 기능은 AOSM 안전 업그레이드 사례 이니셔티브의 일부로 실패 시 일시 중지와 실패 시 롤백을 통해 시작 지점으로의 복귀 중에서 더 빠른 재시도 중에서 선택할 수 있습니다.

오류 발생 후 일시 중지

AOSM을 사용하는 모든 업그레이드는 SNS(사이트 네트워크 서비스) 평판 opreation으로 시작됩니다. 평판 작업은 NFDV(네트워크 함수 디자인 버전)에 있는 NfApps(네트워크 함수 애플리케이션)를 처리합니다. 평판 작업은 다음 기본 논리를 구현합니다.

  • NfApps는 updateDependsOn 순서에 따라 처리되거나 순차적으로 표시됩니다.
  • "applicationEnabled" 매개 변수가 사용하지 않도록 설정된 NfApps는 건너뜁니다.
  • NFApps가 있지만 새 NFDV에서 참조하지 않는 경우 삭제됩니다.
  • NfApp 업그레이드가 실패하고 롤백이 고려되면 실행 시퀀스가 일시 중지됩니다.
  • 이 오류로 인해 NF 리소스가 실패 상태로 남습니다.

실패 시 일시 중지 시 AOSM은 testOptions, installOptions 또는 upgradeOptions 매개 변수를 통해 실패한 NfApp만 롤백합니다. 실패한 NfApp을 진행하는 NfApp에 대해 아무 작업도 수행되지 않습니다. 이 방법을 사용하면 최종 사용자가 실패한 NfApp 문제를 해결한 다음 해당 시점부터 업그레이드를 다시 시작할 수 있습니다. 기본 동작으로, 이 메서드는 가장 효율적인 방법이지만 혼합 버전 상태에서 NF(네트워크 함수) 불일치가 발생할 수 있습니다.

실패 시 롤백

NfApp 버전이 일치하지 않는 위험을 해결하기 위해 이제 AOSM은 실패 시 NF 수준 롤백을 지원합니다. 이 옵션을 사용하도록 설정하면 NfApp 작업이 실패하면 실패한 NfApp과 이전에 완료된 모든 NfApps를 모두 초기 버전 상태로 롤백할 수 있습니다. 이 메서드는 NF가 NfApp 버전 불일치에 노출되는 시간을 최소화하거나 제거합니다. 오류 기능에 대한 선택적 롤백은 다음과 같이 작동합니다.

  • 사용자가 sSNS 평판 작업을 시작하고 실패 시 롤백을 사용하도록 설정합니다.
  • 현재 NfApp 버전의 스냅샷이 캡처되고 저장됩니다.
  • 스냅샷은 성공적으로 완료된 역방향 작업을 위해 수행된 개별 NfApp 작업을 결정하는 데 사용됩니다.
    • 삭제된 구성 요소에 대한 "helm install" 작업,
    • 업그레이드된 구성 요소에 대한 "helm rollback" 작업,
    • 새로 설치된 구성 요소에 대한 "helm delete" 작업
  • NfApp 오류가 발생하면 AOSM은 업그레이드 전에 NfApps를 스냅샷 버전 상태로 복원하고 가장 최근의 작업은 먼저 되돌려 줍니다.

참고 항목

  • 사용자가 실패 시 롤백을 사용하도록 설정하지 않으면 AOSM에서 스냅샷을 만들지 않습니다.
  • 실패 시 롤백은 성공적으로 완료된 NFApps에만 적용됩니다.
    • testOptions, installOptions 또는 upgradeOptions 매개 변수를 사용하여 실패한 NfApp의 롤백을 제어합니다.

AOSM은 각 결과에 따라 다음과 같은 작업 상태 및 메시지를 반환합니다.

  - Upgrade Succeeded
    - Provisioning State: Succeeded
    - Message: <empty>
  - Upgrade Failed, Rollback Succeeded
    - Provisioning State: Failed
    - Message: Application(<ComponentName>) : <Failure Reason>; Rollback succeeded
  - Upgrade Failed, Rollback Failed
    - Provisioning State: Failed
    - Message: Application(<ComponentName>) : <Failure reason>; Rollback Failed (<RollbackComponentName>) : <Rollback Failure reason>

실패 시 롤백을 구성하는 방법

실패 동작을 제어하는 가장 유연한 방법은 NF 페이로드에서 roleOverrideValues를 통해 CGV(구성 그룹 값) 제어를 허용하도록 새 CGS(구성 그룹 스키마) 매개 변수인 rollbackEnabled를 확장하는 것입니다. 먼저 CGS 매개 변수를 정의합니다.

{
  "description": "NF configuration",
  "type": "object",
  "properties": {
    "nfConfiguration": {
      "type": "object",
      "properties": {
        "rollbackEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "rollbackEnabled"
      ]
    }
  }
}

참고 항목

  • roleOverrideValues 매개 변수를 통해 nfConfiguration을 제공하지 않으면 기본적으로 롤백이 비활성화됩니다.

새 rollbackEnable 매개 변수가 정의된 상태에서 운영자는 이제 NF 리포지토리 페이로드의 일부로 roleOverrideValues에서 런타임 값을 제공할 수 있습니다.

example:
{
  "location": "eastus",
  "properties": {
    // ...
    "roleOverrideValues": [
          "{\"nfConfiguration\":{\"rollbackEnabled\":true}}",
            "{\"name\":\"nfApp1\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Disabled\"}}",
            "{\"name\":\"nfApp2\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Disabled\"}}",
          //... other nfapps overrides
       ]
  }
}

참고 항목

  • 각 roleOverrideValues 항목은 NfAapps의 기본 동작을 재정의합니다.
  • roleOverrideValues에서 nfConfiguration의 여러 항목이 발견되면 NF 평판이 잘못된 요청으로 반환됩니다.

오류 시 롤백 문제를 해결하는 방법

Pod 상태 이해

다양한 Pod 상태를 이해하는 것은 효과적인 문제 해결에 매우 중요합니다. 다음은 가장 일반적인 Pod 상태입니다.

  • 보류 중: Kubernetes에서 Pod 예약을 진행 중입니다.
  • 실행 중: Pod의 모든 컨테이너가 실행 중이며 정상 상태입니다.
  • 실패: Pod에서 하나 이상의 컨테이너가 0이 아닌 종료 코드로 종료됩니다.
  • CrashLoopBackOff: Pod 내의 컨테이너가 반복적으로 충돌하고 Kubernetes에서 다시 시작할 수 없습니다.
  • ContainerCreating: 컨테이너 런타임에 의해 컨테이너 만들기가 진행 중입니다.

Pod 상태 및 로그 확인

먼저 kubectl 명령을 사용하여 Pod 상태 및 로그를 확인합니다.

$ kubectl get pods
$ kubectl logs <pod-name>

get Pod 명령은 현재 네임스페이스의 모든 Pod와 현재 상태를 나열합니다. logs 명령은 특정 Pod에 대한 로그를 검색하여 오류 또는 예외를 검사할 수 있도록 합니다. 네트워킹 문제를 해결하려면 다음 명령을 사용합니다.

$ kubectl get services
$ kubectl describe service <service-name>

get services 명령은 현재 네임스페이스의 모든 서비스를 표시합니다. 이 명령은 연결된 엔드포인트 및 관련 오류 메시지를 포함하여 특정 서비스에 대한 세부 정보를 제공합니다. PVC에 문제가 발생하는 경우 다음 명령을 사용하여 디버그할 수 있습니다.

$ kubectl get persistentvolumeclaims
$ kubectl describe persistentvolumeclaims <pvc-name>

"get persistentvolumeclaims" 명령은 현재 네임스페이스의 모든 PVC를 나열합니다. 설명 명령은 상태, 연결된 스토리지 클래스 및 관련 이벤트 또는 오류를 포함하여 특정 PVC에 대한 자세한 정보를 제공합니다.