Konfigurowanie klastra Kubernetes z włączoną obsługą usługi Azure Arc do uruchamiania usług App Service, Functions i Logic Apps (wersja zapoznawcza)

Jeśli masz klaster Kubernetes z włączoną usługą Azure Arc, możesz użyć go do utworzenia niestandardowej lokalizacji z włączoną usługą App Service i wdrożenia w niej aplikacji internetowych, aplikacji funkcji i aplikacji logiki.

Platforma Kubernetes z obsługą usługi Azure Arc umożliwia uwidocznienie klastra Kubernetes w środowisku lokalnym lub w chmurze w usłudze App Service, Functions i Logic Apps na platformie Azure. Aplikację można utworzyć i wdrożyć w niej tak samo jak w innym regionie świadczenia usługi Azure.

Wymagania wstępne

Jeśli nie masz konta platformy Azure, zarejestruj się dzisiaj , aby uzyskać bezpłatne konto.

Dodawanie rozszerzeń interfejsu wiersza polecenia platformy Azure

Uruchom środowisko powłoki Bash w usłudze Azure Cloud Shell.

Ponieważ te polecenia interfejsu wiersza polecenia nie są jeszcze częścią podstawowego zestawu interfejsu wiersza polecenia, dodaj je za pomocą następujących poleceń.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Tworzenie połączonego klastra

Uwaga

W tym samouczku usługa Azure Kubernetes Service (AKS) udostępnia konkretne instrukcje dotyczące konfigurowania środowiska od podstaw. Jednak w przypadku obciążenia produkcyjnego prawdopodobnie nie chcesz włączać usługi Azure Arc w klastrze usługi AKS, ponieważ jest on już zarządzany na platformie Azure. Poniższe kroki pomogą Ci zrozumieć usługę, ale w przypadku wdrożeń produkcyjnych powinny być wyświetlane jako ilustracyjne, a nie normatywne. Zobacz Szybki start: Połączenie istniejącego klastra Kubernetes do usługi Azure Arc, aby uzyskać ogólne instrukcje dotyczące tworzenia klastra Kubernetes z obsługą usługi Azure Arc.

  1. Utwórz klaster w usłudze Azure Kubernetes Service z publicznym adresem IP. Zastąp <group-name> ciąg odpowiednią nazwą grupy zasobów.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_LOCATION
    az aks create --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --enable-aad --generate-ssh-keys
    
  2. Pobierz plik kubeconfig i przetestuj połączenie z klastrem. Domyślnie plik kubeconfig jest zapisywany w pliku ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Utwórz grupę zasobów zawierającą zasoby usługi Azure Arc. Zastąp <group-name> ciąg odpowiednią nazwą grupy zasobów.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_LOCATION
    
  4. Połączenie klastra utworzonego w usłudze Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Zweryfikuj połączenie przy użyciu następującego polecenia. Właściwość powinna być wyświetlana provisioningState jako Succeeded. Jeśli nie, uruchom polecenie ponownie po minucie.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Tworzenie obszaru roboczego usługi Log Analytics

Chociaż obszar roboczy analizy dzienników nie jest wymagany do uruchamiania usługi App Service w usłudze Azure Arc, deweloperzy mogą pobierać dzienniki aplikacji dla swoich aplikacji uruchomionych w klastrze Kubernetes z obsługą usługi Azure Arc.

  1. Dla uproszczenia utwórz teraz obszar roboczy.

    WORKSPACE_NAME="$GROUP_NAME-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME
    
  2. Uruchom następujące polecenia, aby uzyskać zakodowany identyfikator obszaru roboczego i klucz udostępniony dla istniejącego obszaru roboczego usługi Log Analytics. Będą one potrzebne w następnym kroku.

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query customerId \
        --output tsv)
    LOG_ANALYTICS_WORKSPACE_ID_ENC=$(printf %s $LOG_ANALYTICS_WORKSPACE_ID | base64 -w0) # Needed for the next step
    LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query primarySharedKey \
        --output tsv)
    LOG_ANALYTICS_KEY_ENC=$(printf %s $LOG_ANALYTICS_KEY | base64 -w0) # Needed for the next step
    

