🏮

ゼロから 100 分くらいで作る AKS ハイブリッド ラボ環境 (PowerShell 版)

2023/09/30に公開

AKS ハイブリッド デプロイメント オプションとは?

AKS ハイブリッド デプロイメント オプションは、オンプレミスにある Azure Stack HCI や Windows Server 上に展開できる AKS (Azure Kubernetes Service) です。オンプレミスに展開した Kubernetes クラスターでコンテナー化したアプリケーションを実行できます。
短く AKS ハイブリッドや AKS-HCI と呼ばれることもあります。

AKS ハイブリッドのアーキテクチャ

AKS ハイブリッドは、2 種類の Kubernetes クラスターで構成されます。

  • 管理クラスター (AKS ホスト)

    AKS ハイブリッドの仕組み自体を提供する Kubernetes クラスターです。この Kubernetes クラスターを通して、ワークロード クラスターをデプロイしたり、管理したりします。一方、管理クラスターは、ユーザー アプリケーションの実行には使用されません。

    管理クラスターは、AKS ホストと呼ばれることもあり、AKS ハイブリッドをデプロイすることは、管理クラスターをデプロイすることです。

  • ワークロード クラスター (ターゲット クラスター)

    ユーザーのワークロード (コンテナー化されたアプリケーション) を実行するための Kubernetes クラスターです。複数のワークロード クラスターを作成して、使用できます。

    ターゲット クラスターと呼ばれることもあります。

いずれの Kubernetes クラスターもフェールオーバー クラスター上で実行される高可用化された Hyper-V 仮想マシンによって実装されています。

AKS ハイブリッドのアーキテクチャ図

AKS ハイブリッドのデプロイについて

AKS ハイブリッドのデプロイ方法には、Windows Admin Center を使用した方法と PowerShell を使用した方法の 2 種類があります。
今お読みいただいているこの記事では、PowerShell を使用した方法で AKS ハイブリッドをデプロイします。

どちらの方法でデプロイする場合でも、AKS ハイブリッドをデプロイするには以下の準備が完了している必要があります。

  • リソース プロバイダーの登録
  • HCI クラスターのデプロイ

準備が出来た後、PowerShell を使用して AKS ハイブリッドをデプロイする手順は以下の 3 ステップです。

  1. HCI ノードの準備
  2. 管理クラスターのデプロイ
  3. ワークロード クラスターのデプロイ

準備 1: リソース プロバイダーの登録

始めて AKS ハイブリッドをデプロイする場合は、AKS ハイブリッドのクラスターを接続する Azure サブスクリプションで必要なリソース プロバイダーを登録する必要があります。

使用するサブスクリプションの Azure Cloud Shell を開いて以下の PowerShell コマンドを実行します。
このコマンドの実行には 10 分程度かかる場合がありますが、1 つの Azure サブスクリプションに対して 1 度実行するだけです (AKS ハイブリッドをデプロイする度に実行する必要はありません)。

Register-AzResourceProvider -ProviderNamespace 'Microsoft.Kubernetes'
Register-AzResourceProvider -ProviderNamespace 'Microsoft.KubernetesConfiguration'
Register-AzResourceProvider -ProviderNamespace 'Microsoft.ExtendedLocation'

以下の PowerShell コマンドを実行してリソース プロバイダーの登録状態を取得し、すべて Registered と表示されていれば、リソース プロバイダーの登録は完了しています。

Get-AzResourceProvider -ProviderNamespace 'Microsoft.Kubernetes','Microsoft.KubernetesConfiguration','Microsoft.ExtendedLocation' | Format-Table -Property 'ProviderNamespace','ResourceTypes','RegistrationState'
Get-AzResourceProvider コマンドレットの実行結果の例

Get-AzResourceProvider コマンドレットの実行結果の例

準備 2: HCI クラスターのデプロイ

AKS ハイブリッドは HCI クラスター上にデプロイする必要があるため、まず HCI クラスターをデプロイする必要があります。

この記事では、HCI Lab を使用して HCI クラスター環境を準備します。HCI Lab のデプロイ方法は以下の記事を参考にできます。

管理ツール マシンにリモート デスクトップ接続

