演習 - Azure CNI を使用した Azure Kubernetes Service クラスターをデプロイする

完了

注意

この演習は省略してもかまいません。 この演習を実行する場合は、始める前に Azure サブスクリプションを作成する必要があります。 Azure アカウントをお持ちでない場合、またはこの時点で作成しない場合は、提示されている情報を理解するため手順に目を通してください。

この演習では、仮想ネットワーク、サブネット、ID をデプロイし、Azure Container Networking Interface (CNI) プラグインを使用して Azure Kubernetes Service (AKS) クラスターをデプロイします。

会社の IT 部門に連絡し、アプリケーションの要件、仮想マシン (VM) のサイズ設定、ネットワークのサイズ設定に関して収集した情報を提供しました。 IT 部門から、クラスターに使用できるいくつかのネットワーク アドレス範囲が提供されました。

次の表に、IT 部門から提供された要件と IP アドレスを示します。

Item 説明 IP アドレス
AKS サブネット クラスター内のノードとポッドの IP アドレス。 248 個の使用可能な IP アドレスが必要です。 10.150.20.0/24
Kubernetes サービス サブネット Kubernetes サービスのためにクラスター内部で使用する IP アドレスです。 別の仮想ネットワークまたはオンプレミスのネットワークと競合しないようにしてください。 10.240.0.0/24
ドメイン ネーム システム (DNS) サービスの IP アドレス Kubernetes サービス サブネット内に存在する必要がありますが、使用可能な範囲の最初の IP アドレスにすることはできません。 10.240.0.10
  • AKS サブネットでは、248 個の使用可能な IP アドレスが必要であると判断しました。 IT 部門はネットワーク 10.150.20.0/24 を提示しました。これにより、すべてのサブネットで Azure が予約する 5 つのアドレスを差し引きしても 251 個の使用可能な IP アドレスが得られます。
  • Kubernetes サービス サブネットは、別の Azure 仮想ネットワークで使用されていない、オンプレミスのネットワーク範囲と競合しない IP アドレスのグループです。 このアドレス範囲は、クラスター内部でのみ使用されます。 IT 部門は、10.240.0.0/24 を使用するように指示しました。
  • DNS サービスの IP アドレスは、Kubernetes サービス サブネットのアドレス範囲内にある単一の IP アドレスですが、その範囲内の最初の IP アドレスにすることはできません。 この DNS の IP アドレスとして、10.240.0.10 を使用することに決めました。

仮想ネットワークとサブネットの作成

この演習では、仮想ネットワークとサブネットを作成します。 実際の環境では、IT 部門のチームがネットワークの管理を担当していて、そのチームが該当するリソースを作成することがあります。

  1. Azure Cloud Shell を起動します。

  2. Azure にまだサインインしていない場合は、az login コマンドを使用して Azure アカウントにサインインします。

    az login
    
  3. 近くの Azure リージョン (eastus など) を選びます。 この値を環境変数に格納して、演習の残りの部分で使用できるようにします。

    AKSLocation=eastus
    
  4. az group create コマンドを使用して、この演習のリソースを保持するためにリソース グループ AKSLearn を作成します。

    az group create --location $AKSLocation --name AKSLearn
    
  5. az network vnet create コマンドを使用して、仮想ネットワーク AKSVirtualNetwork を作成します。

    az network vnet create \
        --name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --address-prefixes 10.150.0.0/16  \
        --location $AKSLocation
    
  6. az network vnet subnet create コマンドを使用してサブネット AKSSubnet を作成し、IT 部門によって提供されたアドレス範囲を指定します。

    az network vnet subnet create \
        --resource-group AKSLearn \
        --vnet-name AKSVirtualNetwork \
        --name AKSSubnet \
        --address-prefixes 10.150.20.0/24
    

Azure マネージド ID の作成

AKS から Azure サブスクリプション内のリソースへのアクセスに使われる Azure マネージド ID を作成する必要があります。 次の 2 つのコマンドでは、Azure マネージド ID を作成して、その一意の ID 値を今後の使用のために環境変数に格納します。

  1. az identity create コマンドを使用して、Azure マネージド ID AKSIdentity を作成します。

    az identity create \
        --name AKSIdentity \
        --resource-group AKSLearn
    
  2. az identity show コマンドを使用してマネージド ID の ID を取得し、後のコマンドで使用するために、環境変数 identityId に格納します。

    identityId=$(az identity show \
        --name AKSIdentity \
        --resource-group AKSLearn \
        --query id \
        --output tsv)
    

