Share via


Requisitos del paquete de Helm

Helm es un administrador de paquetes para Kubernetes que le ayuda a administrar aplicaciones de Kubernetes. Los paquetes de Helm se denominan gráficos y constan de algunos archivos de configuración de YAML y algunas plantillas que se representan en archivos de manifiesto de Kubernetes. Los gráficos son reutilizables por cualquier usuario para cualquier entorno, lo que reduce la complejidad y los duplicados.

Requisitos de ruta de acceso de dirección URL del Registro e imagepullsecrets

Al desarrollar un paquete de Helm, es habitual mantener la dirección URL del servidor del registro de contenedor en los valores. Mantener la dirección URL del servidor del registro de contenedor en los valores es útil para mover artefactos entre cada registro de contenedor de entorno. Azure Operator Service Manager (AOSM) usa el servicio Network Function Manager (NFM) para implementar la función de red en contenedores (CNF). Network Function Manager (NFM) contiene características para insertar la ubicación del servidor del registro de contenedor e imagepullsecrets en los valores de Helm durante la implementación de la función de red (NF). ImagePullSecret es un token de autorización, también conocido como secreto, que almacena las credenciales de Docker que se usan para acceder a un registro. Por ejemplo, si necesita implementar una aplicación a través de la implementación de Kubernetes, puede definir una implementación como en el ejemplo siguiente:

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 es un archivo que permite establecer fácilmente los requisitos y restricciones de valor en una sola ubicación para los gráficos de Helm. En este archivo, defina registryPath e imagePullSecrets como propiedades necesarias.

{ 
  "$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" ], 
      } 
   } 
} 

La carga de la solicitud NFDVersion proporciona los siguientes valores en registryValuesPaths:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

Durante una implementación NF, el operador de funciones de red (NFO) establece registryPath en la ubicación correcta del servidor de Azure Container Registry (ACR). Por ejemplo, el NFO ejecuta el siguiente comando equivalente:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

Nota:

RegistryPath se establece sin ningún prefijo, como https:// o oci://. Si se requiere un prefijo en el paquete de Helm, los publicadores deben definirlo en el paquete.

values.yaml es un archivo que contiene los valores predeterminados de un gráfico de Helm. Es un archivo YAML que define los valores predeterminados de un gráfico. En el archivo values.yaml, deben estar presentes dos tipos de variables; imagePullSecrets y RegistryPath. Cada uno se describe en la tabla.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Nombre Type Descripción
imagePullSecrets String imagePullSecrets son una matriz de nombres secretos, que se usan para extraer imágenes de contenedor.
RegistryPath String RegistryPath es la ubicación del AzureContainerRegistry servidor

imagePullSecrets y RegistryPath deben proporcionarse en el paso de creación de la incorporación de NFDVersion.

Una NFO que se ejecuta en el clúster rellena estas dos variables (imagePullSecrets y RegistryPath) durante una versión de Helm mediante el comando helm install –set.

Para obtener más información, consulte: pull-image-private-registry

Restricciones de inmutabilidad

Las restricciones de inmutabilidad impiden los cambios en un archivo o directorio. Por ejemplo, no se puede cambiar ni cambiar un archivo inmutable y no se puede eliminar, modificar ni cambiar el nombre de un archivo que permita las operaciones de anexión.

Evitar el uso de etiquetas mutables

Los usuarios deben evitar el uso de etiquetas mutables como las más recientes, dev o estables. Por ejemplo, si deployment.yaml usó "latest" para . Values.image.tag se produciría un error en la implementación.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

Evitar referencias al registro externo

Los usuarios deben evitar usar referencias a un registro externo. Por ejemplo, si deployment.yaml usa una ruta de acceso del Registro codificada de forma codificada o referencias externas del registro, se produce un error en la validación.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

Recomendaciones

La división de la declaración y el uso de definiciones de recursos personalizados (CRD) además de usar validaciones manuales son prácticas recomendadas. Cada uno se describe en las secciones siguientes.

División de la declaración y el uso de CRD

Se recomienda dividir la declaración y el uso de CRD en gráficos de Helm independientes para admitir actualizaciones. Para obtener información detallada, consulte: method-2-separate-charts

Validaciones manuales

Revise las imágenes y las especificaciones de contenedor creadas para asegurarse de que las imágenes tienen el prefijo registryURL y imagePullSecrets se rellenan con secretName.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

O BIEN

 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>

Repositorio y etiquetas de imágenes estáticas

Cada gráfico de Helm debe contener etiquetas y repositorios de imágenes estáticos. Los usuarios deben establecer el repositorio de imágenes y etiquetar en valores estáticos. Los valores estáticos se pueden establecer mediante:

  • Al codificarlos de forma rígida en la línea de imagen o ,
  • Establecer los valores en values.yaml y no exponer estos valores en la versión de diseño de funciones de red (NFDV).

Una versión de diseño de funciones de red (NFDV) debe asignarse a un conjunto estático de gráficos e imágenes de Helm. Los gráficos e imágenes solo se actualizan publicando una nueva versión de diseño de funciones de red (NFDV).

 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