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