AKS クラスターを作成する

  1. az network vnet subnet list コマンドを使用してサブネットのリソース ID 値を取得し、後のコマンドで使用するために、環境変数 subnetId に格納します。

    subnetId=$(az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[?name=='AKSSubnet'].id" \
        --output tsv)
    
  2. az aks create コマンドを使用して、AKS クラスター AKSCluster を作成します。

    az aks create \
        --name AKSCluster \
        --resource-group AKSLearn \
        --location $AKSLocation \
        --network-plugin azure \
        --vnet-subnet-id $subnetId \
        --service-cidr 10.240.0.0/24 \
        --dns-service-ip 10.240.0.10 \
        --generate-ssh-keys \
        --enable-managed-identity \
        --assign-identity $identityId \
        --node-vm-size  Standard_F8s_v2 \
        --node-count 3
    

    次の表では、az aks create コマンドで使用するパラメーターについて説明します。

    パラメーター 説明
    --name 作成するクラスターの名前。
    --resource-group クラスターの作成先にするリソース グループ。
    --location クラスターの作成先にする Azure リージョン。
    --network-plugin 使用するネットワーク プラグインを指定します。
    --vnet-subnet-id 使用するサブネットのリソース ID を指定します。
    --service-cidr 使用する Kubernetes サービスのアドレス範囲を指定します。
    --dns-service-ip 使用する DNS IP アドレスを指定します。
    --generate-ssh-keys ノードをセキュリティで保護するために使用する SSH キーのセットを作成します。
    --enable-managed-identity Azure のマネージド ID を使用して、Azure サブスクリプションに含まれるリソースにアクセスできるようにします。
    --assign-identity 使用する Azure マネージド ID の ID 値を指定します。
    --node-vm-size 使用する VM サイズを指定します。
    --node-count 作成するノードの数を指定します。
  3. クラスターが正常にデプロイされたら、az aks nodepool list コマンドを使用してノード プールの詳細を確認します。

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    出力は次の出力例のようになります。

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  3        30         Succeeded            System
    

    この出力から、Standard_F8s_v2 型のノードが 3 つ、MaxPods の値が 30、ノード プールのモードが System になっていることがわかります。

クラスターの IP アドレス使用状況の確認

  • az network vnet subnet list コマンドを使用して、クラスターで使用されている IP アドレスの数を確認します。

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    このコマンドでは、JMESPath クエリ文字列を使用して、サブネット内で定義されている ipConfigurations の数を調べます。 最大出力は 93 になります。 出発点として 3 つのノードをデプロイし、それぞれのノードに 1 つずつ IP アドレスがあります。 最大ポッド数には既定値の 30 を使用したため、各ノードにはポッド用に 30 個の IP アドレスが事前に割り当てられています。 これまでに割り当てられた IP アドレスの合計数は 3 x nodes + (30 pods * 3 nodes) = 93 です。 しかし、一部のアドレスは予約されているため、出力が少なくなる可能性があります。

クラスターへの別のノードの追加

クラスターをスケールアップして、ノードをもう 1 つ追加することで、IP アドレスの使用状況にどのように影響するかを見てみましょう。

  1. クラスターをスケールアップし、az aks scale コマンドを使用してもう 1 つのノードを追加します。

    az aks scale \
        --name AKSCluster \
        --resource-group AKSLearn \
        --node-count=4
    
  2. コマンドが正常に完了したら、az aks nodepool list コマンドを使用してノード プールの新しい詳細を確認します。

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    出力は次の出力例のようになり、4 つのノードがあることが示されます。

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  4        30         Succeeded            System
    
  3. az network vnet subnet list コマンドを使用して、クラスターで現在使用されている IP アドレスの数を確認します。

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    今回の最大出力は、前回より 31 多い 124 になります。 これは、新しいノード用のもう 1 つの IP アドレスと、そのノードで実行するポッドに事前に割り当てられた別の 30 個の IP アドレスです。 しかし、一部のアドレスは予約されているため、出力が少なくなる可能性があります。