Azure CLI kullanarak sanal düğümleri kullanmak için Azure Kubernetes Services (AKS) kümesi oluşturma ve yapılandırma

Sanal düğümler, Azure Container Instances (ACI) ve AKS kümelerinde çalışan podlar arasında ağ iletişimi sağlar. Bu iletişimi sağlamak için bir sanal ağ alt ağı oluşturur ve temsilci izinleri atarsınız. Sanal düğümler yalnızca gelişmiş ağ (Azure CNI) kullanılarak oluşturulan AKS kümeleriyle çalışır. Varsayılan olarak, AKS kümeleri temel ağ (kubenet) ile oluşturulur. Bu makalede sanal ağ ve alt ağ oluşturma ve ardından gelişmiş ağ kullanan bir AKS kümesi dağıtma işlemleri gösterilmektedir.

Bu makalede, sanal ağ kaynaklarını ve sanal düğümlerle etkinleştirilmiş bir AKS kümesini oluşturmak ve yapılandırmak için Azure CLI'yi nasıl kullanacağınız gösterilmektedir.

Başlamadan önce

Önemli

AKS ile sanal düğümleri kullanmadan önce hem AKS sanal düğümlerinin sınırlamalarını hem de ACI'nin sanal ağ sınırlamalarını gözden geçirin. Bu sınırlamalar hem AKS kümenizin hem de sanal düğümlerin konumunu, ağ yapılandırmasını ve diğer yapılandırma ayrıntılarını etkiler.

  • ACI hizmet sağlayıcısının aboneliğinize kayıtlı olması gerekir. komutunu kullanarak az provider list ACI sağlayıcı kaydının durumunu de kontrol edebilirsiniz.

    az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
    

    Microsoft.ContainerInstance sağlayıcısı, aşağıdaki örnek çıktıda gösterildiği gibi Kayıtlı olarak bildirmelidir.

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    

    Sağlayıcı NotRegistered olarak görünüyorsa, az provider register kullanarak sağlayıcıyı kaydedin.

    az provider register --namespace Microsoft.ContainerInstance
    
  • Azure CLI kullanılıyorsa bu makale için Azure CLI sürüm 2.0.49 veya üzeri gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme. Azure Cloud Shell'i de kullanabilirsiniz.

Azure Cloud Shell'i başlatma

Azure Cloud Shell, bu makaledeki adımları çalıştırmak için kullanabileceğiniz ücretsiz bir etkileşimli kabukdur. Yaygın Azure araçları önceden yüklenmiş ve yapılandırılmıştır.

Cloud Shell'i açmak için kod bloğunun sağ üst köşesinden Deneyin'i seçin. İsterseniz https://shell.azure.com/bash adresine giderek Cloud Shell'i ayrı bir tarayıcı sekmesinde de başlatabilirsiniz. Kopyala’yı seçerek kod bloğunu kopyalayın, Cloud Shell’e yapıştırın ve Enter tuşuna basarak çalıştırın.

Kaynak grubu oluşturma

Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir gruptur.

  • komutunu kullanarak az group create bir kaynak grubu oluşturun.

    az group create --name myResourceGroup --location eastus
    

Sanal ağ oluşturma

Önemli

Sanal düğüm, özel bir sanal ağ ve ilişkili alt ağ gerektirir. AKS kümesiyle aynı sanal ağ ile ilişkilendirilemiyor.

  1. komutunu kullanarak az network vnet create bir sanal ağ oluşturun. Aşağıdaki örnek, adres ön eki 10.0.0.0/8 olan myVnet adlı bir sanal ağ ve myAKSSubnet adlı bir alt ağ oluşturur. Bu alt ağın adres ön eki varsayılan olarak 10.240.0.0/16'dır.

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --address-prefixes 10.0.0.0/8 \
        --subnet-name myAKSSubnet \
        --subnet-prefix 10.240.0.0/16
    
  2. komutunu kullanarak az network vnet subnet create sanal düğümler için ek bir alt ağ oluşturun. Aşağıdaki örnek, adres ön eki 10.241.0.0/16 olan myVirtualNodeSubnet adlı bir alt ağ oluşturur.

    az network vnet subnet create \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name myVirtualNodeSubnet \
        --address-prefixes 10.241.0.0/16
    

