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 registrUrl a imagePullSecrets. Nejčastěji vydavatel zveřejňuje tyto parametry v souboru values.yaml. AOSM zpočátku závisel na vydavateli, který tyto hodnoty zpřístupňuje striktním způsobem, takže by bylo možné je během nasazování nahradit správnými hodnotami Azure. Přesčas, ne všichni vydavatelé by mohli snadno dodržovat striktní zpracování těchto hodnot vyžadovaných 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.
Kvůli omezení striktních požadavků na dodržování předpisů pro vydavatele společnost AOSM později zavedla dvě vylepšené metody zpracování těchto hodnot. Nejprve injektážArtifactStoreDetail a nakonec registr clusteru. Tyto dvě novější metody nezávisí na platném registruUrl nebo imagePullSecrets, které se zobrazují v balíčku Helm. Tyto metody místo toho tyto hodnoty vloží přímo do operací podů jménem síťové funkce.
Souhrn metod pro registryUrl a imagePullSecrets
Všechny tři metody jsou podporované a popsané v tomto článku. Vydavatel by měl zvolit nejlepší možnost pro svou síťovou funkci a případ použití.
Dědictví.
- Vyžaduje, aby vydavatel při nahrazení hodnot helmu a šablon nasazení parametrizoval registryUrl &imagePullSecrets.
- Image jsou hostované v publisheru Azure Container Registry (ACR).
InjectArtifactStoreDetail.
- Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do operací podů s minimálními závislostmi helmu.
- Image jsou pořád hostované v ACR vydavatele.
Registr clusteru
- Pomocí webhooku vloží registryUrl &imagePullSecrets přímo do operací podů bez závislostí na helmu.
- Image jsou hostované v místním registru clusteru rozšíření NFO.
Poznámka:
Ve všech třech případech AOSM nahrazují hodnoty AOSM hodnotami, které vydavatel zveřejňuje v šablonách. Jediným rozdílem je metoda nahrazení.
Starší požadavky pro registryUrl a imagePullSecrets
Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizovaných síťových funkcí (CNF). Starší verze metody NFM nahradí hodnoty registru kontejneru AOSM a imagePullSecrets do operace helm během nasazení síťové funkce (NF).
Použití starší metody
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: “”
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.
Další aspekty starší metody
Při použití starší metody by publisher měl zvážit následující doporučení:
- Vyhněte se odkazům na externí registr
- Provedení ručních ověření
- Zajištění úložiště statických imagí a značek
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ří.
Provádění ručních 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>
Zajištění úložiště statických imagí a značek
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ě se dá použít funkce injectArtifactStoreDetails, aby se zabránilo změnám dodržování předpisů v balíčcích Helm. Při použití metody injectArtifactStoreDetails se metoda webhooku používá k dynamickému vkládání správných registrŮrl a imagePullSecrets během operací podu. Tím se přepíše hodnoty, které jsou nakonfigurované v balíčku Helm.
Použití metody injectArtifactStoreDetails
Chcete-li povolit injektArtifactStoreDetails, nastavte parametr installOptions v oddílu RoleOverrides prostředku NF na hodnotu true, jak je znázorněno v následujícím příkladu.
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"}}}}}'
]
}
}
Poznámka:
Balíček chartu Helm musí stále vystavit správně formátované hodnoty registryURL a imagePullSecrets.
Požadavky na registr clusteru pro registryUrl a imagePullSecrets
Informace o používání registru clusteru najdete v dokumentaci ke konceptu.
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