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 registrUrl a imagePullSecrets. Nejčastěji vydavatel zveřejňuje tyto parametry v souboru values.yaml. AOSM zpočátku závisel na vydavateli, který tyto hodnoty zpřístupňuje striktním způsobem, takže by bylo možné je během nasazování nahradit správnými hodnotami Azure. Přesčas, ne všichni vydavatelé by mohli snadno dodržovat striktní zpracování těchto hodnot vyžadovaných 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.

Kvůli omezení striktních požadavků na dodržování předpisů pro vydavatele společnost AOSM později zavedla dvě vylepšené metody zpracování těchto hodnot. Nejprve injektážArtifactStoreDetail a nakonec registr clusteru. Tyto dvě novější metody nezávisí na platném registruUrl nebo imagePullSecrets, které se zobrazují v balíčku Helm. Tyto metody místo toho tyto hodnoty vloží přímo do operací podů jménem síťové funkce.

Souhrn metod pro registryUrl a imagePullSecrets

Všechny tři metody jsou podporované a popsané v tomto článku. Vydavatel by měl zvolit nejlepší možnost pro svou síťovou funkci a případ použití.

Dědictví.

  • Vyžaduje, aby vydavatel při nahrazení hodnot helmu a šablon nasazení parametrizoval registryUrl &imagePullSecrets.
  • Image jsou hostované v publisheru Azure Container Registry (ACR).

InjectArtifactStoreDetail.

  • Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do operací podů s minimálními závislostmi helmu.
  • Image jsou pořád hostované v ACR vydavatele.

Registr clusteru

  • Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do operací podů bez závislostí na helmu.
  • Image jsou hostované v místním registru clusteru rozšíření NFO.

Poznámka:

Ve všech třech případech AOSM nahrazují hodnoty AOSM hodnotami, které vydavatel zveřejňuje v šablonách. Jediným rozdílem je metoda nahrazení.

Starší požadavky pro registryUrl a imagePullSecrets

Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizovaných síťových funkcí (CNF). Starší verze metody NFM nahradí hodnoty registru kontejneru AOSM a imagePullSecrets do operace helm během nasazení síťové funkce (NF).

Použití starší metody

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: “” 

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.

Další aspekty starší metody

Při použití starší metody by publisher měl zvážit následující doporučení:

  • Vyhněte se odkazům na externí registr
  • Provedení ručních ověření
  • Zajištění úložiště statických imagí a značek

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

Provádění ručních 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>

Zajištění úložiště statických imagí a značek

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ě se dá použít funkce injectArtifactStoreDetails, aby se zabránilo změnám dodržování předpisů v balíčcích Helm. Při použití metody injectArtifactStoreDetails se metoda webhooku používá k dynamickému vkládání správných registrŮrl a imagePullSecrets během operací podu. Tím se přepíše hodnoty, které jsou nakonfigurované v balíčku Helm.

Použití metody injectArtifactStoreDetails

Chcete-li povolit injektArtifactStoreDetails, nastavte parametr installOptions v oddílu RoleOverrides prostředku NF na hodnotu true, jak je znázorněno v následujícím příkladu.

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

Poznámka:

Balíček chartu Helm musí stále vystavit správně formátované hodnoty registryURL a imagePullSecrets.

Požadavky na registr clusteru pro registryUrl a imagePullSecrets

Informace o používání registru clusteru najdete v dokumentaci ke konceptu.

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