Yönetilen kimlikle AKS kümesi oluşturma

  1. komutunu kullanarak az network vnet subnet show alt ağ kimliğini alın.

    az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
    
  2. komutunu kullanarak az aks create bir AKS kümesi oluşturun ve değerini önceki adımda elde edilen kimlikle değiştirin <subnetId> . Aşağıdaki örnek, beş düğümlü myAKSCluster adlı bir küme oluşturur.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 5 \
        --network-plugin azure \
        --vnet-subnet-id <subnetId> \
        --generate-ssh-keys
    

    Birkaç dakika sonra komut tamamlanır ve küme hakkında JSON tarafından biçimlendirilmiş bilgiler gösterilir.

Yönetilen kimlikler hakkında daha fazla bilgi için Yönetilen kimlikleri kullanın bölümüne bakın.

Sanal düğümler eklentisini etkinleştirme

Not

Gelişmiş Ağ için Azure CNI kullanan oluşturulmuş bir Azure Kubernetes Hizmet Kümeniz varsa, CLI kullanarak sanal düğümleri eklenti olarak etkinleştirebilmeniz gerekir.

  • komutunu kullanarak sanal düğümleri az aks enable-addons etkinleştirin. Aşağıdaki örnek, önceki adımda oluşturulan myVirtualNodeSubnet adlı alt ağı kullanır.

    az aks enable-addons \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --addons virtual-node \
        --subnet-name myVirtualNodeSubnet
    

Yönetilen kimliğe izin ver

Sanal düğümler tarafından kullanılan alt ağda Ağ Katkıda Bulunanı rolünü, aciconnectorlinux-aks-cluster-name adlı sanal düğüm eklentisinin yönetilen kimliğine verin.

NODE_RG=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
PRINCIPAL_ID=$(az identity show --resource-group $NODE_RG --name aciconnectorlinux-myAKSCluster --query principalId -o tsv)
VIRTUAL_NODE_SUBNET_ID=$(az network vnet subnet show --resource-group myResourceGroup --vnet-name <VNET_NAME> --name myVirtualNodeSubnet --query id -o tsv)
az role assignment create --assignee $PRINCIPAL_ID --role "Network Contributor" --scope $VIRTUAL_NODE_SUBNET_ID

Kümeye bağlanma

  1. Kubernetes kümenize bağlanmak için az aks get-credentials komutunu kullanarak kubectl yapılandırın. Bu adım kimlik bilgilerini indirir ve Kubernetes CLI’yi bunları kullanacak şekilde yapılandırır.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Küme düğümlerinin listesini döndüren komutunu kullanarak kubectl get kümenize bağlantıyı doğrulayın.

    kubectl get nodes
    

    Aşağıdaki örnek çıktıda oluşturulan tek VM düğümü ve Linux için sanal düğüm, virtual-node-aci-linux gösterilmektedir:

    NAME                          STATUS    ROLES     AGE       VERSION
    virtual-node-aci-linux        Ready     agent     28m       v1.11.2
    aks-agentpool-14693408-0      Ready     agent     32m       v1.11.2
    

Örnek uygulama dağıtın

  1. adlı virtual-node.yaml bir dosya oluşturun ve aşağıdaki YAML'de kopyalayın. YAML, nodeSelector ve toleration tanımlayarak düğümdeki kapsayıcıyı zamanlayan.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aci-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aci-helloworld
      template:
        metadata:
          labels:
            app: aci-helloworld
        spec:
          containers:
          - name: aci-helloworld
            image: mcr.microsoft.com/azuredocs/aci-helloworld
            ports:
            - containerPort: 80
          nodeSelector:
            kubernetes.io/role: agent
            kubernetes.io/os: linux
            type: virtual-kubelet
          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Exists
          - key: azure.com/aci
            effect: NoSchedule
    
  2. komutunu kullanarak kubectl apply uygulamayı çalıştırın.

    kubectl apply -f virtual-node.yaml
    
  3. kubectl get pods komutunu -o wide bağımsız değişkeni ile kullanarak podların ve zamanlanmış düğümün listesini alın.

    kubectl get pods -o wide
    

    Pod, aşağıdaki örnek çıktıda gösterildiği gibi virtual-node-aci-linux sanal düğümüne zamanlanmıştır.

    NAME                            READY     STATUS    RESTARTS   AGE       IP           NODE
    aci-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux
    

    Poda, sanal düğümlerle kullanılmak üzere kullanıma yetkilendirilmiş Azure sanal ağının alt ağından bir iç IP adresi atanır.

