Delen via


Overzicht van Helm-vereisten

Helm is een pakketbeheerder voor Kubernetes waarmee het beheer van de levenscyclus van toepassingen kan worden vereenvoudigd. Helm-pakketten worden grafieken genoemd en bestaan uit YAML-configuratie- en sjabloonbestanden. Bij het uitvoeren van een Helm-bewerking worden de grafieken weergegeven in Kubernetes-manifestbestanden om de juiste acties voor de levenscyclus van toepassingen te activeren. Voor de meest efficiënte integratie met Azure Operator Service Manager (AOSM) moet de uitgever rekening houden met bepaalde aanbevolen procedures bij het ontwikkelen van Helm-grafieken.

Overwegingen voor registryPath en imagePullSecrets

Voor een Helm chart is er over het algemeen een registryPath en imagePullSecrets vereist. Meestal maakt een uitgever deze parameters beschikbaar in de values.yaml. In eerste instantie is AOSM afhankelijk van de uitgever die deze waarden op een strikte manier beheert (verouderde benadering), die tijdens de implementatie moet worden vervangen door de juiste Azure-waarden. Na verloop van tijd werd de conclusie getrokken dat niet alle uitgevers eenvoudig aan het strikte beheer van deze waarden konden voldoen. Sommige grafieken verbergen registryPath en/of imagePullSecrets achter voorwaarden, of andere waardenbeperkingen, die niet altijd werden voldaan. Sommige grafieken declareren registryPath en/of imagePullSecrets niet als de verwachte benoemde tekenreeks, in plaats daarvan als een matrix. Om de strikte nalevingsvereisten voor uitgevers te verminderen, heeft AOSM twee verbeterde methoden geïntroduceerd, injectArtifactStoreDetail en clusterregister. Deze nieuwere methoden hangen niet af van registryPath of imagePullSecrets die in het Helm-pakket verschijnen. In plaats daarvan gebruiken deze methoden een webhook om de juiste Azure-waarden rechtstreeks in podbewerkingen te injecteren.

Methodeoverzicht voor registryPath en imagePullSecrets

Alle drie de methoden worden momenteel ondersteund, zoals beschreven in dit artikel. Een uitgever moet de beste optie kiezen voor hun (netwerkfunctie) NF en use-case.

nalatenschap

  • Vereist dat de uitgever registryPath en imagePullSecrets in de helm-waarden en implementatietemplates parameteriseert voor substitutie.
  • Afbeeldingen worden gehost in de Azure Container Registry (ACR) van de uitgever.

InjectArtifactStoreDetail

  • Maakt gebruik van een webhook om registryPath & imagePullSecrets rechtstreeks in podbewerkingen te injecteren, met minimale afhankelijkheden op Helm.
  • Afbeeldingen worden nog steeds gehost in de uitgever ACR.

Clusterregister

  • Maakt gebruik van een webhook om 'registryPath' en 'imagePullSecrets' direct bij podbewerkingen te injecteren, zonder afhankelijkheid van Helm.
  • Afbeeldingen worden gehost in het register van de lokale netwerkfunctieoperator (NFO) cluster.

Notitie

In alle drie gevallen vervangt AOSM Azure-waarden voor de waarden die een uitgever beschikbaar maakt in sjablonen. Het enige verschil is de vervangingsmethode.

Verouderde vereisten voor registryPath en imagePullSecrets

Azure Operator Service Manager (AOSM) maakt gebruik van de NFM-service (Network Function Manager) voor het implementeren van Containerized Network Functions (CNFs). Met de verouderde methode vervangt NFM de AOSM-containerregisterPath- en imagePullSecrets-waarden in de helm-bewerking tijdens de implementatie van network function (NF).

Verouderde methode gebruiken

In de volgende helm deployment sjabloon ziet u een voorbeeld van hoe een uitgever registryPath en imagePullSecrets beschikbaar moet maken.

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 

In de volgende values.yaml sjabloon ziet u een voorbeeld van hoe een uitgever de waarden registryPath en imagePullSecretsvalue kan opgeven.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

In het volgende values.schema.json bestand ziet u een voorbeeld van hoe een uitgever eenvoudig registryPath en imagePullSecretsvalue kan definiëren.

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

NFDV request payload Hieronder ziet u een voorbeeld van hoe een uitgever de waarden registryPath en imagePullSecretsvalue bij de implementatie kan opgeven.

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

Notitie

  • Het registryPath wordt ingesteld zonder voorvoegsel zoals https:// of oci://. Indien nodig moet de uitgever een voorvoegsel definiëren in het helm-pakket.
  • imagePullSecrets en registryPath moeten worden opgegeven in de onboardingstap NFDVersion maken.

Andere overwegingen met de Legacy-methode

Publisher moet rekening houden met de volgende aanbevelingen wanneer u de verouderde methode gebruikt:

  • Verwijzingen naar extern register voorkomen
  • Handmatige validaties uitvoeren
  • Zorg ervoor dat de statische afbeeldingsrepository en tags aanwezig zijn

Verwijzingen naar extern register voorkomen

