Přehled požadavků Helmu
Helm je správce balíčků pro Kubernetes, který pomáhá zjednodušit správu životního cyklu aplikací. Balíčky Helm se nazývají grafy a skládají se z konfiguračních souborů a souborů šablon YAML. Při spuštění operace Helm se grafy vykreslí do souborů manifestu Kubernetes, aby se aktivovala příslušná akce životního cyklu aplikace. Pro nejúčinnější integraci s Azure Operator Service Managerem (AOSM) by vydavatel měl při vývoji chartů Helm zvážit určité aspekty osvědčených postupů.
Důležité informace o registruUrl a imagePullSecrets
Každý chart Helm obecně vyžaduje deklarovaný registrUrl a imagePullSecrets. Osvědčený postup doporučuje, aby vydavatel tyto dva parametry konzistentně definoval jako proměnné v souboru values.yaml. AOSM zpočátku závisel na vydavateli, který tyto hodnoty zpřístupňuje striktním způsobem, takže je bylo možné ingestovat a následně vkládat během nasazení. Tento přístup se označuje jako starší metoda. Přesčasová řada komplikací vznikla, protože ne všechny grafy vydavatelů splňovaly striktní definici registryUrl a imagePullSecrets vyžadované AOSM.
- Některé grafy skryjí hodnoty registryUrl a/nebo imagePullSecrets za podmíněným nebo jiným omezením hodnot, které nebyly vždy splněny.
- Některé grafy nehlásí hodnoty registryUrl ani imagePullSecrets jako očekávaný pojmenovaný řetězec, místo toho jako pole.
Aby se snížily přísné požadavky na dodržování předpisů pro vydavatele pro registryUrl a imagePullSecrets, AOSM později zavedl dvě vylepšené metody zpracování těchto hodnot. Nejprve injektážArtifactStoreDetail a nakonec registr clusteru. Tyto dvě novější metody vůbec nezávisí na registruUrl nebo imagePullSecrets, které se zobrazují v balíčku Helm. Místo toho tyto metody odvozují a vkládat tyto hodnoty jménem síťové funkce.
Souhrn metod pro registryUrl a imagePullSecrets
Dědictví.
- Požadovaný vydavatel pro parametrizaci registryUrl &imagePullSecrets správně v hodnotách helmu a šablonách pro nahrazení.
- Image hostované v publisheru Azure Container Registry (ACR).
InjectArtifactStoreDetail.
- Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do podu bez jakékoli závislosti na helmu.
- Image jsou pořád hostované v ACR vydavatele.
Registr clusteru
- Stejné jako InjektArtifactStoreDetail, s výjimkou teď jsou image hostované v místním registru clusteru.
Poznámka:
Ve všech třech případech AOSM nahrazují tajné kódy odvozené od AOSM všemi tajnými kódy, které vydavatel zveřejňuje v šablonách. Jediným rozdílem je Legacy a InjectArtifactStoreDetail, tajný kód je vázán na ACR vydavatele, zatímco v registru clusteru je tajný klíč vázán na registr clusteru.
Starší požadavky pro registryUrl a imagePullSecrets
Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizované síťové funkce (CNF). NFM vloží do hodnot helmu během nasazování síťové funkce (NF) hodnoty registru kontejneru Arl a imagePullSecrets. Následující šablona nasazení helmu ukazuje příklad toho, jak by vydavatel měl vystavit registryPath a imagePullSecrets kvůli kompatibilitě se starší verzí přístupu AOSM.
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
Následující values.schema.json
soubor ukazuje příklad, jak může vydavatel snadno nastavit požadavky registryPath a imagePullSecretsvalue pro kompatibilitu se starší verzí přístupu AOSM.
{
"$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" ],
}
}
}
Následující NFDVersion request payload
příklad ukazuje, jak může vydavatel poskytnout hodnoty registryPath a imagePullSecretsvalue pro zajištění kompatibility se starší verzí přístupu AOSM.
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Následující values.yaml
příklad ukazuje, jak může vydavatel poskytnout hodnoty registryPath a imagePullSecretsvalue pro zajištění kompatibility se starší verzí přístupu AOSM.
global:
imagePullSecrets: []
registryPath: “”
Name | Typ | Popis |
---|---|---|
imagePullSecrets | String | imagePullSecrets jsou pole názvů tajných kódů, které se používají k vyžádání imagí kontejneru. |
registryPath | String | registryPath je AzureContainerRegistry umístění serveru. |
Poznámka:
- Cesta registru je nastavena bez jakékoli předpony, například
https://
nebooci://
. V případě potřeby musí vydavatel definovat předponu v balíčku Helm. - ImagePullSecrets a registryPath musí být k dispozici v kroku vytvoření NFDVersion onboarding.
Vyhněte se odkazům na externí registr
Uživatelé by se měli vyhnout použití odkazů na externí registr. Pokud například deployment.yaml používá pevně zakódovanou cestu registru nebo odkazuje na externí registr, ověření se nezdaří.
Ruční ověření
Zkontrolujte image a specifikace kontejnerů vytvořené a ujistěte se, že image mají předponu registryURL a imagePullSecrets jsou naplněné secretName.
helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
NEBO
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>
Statické úložiště imagí a značky
Každý chart Helm by měl obsahovat statické úložiště imagí a značky. Statické hodnoty jsou nastaveny takto:
- Nastavení na řádku obrázku nebo
- Nastavení hodnot.yaml a jejich zveřejnění ve verzi návrhu síťové funkce (NFDV).
Verze návrhu síťové funkce (NFDV) by se měla mapovat na statickou sadu grafů a obrázků helmu. Grafy a obrázky se aktualizují jenom publikováním nové verze návrhu síťových funkcí (NFDV).
image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“
Nebo
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 požadavky pro registryUrl a imagePullSecrets
V některých případech nemusí grafy helmu třetích stran plně vyhovovat požadavkům AOSM pro registrURL. V tomto případě je možné použít funkci injectArtifactStoreDetails, abyste se vyhnuli změnám balíčků Helm. Chcete-li použít injektArtifactStoreDetails, nastavte parametr installOptions v oddílu role prostředku NFOverrides na hodnotu true, pak v balíčku chartu Helm použijte libovolnou hodnotu registryURL, aby byla adresa URL registru platná. Viz následující příklad injektArtifactStoreDetails parametr enabled.
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"}}}}}'
]
}
}
Omezení neměnnosti grafu
Omezení neměnnosti brání změnám souboru nebo adresáře. Neměnný soubor se například nedá změnit ani přejmenovat. Uživatelé by se měli vyhnout používání proměnlivých značek, jako jsou nejnovější, vývojové nebo stabilní. Pokud například deployment.yaml použil pro soubor "latest". Hodnoty.image.tag nasazení by selhalo.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
Rozdělení deklarace CRD grafu a využití
Pokud chcete podporovat aktualizace, doporučujeme rozdělit deklaraci a použití definic prostředků zákazníků (CRD) do samostatných grafů helmu. Podrobné informace najdete v tématu: metoda-2-samostatné-grafy