Krav för Helm-paket
Helm är en pakethanterare för Kubernetes som hjälper dig att hantera Kubernetes-program. Helm-paket kallas diagram och består av några YAML-konfigurationsfiler och några mallar som återges i Kubernetes-manifestfiler. Diagram kan återanvändas av vem som helst för alla miljöer, vilket minskar komplexiteten och dubbletter.
Register-URL-sökväg och krav för imagepullsecrets
När du utvecklar ett helm-paket är det vanligt att behålla url:en för containerregisterservern i värdena. Att behålla url:en för containerregisterservern i värdena är användbart för att flytta artefakter mellan varje miljöcontainerregister. Azure Operator Service Manager (AOSM) använder NFM-tjänsten (Network Function Manager) för att distribuera Containerized Network Function (CNF). NFM (Network Function Manager) innehåller funktioner för att mata in containerregisterserverns plats och avbildningar i helm-värdena under NF-distributionen (Network Function). En imagePullSecret är en auktoriseringstoken, även kallad hemlighet, som lagrar Docker-autentiseringsuppgifter som används för att komma åt ett register. Om du till exempel behöver distribuera ett program via Kubernetes-distribution kan du definiera en distribution som i följande exempel:
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
är en fil som gör att du enkelt kan ange värdekrav och begränsningar på en enda plats för Helm-diagram. I den här filen definierar du registryPath och imagePullSecrets som nödvändiga egenskaper.
{
"$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" ],
}
}
}
Nyttolasten för NFDVersion-begäran innehåller följande värden i registryValuesPaths:
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Under en NF-distribution ställer NFO (Network Function Operator) in registryPath till rätt Azure Container Registry-serverplats (ACR). NFO kör till exempel följande motsvarande kommando:
$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage
Kommentar
RegistryPath har angetts utan prefix, till exempel https:// eller oci://. Om ett prefix krävs i helm-paketet måste utgivare definiera detta i paketet.
values.yaml
är en fil som innehåller standardvärdena för ett Helm-diagram. Det är en YAML-fil som definierar standardvärdena för ett diagram. I filen values.yaml måste två typer av variabler finnas. imagePullSecrets och registryPath. Var och en beskrivs i tabellen.
global:
imagePullSecrets: []
registryPath: “”
Name | Type | Description |
---|---|---|
imagePullSecrets | String | imagePullSecrets är en matris med hemliga namn som används för att hämta containeravbildningar |
registryPath | String | registryPath är AzureContainerRegistry serverplatsen |
imagePullSecrets och registryPath måste anges i registreringssteget skapa NFDVersion.
En NFO som körs i klustret fyller i dessa två variabler (imagePullSecrets och registryPath) under en helm-version med hjälp av kommandot helm install –set.
Mer information finns i: pull-image-private-registry
Oföränderlighetsbegränsningar
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, och en fil som tillåter tilläggsåtgärder kan inte tas bort, ändras eller byta namn.
Undvik att använda föränderliga taggar
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}}“
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.
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
Rekommendationer
Att dela upp deklarationen för anpassade resursdefinitioner (CRD)-deklarationen och användningen plus att använda manuella valideringar är rekommenderade metoder. Var och en beskrivs i följande avsnitt.
Dela CRD-deklaration och användning
Vi rekommenderar att du delar upp deklarationen och användningen av CRD:er i separata helm-diagram för att stödja uppdateringar. Detaljerad information finns i: method-2-separate-charts
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>
Lagringsplats och taggar för statisk avbildning
Varje helm-diagram ska innehålla lagringsplats och taggar för statiska avbildningar. Användare bör ange avbildningslagringsplatsen och taggen till statiska värden. Statiska värden kan anges genom att:
- Genom att hårdkoda dem på bildlinjen eller,
- Ange värden 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