Share via


Helm-pakketvereisten

Helm is een pakketbeheerder voor Kubernetes waarmee u Kubernetes-toepassingen kunt beheren. Helm-pakketten worden grafieken genoemd en bestaan uit een paar YAML-configuratiebestanden en sommige sjablonen die worden weergegeven in Kubernetes-manifestbestanden. Grafieken kunnen door iedereen worden hergebruikt voor elke omgeving, waardoor complexiteit en duplicaten worden verminderd.

Register-URL-pad en vereisten voor imagepullsecrets

Bij het ontwikkelen van een Helm-pakket is het gebruikelijk om de URL van de containerregisterserver in de waarden te bewaren. Het bewaren van de URL van de containerregisterserver in de waarden is handig voor het verplaatsen van artefacten tussen elk containerregister van de omgeving. Azure Operator Service Manager (AOSM) maakt gebruik van de NFM-service (Network Function Manager) voor het implementeren van een containernetwerkfunctie (CNF). Network Function Manager (NFM) bevat functies voor het injecteren van de locatie van de containerregisterserver en imagepullsecrets in de helm-waarden tijdens de implementatie van network function (NF). Een imagePullSecret is een autorisatietoken, ook wel een geheim genoemd, waarin Docker-referenties worden opgeslagen die worden gebruikt voor toegang tot een register. Als u bijvoorbeeld een toepassing wilt implementeren via Kubernetes-implementatie, kunt u een implementatie definiëren zoals in het volgende voorbeeld:

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 is een bestand waarmee u eenvoudig waardevereisten en beperkingen kunt instellen op één locatie voor Helm-grafieken. In dit bestand definieert u registryPath en imagePullSecrets als vereiste eigenschappen.

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

De nettolading van de NFDVersion-aanvraag bevat de volgende waarden in de registryValuesPaths:

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

Tijdens een NF-implementatie stelt de Netwerkfunctieoperator (NFO) het registryPath in op de juiste Azure Container Registry-serverlocatie (ACR). De NFO voert bijvoorbeeld de volgende equivalente opdracht uit:

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

Notitie

Het registryPath wordt ingesteld zonder voorvoegsel, zoals https:// of oci://. Als een voorvoegsel is vereist in het Helm-pakket, moeten uitgevers dit definiëren in het pakket.

values.yaml is een bestand dat de standaardwaarden voor een Helm-grafiek bevat. Het is een YAML-bestand dat de standaardwaarden voor een grafiek definieert. In het bestand values.yaml moeten twee typen variabelen aanwezig zijn; imagePullSecrets en registryPath. Elk wordt beschreven in de tabel.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Naam Type Omschrijving
imagePullSecrets String imagePullSecrets zijn een matrix met geheime namen, die worden gebruikt om containerinstallatiekopieën op te halen
registryPath String registryPath is de AzureContainerRegistry serverlocatie

imagePullSecrets en registryPath moeten worden opgegeven in de onboardingstap NFDVersion maken.

Een NFO die in het cluster wordt uitgevoerd, vult deze twee variabelen (imagePullSecrets en registryPath) tijdens een helm-release met behulp van de helm-installatie -set-opdracht.

Zie voor meer informatie: pull-image-private-registry

Onveranderbaarheidsbeperkingen

Onveranderbaarheidsbeperkingen voorkomen wijzigingen in een bestand of map. Een onveranderbaar bestand kan bijvoorbeeld niet worden gewijzigd of hernoemd, en een bestand dat toevoegbewerkingen toestaat, kan niet worden verwijderd, gewijzigd of hernoemd.

Vermijd het gebruik van onveranderbare tags

Gebruikers moeten het gebruik van onveranderbare tags, zoals nieuwste, ontwikkelaars of stabiel, vermijden. Als deployment.yaml bijvoorbeeld 'latest' voor de . Values.image.tag de implementatie mislukt.

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

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.

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

Aanbevelingen

Het splitsen van de declaratie en het gebruik van aangepaste resourcedefinities (CRD's) plus het gebruik van handmatige validaties zijn aanbevolen procedures. Elk wordt beschreven in de volgende secties.

CRD-declaratie en -gebruik splitsen

We raden u aan de declaratie en het gebruik van CRD's op te splitsen in afzonderlijke Helm-grafieken om updates te ondersteunen. Zie voor gedetailleerde informatie: methode 2-afzonderlijke grafieken

Handmatige validaties

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

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

OF

 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>

Opslagplaats en tags voor statische installatiekopieën

Elke Helm-grafiek moet een opslagplaats en tags voor statische installatiekopieën bevatten. Gebruikers moeten de opslagplaats voor installatiekopieën instellen en taggen op statische waarden. De statische waarden kunnen worden ingesteld door:

  • Door ze hard te coderen in de afbeeldingslijn of,
  • Stel de waarden 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“

of

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