HCI Lab のデプロイ完了後、HCI Lab ホスト (Azure VM) にリモート デスクトップ接続し、デスクトップにある Management tools server アイコンから管理ツール マシンにリモート デスクトップ接続します。以降は主に管理ツール マシン上で作業します。

1. HCI ノードの準備

AKS ハイブリッドのデプロイを開始する前に、各 HCI ノード上でデプロイに必要な準備をします。

  1. AksHci PowerShell モジュールのインストール
  2. HCI ノードの検証

1.1. AksHci PowerShell モジュールのインストール

各 HCI ノードに AksHci PowerShell モジュールをインストールします。それぞれの HCI ノードに順番にインストールすることもできますが、管理ツール マシンから PowerShell リモーティングを使用して全 HCI ノードに対してまとめて実行すると、HCI ノードの台数に関わらず 1 度に完了できます。

以下のコマンドでは、NuGet と PowerShellGet を更新した上で、AksHci PowerShell モジュールをインストールしています。

$hciNodes = 'hcinode01.hci.local', 'hcinode02.hci.local'

Invoke-Command -ComputerName $hciNodes -ScriptBlock {
    Install-PackageProvider -Name 'NuGet' -Scope AllUsers -Force -Verbose
    Install-Module -Name 'PowerShellGet' -Scope AllUsers -Force -Verbose
}

Invoke-Command -ComputerName $hciNodes -ScriptBlock {
    Install-Module -Name 'AksHci' -Repository 'PSGallery' -AcceptLicense -Force -Verbose 
}

1.2. HCI ノードの検証

Initialize-AksHciNode コマンドレットを使用して、AKS ハイブリッドをデプロイするための要件が満たされていることを確認します。このコマンドは PowerShell リモーティング経由では正常に実行できないため、各 HCI ノードにアクセスして実行する必要があります。

管理ツール マシンから各 HCI ノードにドメイン管理者の資格情報を使用してリモート デスクトップ接続し、PowerShell 上で以下のコマンドを実行します。

Initialize-AksHciNode
Initialize-AksHciNode コマンドレットの実行結果の例

関連 PowerShell モジュールが読み込まれている状態で、Initialize-AksHciNode コマンドレットを実行して正常に完了した場合、特に出力はありません。

関連 PowerShell モジュールが読み込まれていない状態で Initialize-AksHciNode コマンドレットを実行した場合、以下のような警告が複数表示されます。この unapproved verbs が含まれているという警告は無視して問題ありません。

WARNING: The names of some imported commands from the module 'Common' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.                                                              

2. 管理クラスターのデプロイ

管理クラスターは、いくつかの構成情報を作成した上でデプロイします。

  1. 管理クラスターで使用するネットワーク構成を作成
  2. 管理クラスターの構成を作成
  3. 管理クラスターを Azure Arc 対応 Kubernetes として登録するための構成を作成
  4. 管理クラスターをデプロイ

任意の 1 台の HCI ノードにドメイン管理者の資格情報を使用してリモート デスクトップ接続して管理クラスターのデプロイ手順を実行します。

2.1. 管理クラスターで使用するネットワーク構成を作成

New-AksHciNetworkSetting コマンドレットを使用して管理クラスターで使用するネットワーク構成を作成します。
PowerShell セッション内で始めてこのコマンドを実行する場合、モジュールの読み込みが発生するため、実行完了までに 1 分程度の時間がかかります。

$VerbosePreference = 'Continue'
$params = @{
    Name               = 'akshci-main-network'
    VSwitchName        = 'ComputeSwitch'
    Gateway            = '10.0.0.1'
    DnsServers         = '172.16.0.2'
    IpAddressPrefix    = '10.0.0.0/16'
    K8sNodeIpPoolStart = '10.0.0.11'
    K8sNodeIpPoolEnd   = '10.0.0.40'
    VipPoolStart       = '10.0.0.41'
    VipPoolEnd         = '10.0.0.250'
}
$vnet = New-AksHciNetworkSetting @params
パラメーターの説明
  • Name は AKS ハイブリッドで使用するネットワーク構成の名前です。ネットワーク構成の一覧は Get-AksHciClusterNetwork コマンドレットで取得できます。

  • VSwitchName は AKS ハイブリッドを構成する Hyper-V VM を接続する仮想スイッチの名前です。

  • GatewayDnsServers はサブネットで使用するデフォルト ゲートウェイを DNS サーバーです。

  • IpAddressPrefix は静的 IP アドレス割り当ての場合のサブネットを表すアドレス プレフィックスです。

  • K8sNodeIpPoolStartK8sNodeIpPoolEnd では、Kubernetes ノードに割り当てる IP アドレスとして使用できる IP アドレスの範囲を指定します。

    上記コマンドの指定の場合、Kubernetes ノードには、10.0.0.11 ~ 10.0.0.40 の範囲から IP アドレスが割り当てられます。

  • VipPoolStartVipPoolEnd では、Kubernetes の Service などに割り当てる仮想 IP アドレス (VIP) として使用できる IP アドレスの範囲を指定します。

    上記コマンドの指定の場合、Kubernetes の Service には、10.0.0.41 ~ 10.0.0.250 の範囲から IP アドレスが割り当てられます。

New-AksHciNetworkSetting コマンドレットには、上記以外にも指定可能なパラメーターがありますので必要に応じて指定します。

2.2. 管理クラスターの構成を作成

Set-AksHciConfig コマンドレットを使用して管理クラスターの構成を作成します。
AKS ハイブリッドの仮想ハードディスク ファイル (VHD) などのダウンロードやダウンロードしたファイルの検証、展開などが発生するため、このコマンドの実行には 12 分程度の時間がかかります。

$baseDir = 'C:\ClusterStorage\HciVol\aks-hci'

$VerbosePreference = 'Continue'
$params = @{
    ImageDir            = Join-Path -Path $baseDir -ChildPath 'Images'
    WorkingDir          = Join-Path -Path $baseDir -ChildPath 'WorkingDir'
    CloudConfigLocation = Join-Path -Path $baseDir -ChildPath 'Config'
    CloudServiceCidr    = '172.16.0.51/24'
    VNet                = $vnet
    ControlplaneVmSize  = 'Standard_D4s_v3'
    Verbose             = $true
}
Set-AksHciConfig @params
パラメーターの説明
  • ImageDir には AKS ハイブリッドを構成する Hyper-V VM の VHD を保存するパスを指定します。

    HCI クラスター上の高可用化された VM (HCI ノード間をフェールオーバーする可能性がある VM) が使用する VHD が配置されることになるため、このパスは共有ストレージ上のパスである必要があります。上記コマンドでは、クラスターの共有ストレージ (CSV) のパスを指定しています。

  • WorkingDir には、AKS ハイブリッドの作業用ファイルを保存するパスを指定します。

    このパスも共有ストレージ上のパスである必要があり、上記コマンドでは、クラスターの共有ストレージ (CSV) のパスを指定しています。

  • CloudConfigLocation にはクラウド エージェントの構成情報を保存するパスを指定します。

    このパスも共有ストレージ上のパスである必要があり、上記コマンドでは、クラスターの共有ストレージ (CSV) のパスを指定しています。

  • CloudServiceCidr には、MOC Cloud Agent サービス (Microsoft オンプレミス クラウド エージェント サービス) に割り当てる静的 IP アドレスとネットワーク プレフィックス長を IP アドレス/プレフィックス長 の CIDR 書式で指定します。

    サブネットを表現する時と同じ書式を使用していますが、これはサブネットではなく、IP アドレスとサブネット マスクの組み合わせを表現しています。上記コマンドで指定している 172.16.0.51/24 の場合、MOC Cloud Agent サービスには、IP アドレスとして 172.16.0.51 を、サブネット マスクとして 255.255.255.0 を割り当てます。

  • VNet には、管理クラスターで使用する仮想ネットワークを指定します。

    具体的には、先の手順において、New-AksHciNetworkSetting コマンドレットで作成した仮想ネットワークを指定します。

  • ControlplaneVmSize には、コントロール プレーン VM の VM サイズを指定します。

    指定できる VM サイズは Get-AksHciVmSize コマンドレットで取得できます。このパラメーターは必須パラメーターではありませんが、ラボ環境全体のメモリ使用量を最適化するために今回は指定しています。

Set-AksHciConfig コマンドレットには、上記以外にも指定可能なパラメーターがありますので必要に応じて指定します。

2.3. 管理クラスターを Azure Arc 対応 Kubernetes として登録するための構成を作成

