Sdílet prostřednictvím


Přehled požadavků Helmu

Helm je správce balíčků pro Kubernetes, který pomáhá zjednodušit správu životního cyklu aplikací. Balíčky Helm se nazývají grafy a skládají se z konfiguračních souborů a souborů šablon YAML. Při spuštění operace Helm se grafy vykreslí do souborů manifestu Kubernetes, aby se aktivovala příslušná akce životního cyklu aplikace. Pro nejúčinnější integraci s Azure Operator Service Managerem (AOSM) by vydavatel měl při vývoji chartů Helm zvážit určité aspekty osvědčených postupů.

Důležité informace o registruUrl a imagePullSecrets

Každý chart Helm obecně vyžaduje deklarovaný registrUrl a imagePullSecrets. Osvědčený postup doporučuje, aby vydavatel tyto dva parametry konzistentně definoval jako proměnné v souboru values.yaml. AOSM zpočátku závisel na vydavateli, který tyto hodnoty zpřístupňuje striktním způsobem, takže je bylo možné ingestovat a následně vkládat během nasazení. Tento přístup se označuje jako starší metoda. Přesčasová řada komplikací vznikla, protože ne všechny grafy vydavatelů splňovaly striktní definici registryUrl a imagePullSecrets vyžadované AOSM.

  • Některé grafy skryjí hodnoty registryUrl a/nebo imagePullSecrets za podmíněným nebo jiným omezením hodnot, které nebyly vždy splněny.
  • Některé grafy nehlásí hodnoty registryUrl ani imagePullSecrets jako očekávaný pojmenovaný řetězec, místo toho jako pole.

Aby se snížily přísné požadavky na dodržování předpisů pro vydavatele pro registryUrl a imagePullSecrets, AOSM později zavedl dvě vylepšené metody zpracování těchto hodnot. Nejprve injektážArtifactStoreDetail a nakonec registr clusteru. Tyto dvě novější metody vůbec nezávisí na registruUrl nebo imagePullSecrets, které se zobrazují v balíčku Helm. Místo toho tyto metody odvozují a vkládat tyto hodnoty jménem síťové funkce.

Souhrn metod pro registryUrl a imagePullSecrets

Dědictví.

  • Požadovaný vydavatel pro parametrizaci registryUrl &imagePullSecrets správně v hodnotách helmu a šablonách pro nahrazení.
  • Image hostované v publisheru Azure Container Registry (ACR).

InjectArtifactStoreDetail.

  • Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do podu bez jakékoli závislosti na helmu.
  • Image jsou pořád hostované v ACR vydavatele.

Registr clusteru

  • Stejné jako InjektArtifactStoreDetail, s výjimkou teď jsou image hostované v místním registru clusteru.

Poznámka:

Ve všech třech případech AOSM nahrazují tajné kódy odvozené od AOSM všemi tajnými kódy, které vydavatel zveřejňuje v šablonách. Jediným rozdílem je Legacy a InjectArtifactStoreDetail, tajný kód je vázán na ACR vydavatele, zatímco v registru clusteru je tajný klíč vázán na registr clusteru.

Starší požadavky pro registryUrl a imagePullSecrets

Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizované síťové funkce (CNF). NFM vloží do hodnot helmu během nasazování síťové funkce (NF) hodnoty registru kontejneru Arl a imagePullSecrets. Následující šablona nasazení helmu ukazuje příklad toho, jak by vydavatel měl vystavit registryPath a imagePullSecrets kvůli kompatibilitě se starší verzí přístupu 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 

Následující values.schema.json soubor ukazuje příklad, jak může vydavatel snadno nastavit požadavky registryPath a imagePullSecretsvalue pro kompatibilitu se starší verzí přístupu 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" ], 
      } 
   } 
} 

Následující NFDVersion request payload příklad ukazuje, jak může vydavatel poskytnout hodnoty registryPath a imagePullSecretsvalue pro zajištění kompatibility se starší verzí přístupu AOSM.

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

Následující values.yaml příklad ukazuje, jak může vydavatel poskytnout hodnoty registryPath a imagePullSecretsvalue pro zajištění kompatibility se starší verzí přístupu AOSM.

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

Poznámka:

  • Cesta registru je nastavena bez jakékoli předpony, například https:// nebo oci://. V případě potřeby musí vydavatel definovat předponu v balíčku Helm.
  • ImagePullSecrets a registryPath musí být k dispozici v kroku vytvoření NFDVersion onboarding.

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ří.

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. Statické hodnoty jsou nastaveny takto:

  • Nastavení na řádku obrázku nebo
  • Nastavení hodnot.yaml a jejich zveřejnění 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“

Nebo

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

injectArtifactStoreDetails požadavky pro registryUrl a imagePullSecrets

V některých případech nemusí grafy helmu třetích stran plně vyhovovat požadavkům AOSM pro registrURL. V tomto případě je možné použít funkci injectArtifactStoreDetails, abyste se vyhnuli změnám balíčků Helm. Chcete-li použít injektArtifactStoreDetails, nastavte parametr installOptions v oddílu role prostředku NFOverrides na hodnotu true, pak v balíčku chartu Helm použijte libovolnou hodnotu registryURL, aby byla adresa URL registru platná. Viz následující příklad injektArtifactStoreDetails parametr enabled.

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

Omezení neměnnosti grafu

Omezení neměnnosti brání změnám souboru nebo adresáře. Neměnný soubor se například nedá změnit ani přejmenovat. 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}}“

Rozdělení deklarace CRD grafu a využití

Pokud chcete podporovat aktualizace, doporučujeme rozdělit deklaraci a použití definic prostředků zákazníků (CRD) do samostatných grafů helmu. Podrobné informace najdete v tématu: metoda-2-samostatné-grafy