Distribuire e gestire estensioni del cluster Kubernetes abilitate per Azure Arc

È possibile creare istanze di estensione in un cluster Kubernetes abilitate per Arc, impostando parametri obbligatori e facoltativi, incluse le opzioni correlate ad aggiornamenti e configurazioni. Inoltre è possibile visualizzare, elencare, aggiornare ed eliminare istanze di estensione.

Prima di iniziare, leggere la panoramica concettuale delle estensioni del cluster Kubernetes abilitate per Arc ed esaminare l'elenco delle estensioni attualmente disponibili.

Prerequisiti

  • Versione più recente dell'interfaccia della riga di comando di Azure.

  • Le versioni più recenti delle estensioni connectedk8s e k8s-extension dell'interfaccia della riga di comando di Azure. Installare queste estensioni eseguendo i comandi di seguito riportati:

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

    Se sono già state installate le estensioni connectedk8s e k8s-extension, accertarsi che ne sia stato eseguito l'aggiornamento all’ultima versione usando il comando seguente:

    az extension update --name connectedk8s
    az extension update --name k8s-extension
    
  • Un cluster Kubernetes abilitato per Azure Arc esistente, con almeno un nodo del sistema operativo e del tipo linux/amd64 di architettura. Se si distribuisce Flux (GitOps), è possibile usare un cluster basato su ARM64 senza un nodo linux/amd64.

Creare un'istanza dell'estensione

Per creare una nuova istanza di estensione, utilizzare k8s-extension create, passando i valori per i parametri richiesti.

Questo esempio crea un'istanza dell'estensione Azure Monitor Container Insights in un cluster Kubernetes abilitato per 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

Output:

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

Il servizio non è in grado di conservare le informazioni sensibili per più di 48 ore. Se gli agenti Kubernetes abilitati per Azure Arc non hanno connettività di rete per più di 48 ore e non possono determinare se creare un'estensione nel cluster, l'estensione passa allo stato Failed. Una volta che ciò si verifica, sarà necessario eseguire di nuovo k8s-extension create per creare un'istanza di estensione aggiornata della risorsa di Azure.

Azure Monitor Container Insights è un'estensione singleton (ne viene richiesta una sola per ciascun cluster). Prima di installare le stesse estensioni, è necessario pulire le installazioni precedenti del grafico Helm di Azure Monitor Container Insights (senza estensioni). Seguire le istruzioni per eliminare il grafico Helm prima di eseguire az k8s-extension create.

Parametri obbligatori

Quando si usa az k8s-extension create per creare un'istanza di estensione, sono necessari i parametri seguenti.

Nome parametro Descrizione
--name Nome dell'istanza dell'estensione
--extension-type Il tipo di estensione che si desidera installare nel cluster. Ad esempio: Microsoft.AzureMonitor.Containers, microsoft.azuredefender.kubernetes
--scope Ambito dell'installazione per l'estensione: cluster o namespace
--cluster-name Nome della risorsa Kubernetes abilitata per Azure Arc in cui deve essere creata l'istanza dell'estensione
--resource-group Il gruppo di risorse contenente la risorsa Kubernetes abilitata per Azure Arc
--cluster-type Tipo di cluster in cui deve essere creata l'istanza dell'estensione. Per la maggior parte degli scenari, usare connectedClusters, che corrisponde ai cluster Kubernetes abilitati per Azure Arc.

Parametri facoltativi

Usare uno o più di questi parametri facoltativi in base alle esigenze degli scenari, insieme ai parametri necessari.

Nota

È possibile scegliere di aggiornare automaticamente l'istanza dell'estensione alle versioni secondarie e patch più recenti impostando auto-upgrade-minor-version su true, oppure è possibile impostare manualmente la versione dell'istanza dell'estensione usando il parametro --version. È consigliabile abilitare gli aggiornamenti automatici per le versioni secondarie e patch, in modo di poter disporre sempre delle patch e delle funzionalità di sicurezza più recenti.