Not

Azure Container Registry'de depolanan görüntüleri kullanıyorsanız Kubernetes gizli anahtarını yapılandırın ve kullanın. Sanal düğümlerin mevcut kısıtlamalarından biri, bütünleşik Microsoft Entra hizmet sorumlusu kimlik doğrulamasını kullanamamanızdır. Gizli bir bilgi kullanmazsanız, sanal düğümlerde zamanlanan podlar başlatılamaz ve HTTP response status code 400 error code "InaccessibleImage" hatasını bildirir.

Sanal düğüm podunu test edin

  1. Bir web istemcisiyle tanıtım uygulamasına göz atarak sanal düğümde çalışan podu test edin. Pod'a bir iç IP adresi atandığından, AKS kümesindeki başka bir poddan bu bağlantıyı hızla test edebilirsiniz.

  2. Aşağıdaki kubectl run -it komutu kullanarak bir test podu oluşturun ve buna bir terminal oturumu ekleyin.

    kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  3. kullanarak curlpod'a yükleyinapt-get.

    apt-get update && apt-get install -y curl
    
  4. gibi curlkullanarak http://10.241.0.4podunuzun adresine erişin. Önceki kubectl get pods komutta gösterilen kendi iç IP adresinizi belirtin.

    curl -L http://10.241.0.4
    

    Tanıtım uygulaması, aşağıdaki daraltılmış örnek çıktıda gösterildiği gibi görüntülenir:

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  5. Terminal oturumunuzu test podunuzda exit ile kapatın. Oturumunuz sona erdiğinde pod silinir.

Sanal düğümleri kaldırma

  1. kubectl delete komutunu kullanarak sanal düğümde çalışan aci-helloworld podu silin.

    kubectl delete -f virtual-node.yaml
    
  2. komutunu kullanarak sanal düğümleri az aks disable-addons devre dışı bırakın.

    az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
    
  3. Aşağıdaki komutları kullanarak sanal ağ kaynaklarını ve kaynak grubunu kaldırın.

    # Change the name of your resource group, cluster and network resources as needed
    RES_GROUP=myResourceGroup
    AKS_CLUSTER=myAKScluster
    AKS_VNET=myVnet
    AKS_SUBNET=myVirtualNodeSubnet
    
    # Get AKS node resource group
    NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv)
    
    # Get network profile ID
    NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv)
    
    # Delete the network profile
    az network profile delete --id $NETWORK_PROFILE_ID -y
    
    # Grab the service association link ID
    SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default
    
    # Delete the service association link for the subnet
    az resource delete --ids $SAL_ID --api-version 2021-10-01
    
    # Delete the subnet delegation to Azure Container Instances
    az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
    

Sonraki adımlar

Bu makalede, sanal düğümde bir pod zamanladınız ve özel bir iç IP adresi atadınız. Bunun yerine bir hizmet dağıtımı oluşturabilir ve trafiği bir yük dengeleyici veya giriş denetleyicisi aracılığıyla podunuza yönlendirebilirsiniz. Daha fazla bilgi için bkz . AKS'de temel giriş denetleyicisi oluşturma.

Sanal düğümler genellikle AKS'deki bir ölçeklendirme çözümünün bileşenlerinden biridir. Çözümleri ölçeklendirme hakkında daha fazla bilgi için aşağıdaki makalelere bakın: