Implementación y administración de extensiones de clústeres de Kubernetes habilitado para Azure Arc

Es posible crear instancias de extensión en un clúster de Kubernetes habilitado para Arc, estableciendo parámetros obligatorios y opcionales, incluyendo las opciones relacionadas con las actualizaciones y las configuraciones. También puede ver, enumerar, actualizar y eliminar instancias de extensiones.

Antes de comenzar, lea la introducción conceptual de las extensiones de clúster de Kubernetes habilitadas para Arc y revise la lista de extensiones disponibles actualmente.

Requisitos previos

  • La versión más reciente de la CLI de Azure.

  • Las versiones más recientes de las extensiones de la CLI de Azure connectedk8s y k8s-extension. Instale estas extensiones mediante la ejecución de los siguientes comandos:

    az extension add --name connectedk8s
    az extension add --name k8s-extension
    

    Si las extensiones de connectedk8s y k8s-extension ya estuvieran instaladas, asegúrese de que se actualicen a la versión más reciente mediante los siguientes comandos:

    az extension update --name connectedk8s
    az extension update --name k8s-extension
    
  • Un clúster conectado a Kubernetes habilitado para Azure Arc existente, con al menos un nodo del sistema operativo y el tipo de arquitectura linux/amd64. Si se implementa Flux (GitOps), es posible usar un clúster basado en ARM64 sin un nodo linux/amd64.

Creación de la instancia de extensión

Para crear una instancia de la extensión, use k8s-extension create. Para ello, pase los valores de los parámetros requeridos.

En este ejemplo se crea una instancia de la extensión Azure Monitor Container Insights en un clúster de Kubernetes habilitado para Azure Arc:

az k8s-extension create --name azuremonitor-containers  --extension-type Microsoft.AzureMonitor.Containers --scope cluster --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

Salida:

{
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": null,
  "configurationSettings": {
    "logAnalyticsWorkspaceResourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/defaultresourcegroup-eus/providers/microsoft.operationalinsights/workspaces/defaultworkspace-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eus"
  },
  "creationTime": "2021-04-02T12:13:06.7534628+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.azuremonitor.containers",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/demo/providers/Microsoft.Kubernetes/connectedClusters/demo/providers/Microsoft.KubernetesConfiguration/extensions/azuremonitor-containers",
  "identity": null,
  "installState": "Pending",
  "lastModifiedTime": "2021-04-02T12:13:06.753463+00:00",
  "lastStatusTime": null,
  "name": "azuremonitor-containers",
  "releaseTrain": "Stable",
  "resourceGroup": "demo",
  "scope": {
    "cluster": {
      "releaseNamespace": "azuremonitor-containers"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": null,
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "2.8.2"
}

Nota:

El servicio no puede conservar información confidencial durante más de 48 horas. Si los agentes de Kubernetes habilitados para Azure Arc no tuvieran conectividad de red durante más de 48 horas y no pudieran determinar si se va a crear una extensión en el clúster, dicha extensión cambiará al estado Failed. Una vez que se produzca, tendrá que ejecutar k8s-extension create de nuevo para crear un nuevo recurso de extensión de Azure.

Azure Monitor Container Insights es una extensión singleton (solo se necesita una por clúster). Deberá limpiar todas las instalaciones de gráficos de Helm anteriores de Azure Monitor Container Insights (sin extensiones) antes de instalarlos a través de la extensión. Siga las instrucciones para eliminar el gráfico Helm antes de ejecutar az k8s-extension create.

Parámetros obligatorios

Los parámetros siguientes son necesarios al usar az k8s-extension create para crear una instancia de extensión.

Nombre de parámetro Descripción
--name Nombre de la instancia de extensión.
--extension-type Tipo de extensión que desea instalar en el clúster. Por ejemplo: Microsoft.AzureMonitor.Containers, microsoft.azuredefender.kubernetes.
--scope Ámbito de instalación de la extensión: cluster o namespace
--cluster-name Nombre del recurso de Kubernetes habilitado para Azure Arc en el que se debe crear la instancia de la extensión.
--resource-group Grupo de recursos que contiene el recurso de Kubernetes habilitado para Azure Arc.
--cluster-type Tipo de clúster en el que se debe crear la instancia de extensión. Para la mayoría de los escenarios, use connectedClusters, que corresponde a los clústeres de Kubernetes habilitado para Azure Arc.

Parámetros opcionales

Use uno o varios de estos parámetros opcionales según sea necesario para los escenarios, junto con los parámetros necesarios.

Nota:

Es posible optar por actualizar automáticamente la instancia de extensión a las versiones secundarias y de revisión más recientes estableciendo auto-upgrade-minor-version en true, o bien es posible establecer la versión de la instancia de extensión manualmente mediante el parámetro --version. Se recomienda habilitar las actualizaciones automáticas para versiones secundarias y de revisión para que siempre tenga las funcionalidades y revisiones de seguridad más recientes.

Dado que las actualizaciones de versiones principales suelen incluir cambios importantes, no se admiten actualizaciones automáticas para nuevas versiones principales de una instancia de extensión. Elija cuándo actualizar manualmente las instancias de extensión a una nueva versión principal.

Nombre de parámetro Descripción
--auto-upgrade-minor-version Propiedad booleana que determina si la versión secundaria de la extensión se actualiza automáticamente. El valor predeterminado es true. Si este parámetro se establece en true, no se puede establecer el parámetro version, ya que la versión se actualizará dinámicamente. Si se establece en false, la extensión no se actualizará automáticamente, ni siquiera para las versiones de revisión.
--version Versión de la extensión que se va a instalar (versión específica en la que se fijará la instancia de extensión). No se debe proporcionar si auto-upgrade-minor-version está establecido en true.
--configuration-settings Configuración que se puede pasar a la extensión para controlar su funcionalidad. Se pasan como pares key=value separados por espacios después del nombre del parámetro. Si se usa este parámetro, no se podrá emplear --configuration-settings-file en el mismo comando.
--configuration-settings-file Ruta de acceso a un archivo JSON con pares key=value que se usará para pasar los valores de configuración a la extensión. Si se usa este parámetro, no se podrá emplear --configuration-settings en el mismo comando.
--configuration-protected-settings Configuración que no se puede recuperar mediante llamadas API de GET o comandos az k8s-extension show. Normalmente se usa para pasar la configuración confidencial. Se pasan como pares key=value separados por espacios después del nombre del parámetro. Si se usa este parámetro, no se podrá emplear --configuration-protected-settings-file en el mismo comando.
--configuration-protected-settings-file Ruta de acceso a un archivo JSON con pares key=value que se usará para pasar los valores confidenciales a la extensión. Si se usa este parámetro, no se podrá emplear --configuration-protected-settings en el mismo comando.
--release-namespace Este parámetro indica el espacio de nombres en el que se creará la versión. Solo es relevante si scope está establecido en cluster.
--release-train Los autores de las extensiones pueden publicar las versiones en series de versiones diferentes, como Stable, Preview, etc. Si este parámetro no se establece explícitamente, Stable se usa como valor predeterminado.
--target-namespace Indica el espacio de nombres en el que se creará la versión. El permiso de la cuenta del sistema creada para esta instancia de extensión está restringido a este espacio de nombres. Solo es relevante si scope está establecido en namespace.

Mostrar detalles de la extensión

Para ver los detalles de una instancia de extensión que esté instalada, use k8s-extension show; para ello, pase valores para los parámetros obligatorios.

az k8s-extension show --name azuremonitor-containers --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

Salida:

{
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": null,
  "configurationSettings": {
    "logAnalyticsWorkspaceResourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/defaultresourcegroup-eus/providers/microsoft.operationalinsights/workspaces/defaultworkspace-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eus"
  },
  "creationTime": "2021-04-02T12:13:06.7534628+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.azuremonitor.containers",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/demo/providers/Microsoft.Kubernetes/connectedClusters/demo/providers/Microsoft.KubernetesConfiguration/extensions/azuremonitor-containers",
  "identity": null,
  "installState": "Installed",
  "lastModifiedTime": "2021-04-02T12:13:06.753463+00:00",
  "lastStatusTime": "2021-04-02T12:13:49.636+00:00",
  "name": "azuremonitor-containers",
  "releaseTrain": "Stable",
  "resourceGroup": "demo",
  "scope": {
    "cluster": {
      "releaseNamespace": "azuremonitor-containers"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": null,
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "2.8.2"
}

Lista de todas las extensiones instaladas en el clúster

Para ver una lista de todas las extensiones instaladas en un clúster, use k8s-extension list. Para ello, pase los valores de los parámetros obligatorios.

az k8s-extension list --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

Salida:

[
  {
    "autoUpgradeMinorVersion": true,
    "creationTime": "2020-09-15T02:26:03.5519523+00:00",
    "errorInfo": {
      "code": null,
      "message": null
    },
    "extensionType": "Microsoft.AzureMonitor.Containers",
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myRg/providers/Microsoft.Kubernetes/connectedClusters/myCluster/providers/Microsoft.KubernetesConfiguration/extensions/myExtInstanceName",
    "identity": null,
    "installState": "Pending",
    "lastModifiedTime": "2020-09-15T02:48:45.6469664+00:00",
    "lastStatusTime": null,
    "name": "myExtInstanceName",
    "releaseTrain": "Stable",
    "resourceGroup": "myRG",
    "scope": {
      "cluster": {
        "releaseNamespace": "myExtInstanceName1"
      }
    },
    "statuses": [],
    "type": "Microsoft.KubernetesConfiguration/extensions",
    "version": "0.1.0"
  },
  {
    "autoUpgradeMinorVersion": true,
    "creationTime": "2020-09-02T00:41:16.8005159+00:00",
    "errorInfo": {
      "code": null,
      "message": null
    },
    "extensionType": "microsoft.azuredefender.kubernetes",
    "id": "/subscriptions/0e849346-4343-582b-95a3-e40e6a648ae1/resourceGroups/myRg/providers/Microsoft.Kubernetes/connectedClusters/myCluster/providers/Microsoft.KubernetesConfiguration/extensions/defender",
    "identity": null,
    "installState": "Pending",
    "lastModifiedTime": "2020-09-02T00:41:16.8005162+00:00",
    "lastStatusTime": null,
    "name": "microsoft.azuredefender.kubernetes",
    "releaseTrain": "Stable",
    "resourceGroup": "myRg",
    "scope": {
      "cluster": {
        "releaseNamespace": "myExtInstanceName2"
      }
    },
    "type": "Microsoft.KubernetesConfiguration/extensions",
    "version": "0.1.0"
  }
]

Actualización de la instancia de extensión

Nota

Consulte la documentación del tipo de extensión específico para comprender la configuración específica de --configuration-settings y --configuration-protected-settings que se pueden actualizar. Para --configuration-protected-settings, se espera que se proporcionen todas las configuraciones, incluso si solo se está actualizando una configuración. Si se omiten algunos de estos valores, se considerarán obsoletos y se eliminarán.

Para actualizar la instancia de una extensión existente, use k8s-extension update. Para ello, pase los valores para los parámetros obligatorios y opcionales. Los parámetros obligatorios y opcionales son ligeramente diferentes a los usados para crear una instancia de extensión.

En este ejemplo, se actualiza la configuración de auto-upgrade-minor-version de una instancia de extensión de Azure Machine Learning en true:

az k8s-extension update --name azureml --extension-type Microsoft.AzureML.Kubernetes --scope cluster --cluster-name <clusterName> --resource-group <resourceGroupName> --auto-upgrade-minor-version true --cluster-type managedClusters

Parámetros necesarios para la actualización

Nombre de parámetro Descripción
--name Nombre de la instancia de extensión.
--cluster-name Nombre del clúster en el que se debe crear la instancia de extensión
--resource-group Grupo de recursos que contiene el clúster
--cluster-type Tipo de clúster en el que se debe crear la instancia de extensión. Para clústeres de Kubernetes habilitados para Azure Arc, connectedClusters. Para clústeres de AKS, use managedClusters.

Parámetros opcionales para la actualización

Nombre de parámetro Descripción
--auto-upgrade-minor-version Propiedad booleana que especifica si la versión secundaria de la extensión se actualiza automáticamente. El valor predeterminado es true. Si este parámetro se establece en true, no se puede establecer el parámetro version, ya que la versión se actualizará dinámicamente. Si se establece en false, la extensión no se actualizará automáticamente, ni siquiera para las versiones de revisión.
--version Versión de la extensión que se va a instalar (versión específica en la que se fijará la instancia de extensión). No se debe proporcionar si auto-upgrade-minor-version está establecido en true.
--configuration-settings Configuración que se puede pasar a la extensión para controlar su funcionalidad. Se pasan como pares key=value separados por espacios después del nombre del parámetro. Si se usa este parámetro, no se podrá emplear --configuration-settings-file en el mismo comando. Solo se deben proporcionar los valores que requieren una actualización. La configuración proporcionada se reemplazará por los valores especificados.
--configuration-settings-file Ruta de acceso al archivo JSON que contiene los pares key=value que se usarán para pasar los valores de configuración a la extensión. Si se usa este parámetro, no se podrá emplear --configuration-settings en el mismo comando.
--configuration-protected-settings Configuración que no se puede recuperar mediante llamadas API de GET o comandos az k8s-extension show. Normalmente se usa para pasar la configuración confidencial. Se pasan como pares key=value separados por espacios después del nombre del parámetro. Si se usa este parámetro, no se podrá emplear --configuration-protected-settings-file en el mismo comando. Al actualizar un valor protegido, se espera que se especifiquen todos los valores protegidos. Si se omiten algunos de estos valores, se considerarán obsoletos y se eliminarán.
--configuration-protected-settings-file Ruta de acceso a un archivo JSON con pares key=value que se usará para pasar los valores confidenciales a la extensión. Si se usa este parámetro, no se podrá emplear --configuration-protected-settings en el mismo comando.
--scope Ámbito de instalación de la extensión: cluster o namespace.
--release-train Los autores de las extensiones pueden publicar las versiones en series de versiones diferentes, como Stable, Preview, etc. Si este parámetro no se establece explícitamente, Stable se usa como valor predeterminado.

Actualización de una instancia de extensión

Como se indicó anteriormente, si se establece auto-upgrade-minor-version en true, la extensión se actualizará automáticamente cuando se publique una nueva versión secundaria. En la mayoría de los escenarios, se recomienda habilitar las actualizaciones automáticas. Si establece auto-upgrade-minor-version en false, tendrá que actualizar la extensión manualmente si desea una versión más reciente.

Las actualizaciones manuales también son necesarias para obtener una nueva instancia principal de una extensión. Es posible elegir cuándo actualizar para evitar cambios importantes inesperados con las actualizaciones de versiones principales.

Para actualizar manualmente la instancia de una extensión, use k8s-extension update y establezca el parámetro version para especificar una versión.

En este ejemplo, se actualiza una instancia de extensión de Azure Machine Learning a la versión x.y.z:

az k8s-extension update --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters --name azureml --version x.y.z

Eliminación de una instancia de extensión

Para eliminar una instancia de extensión en un clúster, use k8s-extension delete. Para ello, pase los valores de los parámetros obligatorios:

az k8s-extension delete --name azuremonitor-containers --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

Nota:

El recurso de Azure que representa esta extensión se elimina inmediatamente. La versión de Helm del clúster asociado a esta extensión solo se eliminará cuando los agentes que se ejecutan en el clúster de Kubernetes tengan conectividad de red y puedan ponerse en contacto con los servicios de Azure de nuevo para recuperar el estado deseado.

Pasos siguientes