안전한 업그레이드 실행 시작

개요

이 문서에서는 AOSM(Azure Operator Service Manager) SUP(안전한 업그레이드 실행)를 소개합니다. 이 기능 집합을 사용하면 최종 사용자가 해당 경우 파트너 ISSU 요구 사항을 준수하면서 Azure Operator Nexus에서 호스트되는 CNF 워크로드의 복잡한 업그레이드를 안전하게 실행할 수 있습니다. SUP 기능과 성능을 확장하려면 이러한 서비스에서 향후 문서를 찾아보세요.

소개

Azure Operator Service Manager가 지원하는 특정 네트워크 서비스는 시간이 지남에 따라 소프트웨어 업데이트가 필요한 하나에서 여러 개의 컨테이너 기반 네트워크 기능(CNF)으로 구성됩니다. 각 업데이트에서 네트워크 서비스에 미치는 영향을 최소화하면서 종속 네트워크 함수 애플리케이션(NfApp)을 특정 순서로 업그레이드하면서 하나 이상의 Helm 작업을 실행해야 합니다. Azure Operator Service Manager에서 안전한 업그레이드 실행은 Azure Operator Nexus에서 네트워크 서비스를 업데이트하는 데 필요한 CNF 작업을 자동화할 수 있는 기능 집합을 나타냅니다.

  • SNS 평판 업데이트 - NFDV의 모든 NfApp에서 Helm 업그레이드 작업을 실행합니다.
  • Nexus 플랫폼 - Nexus 플랫폼 대상에서 SNS 평판 작업을 지원합니다.
  • 작업 시간 제한 - 각 NfApp 작업에 대한 시간 제한을 설정하는 기능입니다.
  • 동기 작업 - 한 번에 하나의 직렬 NfApp 작업을 실행하는 기능입니다.
  • 실패 시 일시 중지 - 플래그에 따라 마지막 NfApp 작업만 롤백하도록 실패 동작을 설정합니다.
  • 단일 차트 테스트 유효성 검사 - 만들기 또는 업데이트 후 Helm 테스트 작업을 실행합니다.
  • 리팩터링된 SNS 평판 - 향상된 메서드로, 업데이트 순서 및 정리 검사를 추가합니다.

업그레이드 접근 방식

기존 Azure Operator Service Manager SNS(사이트 네트워크 서비스)를 업데이트하기 위해 운영자는 배포된 SNS 리소스에 대해 평판 업데이트 요청을 실행합니다. SNS에 NfApp이 여러 개 있는 CNF가 포함된 경우 요청이 NFDV(네트워크 함수 정의 버전)에 정의된 모든 NfApp으로 분산됩니다. 기본적으로, 순서대로 나타나며, 또는 선택적으로 UpdateDependsOn 매개 변수에 의해 정의된 순서입니다.

각 NfApp에 대해 평판 업데이트 요청은 Helm 차트 버전 증가, Helm 값 추가/제거 및/또는 NfApp 추가/제거를 지원합니다. 시간 제한은 알려진 허용 런타임에 따라 NfApp당 설정할 수 있지만 NfApp은 직렬 순으로만 처리할 수 있습니다. 평판 업데이트는 다음 처리 논리를 구현합니다.

  • applicationEnablement가 false로 설정된 NFApp의 경우 건너뜁니다.
  • 이전 및 새 NFDV(네트워크 함수 정의 버전) 간에 공통된 NFApp의 경우 업그레이드 구성 요소를 트리거합니다.
  • 새 NFDV에 추가된 NFApp의 경우 만들기 구성 요소를 트리거합니다.

결과를 보장하기 위해 NfApp 테스트는 Helm, Helm 업그레이드 사전/사후 테스트 또는 독립 실행형 Helm 테스트를 사용하여 지원됩니다. 사전/사후 테스트 실패의 경우 원자성 매개 변수가 적용됩니다. atomic/true를 사용하면 실패한 차트가 롤백됩니다. atomic/false를 사용하면 롤백이 실행되지 않습니다. 독립 실행형 Helm 테스트의 경우 rollbackOnTestFailure 매개 변수를 적용했습니다. rollbackOnTestFailure/true를 사용하면 실패한 차트가 롤백됩니다. rollbackOnTestFailure/false를 사용하면 롤백이 실행되지 않습니다.

필수 조건

