Kubernetes the Hard Way on Azure : 3. コンピュートリソース
こんにちは。
引き続き、Kubernetes the Hard Way on Azure を進めていきます。
3. Provisioning Compute Resources
今回はマシン、ネットワーク周りを構築していきます。
Kubernetesは、コントロールプレーン
ワーカノード
と呼ばれるマシンが必要になります。
このラボでは、以下の構成のKubernetesクラスタを構築します。
- 2 コントロールプレーン(マスター)
- 2 ワーカーノード
- 1リソースグループ・1リージョン(デフォルト)
Networking
Kubernetesのネットワークモデルは、コンテナ・ノードが互いに通信できるフラットなネットワークを想定しています。これが望ましくない場合はネットワークポリシー でコンテナグループが互いに、そして外部ネットワークエンドポイントと通信する方法を制限出来ます。
Virtual Network
このセクションでは、Kubernetes クラスタをホストする、専用の仮想ネットワーク(Vnet)がセットアップされます。
Kubernetesクラスタの各ノードにプライベートIPを割り当てるのに十分な大きさのIPアドレス範囲でプロビジョニングされたサブネット[kubernetes] で、カスタムVnetネットワーク [kubernetes-vnet] を作成します。
az network vnet create -g kubernetes \ -n kubernetes-vnet \ --address-prefix 10.240.0.0/24 \ --subnet-name kubernetes-subnet
10.240.0.0/24 IP アドレス範囲は、最大254個のコンピュートインスタンスをホストできます。
Firewall Rules
Azureでのファイアウォールに当たる ネットワークセキュリティグループ を作成し、サブネットに割当てます。
# NSGの作成 az network nsg create -g kubernetes -n kubernetes-nsg # サブネットへ割当て az network vnet subnet update -g kubernetes \ -n kubernetes-subnet \ --vnet-name kubernetes-vnet \ --network-security-group kubernetes-nsg
外部からのSSH、HTTPS接続を許可するファイアウォールルールを作成します。
# SSH az network nsg rule create -g kubernetes \ -n kubernetes-allow-ssh \ --access allow \ --destination-address-prefix '*' \ --destination-port-range 22 \ --direction inbound \ --nsg-name kubernetes-nsg \ --protocol tcp \ --source-address-prefix '*' \ --source-port-range '*' \ --priority 1000 # HTTPS az network nsg rule create -g kubernetes \ -n kubernetes-allow-api-server \ --access allow \ --destination-address-prefix '*' \ --destination-port-range 6443 \ --direction inbound \ --nsg-name kubernetes-nsg \ --protocol tcp \ --source-address-prefix '*' \ --source-port-range '*' \ --priority 1001
外部のロードバランサを使用して、Kuberenetes APIサーバをリモートクライアントに公開します。
Vnet [Kubernetes-vnet]のファイアウォールルールを一覧表示します。
az network nsg rule list -g kubernetes --nsg-name kubernetes-nsg --query "[].{Name:name, \ Direction:direction, Priority:priority, Port:destinationPortRange}" -o table
出力 Name Direction Priority Port --------------------------- ----------- ---------- ------ kubernetes-allow-ssh Inbound 1000 22 kubernetes-allow-api-server Inbound 1001 6443
Kubernetes Public IP Address
静的IPアドレスを、APIサーバの前段にある外部ロードバランサに割り当てます。
az network lb create -g kubernetes \ -n kubernetes-lb \ --backend-pool-name kubernetes-lb-pool \ --public-ip-address kubernetes-pip \ --public-ip-address-allocation static
静的IPアドレスが確実に生成されたか確認します。
az network public-ip list --query="[?name=='kubernetes-pip'].{ResourceGroup:resourceGroup, \ Region:location,Allocation:publicIpAllocationMethod,IP:ipAddress}" -o table
出力 ResourceGroup Region Allocation IP --------------- --------- ------------ ------------ kubernetes japaneast Static **.**.**.***
たぶんこの辺りが大事。
- Kubernetesクラスタの各ノードにプライベートIPを割り当てるのに十分な大きさのIPアドレス範囲でプロビジョニングされたサブネット[kubernetes] を用意する
- 外部のロードバランサを使用して、Kuberenetes APIサーバをリモートクライアントに公開する
Virtual Machines
このラボのインスタンスは、Ubuntu Server 18.04 を使用してプロビジョニングされます。これはcri-containerd ランタイム を適切にサポートします。Kubernetesのブートストラッププロセスを簡素化するために、各コンピューティングインスタンスに静的プライベートIPアドレスがプロビジョニングされます。
最新の安定版Ubuntuサーバを選択するために、以下のコマンドを実行し、変数 "UBUNTULTS" を表の最新行に置き換えます。
az vm image list --location japaneast --publisher Canonical --offer UbuntuServer --sku 18.04-LTS --all -o table # 書き換える UBUNTULTS="Canonical:UbuntuServer:18.04-LTS:18.04.202002040"
Kubernetes Controllers
・コントロールプレーンの作成
3台のコンピュートインスタンスを作成します。これらは可用性セットcontroller-as でまとめられたコントロールプレーンをホストします。
# 可用性セットを作成 az vm availability-set create -g kubernetes -n controller-as # IP, NIC, VMを作成 for i in 0 1 ; do echo "[Controller ${i}] Creating public IP..." az network public-ip create -n controller-${i}-pip -g kubernetes > /dev/null echo "[Controller ${i}] Creating NIC..." az network nic create -g kubernetes \ -n controller-${i}-nic \ --private-ip-address 10.240.0.1${i} \ --public-ip-address controller-${i}-pip \ --vnet kubernetes-vnet \ --subnet kubernetes-subnet \ --ip-forwarding \ --lb-name kubernetes-lb \ --lb-address-pools kubernetes-lb-pool > /dev/null echo "[Controller ${i}] Creating VM..." az vm create -g kubernetes \ -n controller-${i} \ --image ${UBUNTULTS} \ --nics controller-${i}-nic \ --availability-set controller-as \ --nsg '' \ --admin-username 'kuberoot' > /dev/null \ --generate-ssh-keys done
・ワーカーノードの作成
各ワーカーインスタンスには、KubernetesクラスターCIDR範囲からのポッドサブネットの割り当てが必要です。Podサブネットの割り当ては、後の演習でコンテナネットワークを構成するために使用されます。 インスタンスメタデータ [Pod-cidr] は、実行時に Pod サブネットの割り当てを計算インスタンスに公開するために使用されます。
KubernetesクラスターのCIDR範囲は、コントローラーマネージャーの--cluster-cidr フラグによって定義されます。このチュートリアルでは、クラスターCIDR範囲は10.240.0.0/16に設定され、254サブネットをサポートします。
3台のコンピュートインスタンスを作成します。これらは可用性セットworker-as でまとめられたワーカーノードをホストします。
# 可用性セットを作成 az vm availability-set create -g kubernetes -n worker-as # IP, NIC, VMを作成 for i in 0 1 ; do echo "[Worker ${i}] Creating public IP..." az network public-ip create -n worker-${i}-pip -g kubernetes > /dev/null echo "[Worker ${i}] Creating NIC..." az network nic create -g kubernetes \ -n worker-${i}-nic \ --private-ip-address 10.240.0.2${i} \ --public-ip-address worker-${i}-pip \ --vnet kubernetes-vnet \ --subnet kubernetes-subnet \ --ip-forwarding > /dev/null echo "[Worker ${i}] Creating VM..." az vm create -g kubernetes \ -n worker-${i} \ --image ${UBUNTULTS} \ --nics worker-${i}-nic \ --tags pod-cidr=10.200.${i}.0/24 \ --availability-set worker-as \ --nsg '' \ --admin-username 'kuberoot' > /dev/null \ --generate-ssh-keys done echo "[Worker 1] Creating VM..." az vm create -g kubernetes \ -n worker-1 \ --image ${UBUNTULTS} \ --nics worker-1-nic \ --tags pod-cidr=10.200.1.0/24 \ --availability-set worker-as \ --nsg '' \ --admin-username 'kuberoot' > /dev/null \ --generate-ssh-keys
デフォルトゾーンに、コンピュートインスタンスがデプロイされているか確認します。
az vm list -d -g kubernetes -o table Name ResourceGroup PowerState PublicIps Fqdns Location Zones ------------ --------------- ------------ ------------- ------- ---------- ------- controller-0 kubernetes VM running 13.**.***.*** japaneast controller-1 kubernetes VM running 13.**.**.*** japaneast worker-0 kubernetes VM running 13.***.**.*** japaneast worker-1 kubernetes VM running 40.***.***.** japaneast
4.に続きます。