다음을 통해 공유


Helm 패키지 요구 사항

Helm은 Kubernetes 애플리케이션 관리를 돕는 Kubernetes용 패키지 관리자입니다. Helm 패키지는 차트라고 하며 몇 가지 YAML 구성 파일과 Kubernetes 매니페스트 파일로 렌더링되는 일부 템플릿으로 구성됩니다. 차트는 모든 환경에서 누구나 재사용할 수 있으므로 복잡성과 중복이 줄어듭니다.

레지스트리 URL 경로 및 imagepullsecrets 요구 사항

일반적으로 Helm 패키지를 개발할 때 값에 컨테이너 레지스트리 서버 URL을 유지합니다. 컨테이너 레지스트리 서버 URL을 값으로 유지하는 것은 각 환경 컨테이너 레지스트리 간에 아티팩트를 이동하는 데 유용합니다. AOSM(Azure Operator Service Manager)은 NFM(네트워크 기능 관리자) 서비스를 사용하여 CNF(컨테이너화된 네트워크 기능)를 배포합니다. NFM(네트워크 기능 관리자)에는 NF(네트워크 기능) 배포 중에 컨테이너 레지스트리 서버 위치 및 imagepullsecrets를 helm 값에 삽입하는 함수가 포함되어 있습니다. imagePullSecret은 레지스트리에 액세스하는 데 사용되는 Docker 자격 증명을 저장하는 권한 부여 토큰(비밀이라고도 함)입니다. 예를 들어, Kubernetes 배포를 통해 애플리케이션을 배포해야 하는 경우 다음 예와 같이 배포를 정의할 수 있습니다.

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은 Helm 차트의 단일 위치에서 값 요구 사항과 제약 조건을 쉽게 설정할 수 있는 파일입니다. 이 파일에서 RegistryPath 및 imagePullSecrets를 필수 속성으로 정의합니다.

{ 
  "$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 요청 페이로드는 RegistryValuesPaths에 다음 값을 제공합니다.

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

NF 배포 중에 NFO(네트워크 기능 운영자)는 RegistryPath를 올바른 ACR(Azure Container Registry) 서버 위치로 설정합니다. 예를 들어, NFO는 다음과 같은 동등한 명령을 실행합니다.

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

참고 항목

RegistryPath는 https:// 또는 oci://와 같은 접두사 없이 설정됩니다. helm 패키지에 접두사가 필요한 경우 게시자는 패키지에서 이를 정의해야 합니다.

values.yaml은 Helm 차트의 기본값이 포함된 파일입니다. 차트의 기본값을 정의하는 YAML 파일입니다. value.yaml 파일에는 두 가지 형식의 변수(imagePullSecrets 및 RegistryPath)가 있어야 합니다. 각각은 표에 설명되어 있습니다.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
이름 형식 설명
imagePullSecrets 문자열 imagePullSecrets는 컨테이너 이미지를 가져오는 데 사용되는 비밀 이름의 배열입니다.
registryPath 문자열 RegistryPath는 AzureContainerRegistry 서버 위치입니다.

NFDVersion 온보딩 단계 만들기에서 imagePullSecrets 및 RegistryPath를 제공해야 합니다.

클러스터에서 실행 중인 NFO는 helm install –set 명령을 사용하여 helm 릴리스 중에 이러한 두 변수(imagePullSecrets 및 RegistryPath)를 채웁니다.

자세한 내용은 pull-image-private-registry를 참조하세요.

불변성 제한

불변성 제한으로 인해 파일이나 디렉터리가 변경되지 않습니다. 예를 들어, 변경이 불가능한 파일은 변경하거나 이름을 바꿀 수 없으며 추가 작업을 허용하는 파일은 삭제, 수정 또는 이름을 바꿀 수 없습니다.

변경 가능한 태그 사용 방지

사용자는 최신, 개발 또는 안정과 같은 변경 가능한 태그를 사용하지 않아야 합니다. 예를 들어, development.yaml이 .Values.image.tag에 '최신'을 사용한 경우 배포가 실패합니다.

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

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

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

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

권장 사항

CRD(사용자 지정 리소스 정의) 선언 및 사용법을 분할하고 수동 유효성 검사를 사용하는 것이 좋습니다. 각 내용은 다음 섹션에서 설명됩니다.

CRD 선언 및 사용법 분할

업데이트를 지원하려면 CRD의 선언과 사용을 별도의 helm 차트로 분할하는 것이 좋습니다. 자세한 내용은 method-2-separate-charts를 참조하세요.

수동 유효성 검사

만들어진 이미지와 컨테이너 사양을 검토하여 이미지에 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(Network Function Design Version)에서 이러한 값을 노출하지 않습니다.

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