Bagikan melalui


Persyaratan paket Helm

Helm adalah manajer paket untuk Kubernetes yang membantu Anda mengelola aplikasi Kubernetes. Paket Helm disebut bagan, dan terdiri dari beberapa file konfigurasi YAML dan beberapa templat yang dirender ke dalam file manifes Kubernetes. Bagan dapat digunakan kembali oleh siapa pun untuk lingkungan apa pun, yang mengurangi kompleksitas dan duplikat.

Jalur URL registri dan persyaratan imagepullsecrets

Saat mengembangkan paket helm, adalah umum untuk menyimpan URL server registri kontainer dalam nilai. Menjaga URL server registri kontainer dalam nilai berguna untuk memindahkan artefak di antara setiap registri kontainer lingkungan. Azure Operator Service Manager (AOSM) menggunakan layanan Network Function Manager (NFM) untuk menyebarkan Containerized Network Function (CNF). Network Function Manager (NFM) berisi fitur untuk menyuntikkan lokasi server registri kontainer dan imagepullsecrets ke dalam nilai helm selama penyebaran Fungsi Jaringan (NF). ImagePullSecret adalah token otorisasi, juga dikenal sebagai rahasia, yang menyimpan kredensial Docker yang digunakan untuk mengakses registri. Misalnya, jika Anda perlu menyebarkan aplikasi melalui penyebaran Kubernetes, Anda dapat menentukan penyebaran seperti contoh berikut:

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 adalah file yang memungkinkan Anda untuk dengan mudah menetapkan persyaratan nilai dan batasan dalam satu lokasi untuk bagan Helm. Dalam file ini, tentukan registryPath dan imagePullSecrets sebagai properti yang diperlukan.

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

Payload permintaan NFDVersion menyediakan nilai berikut dalam registryValuesPaths:

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

Selama penyebaran NF, Network Function Operator (NFO) mengatur registriPath ke lokasi server Azure Container Registry (ACR) yang benar. Misalnya, NFO menjalankan perintah setara berikut:

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

Catatan

RegistryPath diatur tanpa awalan seperti https:// atau oci://. Jika awalan diperlukan dalam paket helm, penerbit perlu menentukan ini dalam paket.

values.yaml adalah file yang berisi nilai default untuk bagan Helm. Ini adalah file YAML yang menentukan nilai default untuk bagan. Dalam file values.yaml, dua jenis variabel harus ada; imagePullSecrets dan registryPath. Masing-masing dijelaskan dalam tabel.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Nama Tipe Deskripsi
imagePullSecrets String imagePullSecrets adalah array nama rahasia, yang digunakan untuk menarik gambar kontainer
registryPath String registryPath adalah AzureContainerRegistry lokasi server

imagePullSecrets dan registryPath harus disediakan dalam langkah membuat onboarding NFDVersion.

NFO yang berjalan di kluster mengisi kedua variabel ini (imagePullSecrets dan registryPath) selama rilis helm menggunakan perintah helm install –set.

Untuk informasi selengkapnya, lihat: pull-image-private-registry

Pembatasan kekekalan

Pembatasan kekekalan mencegah perubahan pada file atau direktori. Misalnya, file yang tidak dapat diubah tidak dapat diubah atau diganti namanya, dan file yang memungkinkan operasi penambahan tidak dapat dihapus, dimodifikasi, atau diganti namanya.

Hindari penggunaan tag yang dapat diubah

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

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.

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

Rekomendasi

Memisahkan deklarasi dan penggunaan Definisi Sumber Daya Kustom (CRD) ditambah menggunakan validasi manual adalah praktik yang direkomendasikan. Masing-masing dijelaskan di bagian berikut.

Pisahkan deklarasi dan penggunaan CRD

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

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>

Repositori dan tag gambar statis

Setiap bagan helm harus berisi repositori dan tag gambar statis. Pengguna harus mengatur repositori gambar dan tag ke nilai statis. Nilai statis dapat diatur oleh:

  • Dengan mengkodekan secara permanen di baris gambar atau,
  • Mengatur Nilai 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