Poiché gli aggiornamenti delle versioni principali possono includere modifiche di rilievo, gli aggiornamenti automatici per le nuove versioni principali di un'istanza di estensione non sono supportati. È possibile scegliere quando aggiornare manualmente le istanze dell'estensione a una nuova versione principale.

Nome parametro Descrizione
--auto-upgrade-minor-version Proprietà booleana che determina se la versione secondaria dell'estensione viene aggiornata automaticamente. L'impostazione predefinita è true. Se questo parametro è impostato su true, non è possibile impostare il parametro version, perché la versione verrà aggiornata in modo dinamico. Se impostato su false, l'estensione non verrà aggiornata automaticamente anche per le versioni della patch.
--version Versione dell'estensione da installare (versione specifica a cui aggiungere l'istanza dell'estensione). Non deve essere fornito se auto-upgrade-minor-version è impostato su true.
--configuration-settings Impostazioni che possono essere passate all'estensione per controllarne le funzionalità. Vengono passate come coppie key=value separate da spazi dopo il nome del parametro. Se questo parametro viene usato nel comando, --configuration-settings-file non può essere usato nello stesso comando.
--configuration-settings-file Percorso a un file JSON con coppie key=value da usare per passare le impostazioni di configurazione all'estensione. Se questo parametro viene usato nel comando, --configuration-settings non può essere usato nello stesso comando.
--configuration-protected-settings Impostazioni che non sono recuperabili usando chiamate API GET o comandi az k8s-extension show. In genere vengono usate per passare impostazioni sensibili. Vengono passate come coppie key=value separate da spazi dopo il nome del parametro. Se questo parametro viene usato nel comando, --configuration-protected-settings-file non può essere usato nello stesso comando.
--configuration-protected-settings-file Percorso a un file JSON con coppie key=value da usare per passare le impostazioni sensibili all'estensione. Se questo parametro viene usato nel comando, --configuration-protected-settings non può essere usato nello stesso comando.
--release-namespace Questo parametro indica lo spazio dei nomi in cui verrà creata la versione. Rilevanti solo se scope è impostato su cluster.
--release-train Gli autori delle estensioni possono pubblicare versioni in diversi training di rilascio, quali Stable, Preview e così via. Se questo parametro non è impostato in modo esplicito, Stable viene usato come predefinito.
--target-namespace Indica lo spazio dei nomi in cui verrà creata la versione. L'autorizzazione dell'account di sistema creato per questa istanza di estensione sarà limitata a questo spazio dei nomi. Rilevanti solo se scope è impostato su namespace.

Mostrare i dettagli dell'estensione

Per visualizzare i dettagli di un'istanza di estensione attualmente installata, usare k8s-extension show, inserendo i valori per i parametri obbligatori.

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

Output:

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

Elencare tutte le estensioni installate nel cluster

Per visualizzare un elenco di tutte le estensioni installate in un cluster, usare k8s-extension list, inserendo i valori per i parametri obbligatori.

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

Output:

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

Aggiornare l'istanza di estensione

Nota

Vedere la documentazione relativa al tipo di estensione specifico per comprendere le impostazioni appropriate in --configuration-settings e --configuration-protected-settings che possono essere aggiornate. Per --configuration-protected-settings, è previsto che vengano specificate tutte le impostazioni, anche se viene aggiornata una sola impostazione. Se una di queste impostazioni viene omessa, tali impostazioni verranno considerate obsolete ed eliminate.

Per aggiornare un'istanza di estensione esistente, usare k8s-extension update, inserendo i valori per i parametri obbligatori e facoltativi. I parametri obbligatori e facoltativi sono leggermente diversi da quelli usati per creare un'istanza di estensione.

Questo esempio aggiorna l'auto-upgrade-minor-versionimpostazione di aggiornamento per un'istanza di estensione di Azure Machine Learning a 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

Parametri obbligatori per l'aggiornamento

Nome parametro Descrizione
--name Nome dell'istanza dell'estensione
--cluster-name Nome del cluster in cui deve essere creata l'istanza dell'estensione
--resource-group Il gruppo di risorse contenente il cluster
--cluster-type Tipo di cluster in cui deve essere creata l'istanza dell'estensione. Per cluster Kubernetes abilitato per Azure Arc, usare connectedClusters. Per i cluster del servizio Azure Kubernetes, usare managedClusters.

