다음을 통해 공유


Helm 요구 사항 개요

Helm은 애플리케이션 수명 주기 관리를 간소화하는 데 도움이 되는 Kubernetes의 패키지 관리자입니다. Helm 패키지는 차트라고 하며 YAML 구성 및 템플릿 파일로 구성됩니다. Helm 작업을 실행하면 차트가 Kubernetes 매니페스트 파일로 렌더링되어 적절한 애플리케이션 수명 주기 작업을 트리거합니다. AOSM(Azure Operator Service Manager)과의 가장 효율적인 통합을 위해 게시자는 Helm 차트를 개발할 때 특정 모범 사례 고려 사항을 고려해야 합니다.

registryUrl 및 imagePullSecrets에 대한 고려 사항

모든 Helm 차트에는 일반적으로 registryUrl 및 imagePullSecrets가 필요합니다. 가장 일반적으로 게시자는 values.yaml에 이러한 매개 변수를 노출합니다. 처음에 AOSM은 배포 중에 적절한 Azure 값으로 대체될 수 있도록 이러한 값을 엄격한 방식으로 노출하는 게시자에 의존했습니다. 모든 게시자가 AOSM에 필요한 이러한 값의 엄격한 처리를 쉽게 준수할 수 있는 것은 아닙니다.

  • 일부 차트는 조건부 뒤에 registryUrl 및/또는 imagePullSecrets를 숨기거나 항상 충족되지 않는 다른 값 제한을 숨깁니다.
  • 일부 차트는 registryUrl 및/또는 imagePullSecrets를 예상된 명명된 문자열로 선언하지 않고 배열로 선언합니다.

게시자에 대한 엄격한 규정 준수 요구 사항을 줄이기 위해 AOSM은 나중에 이러한 값을 처리하는 두 가지 향상된 방법을 도입했습니다. 먼저 injectArtifactStoreDetail 및 마지막으로 클러스터 레지스트리. 이러한 두 가지 최신 메서드는 Helm 패키지에 표시되는 유효한 registryUrl 또는 imagePullSecrets에 의존하지 않습니다. 대신 이러한 메서드는 네트워크 함수를 대신하여 이러한 값을 Pod 작업에 직접 삽입합니다.

registryUrl 및 imagePullSecrets에 대한 메서드 요약

이 문서에서는 세 가지 메서드가 모두 지원되고 설명되어 있습니다. 게시자는 네트워크 함수 및 사용 사례에 가장 적합한 옵션을 선택해야 합니다.

유산.

  • 게시자는 대체를 위해 helm 값 및 배포 템플릿에서 registryUrl 및 imagePullSecrets를 규격적으로 매개 변수화해야 합니다.
  • 이미지는 게시자 ACR(Azure Container Registry)에서 호스트됩니다.

InjectArtifactStoreDetail.

  • webhook를 사용하여 helm에 대한 종속성을 최소화하면서 registryUrl 및 imagePullSecrets를 Pod 작업에 직접 삽입합니다.
  • 이미지는 게시자 ACR에서 여전히 호스트됩니다.

클러스터 레지스트리.

  • 웹후크를 사용하여 helm에 대한 종속성 없이 registryUrl 및 imagePullSecrets를 Pod 작업에 직접 삽입합니다.
  • 이미지는 로컬 NFO 확장 클러스터 레지스트리에서 호스트됩니다.

참고 항목

세 가지 경우 모두 AOSM은 게시자가 템플릿에 노출하는 값에 대해 AOSM 값을 대체합니다. 유일한 차이점은 대체 메서드입니다.

registryUrl 및 imagePullSecrets에 대한 레거시 요구 사항

AOSM(Azure Operator Service Manager)은 NFM(네트워크 함수 관리자) 서비스를 사용하여 컨테이너화된 CNF(네트워크 함수)를 배포합니다. 레거시 메서드를 사용하여 NFM은 AOSM 컨테이너 registryUrl 및 imagePullSecrets 값을 NF(네트워크 함수) 배포 중에 helm 작업으로 대체합니다.

레거시 메서드 사용

다음 helm 배포 템플릿은 게시자가 AOSM 레거시 접근 방식과의 호환성을 위해 registryPath 및 imagePullSecrets를 노출하는 방법의 예를 보여 줍니다.

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginx 
  template: 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      {{- if .Values.global.imagePullSecrets }} 
      imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }} 
      {{- end }} 
      containers: 
      - name: contosoapp 
        image:{{ .Values.global.registryPath }}/contosoapp:1.14.2 
        ports: 
        - containerPort: 80 

다음 values.schema.json 파일은 게시자가 AOSM 레거시 접근 방식과의 호환성을 위해 registryPath 및 imagePullSecretsvalue 요구 사항을 쉽게 설정할 수 있는 방법의 예를 보여 줍니다.

{ 
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "title": "StarterSchema", 
  "type": "object", 
  "required": ["global"], 
  "properties": { 
      "global" : {
          "type": "object",
          "properties": {
              “registryPath”: {“type”: “string”}, 
              “imagePullSecrets”: {“type”: “string”}, 
          }
          "required": [ "registryPath", "imagePullSecrets" ], 
      } 
   } 
} 

다음은 NFDVersion request payload 게시자가 AOSM 레거시 방식과의 호환성을 위해 registryPath 및 imagePullSecretsvalue 값을 제공하는 방법의 예제를 보여 줍니다.

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

다음은 values.yaml 게시자가 AOSM 레거시 방식과의 호환성을 위해 registryPath 및 imagePullSecretsvalue 값을 제공하는 방법의 예제를 보여 줍니다.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

참고 항목

  • registryPath는 다음과 같은 https:// 접두사 없이 설정됩니다 oci://. 필요한 경우 게시자는 Helm 패키지에 접두사를 정의해야 합니다.
  • NFDVersion 온보딩 단계 만들기에서 imagePullSecrets 및 RegistryPath를 제공해야 합니다.

레거시 메서드에 대한 기타 고려 사항

게시자는 레거시 메서드를 사용할 때 다음 권장 사항을 추가로 고려해야 합니다.

  • 외부 레지스트리에 대한 참조 방지
  • 수동 유효성 검사 수행
  • 정적 이미지 리포지토리 및 태그 확인

외부 레지스트리에 대한 참조 방지

사용자는 외부 레지스트리에 대한 참조를 사용하지 않아야 합니다. 예를 들어, development.yaml이 하드코딩된 레지스트리 경로나 외부 레지스트리 참조를 사용하는 경우 유효성 검사에 실패합니다.

수동 유효성 검사 수행

만들어진 이미지와 컨테이너 사양을 검토하여 이미지에 RegistryURL이라는 접두사가 있고 imagePullSecrets가 secretName으로 채워져 있는지 확인합니다.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

또는

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>

정적 이미지 리포지토리 및 태그 확인

각 helm 차트에는 정적 이미지 리포지토리와 태그가 포함되어야 합니다. 정적 값은 다음과 같이 설정됩니다.

  • 이미지 줄에서 설정하거나
  • value.yaml로 설정하고 NFDV(네트워크 함수 디자인 버전)에서 이러한 값을 노출하지 않습니다.

NFDV(네트워크 기능 디자인 버전)는 helm 차트 및 이미지의 정적 집합에 매핑되어야 합니다. 차트와 이미지는 새로운 NFDV(네트워크 기능 디자인 버전)를 게시해야만 업데이트됩니다.

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

또는

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2
 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

registryUrl 및 imagePullSecrets에 대한 injectArtifactStoreDetails 요구 사항

경우에 따라 타사 helm 차트가 registryURL에 대한 AOSM 요구 사항을 완전히 준수하지 않을 수 있습니다. 이 경우 helm 패키지에 대한 규정 준수 변경을 방지하기 위해 injectArtifactStoreDetails 기능을 사용할 수 있습니다. injectArtifactStoreDetails를 사용하도록 설정하면 웹후크 메서드를 사용하여 Pod 작업 중에 적절한 registryUrl 및 imagePullSecrets를 동적으로 삽입합니다. 그러면 Helm 패키지에 구성된 값이 재정의됩니다.

injectArtifactStoreDetails 메서드 사용

injectArtifactStoreDetails를 사용하도록 설정하려면 다음 예제와 같이 NF 리소스 roleOverrides 섹션의 installOptions 매개 변수를 true로 설정합니다.

resource networkFunction 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = {
  name: nfName
  location: location
  properties: {
    nfviType: 'AzureArcKubernetes'
    networkFunctionDefinitionVersionResourceReference: {
      id: nfdvId
      idType: 'Open'
    }
    allowSoftwareUpdate: true
    nfviId: nfviId
    deploymentValues: deploymentValues
    configurationType: 'Open'
    roleOverrideValues: [
      // Use inject artifact store details feature on test app 1
      '{"name":"testapp1", "deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"atomic":"false","wait":"false","timeout":"60","injectArtifactStoreDetails":"true"},"upgradeOptions": {"atomic": "false", "wait": "true", "timeout": "100", "injectArtifactStoreDetails": "true"}}}}}'
    ]
  }
}

참고 항목

Helm 차트 패키지는 올바른 형식의 registryURL 및 imagePullSecrets 값을 계속 노출해야 합니다.

registryUrl 및 imagePullSecrets에 대한 클러스터 레지스트리 요구 사항

클러스터 레지스트리 사용에 대한 자세한 내용은 개념 설명서를 참조하세요.

차트 불변성 제한 사항

불변성 제한으로 인해 파일이나 디렉터리가 변경되지 않습니다. 예를 들어 변경할 수 없는 파일은 변경하거나 이름을 바꿀 수 없습니다. 사용자는 최신, 개발 또는 안정과 같은 변경 가능한 태그를 사용하지 않아야 합니다. 예를 들어, development.yaml이 .Values.image.tag에 '최신'을 사용한 경우 배포가 실패합니다.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

차트 CRD 선언 및 사용량 분할

업데이트를 지원하려면 CRD(고객 리소스 정의)의 선언 및 사용을 별도의 Helm 차트로 분할하는 것이 좋습니다. 자세한 내용은 method-2-separate-charts를 참조하세요.