Dela via


Översikt över Helm-krav

Helm är en pakethanterare för Kubernetes som hjälper till att förenkla programlivscykelhanteringen. Helm-paket kallas diagram och består av YAML-konfigurations- och mallfiler. Vid körning av en Helm-åtgärd renderas diagrammen i Kubernetes-manifestfiler för att utlösa lämplig programlivscykelåtgärd. För den mest effektiva integreringen med Azure Operator Service Manager (AOSM) bör utgivare överväga vissa överväganden för bästa praxis när de utvecklar Helm-diagram.

Överväganden för registryUrl och imagePullSecrets

Varje Helm-diagram kräver vanligtvis en registryUrl och imagePullSecrets. Oftast exponerar en utgivare dessa parametrar i values.yaml. Först var AOSM beroende av att utgivaren exponerade dessa värden på ett strikt sätt, så att de kunde ersättas med rätt Azure-värden under distributionen. Övertid kan inte alla utgivare enkelt följa den strikta hanteringen av dessa värden som krävs av AOSM.

  • Vissa diagram döljer registryUrl och/eller imagePullSecrets bakom villkor eller andra värdebegränsningar som inte alltid har uppfyllts.
  • Vissa diagram deklarerar inte registryUrl och/eller imagePullSecrets som den förväntade namngivna strängen, i stället som en matris.

För att minska de strikta efterlevnadskraven för utgivare introducerade AOSM senare två förbättrade metoder för att hantera dessa värden. Först injectArtifactStoreDetail och slutligen Klusterregister. Dessa två nyare metoder är inte beroende av giltiga registryUrl eller imagePullSecrets som visas i Helm-paketet. I stället matar dessa metoder in dessa värden direkt i poddåtgärder för nätverksfunktionens räkning.

Metodsammanfattning för registryUrl och imagePullSecrets

Alla tre metoderna stöds och beskrivs i den här artikeln. En utgivare bör välja det bästa alternativet för sin nätverksfunktion och användningsfall.

Legat.

  • Kräver att utgivaren parameteriserar registryUrl och imagePullSecrets i helm-värden och distributionsmallar för ersättning.
  • Avbildningar finns i utgivaren Azure Container Registry (ACR).

InjectArtifactStoreDetail.

  • Använder en webhook för att mata in registryUrl & imagePullSecrets direkt i poddåtgärder, med minimala beroenden vid helm.
  • Bilder finns fortfarande i utgivaren ACR.

Klusterregister.

  • Använder en webhook för att mata in registryUrl & imagePullSecrets direkt i poddåtgärder, utan beroende av helm.
  • Avbildningar finns i det lokala NFO-tilläggsklusterregistret.

Kommentar

I alla tre fallen ersätter AOSM AOSM-värden för de värden som en utgivare exponerar i mallar. Den enda skillnaden är metoden för ersättning.

Äldre krav för registryUrl och imagePullSecrets

Azure Operator Service Manager (AOSM) använder NFM-tjänsten (Network Function Manager) för att distribuera Containerized Network Functions (CNFs). Med den äldre metoden ersätter NFM AOSM-containerregistretUrl- och imagePullSecrets-värdena i helm-åtgärden under NF-distributionen (Network Function).

Använda äldre metod

Följande helm-distributionsmall visar ett exempel på hur en utgivare ska exponera registryPath och imagePullSecrets för kompatibilitet med en äldre AOSM-metod.

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 

Följande values.schema.json fil visar ett exempel på hur en utgivare enkelt kan ställa in registryPath- och imagePullSecretsvalue-krav för kompatibilitet med en äldre AOSM-metod.

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

Följande NFDVersion request payload visar ett exempel på hur en utgivare kan tillhandahålla registerPath- och imagePullSecretsvalue-värdena för kompatibilitet med en äldre AOSM-metod.

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

Följande values.yaml visar ett exempel på hur en utgivare kan tillhandahålla registerPath- och imagePullSecretsvalue-värdena för kompatibilitet med en äldre AOSM-metod.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

Kommentar

  • RegistryPath har angetts utan prefix som https:// eller oci://. Om det behövs måste utgivaren definiera ett prefix i helm-paketet.
  • imagePullSecrets och registryPath måste anges i registreringssteget skapa NFDVersion.

Andra överväganden med äldre metod

Dessutom bör du överväga följande rekommendationer när du använder den äldre metoden:

  • Undvik referenser till det externa registret
  • Utföra en manuell validering
  • Kontrollera lagringsplatsen och taggarna för statiska avbildningar

Undvik referenser till det externa registret

Användarna bör undvika att använda referenser till ett externt register. Om deployment.yaml till exempel använder en hårdkodad registersökväg eller externa registerreferenser misslyckas verifieringen.

Utföra manuella valideringar

Granska de avbildningar och containerspecifikationer som skapats för att säkerställa att avbildningarna har prefixet registryURL och att imagePullSecrets fylls med secretName.

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

ELLER

 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>

Kontrollera lagringsplatsen och taggarna för statiska avbildningar

Varje helm-diagram ska innehålla lagringsplats och taggar för statiska avbildningar. De statiska värdena anges på följande sätt:

  • Ange dem på bildraden eller,
  • Ange dem i values.yaml och exponera inte dessa värden i NFDV (Network Function Design Version).

En NFDV (Network Function Design Version) ska mappas till en statisk uppsättning helm-diagram och bilder. Diagrammen och bilderna uppdateras bara genom att publicera en ny NFDV (Network Function Design Version).

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

Eller

 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 krav för registryUrl och imagePullSecrets

I vissa fall kanske helm-diagram från tredje part inte är helt kompatibla med AOSM-kraven för registryURL. I det här fallet kan funktionen injectArtifactStoreDetails användas för att undvika att göra ändringar i helm-paketens efterlevnad. När injectArtifactStoreDetails är aktiverat används en webhook-metod för att mata in rätt registryUrl och imagePullSecrets dynamiskt under poddåtgärderna. Detta åsidosätter de värden som har konfigurerats i helm-paketet.

Använda injectArtifactStoreDetails-metoden

Om du vill aktivera injectArtifactStoreDetails anger du parametern installOptions i avsnittet NF resource roleOverrides till true, enligt följande exempel.

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

Kommentar

Helm-diagrampaketet måste fortfarande exponera korrekt formaterade registerURL- och imagePullSecrets-värden.

Klusterregisterkrav för registryUrl och imagePullSecrets

Information om hur du använder klusterregister finns i konceptdokumentationen.

Begränsningar för diagram oföränderlighet

Oföränderlighetsbegränsningar förhindrar ändringar i en fil eller katalog. En oföränderlig fil kan till exempel inte ändras eller byta namn. Användare bör undvika att använda föränderliga taggar, till exempel senaste, utvecklingsbara eller stabila. Om deployment.yaml till exempel använde "senaste" för . Values.image.tag distributionen skulle misslyckas.

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

Crd-deklaration för diagram och användningsdelning

Vi rekommenderar att du delar upp deklarationen och användningen av kundresursdefinitioner (CRD) i separata helm-diagram för att stödja uppdateringar. Detaljerad information finns i: method-2-separate-charts