Požadavky na balíček Helm
Helm je správce balíčků pro Kubernetes, který pomáhá spravovat aplikace Kubernetes. Balíčky Helm se nazývají grafy a skládají se z několika konfiguračních souborů YAML a některých šablon, které se vykreslují do souborů manifestu Kubernetes. Grafy se dají opakovaně použít pro každé prostředí, což snižuje složitost a duplikáty.
Požadavky na cestu URL registru a imagepullsecrets
Při vývoji balíčku Helm je běžné zachovat adresu URL serveru registru kontejneru v hodnotách. Zachování adresy URL serveru registru kontejneru v hodnotách je užitečné pro přesun artefaktů mezi jednotlivými registry kontejneru prostředí. Azure Operator Service Manager (AOSM) používá službu Network Function Manager (NFM) k nasazení containerizované síťové funkce (CNF). Správce síťových funkcí (NFM) obsahuje funkce pro vložení umístění serveru registru kontejneru a imagepullsecrets do hodnot helmu během nasazení síťové funkce (NF). ImagePullSecret je autorizační token, označovaný také jako tajný kód, který ukládá přihlašovací údaje Dockeru, které se používají pro přístup k registru. Pokud například potřebujete nasadit aplikaci prostřednictvím nasazení Kubernetes, můžete definovat nasazení jako v následujícím příkladu:
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
je soubor, který umožňuje snadno nastavit požadavky na hodnoty a omezení v jednom umístění pro grafy Helm. V tomto souboru definujte vlastnost registryPath a imagePullSecrets jako požadované vlastnosti.
{
"$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" ],
}
}
}
Datová část požadavku NFDVersion poskytuje následující hodnoty v registruValuesPaths:
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Během nasazení NF nastaví operátor síťové funkce (NFO) cestu registru na správné umístění serveru Azure Container Registry (ACR). Například NFO spustí následující ekvivalentní příkaz:
$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage
Poznámka:
Cesta registru je nastavena bez předpony, jako je https:// nebo oci://. Pokud je v balíčku Helm vyžadována předpona, musí vydavatelé tuto předponu definovat v balíčku.
values.yaml
je soubor, který obsahuje výchozí hodnoty chartu Helm. Jedná se o soubor YAML, který definuje výchozí hodnoty grafu. V souboru values.yaml musí existovat dva typy proměnných; imagePullSecrets a registryPath Každá z nich je popsaná v tabulce.
global:
imagePullSecrets: []
registryPath: “”
Name | Typ | Popis |
---|---|---|
imagePullSecrets | Řetězec | imagePullSecrets jsou pole názvů tajných kódů, které se používají k vyžádání imagí kontejneru. |
registryPath | Řetězec | registryPath je AzureContainerRegistry umístění serveru. |
ImagePullSecrets a registryPath musí být k dispozici v kroku vytvoření NFDVersion onboarding.
NFO spuštěné v clusteru naplní tyto dvě proměnné (imagePullSecrets a registryPath) během vydání helmu pomocí příkazu helm install –set.
Další informace najdete v tématu: pull-image-private-registry
Omezení neměnnosti
Omezení neměnnosti brání změnám souboru nebo adresáře. Neměnný soubor se například nedá změnit ani přejmenovat a soubor, který umožňuje přidávací operace odstranit, upravit ani přejmenovat.
Vyhněte se používání proměnlivých značek
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}}“
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ří.
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
Doporučení
Rozdělení deklarace vlastních definic prostředků (CRD) a použití plus použití pomocí ručních ověření jsou doporučené postupy. Každá z nich je popsaná v následujících částech.
Rozdělení deklarace a využití CRD
Pokud chcete podporovat aktualizace, doporučujeme rozdělit deklaraci a použití CRD do samostatných grafů helmu. Podrobné informace najdete v tématu: metoda-2-samostatné-grafy
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. Uživatelé by měli nastavit úložiště imagí a značku na statické hodnoty. Statické hodnoty lze nastavit pomocí:
- Jejich pevným kódováním na řádku obrázku nebo
- Nastavení hodnot v values.yaml a nevystavování těchto hodnot 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“
or
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
YAML values.yaml
image:
repository: contosoapp
tag: 1.14.2