Creación de un controlador de datos habilitado para Azure Arc mediante las herramientas de Kubernetes

Un controlador de datos administra los servicios de datos habilitados para Azure Arc para un clúster de Kubernetes. En este artículo se describe cómo usar las herramientas de Kubernetes para crear un controlador de datos.

Para crear el controlador de datos, hay que seguir estos pasos de alto nivel:

  1. Creación del espacio de nombres y el servicio de programa previo
  2. Creación del controlador de datos

Nota:

Para simplificar, en los pasos siguientes se da por hecho que es administrador de clústeres de Kubernetes. En el caso de las implementaciones de producción o entornos más seguros, se recomienda seguir los procedimientos recomendados de seguridad de "privilegios mínimos" al implementar el controlador de datos concediéndoles solo permisos específicos a usuarios y cuentas de servicio implicadas en el proceso de implementación.

Consulte el tema Operación de servicios de datos habilitados para Arc con privilegios mínimos para obtener instrucciones detalladas.

Requisitos previos

Revise el tema Planeamiento de una implementación de servicios de datos habilitados para Azure Arc para obtener información general.

Para crear el controlador de datos mediante las herramientas de Kubernetes, debe tener instaladas dichas herramientas. En los ejemplos de este artículo se usará kubectl, pero se podrían emplear enfoques similares con otras herramientas de Kubernetes como el panel de Kubernetes, oc o helm si está familiarizado con esas herramientas y los formatos YAML y JSON de Kubernetes.

Instalación de la herramienta kubectl

Creación del espacio de nombres y el servicio de programa previo

El servicio de arranque controla las solicitudes entrantes para crear, editar y eliminar recursos personalizados, como un controlador de datos.

Guarde una copia de bootstrapper-unified.yaml y reemplace el marcador {{NAMESPACE}} de posición en todos los lugares del archivo por el nombre de espacio de nombres deseado, por ejemplo: arc.

Importante

El archivo de plantilla bootstrapper-unified.yaml tiene como valor predeterminado extraer la imagen del contenedor de arranque de Microsoft Container Registry (MCR). Si su entorno no puede acceder directamente a Microsoft Container Registry, puede hacer lo siguiente:

Ejecute el siguiente comando para crear el espacio de nombres y el servicio de programa previo con el archivo editado.

kubectl apply --namespace arc -f bootstrapper-unified.yaml

Compruebe que el pod de arranque se está ejecutando con el siguiente comando.

kubectl get pod --namespace arc -l app=bootstrapper

Si el estado no es En ejecución, ejecute el comando varias veces hasta que el estado sea En ejecución.

Creación del controlador de datos

Ya puede crear su propio controlador de datos.

En primer lugar, cree una copia del archivo de plantilla localmente en el equipo para que pueda modificar algunos de los valores de la configuración.

Creación de las métricas y registros de los paneles de nombres de usuario y contraseñas

En la parte superior del archivo, puede especificar un nombre de usuario y una contraseña para autenticarse en los paneles de métricas y registros como administrador. Elija una contraseña segura y compártala solo con aquellos usuarios que necesiten tener estos privilegios.

Un secreto de Kubernetes se almacena como una cadena codificada en Base64, una para el nombre de usuario y otra para la contraseña.

Puede usar una herramienta en línea para codificar en Base64 el nombre de usuario y la contraseña que desee, o bien puede usar las herramientas integradas de la CLI, en función de la plataforma.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Creación de certificados para los paneles de registros y métricas

Opcionalmente, puede crear certificados SSL/TLS para los paneles de registros y métricas. Siga las instrucciones en Especificar certificados SSL/TLS durante el despliegue de las herramientas nativas de Kubernetes.

Edición de la configuración del controlador de datos

Edición de la configuración del controlador de datos según sea necesario:

OBLIGATORIO

  • location: cámbiela por la ubicación de Azure donde se almacenarán los metadatos sobre el controlador de datos. Revise la lista de regiones disponibles.
  • resourceGroup: el grupo de recursos de Azure donde desea crear el recurso de Azure del controlador de datos en Azure Resource Manager. Normalmente, este grupo de recursos ya debería existir, pero no se necesita hasta el momento en que se cargan los datos en Azure.
  • subscription: el GUID de suscripción de Azure de la suscripción en la que desea crear los recursos de Azure.

SE RECOMIENDA REVISAR Y POSIBLEMENTE CAMBIAR LOS VALORES PREDETERMINADOS

  • storage..className: la clase de almacenamiento que se va a utilizar para los archivos de registro y datos del controlador de datos. Si no sabe con seguridad cuáles son las clases de almacenamiento disponibles en el clúster de Kubernetes, puede ejecutar el siguiente comando: kubectl get storageclass. El valor predeterminado es default, que da por sentado que hay una clase de almacenamiento que existe y que se denomina default, y no que hay una clase de almacenamiento que es la predeterminada. Nota: Hay dos configuraciones de className que se deben establecer en la clase de almacenamiento deseada: una para los datos y otra para los registros.
  • serviceType: cambie el tipo de servicio a NodePort si no usa un equilibrador de carga.
  • Seguridad: para Red Hat OpenShift en Azure o Red Hat OpenShift Container Platform, reemplace la configuración security: por los siguientes valores en el archivo .yaml del controlador de datos.
  security:
    allowDumps: false
    allowNodeMetricsCollection: false
    allowPodMetricsCollection: false

OPCIONAL

  • name: el nombre predeterminado del controlador de datos es arc, pero puede cambiarlo si lo desea.
  • displayName: establézcalo en el mismo valor que el atributo de nombre de la parte superior del archivo.
  • logsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de registros.
  • metricsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de métricas.

En el ejemplo siguiente se muestra un .yaml del controlador de datos completado.

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.28.0_2024-03-12
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

Guarde el archivo editado en el equipo local y ejecute el siguiente comando para crear el controlador de datos:

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

Supervisión del estado de creación

La creación del controlador tardará unos minutos en completarse. Puede supervisar el progreso en otra ventana de terminal con los siguientes comandos:

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

También puede comprobar el estado de creación o logs de un pod determinado ejecutando un comando como el siguiente. Esto es especialmente útil para solucionar problemas.

kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

Solución de problemas de creación

Si tiene problemas con la creación, consulte la guía de solución de problemas.