Siapkan kluster Kube berkemampuan Azure Arc untuk menjalankan App Service, Functions, dan Logic Apps (Pratinjau)

Jika Anda memiliki Kluster Kube yang diaktifkan Arc Azure, Anda dapat menggunakannya untuk membuat Lokasi kustom yang diaktifkan App Service dan menyebarkan aplikasi web, aplikasi fungsi, dan aplikasi logika ke dalamnya.

Dengan Kube yang diaktifkan Azure Arc, Anda dapat membuat kluster Kube lokal atau cloud Anda terlihat oleh App Service, Functions, dan Logic Apps di Azure. Anda dapat membuat aplikasi dan menerapkannya seperti wilayah Azure lainnya.

Prasyarat

Jika Anda tidak memiliki akun Azure, daftar hari ini untuk akun gratis.

Menambahkan ekstensi Azure CLI

Luncurkan lingkungan Bash di Azure Cloud Shell.

Karena perintah CLI ini belum menjadi bagian dari set CLI inti, tambahkan dengan perintah berikut.

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

Buat klaster terhubung

Catatan

Tutorial ini menggunakan Azure Kubernetes Service (AKS) untuk memberikan instruksi konkret untuk menyiapkan lingkungan dari awal. Namun, untuk beban kerja produksi, Anda mungkin tidak ingin mengaktifkan Azure Arc pada klaster AKS karena sudah dikelola di Azure. Langkah-langkah di bawah ini akan membantu Anda mulai memahami layanan, tetapi untuk penyebaran produksi, mereka harus dipandang sebagai ilustrasi, bukan preskriptif. Lihat Mulai Cepat: Hubungkan kluster Kube yang ada ke Azure Arc untuk petunjuk umum pembuatan kluster Kube yang diaktifkan Arc Azure.

  1. Buat klaster di Azure Kubernetes Service dengan alamat IP publik. Ganti <group-name> dengan nama grup sumber daya yang ingin Anda gunakan.

    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. Dapatkan file kubeconfig dan uji koneksi ke klaster. Secara default, file kubeconfig disimpan ke ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Buat grup sumber daya untuk memuat sumber daya Azure Arc Anda. Ganti <group-name> dengan nama grup sumber daya yang ingin Anda gunakan.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_LOCATION
    
  4. Sambungkan klaster yang Anda buat ke Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Validasi koneksi dengan perintah berikut. Ini harus menunjukkan provisioningState properti sebagai Succeeded. Jika tidak, jalankan perintah lagi setelah satu menit.

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

Membuat ruang kerja Analitik Log

Meskipun ruang kerja Log Analytic tidak diperlukan untuk menjalankan App Service di Azure Arc, ini adalah bagaimana pengembang bisa mendapatkan log aplikasi untuk aplikasi mereka yang berjalan di kluster Kube yang diaktifkan Azure Arc.

  1. Untuk kemudahan, buat ruang kerja sekarang.

    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. Jalankan perintah berikut untuk mendapatkan ID ruang kerja yang dikodekan dan kunci bersama untuk ruang kerja Log Analytics yang sudah ada. Akan dibutuhkan di bagian berikutnya.

    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
    

