Helm パッケージの要件

Helm は、Kubernetes アプリケーションの管理に役立つ Kubernetes のパッケージ マネージャーです。 Helm パッケージはグラフと呼ばれ、いくつかの YAML 構成ファイルと、Kubernetes マニフェスト ファイルにレンダリングされるテンプレートで構成されます。 グラフはあらゆる環境で再利用でき、複雑さと重複が軽減されます。

レジストリ URL パスと imagepullsecrets の要件

Helm パッケージを開発するときは、コンテナー レジストリ サーバーの URL を値に保持するのが一般的です。 コンテナー レジストリ サーバーの URL を値に保持することは、各環境コンテナー レジストリ間で成果物を移動する場合に役立ちます。 Azure Operator Service Manager (AOSM) は、ネットワーク関数マネージャー (NFM) サービスを使用して、コンテナー化されたネットワーク関数 (CNF) をデプロイします。 ネットワーク関数マネージャー (NFM) には、ネットワーク関数 (NF) のデプロイ時にコンテナー レジストリ サーバーの場所と imagepullsecret を 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 を適切な Azure Container Registry (ACR) サーバーの場所に設定します。 たとえば、NFO は次の同等のコマンドを実行します。

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

Note

registryPath は、https:// や oci:// などのプレフィックスなしで設定されます。 Helm パッケージでプレフィックスが必要な場合、パブリッシャーはパッケージでこれを定義する必要があります。

values.yaml は、Helm チャートの既定値を含むファイルです。 これは、グラフの既定値を定義する YAML ファイルです。 values.yaml ファイルには、2 種類の変数が存在する必要があります。imagePullSecrets と registryPath。 それぞれについて表で説明します。

global: 
   imagePullSecrets: [] 
   registryPath: “” 
名前 タイプ 説明
imagePullSecrets String imagePullSecrets はシークレット名の配列であり、コンテナー イメージをプルするために使用されます
registryPath String registryPath はサーバーの AzureContainerRegistry 場所です

imagePullSecrets と registryPath は、NFDVersion の作成オンボード 手順で指定する必要があります。

クラスターで実行されている NFO は、helm install –set コマンドを使用して、Helm リリース中にこれら 2 つの変数 (imagePullSecrets と registryPath) を設定します。

詳細については、「pull-image-private-registry」を参照してください

不変性の制限

不変性の制限により、ファイルまたはディレクトリに対する変更が防止されます。 たとえば、変更できないファイルは変更または名前変更できません。また、追加操作を許可するファイルを削除、変更、または名前変更することはできません。

変更可能なタグの使用を避ける

ユーザーは、最新、開発、安定などの変更可能なタグを使用しないようにする必要があります。 たとえば、deployment.yaml が に 'latest' を使用した場合などです。デプロイが失敗する Values.image.tag。

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

外部レジストリへの参照を回避する

ユーザーは、外部レジストリへの参照を使用しないようにする必要があります。 たとえば、deployment.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

OR

 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 チャートには、静的イメージ リポジトリとタグが含まれている必要があります。 ユーザーは、イメージ リポジトリとタグを静的な値に設定する必要があります。 静的な値は、次の方法で設定できます。

  • それらを画像行にハードコーディングするか、または
  • values.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