Déployer et gérer les extensions de cluster Kubernetes avec Azure Arc

Vous pouvez créer des instances d’extension dans un cluster Kubernetes avec Arc, définir les paramètres requis et facultatifs, y compris les options relatives aux mises à jour et aux configurations. Vous pouvez aussi afficher, lister, mettre à jour et supprimer des instances d’extensions.

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

Prérequis

  • La dernière version d’Azure CLI.

  • Les dernières versions des extensions connectedk8s et k8s-extension Azure CLI. Installez ces extensions en exécutant 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 des commandes suivantes :

    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 nœud linux/amd64.

Créer une instance d’extension

Pour créer une instance d’extension, utilisez k8s-extension create, en passant des valeurs pour les paramètres requis.

Cet exemple crée une instance d’extension Azure Monitor Container Insights 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

Sortie :

{
  "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 peut pas conserver d’informations sensibles pendant plus 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. Une fois cela arrivé, vous devez réexécuter k8s-extension create pour créer une nouvelle ressource Azure d’extension.

Azure Monitor Container Insights est une extension singleton (une seule requise par cluster). Vous devez nettoyer les installations de graphique Helm précédentes d’Azure Monitor Container Insights (sans extensions) avant d’installer les mêmes via des extensions. Suivez les instructions pour supprimer le graphique Helm avant d’exécuter az k8s-extension create.

Paramètres obligatoires

Les paramètres suivants sont requis lors de l’utilisation de 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, microsoft.azuredefender.kubernetes
--scope Étendue des d’installation de l’extension : cluster ou namespace
--cluster-name Nom de la ressource Kubernetes avec Azure Arc sur laquelle l’instance d’extension doit être créée
--resource-group Groupe de ressources contenant la ressource Kubernetes avec Azure Arc
--cluster-type Type de cluster sur lequel l’instance d’extension doit être créée. Pour la plupart des scénarios, utilisez connectedClusters, qui correspond aux clusters Kubernetes avec Azure Arc.

Paramètres facultatifs

Utilisez un ou plusieurs de ces paramètres facultatifs si nécessaire pour vos scénarios, ainsi que les paramètres requis.

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, ou vous pouvez définir manuellement la version de l’instance d’extension à l’aide du paramètre --version. Nous vous recommandons d’activer les mises à niveau automatiques pour les versions mineures et correctives afin que vous disposiez toujours des derniers correctifs et fonctionnalités de sécurité.

Étant donné que les mises à niveau de versions majeures peuvent inclure des modifications 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 les instances d’extension vers une nouvelle version majeure.

Nom du paramètre Description
--auto-upgrade-minor-version Propriété booléenne qui détermine 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 sera mise à jour dynamiquement. Si elle est définie sur false, l’extension ne sera 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). 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é. Ceux-ci sont transmis en tant que paires de key=value séparées par espace après le nom du paramètre. Si ce paramètre est utilisé dans la commande, --configuration-settings-file ne peut pas être utilisé dans la même commande.
--configuration-settings-file Chemin d’accès à un fichier JSON avec key=value paires à utiliser pour transmettre des paramètres de configuration à l’extension. Si ce paramètre est utilisé dans la commande, --configuration-settings ne peut pas être utilisé dans la même commande.
--configuration-protected-settings Paramètres qui ne sont pas récupérables à l’aide GETd’appels d’API ou de commandes az k8s-extension show. Généralement utilisé pour passer des paramètres sensibles. Ceux-ci sont transmis en tant que paires de key=value séparées par 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.
--configuration-protected-settings-file Chemin d’accès à un fichier JSON avec key=value paires à utiliser pour transmettre des paramètres sensibles à l’extension. Si ce paramètre est utilisé dans la commande, --configuration-protected-settings ne peut pas être utilisé dans la même commande.
--release-namespace Ce paramètre indique l’espace de noms dans lequel la mise en production sera créée. Applicable uniquement si scope est défini sur cluster.
--release-train Les créateurs d’extensions peuvent publier des versions dans différents trains de versions, comme Stable, Preview, etc. Si ce paramètre n’est pas défini explicitement, Stable est utilisé comme valeur par défaut.
--target-namespace Indique l’espace de noms dans lequel la version sera créée. L’autorisation du compte système créé pour cette instance d’extension sera limitée à cet espace de noms. Applicable uniquement si scope est défini sur namespace.

