Aracılığıyla paylaş


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, kullanarak sağlayıcıyı az provider registerkaydedin.

    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 bkz . Yönetilen kimlikleri kullanma.

Sanal düğümler eklentisini etkinleştirme

  • 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
    

Kümeye bağlanma

  1. komutunu kullanarak Kubernetes kümenize bağlanacak şekilde az aks get-credentials yapılandırınkubectl. 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ğıtma

  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ı zamanlar.

    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
            beta.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. bağımsız değişkeniyle komutunu kullanarak podların ve zamanlanmış düğümün kubectl get pods -o wide 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ünde zamanlanı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
    

    Pod' a, sanal düğümlerle kullanılmak üzere temsilci olarak atanan Azure sanal ağ alt ağından bir iç IP adresi atanır.

Not

Azure Container Registry'de depolanan görüntüleri kullanıyorsanız kubernetes gizli dizisini yapılandırın ve kullanın. Sanal düğümlerin geçerli sınırlamalarından biri, tümleşik Microsoft Entra hizmet sorumlusu kimlik doğrulamayı kullanamamanızdır. Gizli dizi kullanmazsanız, sanal düğümlerde zamanlanan podlar başlatılamaz ve hatasını HTTP response status code 400 error code "InaccessibleImage"bildiremez.

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 apt-getpod'a yükleyincurl.

    apt-get update && apt-get install -y curl
    
  4. gibi http://10.241.0.4kullanarak curlpodunuzun 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. ile exittest podunuza terminal oturumunu kapatın. Oturumunuz sona erdiğinde pod silinir.

Sanal düğümleri kaldırma

  1. aci-helloworld komutunu kullanarak sanal düğümde çalışan podu kubectl delete 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ıysanız ve özel bir iç IP adresi atadıysanı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: