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 levenscyclusactie van de toepassing te activeren. Voor de meest efficiënte integratie met Azure Operator Service Manager (AOSM) moet de uitgever rekening houden met bepaalde best practice-overwegingen bij het ontwikkelen van Helm-grafieken.
Overwegingen voor registryUrl en imagePullSecrets
Voor elke Helm-grafiek is over het algemeen een registryUrl 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 weergeeft, zodat ze tijdens de implementatie kunnen worden vervangen door de juiste Azure-waarden. Overuren konden niet alle uitgevers gemakkelijk voldoen aan de strikte verwerking van deze waarden die door AOSM zijn vereist.
- Sommige grafieken verbergen registryUrl en/of imagePullSecrets achter voorwaarden, of andere waardenbeperkingen, die niet altijd werden voldaan.
- Sommige grafieken declareren registryUrl 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 later twee verbeterde methoden geïntroduceerd voor het verwerken van deze waarden. InjectArtifactStoreDetail en ten slotte clusterregister. Deze twee nieuwere methoden zijn niet afhankelijk van geldige registryUrl- of imagePullSecrets die worden weergegeven in het Helm-pakket. In plaats daarvan injecteren deze methoden deze waarden rechtstreeks in podbewerkingen namens de netwerkfunctie.
Methodeoverzicht voor registryUrl en imagePullSecrets
Alle drie de methoden worden ondersteund en beschreven in dit artikel. Een uitgever moet de beste optie kiezen voor hun netwerkfunctie en gebruiksvoorbeeld.
Nalatenschap.
- Vereist dat publisher registryUrl & imagePullSecrets conform parameteriseert in helm-waarden en implementatiesjablonen voor vervanging.
- Installatiekopieën worden gehost in de uitgever Azure Container Registry (ACR).
InjectArtifactStoreDetail.
- Maakt gebruik van een webhook om registryUrl & 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 registryUrl & imagePullSecrets rechtstreeks in podbewerkingen te injecteren, zonder afhankelijkheid van Helm.
- Installatiekopieën worden gehost in het lokale NFO-extensieclusterregister.
Notitie
In alle drie gevallen vervangt AOSM AOSM-waarden voor alle waarden die een uitgever beschikbaar maakt in sjablonen. Het enige verschil is de methode voor vervanging.
Verouderde vereisten voor registryUrl 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-containerregisterUrl- en imagePullSecrets-waarden in de helm-bewerking tijdens de implementatie van de netwerkfunctie (NF).
Verouderde methode gebruiken
In de volgende Helm-implementatiesjabloon ziet u een voorbeeld van hoe een uitgever registerPath en imagePullSecrets beschikbaar moet maken voor compatibiliteit met verouderde AOSM-benadering.
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 het volgende values.schema.json
bestand ziet u een voorbeeld van hoe een uitgever eenvoudig registerPath- en imagePullSecretsvalue-vereisten voor compatibiliteit met een verouderde AOSM-benadering kan instellen.
{
"$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" ],
}
}
}
NFDVersion request payload
Hieronder ziet u een voorbeeld van hoe een uitgever registerPath- en imagePullSecretsvalue-waarden kan leveren voor compatibiliteit met verouderde AOSM-benadering.
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
values.yaml
Hieronder ziet u een voorbeeld van hoe een uitgever registerPath- en imagePullSecretsvalue-waarden kan leveren voor compatibiliteit met verouderde AOSM-benadering.
global:
imagePullSecrets: []
registryPath: “”
Notitie
- Het registryPath wordt ingesteld zonder voorvoegsel zoals
https://
ofoci://
. Indien nodig moet publisher een voorvoegsel definiëren in het Helm-pakket. - imagePullSecrets en registryPath moeten worden opgegeven in de onboardingstap NFDVersion maken.
Andere overwegingen met verouderde methode
Publisher moet ook rekening houden met de volgende aanbevelingen bij het gebruik van de verouderde methode:
- Verwijzingen naar extern register voorkomen
- Handmatige validaties uitvoeren
- Zorg ervoor dat de opslagplaats en tags voor statische installatiekopieën worden opgeslagen
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 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>
Zorg ervoor dat de opslagplaats en tags voor statische installatiekopieën worden opgeslagen
Elke Helm-grafiek moet een opslagplaats en tags voor statische installatiekopieën bevatten. De statische waarden worden als volgt ingesteld:
- Deze instellen op de afbeeldingslijn 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 registryUrl en imagePullSecrets
In sommige gevallen voldoen helm-grafieken van derden mogelijk niet volledig aan de AOSM-vereisten voor registryURL. 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 de juiste registryUrl en imagePullSecrets dynamisch te injecteren tijdens de podbewerkingen. Hiermee worden de waarden overschreven die zijn geconfigureerd in het Helm-pakket.
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 registryURL- en imagePullSecrets-waarden beschikbaar maken.
Clusterregistervereisten voor registryUrl en imagePullSecrets
Raadpleeg 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 de . Values.image.tag de implementatie mislukt.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
CRD-declaratie en gebruikssplitsing in grafiek
U wordt aangeraden de declaratie en het gebruik van resourcedefinities (CRD) van klanten op te splitsen in afzonderlijke Helm-grafieken om updates te ondersteunen. Zie voor gedetailleerde informatie: methode 2-afzonderlijke grafieken