Azure Operator Service Manager를 사용하여 업그레이드를 계획할 때 업그레이드 실행 전에 다음 요구 사항을 해결하여 업그레이드를 시도하는 데 소요된 시간을 최적화합니다.

  • 게시자 및/또는 디자이너 워크플로를 사용하여 업데이트된 아티팩트를 온보딩합니다.

    • 게시자, 저장소, NSDg(네트워크 서비스 디자인) 및 NFDg(네트워크 함수 디자인 그룹)는 정적이며 변경할 필요가 없습니다.
      • 새 차트와 이미지를 저장하려면 새 아티팩트 매니페스트가 필요합니다. 자세한 내용은 온보딩 설명서를 참조하여 새 차트 및 이미지 업로드에 관한 세부 정보를 확인하세요.
    • 기존 NFDg 및 NSDg에서 새 NFDV 및 NSDV(네트워크 서비스 디자인 버전)가 필요합니다.
      • NFDV에 대한 기본 변경 내용을 단계별 섹션으로 다룹니다.
      • 새 NSDV는 새 CGS(구성 그룹 스키마) 버전이 도입되는 경우에만 필요합니다.
    • 필요한 경우 새 CGS입니다.
      • 업그레이드에서 노출된 새 구성 매개 변수를 도입하는 경우 필요합니다.
  • 운영자 워크플로를 사용하여 업데이트된 아티팩트를 만듭니다.

    • 필요한 경우 새 CGS를 기반으로 새 CGV(구성 그룹 값)를 만듭니다.
    • 기존 사이트 및 사이트 네트워크 서비스 개체를 확인하여 페이로드를 재사용하고 제작합니다.
  • 업그레이드 매개변수가 업그레이드에 대한 신뢰도와 원하는 실패 동작에 따라 설정되도록 템플릿을 업데이트합니다다.

    • 프로덕션에 사용되는 설정은 오류 세부 정보를 표시하지 않을 수 있지만, 디버깅 또는 테스트에 사용되는 설정은 이러한 세부 정보를 노출하도록 선택할 수 있습니다.

업그레이드 절차

다음 프로세스에 따라 Azure Operator Service Manager를 사용하여 업그레이드를 트리거합니다.

새 NFDV 리소스 만들기

새 NFDV 버전의 경우 유효한 SemVer 형식이어야 하며, 패치 및 마이너 버전의 증분식 상향 업데이트만 허용됩니다. 낮은 NFDV 버전은 허용되지 않습니다. NFDV 2.0.0을 사용하여 배포된 CNF의 경우, 새 NFDV 버전이 2.0.1 또는 2.1.0일 수는 있지만 1.0.0 또는 3.0.0일 수 없습니다.

새 NFDV 매개 변수 업데이트

Helm 차트 버전을 업데이트하거나, 필요에 따라 Helm 값을 업데이트하거나 매개 변수화할 수 있습니다. NfApp이 배포된 버전에 없는 경우 새 NfApp을 추가할 수도 있습니다.

원하는 NfApp 순서에 대한 NFDV 업데이트

UpdateDependsOn은 업데이트 작업 중에 NfApp의 순서를 지정하는 데 사용하는 NFDV 매개 변수입니다. UpdateDependsOn이 제공되지 않으면 NFDV에 나타나는 CNF 애플리케이션의 직렬 순서가 사용됩니다.

원하는 업그레이드 동작에 대한 NFDV 업데이트

원하는 CNF 애플리케이션 시간 제한, 원자성 매개 변수, rollbackOnTestFailure 매개 변수를 설정해야 합니다. 업그레이드에서 신뢰도가 높아지면 시간이 지남에 따라 이러한 매개 변수를 변경하는 것이 유용할 수 있습니다.

SNS 평판 발행

온보딩이 완료되면 평판 작업이 제출됩니다. NfApp의 수, 크기 및 복잡성에 따라 평판 작업을 완료하는 데 다소 시간(몇 시간)이 걸릴 수 있습니다.

평판 결과 검사

평판이 성공적인 결과를 보고하는 경우 업그레이드가 완료되고 사용자가 서비스의 상태 및 가용성의 유효성을 검사해야 합니다. 평판에서 오류를 보고하는 경우 업그레이드 실패 복구 섹션의 단계에 따라 계속합니다.

재시도 절차

평판 업데이트가 실패하는 경우 다음 프로세스를 따라 작업을 다시 시도할 수 있습니다.

실패한 NfApp 진단

로그 및 기타 디버깅 정보를 분석하여 NfApp 오류의 근본 원인을 해결합니다.

완료된 차트 수동으로 건너뛰기

실패한 NfApp을 수정한 후 업그레이드 재시도를 시도하기 전에 applicationEnablement 매개 변수를 변경하여 재시도 동작을 가속화하는 것이 좋습니다. 이 매개 변수는 NfApp을 건너뛰어야 하는 false로 설정할 수 있습니다. 이 매개 변수는 NfApp에 업그레이드가 필요하지 않은 경우에 유용할 수 있습니다.

