Požadavky na balíček Helm

Helm je správce balíčků pro Kubernetes, který pomáhá spravovat aplikace Kubernetes. Balíčky Helm se nazývají grafy a skládají se z několika konfiguračních souborů YAML a některých šablon, které se vykreslují do souborů manifestu Kubernetes. Grafy se dají opakovaně použít pro každé prostředí, což snižuje složitost a duplikáty.

Požadavky na cestu URL registru a imagepullsecrets

Při vývoji balíčku Helm je běžné zachovat adresu URL serveru registru kontejneru v hodnotách. Zachování adresy URL serveru registru kontejneru v hodnotách je užitečné pro přesun artefaktů mezi jednotlivými registry kontejneru prostředí. Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizované síťové funkce (CNF). Správce síťových funkcí (NFM) obsahuje funkce pro vložení umístění serveru registru kontejneru a imagepullsecrets do hodnot helmu během nasazení síťové funkce (NF). ImagePullSecret je autorizační token, označovaný také jako tajný kód, který ukládá přihlašovací údaje Dockeru, které se používají pro přístup k registru. Pokud například potřebujete nasadit aplikaci prostřednictvím nasazení Kubernetes, můžete definovat nasazení jako v následujícím příkladu:

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 je soubor, který umožňuje snadno nastavit požadavky na hodnoty a omezení v jednom umístění pro grafy Helm. V tomto souboru definujte vlastnost registryPath a imagePullSecrets jako požadované vlastnosti.

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

Datová část požadavku NFDVersion poskytuje následující hodnoty v registruValuesPaths:

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

Během nasazení NF nastaví operátor síťové funkce (NFO) cestu registru na správné umístění serveru Azure Container Registry (ACR). Například NFO spustí následující ekvivalentní příkaz:

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

Poznámka:

Cesta registru je nastavena bez předpony, jako je https:// nebo oci://. Pokud je v balíčku Helm vyžadována předpona, musí vydavatelé tuto předponu definovat v balíčku.

values.yaml je soubor, který obsahuje výchozí hodnoty chartu Helm. Jedná se o soubor YAML, který definuje výchozí hodnoty grafu. V souboru values.yaml musí existovat dva typy proměnných; imagePullSecrets a registryPath Každá z nich je popsaná v tabulce.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Name Typ Popis
imagePullSecrets Řetězec imagePullSecrets jsou pole názvů tajných kódů, které se používají k vyžádání imagí kontejneru.
registryPath Řetězec registryPath je AzureContainerRegistry umístění serveru.

ImagePullSecrets a registryPath musí být k dispozici v kroku vytvoření NFDVersion onboarding.

NFO spuštěné v clusteru naplní tyto dvě proměnné (imagePullSecrets a registryPath) během vydání helmu pomocí příkazu helm install –set.

Další informace najdete v tématu: pull-image-private-registry

Omezení neměnnosti

Omezení neměnnosti brání změnám souboru nebo adresáře. Neměnný soubor se například nedá změnit ani přejmenovat a soubor, který umožňuje přidávací operace odstranit, upravit ani přejmenovat.

Vyhněte se používání proměnlivých značek

Uživatelé by se měli vyhnout používání proměnlivých značek, jako jsou nejnovější, vývojové nebo stabilní. Pokud například deployment.yaml použil pro soubor "latest". Hodnoty.image.tag nasazení by selhalo.

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

Vyhněte se odkazům na externí registr

Uživatelé by se měli vyhnout použití odkazů na externí registr. Pokud například deployment.yaml používá pevně zakódovanou cestu registru nebo odkazuje na externí registr, ověření se nezdaří.

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

Doporučení

Rozdělení deklarace vlastních definic prostředků (CRD) a použití plus použití pomocí ručních ověření jsou doporučené postupy. Každá z nich je popsaná v následujících částech.

Rozdělení deklarace a využití CRD

Pokud chcete podporovat aktualizace, doporučujeme rozdělit deklaraci a použití CRD do samostatných grafů helmu. Podrobné informace najdete v tématu: metoda-2-samostatné-grafy

Ruční ověření

Zkontrolujte image a specifikace kontejnerů vytvořené a ujistěte se, že image mají předponu registryURL a imagePullSecrets jsou naplněné secretName.

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

NEBO

 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>

Statické úložiště imagí a značky

Každý chart Helm by měl obsahovat statické úložiště imagí a značky. Uživatelé by měli nastavit úložiště imagí a značku na statické hodnoty. Statické hodnoty lze nastavit pomocí:

  • Jejich pevným kódováním na řádku obrázku nebo
  • Nastavení hodnot v values.yaml a nevystavování těchto hodnot ve verzi návrhu síťové funkce (NFDV).

Verze návrhu síťové funkce (NFDV) by se měla mapovat na statickou sadu grafů a obrázků helmu. Grafy a obrázky se aktualizují jenom publikováním nové verze návrhu síťových funkcí (NFDV).

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

or

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