Partager via


Déployer et gérer une extension de cluster Kubernetes avec Azure Arc

Vous pouvez utiliser une extension dans un cluster Kubernetes avec Azure Arc pour accéder aux services et scénarios Azure. Cet article explique comment créer des instances d’extension et définir des paramètres obligatoires et facultatifs, notamment des options pour les mises à jour et les configurations. Vous allez également découvrir comment afficher, lister, mettre à jour, et supprimer des instances d’extension.

Avant de commencer, lisez la vue d’ensemble des extensions de cluster Kubernetes avec Azure Arc et passez en revue la liste des extensions actuellement disponibles.

Prérequis

  • La version la plus récente d’Azure CLI.

  • Les dernières versions des extensions connectedk8s et k8s-extension Azure CLI. Pour installer ces extensions, exécutez les commandes suivantes :

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

    Si les extensions connectedk8s et k8s-extension sont déjà installées, vérifiez qu’elles sont mises à jour vers la dernière version à l’aide de ces commandes :

    az extension update --name connectedk8s
    az extension update --name k8s-extension
    
  • Un cluster connecté Kubernetes avec Azure Arc existant, avec au moins un nœud de système d’exploitation et un type d’architecture linux/amd64. Si vous déployez Flux (GitOps), vous pouvez utiliser un cluster ARM64 sans utiliser de nœud linux/amd64.

Créer une instance d’extension

Pour créer une instance d’extension, utilisez la commande k8s-extension create. Utilisez les valeurs de votre scénario pour les espaces réservés de paramètres requis.

Cet exemple crée une instance d’extension Container Insights dans Azure Monitor sur un cluster Kubernetes avec 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

Vérifiez la sortie qui ressemble à cet exemple :

{
  "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"
}

Remarque

Le service ne conserve pas les informations sensibles au-delà de 48 heures. Si les agents Kubernetes avec Azure Arc n’ont pas de connectivité réseau pendant plus de 48 heures et ne peuvent pas déterminer s’il faut créer une extension sur le cluster, l’extension passe à l’étatFailed. Dans ce scénario, vous devez réexécuter k8s-extension create pour créer une nouvelle ressource Azure d’extension.

Une seule instance de Container Insights dans l’extension Azure Monitor est requise par cluster. Avant d’installer Container Insights via une extension, vous devez supprimer toute installation de graphique Helm précédente de Container Insights qui n’utilise pas d’extensions. Avant d’exécuter az k8s-extension create, suivez les étapes pour supprimer le graphique Helm.

Paramètres obligatoires

Le tableau suivant décrit les paramètres requis lorsque vous utilisez az k8s-extension create pour créer une instance d’extension :

Nom du paramètre Description
--name Nom de l’instance d’extension.
--extension-type Type d’extension que vous souhaitez installer sur le cluster. Par exemple, Microsoft.AzureMonitor.Containers ou microsoft.azuredefender.kubernetes.
--scope Étendue de l’installation pour l’extension. Utilisez cluster ou namespace.
--cluster-name Nom de la ressource Kubernetes avec Azure Arc sur laquelle créer l’instance d’extension.
--resource-group Groupe de ressources contenant la ressource Kubernetes avec Azure Arc.
--cluster-type Type de cluster sur lequel créer l’instance d’extension. Pour la plupart des scénarios, utilisez connectedClusters, le type de cluster pour un cluster Kubernetes avec Azure Arc.

Paramètres facultatifs

Vous pouvez utiliser un ou plusieurs de ces paramètres facultatifs avec les paramètres requis pour votre scénario.

Remarque

Vous pouvez choisir de mettre automatiquement à niveau votre instance d’extension vers les dernières versions mineures et correctives en définissant auto-upgrade-minor-version sur true. Vous pouvez également définir la version de l’instance d’extension manuellement à l’aide du paramètre --version. Nous vous recommandons d’activer les mises à niveau automatiques pour les versions mineures et correctives, afin de toujours disposer des derniers correctifs et fonctionnalités de sécurité.

Étant donné que les mises à niveau de versions majeures peuvent inclure des changements cassants, les mises à niveau automatiques pour les nouvelles versions majeures d’une instance d’extension ne sont pas prises en charge. Vous pouvez choisir quand mettre à niveau manuellement une instance d’extension vers une nouvelle version majeure.