Afficher les détails de l’extension

Pour afficher les détails d’une instance d’extension actuellement installée, utilisez k8s-extension show, qui transmet des valeurs pour les paramètres obligatoires.

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

Sortie :

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

Répertorier toutes les extensions installées sur le cluster

Pour afficher la liste de toutes les extensions installées sur un cluster, utilisez k8s-extension list, en transmettant des valeurs pour les paramètres obligatoires.

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

Sortie :

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

Mettre à jour l’instance d’extension

Notes

Reportez-vous à la documentation pour le type d’extension spécifique pour comprendre les paramètres spécifiques dans --configuration-settings et --configuration-protected-settings qui peuvent être mis à jour. Pour --configuration-protected-settings, tous les paramètres sont censés être fournis, même si un seul paramètre est en cours de mise à jour. Si certains de ces paramètres sont omis, ils seront considérés comme obsolètes puis supprimés.

Pour mettre à jour une instance d’extension existante, utilisez k8s-extension update, en passant des valeurs pour les paramètres obligatoires et facultatifs. Les paramètres obligatoires et facultatifs sont légèrement différents de ceux utilisés 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 pour 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 la 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 doit être créée
--resource-group Groupe de ressources contenant 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 la 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 a la valeur true, vous ne pouvez pas définir le paramètre version, car la version sera mise à jour dynamiquement. Si elle est définie sur false, l’extension ne sera 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). Ne doit pas être fournie si la mise à niveau automatique de version mineure est définie sur true.
--configuration-settings Paramètres qui peuvent être transmis dans l’extension pour contrôler sa fonctionnalité. Ceux-ci sont transmis en tant que paires de key=value séparées par espace après le nom du paramètre. Si ce 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 seront remplacés par les valeurs spécifiées.
--configuration-settings-file Chemin d’accès au fichier JSON avec key=value paires à utiliser pour transmettre les paramètres de configuration à l’extension. Si ce paramètre est utilisé dans la commande, --configuration-settings ne peut pas être utilisé dans la même commande.
--configuration-protected-settings Paramètres qui ne sont pas récupérables à l’aide GETd’appels d’API ou de commandes az k8s-extension show. Généralement utilisé pour passer des paramètres sensibles. Ceux-ci sont transmis en tant que paires de key=value séparées par 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é, tous les paramètres protégés sont censés être spécifiés. Si certains de ces paramètres sont omis, ils seront considérés comme obsolètes puis supprimés.
--configuration-protected-settings-file Chemin d’accès à un fichier JSON avec key=value paires à utiliser pour transmettre des paramètres sensibles à l’extension. Si ce paramètre est utilisé dans la commande, --configuration-protected-settings ne peut pas être utilisé dans la même commande.
--scope Étendue de l’installation de l’extension : cluster ou namespace.
--release-train Les créateurs d’extensions peuvent publier des versions dans différents trains de versions, comme Stable, Preview, etc. Si ce paramètre n’est pas défini explicitement, Stable est utilisé comme valeur par défaut.

Mettre à niveau l’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.

Les 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 avec des mises à niveau de version majeures.

Pour mettre à niveau manuellement une instance d’extension, utilisez k8s-extension update et définissez le paramètre version pour spécifier une 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 k8s-extension delete, en transmettant des valeurs pour les paramètres obligatoires :

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

Remarque

La ressource Azure représentant 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 à nouveau accéder aux services Azure pour extraire l’état souhaité.

Étapes suivantes