Menginstal ekstensi App Service

  1. Tetapkan variabel lingkungan berikut untuk nama yang diinginkan dari ekstensi App Service, namespace layanan klaster tempat sumber daya harus disediakan, dan nama untuk lingkungan App Service Kubernetes. Pilih nama yang unik untuk <kube-environment-name>, karena akan menjadi bagian dari nama domain untuk aplikasi yang dibuat di lingkungan App Service Kubernetes.

    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. Pasang ekstensi App Service ke kluster yang terhubung dengan Azure Arc Anda, dengan Log Analytics diaktifkan. Sekali lagi, meskipun Analitik Log tidak diperlukan, Anda tidak dapat menambahkannya ke ekstensi nanti, sehingga lebih mudah untuk melakukannya sekarang.

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

    Catatan

    Untuk menginstal ekstensi tanpa integrasi Log Analytics, hapus tiga --configuration-settings parameter terakhir dari perintah.

    Tabel berikut menjelaskan berbagai --configuration-settings parameter saat menjalankan perintah:

    Parameter Deskripsi
    Microsoft.CustomLocation.ServiceAccount Akun layanan yang harus dibuat untuk lokasi kustom yang akan dibuat. Disarankan agar ini diatur ke nilai default.
    appsNamespace Namespace layanan untuk menyediakan definisi aplikasi dan pod. Harus cocok dengan namespace layanan perilisan ekstensi.
    clusterName Nama lingkungan App Service Kubernetes yang akan dibuat terhadap ekstensi ini.
    keda.enabled Apakah KEDA harus diinstal pada klaster Kubernetes. Menerima true atau false.
    buildService.storageClassName Nama kelas penyimpanan untuk layanan build untuk menyimpan artefak build. Nilai seperti default menentukan kelas bernamadefault, dan bukan kelas apa pun yang ditandai sebagai default. Default adalah kelas penyimpanan yang valid untuk AKS dan AKS HCI, tetapi mungkin tidak berlaku untuk distribusi/platform lainnya.
    buildService.storageAccessMode Mode akses yang digunakan dengan kelas penyimpanan bernama di atas. Menerima ReadWriteOnce atau ReadWriteMany.
    customConfigMap Nama peta konfigurasi yang akan ditetapkan oleh lingkungan App Service Kubernetes. Saat ini, harus <namespace>/kube-environment-config, mengganti <namespace> dengan nilai di appsNamespace atas.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nama grup sumber daya tempat klaster Azure Kubernetes Service berada. Valid dan hanya diperlukan ketika klaster yang mendasarinya adalah Azure Kubernetes Service.
    logProcessor.appLogs.destination Opsional. Menerima log-analytics atau none, tidak memilih menonaktifkan log platform.
    logProcessor.appLogs.logAnalyticsConfig.customerId Diperlukan hanya ketika logProcessor.appLogs.destination diatur ke log-analytics. ID ruang kerja Log analytics yang dikodekan basis64. Parameter ini harus dikonfigurasi sebagai pengaturan yang dilindungi.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Diperlukan hanya ketika logProcessor.appLogs.destination diatur ke log-analytics. Kunci bersama ruang kerja analitik Log yang dikodekan base64. Parameter ini harus dikonfigurasi sebagai pengaturan yang dilindungi.
  3. Simpan id properti ekstensi App Service untuk nanti.

    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. Tunggu hingga ekstensi terinstal sepenuhnya sebelum melanjutkan. Anda bisa membuat sesi terminal menunggu hingga ini selesai dengan menjalankan perintah berikut:

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

Kamu dapat menggunakan kubectl untuk melihat Pod yang telah dibuat di klaster Kubernetes:

kubectl get pods -n $NAMESPACE

Kamu dapat mempelajari lebih lanjut tentang Pod-Pod ini dan perannya dalam sistem dari Pod yang dibuat oleh ekstensi App Service.

Buat lokasi khusus

Lokasi kustom di Azure digunakan untuk menetapkan lingkungan App Service Kubernetes.

  1. Atur variabel lingkungan berikut untuk nama lokasi kustom yang diinginkan dan untuk ID kluster yang tersambung ke Arc Azure.

    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. Buat lokasi kustom:

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

    Catatan

    Jika Anda mengalami masalah saat membuat lokasi kustom di kluster, Anda mungkin perlu mengaktifkan fitur lokasi kustom pada kluster Anda. Ini diperlukan jika masuk ke CLI menggunakan Perwakilan Layanan atau jika Anda masuk dengan pengguna Microsoft Entra dengan izin terbatas pada sumber daya kluster.

  3. Validasi bahwa lokasi kustom berhasil dibuat dengan perintah berikut. Output harus menunjukkan provisioningState properti sebagai Succeeded. Jika tidak, jalankan lagi setelah satu menit.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Simpan ID lokasi kustom untuk langkah berikutnya.

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

Buat lingkungan App Service Kubernetes

Sebelum dapat mulai membuat aplikasi di lokasi khusus, kamu memerlukan lingkungan App Service Kubernetes.

  1. Buat lingkungan App Service Kubernetes:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Validasi bahwa lingkungan App Service Kubernetes berhasil dibuat dengan perintah berikut. Output harus menunjukkan provisioningState properti sebagai Succeeded. Jika tidak, jalankan lagi setelah satu menit.

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

Langkah berikutnya