演習 - 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 部門のチームがネットワークの管理を担当していて、そのチームが該当するリソースを作成することがあります。
Azure Cloud Shell を起動します。
Azure にまだサインインしていない場合は、
az login
コマンドを使用して Azure アカウントにサインインします。az login
近くの Azure リージョン (eastus など) を選びます。 この値を環境変数に格納して、演習の残りの部分で使用できるようにします。
AKSLocation=eastus
az group create
コマンドを使用して、この演習のリソースを保持するためにリソース グループ AKSLearn を作成します。az group create --location $AKSLocation --name AKSLearn
az network vnet create
コマンドを使用して、仮想ネットワーク AKSVirtualNetwork を作成します。az network vnet create \ --name AKSVirtualNetwork \ --resource-group AKSLearn \ --address-prefixes 10.150.0.0/16 \ --location $AKSLocation
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 値を今後の使用のために環境変数に格納します。
az identity create
コマンドを使用して、Azure マネージド ID AKSIdentity を作成します。az identity create \ --name AKSIdentity \ --resource-group AKSLearn
az identity show
コマンドを使用してマネージド ID の ID を取得し、後のコマンドで使用するために、環境変数 identityId に格納します。identityId=$(az identity show \ --name AKSIdentity \ --resource-group AKSLearn \ --query id \ --output tsv)
AKS クラスターを作成する
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)
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
作成するノードの数を指定します。 クラスターが正常にデプロイされたら、
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 アドレスの使用状況にどのように影響するかを見てみましょう。
クラスターをスケールアップし、
az aks scale
コマンドを使用してもう 1 つのノードを追加します。az aks scale \ --name AKSCluster \ --resource-group AKSLearn \ --node-count=4
コマンドが正常に完了したら、
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
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 アドレスです。 しかし、一部のアドレスは予約されているため、出力が少なくなる可能性があります。