SNS 평판 발행 재시도(성공할 때까지 반복)

applicationEnablement 플래그를 사용하여 건너뛰지 않는 한 기본적으로 평판은 선언된 업데이트 순서로 NfApp을 다시 시도합니다.

applicationEnablement를 사용하는 방법

NFDV 리소스의 deployParametersMappingRuleProfile 아래에는 type 열거형의 applicationEnablement 속성이 있습니다. 이 속성은 알 수 없음, 사용 또는 사용 안 함 값을 사용합니다. NF 배포 중에 NfApp 작업을 제외하는 데 사용할 수 있습니다.

게시자의 변경 사항

applicationEnablement 속성의 경우 게시자에는 기본값을 제공하거나 매개 변수화하는 두 가지 옵션이 있습니다.

샘플 NFDV

NFDV는 publisher에서 applicationEnablement에 대한 기본값을 설정하는 데 사용됩니다.

{ 
      "location":"<location>", 
      "properties": {
      "networkFunctionTemplate": {
        "networkFunctionApplications": [
          {
            "artifactProfile": {
              "helmArtifactProfile": { 
                "var":"var"
              },
              "artifactStore": {
                "id": "<artifactStore id>"
              }
            },
            "deployParametersMappingRuleProfile": {
              "helmMappingRuleProfile": {
                "releaseNamespace": "{deployParameters.role1releasenamespace}",
                "releaseName": "{deployParameters.role1releasename}"
              },
              "applicationEnablement": "Enabled"
            },
            "artifactType": "HelmPackage",
            "dependsOnProfile": "null",
            "name": "hellotest"
          },
          {
            "artifactProfile": {
              "helmArtifactProfile": {
                 "var":"var"
              },
              "artifactStore": {
                "id": "<artifactStore id>"
              }
            },
            "deployParametersMappingRuleProfile": {
              "helmMappingRuleProfile": {
                "releaseNamespace": "{deployParameters.role2releasenamespace}",
                "releaseName": "{deployParameters.role2releasename}"
              },
              "applicationEnablement": "Enabled"
            },
            "artifactType": "HelmPackage",
            "dependsOnProfile": "null",
            "name": "hellotest1"
          }
        ],
        "nfviType": "AzureArcKubernetes"
      },
      "description": "null",
      "deployParameters": {"type":"object","properties":{"role1releasenamespace":{"type":"string"},"role1releasename":{"type":"string"},"role2releasenamespace":{"type":"string"},"role2releasename":{"type":"string"}},"required":["role1releasenamespace","role1releasename","role2releasenamespace","role2releasename"]},
      "networkFunctionType": "ContainerizedNetworkFunction"
    }
}

CGS(샘플 구성 그룹 스키마) 리소스

CGS는 게시자가 runt-time에 Operator에서 제공하는 roleOverrideValues 변수를 요구하는 데 사용됩니다. 이러한 roleOverrideValues에는 applicationEnablement에 대한 비 dedfault 설정이 포함될 수 있습니다.

{
  "type": "object",
  "properties": {
    "location": {
      "type": "string"
    },
    "nfviType": {
      "type": "string"
    },
    "nfdvId": {
      "type": "string"
    },
    "helloworld-cnf-config": {
      "type": "object",
      "properties": {
        "role1releasenamespace": {
          "type": "string"
        },
        "role1releasename": {
          "type": "string"
        },
        "role2releasenamespace": {
          "type": "string"
        },
        "role2releasename": {
          "type": "string"
        },
        "roleOverrideValues1": {
          "type": "string"
        },
        "roleOverrideValues2": {
          "type": "string"
        }
      },
      "required": [
        "role1releasenamespace",
        "role1releasename",
        "role2releasenamespace",
        "role2releasename",
        "roleOverrideValues1",
        "roleOverrideValues2"
      ]
    }
  },
  "required": [
    "nfviType",
    "nfdvId",
    "location",
    "helloworld-cnf-config"
  ]
}

연산자의 변경 사항

연산자는 NFDV에 정의된 기본 applicationEnablement 값을 상속합니다. applicationEnablement가 CGS에서 매개 변수화되면 런타임에 deploymentValues 속성을 통해 전달되어야 합니다.

CGV(샘플 구성 그룹 값) 리소스

CGV는 연산자가 runt-time에 roleOverrideValues 변수를 설정하는 데 사용됩니다. roleOverrideValues에는 applicationEnablement에 대한 비 dedfault 설정이 포함되어 있습니다.

