Bagikan melalui


Gambaran umum persyaratan Helm

Helm adalah manajer paket untuk Kubernetes yang membantu menyederhanakan manajemen siklus hidup aplikasi. Paket Helm disebut bagan dan terdiri dari konfigurasi YAML dan file templat. Setelah eksekusi operasi Helm, bagan dirender ke dalam file manifes Kubernetes untuk memicu tindakan siklus hidup aplikasi yang sesuai. Untuk integrasi paling efisien dengan Azure Operator Service Manager (AOSM), penerbit harus mempertimbangkan pertimbangan praktik terbaik tertentu saat mengembangkan bagan Helm.

Pertimbangan untuk registryUrl dan imagePullSecrets

Setiap bagan Helm umumnya memerlukan registriUrl dan imagePullSecrets. Paling umum, penerbit mengekspos parameter ini dalam values.yaml. Pada awalnya, AOSM bergantung pada penerbit yang mengekspos nilai-nilai ini secara ketat, sehingga dapat diganti dengan nilai Azure yang tepat selama penyebaran. Lembur, tidak semua penerbit dapat dengan mudah mematuhi penanganan ketat nilai-nilai ini yang diperlukan oleh AOSM.

  • Beberapa bagan menyembunyikan registriUrl dan/atau imagePullSecrets di belakang kondisional, atau pembatasan nilai lainnya, yang tidak selalu terpenuhi.
  • Beberapa bagan tidak mendeklarasikan registryUrl dan/atau imagePullSecrets sebagai string bernama yang diharapkan, sebagai array.

Untuk mengurangi persyaratan kepatuhan yang ketat pada penerbit, AOSM kemudian memperkenalkan dua metode yang ditingkatkan untuk menangani nilai-nilai ini. Pertama injectArtifactStoreDetail dan akhirnya Cluster Registry. Kedua metode yang lebih baru ini tidak bergantung pada registriUrl atau imagePullSecrets yang valid muncul dalam paket Helm. Sebagai gantinya, metode ini menyuntikkan nilai-nilai ini langsung ke dalam operasi pod, atas nama fungsi jaringan.

Ringkasan metode untuk registryUrl dan imagePullSecrets

Ketiga metode didukung dan dijelaskan dalam artikel ini. Penerbit harus memilih opsi terbaik untuk Fungsi Jaringan dan kasus penggunaannya.

Warisan.

  • Mengharuskan penerbit untuk secara patuh membuat parameter registriUrl & imagePullSecrets dalam nilai helm dan templat penyebaran untuk penggantian.
  • Gambar dihosting di penerbit Azure Container Registry (ACR).

InjectArtifactStoreDetail.

  • Menggunakan webhook untuk menyuntikkan registryUrl & imagePullSecrets langsung ke operasi pod, dengan dependensi minimal pada helm.
  • Gambar masih dihosting di ACR penerbit.

Registri Kluster.

  • Menggunakan webhook untuk menyuntikkan registryUrl & imagePullSecrets langsung ke dalam operasi pod, tanpa dependensi pada helm.
  • Gambar dihosting di registri kluster ekstensi NFO lokal.

Catatan

Dalam ketiga kasus, AOSM menggantikan nilai AOSM untuk nilai apa pun yang diekspos penerbit dalam templat. Satu-satunya perbedaan adalah metode untuk penggantian.

Persyaratan warisan untuk registriUrl dan imagePullSecrets

Azure Operator Service Manager (AOSM) menggunakan layanan Network Function Manager (NFM) untuk menyebarkan Containerized Network Functions (CNF). Dengan metode warisan, NFM menggantikan nilai registri kontainer AOSMUrl dan imagePullSecrets ke dalam operasi helm selama penyebaran Fungsi Jaringan (NF).

Menggunakan metode warisan

Templat penyebaran helm berikut menunjukkan contoh bagaimana penerbit harus mengekspos registriPath dan imagePullSecrets untuk kompatibilitas dengan pendekatan warisan AOSM.

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 