Nom du paramètre Description
--auto-upgrade-minor-version Propriété booléenne qui indique si la version mineure de l’extension est automatiquement mise à niveau. La valeur par défaut est true. Si ce paramètre est défini sur true, vous ne pouvez pas définir le paramètre version, car la version est mise à jour dynamiquement. Si ce paramètre est défini sur false, l’extension n’est pas automatiquement mise à niveau, même pour les versions de correctifs.
--version Version de l’extension à installer (version spécifique à laquelle épingler l’instance d’extension). Vous ne pouvez pas définir le paramètre version si auto-upgrade-minor-version est défini sur true.
--configuration-settings Paramètres qui peuvent être transmis dans l’extension pour contrôler sa fonctionnalité. Ces paramètres sont transmis en tant que paires de key=value séparées par un espace après le nom du paramètre. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas transmettre --configuration-settings-file dans la même commande.
--configuration-settings-file Chemin d’accès à un fichier JSON avec des paires key=value à utiliser pour transmettre des paramètres de configuration à l’extension. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas utiliser --configuration-settings dans la même commande.
--configuration-protected-settings Paramètres qui ne sont pas récupérables à l’aide d’appels d’API GET ou de commandes az k8s-extension show. Généralement utilisé pour transmettre des paramètres sensibles. Ces paramètres sont transmis en tant que paires de key=value séparées par un espace après le nom du paramètre. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas utiliser --configuration-protected-settings-file dans la même commande.
--configuration-protected-settings-file Chemin d’accès à un fichier JSON avec des paires key=value à utiliser pour transmettre des paramètres sensibles à l’extension. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas utiliser --configuration-protected-settings dans la même commande.
--release-namespace Ce paramètre indique l’espace de noms dans lequel créer la mise en production. Ce paramètre est pertinent uniquement si scope a la valeur cluster.
--release-train L’auteur d’une extension peut publier des versions dans différents trains de mise en production, tels que Stable ou Preview. Si ce paramètre n’est pas défini explicitement, Stable est la valeur par défaut.
--target-namespace Indique l’espace de noms dans lequel créer la mise en production. L’autorisation pour le compte système créé pour cette instance d’extension est limitée à cet espace de noms. Ce paramètre est pertinent uniquement si scope a la valeur namespace.

Afficher les détails de l’extension

Pour afficher les détails d’une instance d’extension actuellement installée, utilisez la commande k8s-extension show. Dans ce code, utilisez les valeurs de votre scénario pour les espaces réservés de paramètres requis.

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

Vérifiez la sortie qui ressemble à cet exemple :

{
  "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"
}

Lister toutes les extensions installées sur le cluster

Pour afficher la liste de toutes les extensions installées sur un cluster, utilisez la commande k8s-extension list. Dans ce code, utilisez les valeurs de votre scénario pour les espaces réservés de paramètres requis.

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

Vérifiez la sortie qui ressemble à cet exemple :

[
  {
    "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
  }
]

Mettre à jour une instance d’extension

Remarque

Pour comprendre les paramètres spécifiques dans --configuration-settings et --configuration-protected-settings qui peuvent être mis à jour, consultez la documentation relative au type d’extension spécifique. Pour --configuration-protected-settings, fournissez tous les paramètres, même si un seul paramètre est mis à jour. Si certains de ces paramètres sont omis, ils seront considérés comme obsolètes et seront supprimés.

Pour mettre à jour une instance d’extension existante, utilisez k8s-extension update. Transmettez les valeurs des paramètres obligatoires et facultatifs. Les paramètres obligatoires et facultatifs sont légèrement différents des paramètres que vous utilisez pour créer une instance d’extension.

Cet exemple met à jour le paramètre auto-upgrade-minor-version d’une instance d’extension Azure Machine Learning avec la valeur 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

Paramètres requis pour une mise à jour