Gebruikers moeten voorkomen dat verwijzingen naar een extern register worden gebruikt. Als deployment.yaml bijvoorbeeld een vastgelegd registerpad of externe registerverwijzingen gebruikt, mislukt de validatie.

Handmatige validaties uitvoeren

Controleer de installatiekopieën en containerspecificaties die zijn gemaakt om ervoor te zorgen dat de installatiekopieën het voorvoegsel van registryPath hebben en dat de imagePullSecrets zijn gevuld met secretName.

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

OF

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryPath>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryPath> --dockerusername=<regusername> --docker-password=<regpassword>

Zorg ervoor dat de opslagplaats en tags voor statische afbeeldingen correct zijn

Elke helm chart moet een statische image repository en tags bevatten. De statische waarden worden als volgt ingesteld:

  • Instellen in de beeldlijn of,
  • Stel ze in values.yaml in en geef deze waarden niet weer in de NFDV (Network Function Design Version).

Een NFDV (Network Function Design Version) moet worden toegewezen aan een statische set helm-grafieken en -afbeeldingen. De grafieken en afbeeldingen worden alleen bijgewerkt door een nieuwe NFDV (Network Function Design Version) te publiceren.

 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
 image: http://myUrl/{{ .Values.image.repository }}:{{ .Values.image.tag}}

injectArtifactStoreDetails-vereisten voor registryPath en imagePullSecrets

In sommige gevallen voldoen helm-grafieken van derden mogelijk niet volledig aan de AOSM-vereisten voor registryPath. In dit geval kan de functie injectArtifactStoreDetails worden gebruikt om te voorkomen dat nalevingswijzigingen in Helm-pakketten worden aangebracht. Als injectArtifactStoreDetails is ingeschakeld, wordt een webhookmethode gebruikt om het juiste registryPath en imagePullSecrets dynamisch te injecteren tijdens de podbewerkingen. Hiermee worden de waarden overschreven die zijn geconfigureerd in het helm-pakket. Een uitgever moet nog steeds juridische dummy-waarden gebruiken waarnaar wordt verwezen in registryPath en imagePullSecrets, meestal in het globale gedeelte van values.yaml.

values.yaml Hieronder ziet u een voorbeeld van hoe een uitgever registerPath- en imagePullSecretsvalue-waarden kan leveren voor compatibiliteit met de injectArtifactStoreDetails-benadering.

global: 
   registryPath: “azure.io”
   imagePullSecrets: ["abc123"] 

Notitie

Als registryPath leeg blijft in het onderliggende Helm-pakket, mislukt de implementatie van de sitenetwerkservice (SNS) tijdens het downloaden van de installatiekopieën.

Methode injectArtifactStoreDetails gebruiken

Als u injectArtifactStoreDetails wilt inschakelen, stelt u de parameter installOptions in de sectie NF-resource roleOverrides in op true, zoals wordt weergegeven in het volgende voorbeeld.

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

Notitie

Het Helm-grafiekpakket moet nog steeds goed opgemaakte registryPath- en imagePullSecrets-waarden beschikbaar maken.

Clusterregistervereisten voor registryPath en imagePullSecrets

Met het clusterregister worden installatiekopieën gekopieerd van de uitgever ACR naar een lokale Docker-opslagplaats op het NAKS-cluster (Nexus AKS). Wanneer deze optie is ingeschakeld, wordt een webhookmethode gebruikt om het juiste registryPath en imagePullSecrets dynamisch te injecteren tijdens de podbewerkingen. Hiermee worden de waarden overschreven die zijn geconfigureerd in het Helm-pakket. Een uitgever moet nog steeds juridische dummy-waarden gebruiken waarnaar wordt verwezen in registryPath en imagePullSecrets, meestal in een globale sectie van values.yaml.

values.yaml Hieronder ziet u een voorbeeld van hoe een uitgever de waarden registryPath en imagePullSecretsvalue kan leveren voor compatibiliteit met de benadering van het clusterregister.

global: 
   registryPath: “azure.io”
   imagePullSecrets: ["abc123"] 

Notitie

Als registryPath leeg is in het onderliggende Helm-pakket, mislukt de SNS-implementatie als het probeert de afbeelding te downloaden.

Zie de conceptdocumentatie voor informatie over het gebruik van het clusterregister.

Beperkingen voor onveranderbaarheid van grafieken

Onveranderbaarheidsbeperkingen voorkomen wijzigingen in een bestand of map. Een onveranderbaar bestand kan bijvoorbeeld niet worden gewijzigd of hernoemd. Gebruikers moeten het gebruik van onveranderbare tags, zoals nieuwste, ontwikkelaars of stabiel, vermijden. Als deployment.yaml bijvoorbeeld 'latest' voor .Values.image.tag gebruikt, zou de implementatie mislukken.

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

CRD-declaratie en gebruikssplitsing in grafiek

Wij raden aan om de klantresourcedefinities (CRD) wat betreft declaratie en gebruik op te splitsen in afzonderlijke Helm-charts om updates te ondersteunen. Zie voor gedetailleerde informatie: methode 2-afzonderlijke grafieken