Instalowanie rozszerzenia usługi App Service

  1. Ustaw następujące zmienne środowiskowe dla żądanej nazwy rozszerzenia usługi App Service, przestrzeni nazw klastra, w której należy aprowizować zasoby, oraz nazwę środowiska Kubernetes usługi App Service. Wybierz unikatową nazwę elementu <kube-environment-name>, ponieważ będzie ona częścią nazwy domeny dla aplikacji utworzonej w środowisku Kubernetes usługi App Service.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Zainstaluj rozszerzenie usługi App Service w klastrze połączonym z usługą Azure Arc z włączoną usługą Log Analytics. Ponownie, chociaż usługa Log Analytics nie jest wymagana, nie można dodać jej do rozszerzenia później, więc łatwiej jest to zrobić teraz.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.Web.Appservice' \
        --release-train stable \
        --auto-upgrade-minor-version true \
        --scope cluster \
        --release-namespace $NAMESPACE \
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
        --configuration-settings "appsNamespace=${NAMESPACE}" \
        --configuration-settings "clusterName=${KUBE_ENVIRONMENT_NAME}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Uwaga

    Aby zainstalować rozszerzenie bez integracji usługi Log Analytics, usuń z polecenia ostatnie trzy --configuration-settings parametry.

    W poniższej tabeli opisano różne --configuration-settings parametry podczas uruchamiania polecenia:

    Parametr Opis
    Microsoft.CustomLocation.ServiceAccount Konto usługi, które powinno zostać utworzone dla lokalizacji niestandardowej, która zostanie utworzona. Zaleca się ustawienie tej wartości na wartość default.
    appsNamespace Przestrzeń nazw do aprowizowania definicji aplikacji i zasobników. Musi być zgodna z przestrzenią nazw wydania rozszerzenia.
    clusterName Nazwa środowiska Kubernetes usługi App Service, które zostanie utworzone względem tego rozszerzenia.
    keda.enabled Czy usługa KEDA powinna być zainstalowana w klastrze Kubernetes. true Akceptuje lub false.
    buildService.storageClassName Nazwa klasy magazynu dla usługi kompilacji do przechowywania artefaktów kompilacji. Wartość, taka jak default , określa klasę o nazwie default, a nie każdą klasę, która jest oznaczona jako domyślna. Wartość domyślna to prawidłowa klasa magazynu dla usług AKS i AKS HCI, ale może nie być w przypadku innych dystrubcji/platform.
    buildService.storageAccessMode Tryb dostępu do użycia z nazwaną klasą magazynu powyżej. ReadWriteOnce Akceptuje lub ReadWriteMany.
    customConfigMap Nazwa mapy konfiguracji, która zostanie ustawiona przez środowisko Kubernetes usługi App Service. Obecnie musi to być <namespace>/kube-environment-configwartość , zastępując <namespace> element wartością appsNamespace powyżej.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nazwa grupy zasobów, w której znajduje się klaster usługi Azure Kubernetes Service. Prawidłowy i wymagany tylko wtedy, gdy bazowy klaster jest usługą Azure Kubernetes Service.
    logProcessor.appLogs.destination Opcjonalny. log-analytics Akceptuje lub none, wybranie opcji Brak powoduje wyłączenie dzienników platformy.
    logProcessor.appLogs.logAnalyticsConfig.customerId Wymagane tylko wtedy, gdy logProcessor.appLogs.destination jest ustawiona wartość log-analytics. Identyfikator obszaru roboczego usługi Log Analytics zakodowany w formacie base64. Ten parametr należy skonfigurować jako ustawienie chronione.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Wymagane tylko wtedy, gdy logProcessor.appLogs.destination jest ustawiona wartość log-analytics. Klucz wspólny obszaru roboczego usługi Log Analytics zakodowany w formacie base64. Ten parametr należy skonfigurować jako ustawienie chronione.
  3. id Zapisz właściwość rozszerzenia usługi App Service do późniejszego użycia.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. Przed kontynuowaniem poczekaj na pełne zainstalowanie rozszerzenia. Możesz poczekać na ukończenie sesji terminalu, uruchamiając następujące polecenie:

    az resource wait --ids $EXTENSION_ID --custom "properties.installState!='Pending'" --api-version "2020-07-01-preview"
    

Możesz użyć kubectl polecenia , aby wyświetlić zasobniki, które zostały utworzone w klastrze Kubernetes:

kubectl get pods -n $NAMESPACE

Więcej informacji na temat tych zasobników i ich roli można uzyskać w systemie z zasobników utworzonych przez rozszerzenie usługi App Service.

Tworzenie lokalizacji niestandardowej

Lokalizacja niestandardowa na platformie Azure służy do przypisywania środowiska Kubernetes usługi App Service.

  1. Ustaw następujące zmienne środowiskowe dla żądanej nazwy lokalizacji niestandardowej i identyfikatora klastra połączonego z usługą Azure Arc.

    CUSTOM_LOCATION_NAME="my-custom-location" # Name of the custom location
    
    CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME --query id --output tsv)
    
  2. Utwórz lokalizację niestandardową:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \ 
        --cluster-extension-ids $EXTENSION_ID
    

    Uwaga

    Jeśli wystąpią problemy z tworzeniem lokalizacji niestandardowej w klastrze, może być konieczne włączenie funkcji lokalizacji niestandardowej w klastrze. Jest to wymagane w przypadku zalogowania się do interfejsu wiersza polecenia przy użyciu jednostki usługi lub zalogowania się za pomocą użytkownika Microsoft Entra z ograniczonymi uprawnieniami do zasobu klastra.

  3. Sprawdź, czy lokalizacja niestandardowa została pomyślnie utworzona za pomocą następującego polecenia. Dane wyjściowe powinny wyświetlać provisioningState właściwość jako Succeeded. Jeśli nie, uruchom go ponownie po minucie.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Zapisz identyfikator lokalizacji niestandardowej dla następnego kroku.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Tworzenie środowiska Kubernetes usługi App Service

Przed rozpoczęciem tworzenia aplikacji w lokalizacji niestandardowej potrzebne jest środowisko Kubernetes usługi App Service.

  1. Utwórz środowisko Kubernetes usługi App Service:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Sprawdź, czy środowisko Kubernetes usługi App Service zostało pomyślnie utworzone za pomocą następującego polecenia. Dane wyjściowe powinny wyświetlać provisioningState właściwość jako Succeeded. Jeśli nie, uruchom go ponownie po minucie.

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

Następne kroki