Nom du paramètre Description
--name Nom de l’instance d’extension.
--cluster-name Nom du cluster sur lequel l’instance d’extension est créée.
--resource-group Groupe de ressources qui contient le cluster.
--cluster-type Type de cluster sur lequel l’instance d’extension doit être créée. Pour les clusters Kubernetes avec Azure Arc, utilisez connectedClusters. Pour les clusters AKS, utilisez managedClusters.

Paramètres facultatifs pour une mise à jour

Nom du paramètre Description
--auto-upgrade-minor-version Propriété booléenne qui spécifie si la version mineure de l’extension est automatiquement mise à niveau. La valeur par défaut est true. Si ce paramètre est défini sur true, vous ne pouvez pas définir le paramètre version, car la version est mise à jour dynamiquement. Si le paramètre est défini sur false, l’extension n’est pas automatiquement mise à niveau, même pour les versions de correctifs.
--version Version de l’extension à installer (une version spécifique à laquelle épingler l’instance d’extension). Ne doit pas être fourni si auto-upgrade-minor-version a la valeur true.
--configuration-settings Paramètres qui peuvent être transmis dans l’extension pour contrôler sa fonctionnalité. Ces paramètres sont transmis en tant que paires de key=value séparées par un espace après le nom du paramètre. Si le paramètre est utilisé dans la commande, --configuration-settings-file ne peut pas être utilisé dans la même commande. Seuls les paramètres qui nécessitent une mise à jour doivent être fournis. Les paramètres fournis sont remplacés par les valeurs spécifiées.
--configuration-settings-file Chemin d’accès à un fichier JSON qui contient des paires key=value à utiliser pour transmettre les paramètres de configuration à l’extension. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas utiliser --configuration-settings dans la même commande.
--configuration-protected-settings Paramètres qui ne sont pas récupérables à l’aide d’appels d’API GET ou de commandes az k8s-extension show. Généralement utilisé pour transmettre des paramètres sensibles. Ces paramètres sont transmis en tant que paires de key=value séparées par un espace après le nom du paramètre. Si ce paramètre est utilisé dans la commande, --configuration-protected-settings-file ne peut pas être utilisé dans la même commande. Lorsque vous mettez à jour un paramètre protégé, configurez tous les paramètres protégés. Si certains des paramètres sont omis, ils sont considérés comme obsolètes et sont supprimés.
--configuration-protected-settings-file Chemin d’accès à un fichier JSON qui contient des paires key=value à utiliser pour transmettre les paramètres sensibles à l’extension. Si ce paramètre est utilisé dans la commande, vous ne pouvez pas utiliser --configuration-protected-settings dans la même commande.
--scope Étendue d’installation pour l’extension. Utilisez cluster ou namespace.
--release-train L’auteur d’une extension peut publier des versions dans différents trains de mise en production, tels que Stable ou Preview. Si ce paramètre n’est pas défini explicitement, Stable est la valeur par défaut.

Mettre à niveau une instance d’extension

Comme indiqué précédemment, si vous définissez auto-upgrade-minor-version sur true, l’extension est automatiquement mise à niveau lorsqu’une nouvelle version mineure est publiée. Pour la plupart des scénarios, nous vous recommandons d’activer les mises à niveau automatiques. Si vous définissez auto-upgrade-minor-version sur false, vous devez mettre à niveau l’extension manuellement si vous souhaitez une version plus récente.

Des mises à niveau manuelles sont également requises pour obtenir une nouvelle instance principale d’une extension. Vous pouvez choisir quand effectuer une mise à niveau afin d’éviter tout changement cassant inattendu dans les mises à niveau de versions majeures.

Pour mettre à niveau manuellement une instance d’extension, utilisez k8s-extension update et définissez le paramètre version.

Cet exemple met à jour une instance d’extension Azure Machine Learning vers la version x.y.z :

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

Supprimer une instance d’extension

Pour supprimer une instance d’extension sur un cluster, utilisez la commande k8s-extension delete. Utilisez les valeurs de votre scénario pour les espaces réservés de paramètres requis.

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

Remarque

La ressource Azure qui représente cette extension est immédiatement supprimée. La version Helm sur le cluster associé à cette extension n’est supprimée que quand les agents s’exécutant sur le cluster Kubernetes disposent d’une connectivité réseau et peuvent accéder aux services Azure pour obtenir l’état souhaité.