Requisiti dei pacchetti Helm
Helm è una gestione pacchetti per Kubernetes che consente di gestire le applicazioni Kubernetes. I pacchetti Helm sono denominati grafici e sono costituiti da alcuni file di configurazione YAML e alcuni modelli di cui viene eseguito il rendering nei file manifesto di Kubernetes. I grafici sono riutilizzabili da chiunque per qualsiasi ambiente, riducendo la complessità e i duplicati.
Requisiti per il percorso dell'URL del Registro di sistema e imagepullsecrets
Quando si sviluppa un pacchetto Helm, è comune mantenere l'URL del server del registro contenitori nei valori. Mantenere l'URL del server del registro contenitori nei valori è utile per lo spostamento di elementi tra ogni registro contenitori dell'ambiente. Azure Operator Service Manager (AOSM) usa il servizio Network Function Manager (NFM) per distribuire la funzione di rete in contenitori (CNF). Network Function Manager (NFM) contiene funzionalità per inserire il percorso del server del registro contenitori e imagepullsecrets nei valori helm durante la distribuzione della funzione di rete (NF). ImagePullSecret è un token di autorizzazione, noto anche come segreto, che archivia le credenziali Docker usate per accedere a un registro. Ad esempio, se è necessario distribuire un'applicazione tramite la distribuzione di Kubernetes, è possibile definire una distribuzione come nell'esempio seguente:
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
è un file che consente di impostare facilmente i requisiti di valore e i vincoli in un'unica posizione per i grafici Helm. In questo file definire registryPath e imagePullSecrets come proprietà obbligatorie.
{
"$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" ],
}
}
}
Il payload della richiesta NFDVersion fornisce i valori seguenti in registryValuesPaths:
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Durante una distribuzione NF, l'operatore NFO (Network Function Operator) imposta registryPath sul percorso del server di Registro Azure Container (ACR) corretto. Ad esempio, l'NFO esegue il comando equivalente seguente:
$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage
Nota
RegistryPath viene impostato senza prefisso, ad esempio https:// o oci://. Se nel pacchetto Helm è necessario un prefisso, gli editori devono definirlo nel pacchetto.
values.yaml
è un file che contiene i valori predefiniti per un grafico Helm. Si tratta di un file YAML che definisce i valori predefiniti per un grafico. Nel file values.yaml devono essere presenti due tipi di variabili; imagePullSecrets e registryPath. Ognuno di essi è descritto nella tabella.
global:
imagePullSecrets: []
registryPath: “”
Nome | Digita | Descrizione |
---|---|---|
imagePullSecrets | Stringa | imagePullSecrets è una matrice di nomi segreti, usati per eseguire il pull delle immagini del contenitore |
registryPath | Stringa | registryPath è il percorso del AzureContainerRegistry server |
imagePullSecrets e registryPath devono essere forniti nel passaggio di onboarding create NFDVersion.
Un NFO in esecuzione nel cluster popola queste due variabili (imagePullSecrets e registryPath) durante una versione helm usando il comando helm install –set.
Per altre informazioni, vedere: pull-image-private-registry
Restrizioni di immutabilità
Le restrizioni di immutabilità impediscono modifiche a un file o a una directory. Ad esempio, non è possibile modificare o rinominare un file non modificabile e un file che consente operazioni di accodamento non può essere eliminato, modificato o rinominato.
Evitare l'uso di tag modificabili
Gli utenti devono evitare di usare tag modificabili, ad esempio latest, dev o stable. Ad esempio, se deployment.yaml usa 'latest' per . Values.image.tag la distribuzione avrà esito negativo.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
Evitare riferimenti al Registro di sistema esterno
Gli utenti devono evitare di usare riferimenti a un registro esterno. Ad esempio, se deployment.yaml usa un percorso del Registro di sistema hardcoded o un registro di sistema esterno fa riferimento a un errore di convalida.
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
Consigli
La suddivisione della dichiarazione e dell'utilizzo delle definizioni di risorse personalizzate (CRD) e l'uso di convalide manuali sono procedure consigliate. Ognuno di essi è descritto nelle sezioni seguenti.
Split CRD declaration and usage
È consigliabile suddividere la dichiarazione e l'utilizzo dei CRL in grafici Helm separati per supportare gli aggiornamenti. Per informazioni dettagliate, vedere: method-2-separate-charts
Convalide manuali
Esaminare le immagini e le specifiche del contenitore create per assicurarsi che le immagini abbiano il prefisso registryURL e che imagePullSecrets siano popolati con secretName.
helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
OPPURE
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>
Repository di immagini statiche e tag
Ogni grafico Helm deve contenere tag e repository di immagini statiche. Gli utenti devono impostare il repository di immagini e il tag su valori statici. I valori statici possono essere impostati da:
- Codificandoli come hardcoded nella riga dell'immagine o
- Impostazione dei valori in values.yaml e non esposizione di questi valori nella versione NFDV (Network Function Design Version).
Una versione NFDV (Network Function Design Version) deve essere mappata a un set statico di grafici helm e immagini. I grafici e le immagini vengono aggiornati solo pubblicando una nuova versione NFDV (Network Function Design Version).
image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“
o
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
YAML values.yaml
image:
repository: contosoapp
tag: 1.14.2