File berikut values.schema.json menunjukkan contoh bagaimana penerbit dapat dengan mudah mengatur persyaratan registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.

{ 
  "$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" ], 
      } 
   } 
} 

Berikut ini NFDVersion request payload menunjukkan contoh bagaimana penerbit dapat menyediakan nilai registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.

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

Berikut ini values.yaml menunjukkan contoh bagaimana penerbit dapat menyediakan nilai registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

Catatan

  • RegistryPath diatur tanpa awalan apa pun seperti https:// atau oci://. Jika diperlukan, penerbit harus menentukan awalan dalam paket helm.
  • imagePullSecrets dan registryPath harus disediakan dalam langkah membuat onboarding NFDVersion.

Pertimbangan lain dengan metode Warisan

Publisher harus mempertimbangkan rekomendasi berikut saat menggunakan metode warisan:

  • Hindari referensi ke registri eksternal
  • Melakukan validasi manual
  • Memastikan repositori dan tag gambar statis

Hindari referensi ke registri eksternal

Pengguna harus menghindari penggunaan referensi ke registri eksternal. Misalnya, jika deployment.yaml menggunakan jalur registri hardcoded atau referensi registri eksternal, itu gagal validasi.

Melakukan validasi manual

Tinjau gambar dan spesifikasi kontainer yang dibuat untuk memastikan gambar memiliki awalan registriURL dan imagePullSecrets diisi dengan secretName.

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

ATAU

 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>

Memastikan repositori dan tag gambar statis

Setiap bagan helm harus berisi repositori dan tag gambar statis. Nilai statis diatur sebagai berikut:

  • Mengaturnya di baris gambar atau,
  • Mengaturnya dalam values.yaml dan tidak mengekspos nilai-nilai ini dalam Versi Desain Fungsi Jaringan (NFDV).

Versi Desain Fungsi Jaringan (NFDV) harus memetakan ke sekumpulan bagan dan gambar helm statis. Bagan dan gambar hanya diperbarui dengan menerbitkan Versi Desain Fungsi Jaringan (NFDV) baru.

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

Atau

 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}}

persyaratan injectArtifactStoreDetails untuk registriUrl dan imagePullSecrets

Dalam beberapa kasus, bagan helm pihak ketiga mungkin tidak sepenuhnya sesuai dengan persyaratan AOSM untuk registriURL. Dalam hal ini, fitur injectArtifactStoreDetails dapat digunakan untuk menghindari perubahan kepatuhan pada paket helm. Dengan diaktifkannya injectArtifactStoreDetails, metode webhook digunakan untuk menyuntikkan registryUrl dan imagePullSecrets yang tepat secara dinamis selama operasi pod. Ini mengambil alih nilai yang dikonfigurasi dalam paket helm.

Menggunakan metode injectArtifactStoreDetails

Untuk mengaktifkan injectArtifactStoreDetails, atur parameter installOptions di bagian roleOverrides sumber daya NF ke true, seperti yang ditunjukkan dalam contoh berikut.

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"}}}}}'
    ]
  }
}

Catatan

Paket bagan helm masih harus mengekspos nilai registriurl dan imagePullSecrets yang diformat dengan benar.

Persyaratan registri kluster untuk registriUrl dan imagePullSecrets

Untuk informasi tentang menggunakan registri kluster, silakan lihat dokumentasi konsep.

Pembatasan kekekalan bagan

Pembatasan kekekalan mencegah perubahan pada file atau direktori. Misalnya, file yang tidak dapat diubah tidak dapat diubah atau diganti namanya. Pengguna harus menghindari penggunaan tag yang dapat diubah seperti terbaru, dev, atau stabil. Misalnya, jika deployment.yaml menggunakan 'terbaru' untuk . Values.image.tag penyebaran akan gagal.

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

Deklarasi CRD bagan dan pemisahan penggunaan

Sebaiknya bagi deklarasi dan penggunaan definisi sumber daya pelanggan (CRD) menjadi bagan helm terpisah untuk mendukung pembaruan. Untuk informasi terperinci lihat: method-2-separate-charts