Set-AksHciRegistration コマンドレットを使用して管理クラスターを Azure Arc 対応 Kubernetes として登録するための構成を作成します。
このコマンドの実行には 2 分程度の時間がかかります。

$tenantId          = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$subscriptionId    = 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'
$resourceGroupName = '<Azure Arc リソースを作成するリソース グループ名>'

$VerbosePreference = 'Continue'
$params = @{
    TenantId                = $tenantId
    SubscriptionId          = $subscriptionId
    ResourceGroupName       = $resourceGroupName
    UseDeviceAuthentication = $true
    Verbose                 = $true
}
Set-AksHciRegistration @params
パラメーターの説明
  • TenantId には、登録に使用するサービス プリンシパルやユーザー アカウントが存在する Microsoft Entra テナント の ID (旧称 Azure AD テナントの ID) を指定します。

  • SubscriptionId には、登録に使用する Azure サブスクリプションの ID を指定します。

  • ResourceGroupName には、管理クラスターの Azure Arc 対応 Kubernetes リソースを配置するリソース グループ名を指定します。

  • UseDeviceAuthentication を指定すると、認証方法として、デバイス認証を使用できます。登録するためにユーザー アカウントを使用し、対話的に認証したい場合には、このスイッチ パラメーターを利用できます。認証コードが表示されるので、コードを使用して https://microsoft.com/devicelogin から認証を行うことになります。

Set-AksHciRegistration コマンドレットには、上記以外にも指定可能なパラメーターがありますので必要に応じて指定します。

上記のコマンド例では、UseDeviceAuthentication パラメーターに $true を指定して、デバイス認証を使用しています。
そのため、以下のようなメッセージが表示されたら、https://microsoft.com/devicelogin にアクセスし、表示された認証コード (以下のメッセージ例では EB76EFUBQ) を入力して認証します。

WARNING: To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code EB76EFUBQ to authenticate.  

2.4. 管理クラスターをデプロイ

Install-AksHci コマンドレットを使用して管理クラスターをデプロイします。
このコマンドの実行には 16 分程度の時間がかかります。

$VerbosePreference = 'Continue'
Install-AksHci -Verbose

管理クラスター デプロイ完了後、Windows Admin Center のクラスター マネージャーで HCI クラスターに接続し、Azure Kubernetes サービスを確認すると、AKS ハイブリッドが HCI クラスター上にデプロイされていることを確認できます。

3. ワークロード クラスターのデプロイ

実際のワークロード (コンテナー化されたアプリケーション) を実行するための Kubernetes クラスターであるワークロード クラスターをデプロイします。

任意の 1 台の HCI ノードにドメイン管理者の資格情報を使用してリモート デスクトップ接続してワークロード クラスターのデプロイ手順を実行します。

3.1. ワークロード クラスターのデプロイ

New-AksHciCluster コマンドレットを使用してワークロード クラスターをデプロイします。
このコマンドの実行には 15 分程度の時間がかかります。

$VerbosePreference = 'Continue'
$params = @{
    Name       = '<ワークロード クラスターの名前>'
    OSType     = 'Linux'
    NodeVmSize = 'Standard_A2_v2'
    NodeCount  = 1
    Verbose    = $true
}
New-AksHciCluster @params
パラメーターの説明
  • Name には、作成するワークロード クラスターの名前を指定します。なお、名前にハイフンは含められません。

  • OSType には、ノード プール内のノードの OS の種類を指定します。指定できる値は LinuxWindows のいずれかです。

  • NodeVmSize には、ノード プール内のノードの VM サイズを指定します。

    指定できる VM サイズは Get-AksHciVmSize コマンドレットで取得できます。

  • NodeCount には、ノード プール内のノード数を指定します。

New-AksHciCluster コマンドレットには、上記以外にも指定可能なパラメーターがありますので必要に応じて指定します。

ワークロード クラスター デプロイ完了後、Windows Admin Center のクラスター マネージャーで HCI クラスターに接続し、Azure Kubernetes サービスを確認すると、ワークロード クラスターがデプロイされていることを確認できます。

まとめ

AKS ハイブリッド デプロイメント オプション (AKS ハイブリッド) を Azure Stack HCI クラスター上にデプロイするための一連の手順を説明しました。

Discussion