Parametri facoltativi per l'aggiornamento

Nome parametro Descrizione
--auto-upgrade-minor-version Proprietà booleana che specifica se la versione secondaria dell'estensione viene aggiornata automaticamente. L'impostazione predefinita è true. Se questo parametro è impostato su true, non è possibile impostare il parametro version, perché la versione verrà aggiornata in modo dinamico. Se impostato su false, l'estensione non verrà aggiornata automaticamente anche per le versioni della patch.
--version Versione dell'estensione da installare (versione specifica a cui aggiungere l'istanza dell'estensione). Non deve essere fornito se l'aggiornamento automatico-versione secondaria è impostato su true.
--configuration-settings Impostazioni che possono essere passate all'estensione per controllarne le funzionalità. Vengono passate come coppie key=value separate da spazi dopo il nome del parametro. Se questo parametro viene usato nel comando, --configuration-settings-file non può essere usato nello stesso comando. È necessario specificare solo le impostazioni che richiedono un aggiornamento. Le impostazioni specificate verranno sostituite con i valori specificati.
--configuration-settings-file Percorso al file JSON con coppie key=value da usare per passare le impostazioni di configurazione all'estensione. Se questo parametro viene usato nel comando, --configuration-settings non può essere usato nello stesso comando.
--configuration-protected-settings Impostazioni che non sono recuperabili usando chiamate API GET o comandi az k8s-extension show. In genere vengono usate per passare impostazioni sensibili. Vengono passate come coppie key=value separate da spazi dopo il nome del parametro. Se questo parametro viene usato nel comando, --configuration-protected-settings-file non può essere usato nello stesso comando. Quando si aggiorna un'impostazione protetta, è previsto che siano specificate tutte le impostazioni protette. Se una di queste impostazioni viene omessa, tali impostazioni verranno considerate obsolete ed eliminate.
--configuration-protected-settings-file Percorso a un file JSON con coppie key=value da usare per passare le impostazioni sensibili all'estensione. Se questo parametro viene usato nel comando, --configuration-protected-settings non può essere usato nello stesso comando.
--scope Ambito dell'installazione per l'estensione: cluster o namespace.
--release-train Gli autori delle estensioni possono pubblicare versioni in diversi training di rilascio, quali Stable, Preview e così via. Se questo parametro non è impostato in modo esplicito, Stable viene usato come predefinito.

Aggiornare l'istanza dell'estensione

Come indicato in precedenza, se si imposta auto-upgrade-minor-version su true, l'estensione verrà aggiornata automaticamente quando viene rilasciata una nuova versione secondaria. Per la maggior parte degli scenari, è consigliabile abilitare gli aggiornamenti automatici. Se si imposta auto-upgrade-minor-version su false, sarà necessario aggiornare manualmente l'estensione se si desidera una versione più recente.

Gli aggiornamenti manuali sono necessari anche per ottenere una nuova istanza principale di un'estensione. È possibile scegliere quando eseguire l'aggiornamento per evitare modifiche impreviste che causano interruzioni impreviste con aggiornamenti delle versioni principali.

Per aggiornare manualmente un'istanza di estensione, usare k8s-extension update e impostare il parametro version per specificare una versione.

Questo esempio aggiorna un'istanza di estensione di Azure Machine Learning alla versione x.y.z:

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

Eliminare l'istanza dell'estensione

Per eliminare un'istanza di estensione in un cluster, usare k8s-extension delete, inserendo i valori per i parametri obbligatori:

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

Nota

La risorsa di Azure che rappresenta questa estensione viene eliminata immediatamente. La versione Helm nel cluster associato a questa estensione viene eliminata solo quando gli agenti in esecuzione nel cluster Kubernetes hanno connettività di rete e possono contattare nuovamente i servizi di Azure per recuperare lo stato desiderato.

Passaggi successivi