{
  "location": "<location>",
  "nfviType": "AzureArcKubernetes",
  "nfdvId": "<nfdv_id>",
  "helloworld-cnf-config": {
    "role1releasenamespace": "hello-test-releasens",
    "role1releasename": "hello-test-release",
    "role2releasenamespace": "hello-test-2-releasens",
    "role2releasename": "hello-test-2-release",
    "roleOverrideValues1": "{\"name\":\"hellotest\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\":\"Enabled\",\"helmMappingRuleProfile\":{\"releaseName\":\"override-release\",\"releaseNamespace\":\"override-namespace\",\"helmPackageVersion\":\"1.0.0\",\"values\":\"\",\"options\":{\"installOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"}}}}}",
    "roleOverrideValues2": "{\"name\":\"hellotest1\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Enabled\"}}"
  }
}

샘플 NF ARM 템플릿

NF ARM 템플릿은 운영자가 CGV에서 설정한 roleOverrideValues 변수를 RP(리소스 공급자)에 제출하는 데 사용됩니다. 연산자는 필요에 따라 CGV에서 applicationEnablement 설정을 변경하고 동일한 NF ARM 템플릿을 다시 제출하여 반복 간의 동작을 변경할 수 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nameValue": {
      "type": "string",
      "defaultValue": "HelloWorld"
    },
    "locationValue": {
      "type": "string",
      "defaultValue": "eastus"
    },
    "nfviTypeValue": {
      "type": "string",
      "defaultValue": "AzureArcKubernetes"
    },
    "nfviIdValue": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "defaultValue": {}
    },
    "nfdvId": {
      "type": "string"
    }
  },
  "variables": {
    "deploymentValuesValue": "[string(createObject('role1releasenamespace', parameters('config').role1releasenamespace, 'role1releasename',parameters('config').role1releasename, 'role2releasenamespace', parameters('config').role2releasenamespace, 'role2releasename',parameters('config').role2releasename))]",
    "nfName": "[concat(parameters('nameValue'), '-CNF')]",
    "roleOverrideValues1": "[string(parameters('config').roleOverrideValues1)]",
    "roleOverrideValues2": "[string(parameters('config').roleOverrideValues2)]"
  },
  "resources": [
    {
      "type": "Microsoft.HybridNetwork/networkFunctions",
      "apiVersion": "2023-09-01",
      "name": "[variables('nfName')]",
      "location": "[parameters('locationValue')]",
      "properties": {
        "networkFunctionDefinitionVersionResourceReference": {
          "id": "[parameters('nfdvId')]",
          "idType": "Open"
        },
        "nfviType": "[parameters('nfviTypeValue')]",
        "nfviId": "[parameters('nfviIdValue')]",
        "allowSoftwareUpdate": true,
        "configurationType": "Open",
        "deploymentValues": "[string(variables('deploymentValuesValue'))]",
        "roleOverrideValues": [
          "[variables('roleOverrideValues1')]",
          "[variables('roleOverrideValues2')]"
        ]
      }
    }
  ]
}

서비스 내 업그레이드 지원

가능한 경우 Azure Operator Service Manager는 서비스를 중단하지 않고 배포 버전을 높이는 업그레이드 방식인 서비스 내 업그레이드를 지원합니다. 하지만 서비스를 중단 없이 업그레이드하는 기능은 서비스 자체의 기능입니다. 서비스 내 업그레이드 기능을 이해하려면 서비스 게시자에게 문의하세요.

예측 목표 전달

Azure Operator Service Manager는 안전한 업그레이드 실행 기능 집합을 계속 확장하고, 제공된 업데이트 서비스를 개선합니다. 현재 향후 출시를 고려하고 있는 기능은 다음과 같습니다.

  • 업그레이드 옵션 컨트롤 개선 - 매개 변수를 더 효과적으로 노출합니다.
  • 변경 사항이 없는 경우 NfApp 건너뛰기 - 변경 사항이 없는 경우 NfApp 처리를 건너뜁니다.
  • 실패 시 NFDV 롤백 실행 - 플래그에 따라 실패 시 완료된 모든 NfApp을 롤백합니다.
  • 비동기적으로 작동 - 한 번에 여러 NfApp 작업을 실행하는 기능입니다.
  • 이미지 다운로드 - 에지 리포지토리에 이미지를 미리 로드하는 기능입니다.
  • 유효성 검사를 위한 차트 지정 - 특정 NfApp에서만 Helm 테스트를 실행하는 기능입니다.