Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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://
ofoci://
. 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