SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Stack HCI で Azure Kubernetes Service (AKS) を動作させる際のメモ

leave a comment

Azure Stack HCI では、 Azure Kubernetes Service (AKS) を実行することができます。

この AKS 上で、Azure Arc Enabled Data Services を動作させることもでき、展開用のテンプレートについては、Azure Data Studio でも、提供されています。
image

検証用途で自宅の NUC を使用して環境を構築できるか検証して、構築ができましたのでその際のメモを残しておこうと思います。

Azure Stack HCI は、HCI ((Hyper Converged Infrastructure) を Windows 環境で実現するものです。
標準的な HCI というと構成済みの環境をベンダーから購入して導入するイメージですが、現時点では、Azure Stack HCI Preview の登録 から、Azure Stack HCI OS (HCI OS の Previw をダウンロードして、検証環境を構築することもできるようになっていますので、検証環境を自由に構築することが可能です。

最終的に、Hyper-V のゲスト OS として、HCI クラスターを構築し、その HCI クラスター上で、Azure Arc Enabled Data Services の検証を行うことは可能でした。

image

検証に使用した環境

構成を検討すると、NUC 1 台でも構成はできそうなのですが、今回は次のような環境で構築を行っています。

AKS on HCI は検証用に 1 ノード構成もできそうなのですが、Admin Center を使用した GUI による HCI クラスターの構築が 2 ノード以上での対応だったようなので、Nested Hyper-V が利用可能な HCI OS の環境を 2 台、ゲストとして用意しています。

  • 4 Core (HT : 8 Core) / メモリ 64 GB の NUC 2 台 (Wndows Server 2019 をホスト OS として使用)
  • Nested Hyper-V が利用可能な HCI OS をゲスト OS として 2 台構築 (第 2 世代仮想マシンとして構築)
    • ゲスト OS には、それぞれ 8 コア / 44 GB のメモリを割り当て

専用の物理環境を用意することは難しいので、入れ子になった仮想化による仮想マシンでの Hyper-V の実行 による、ゲストOS 上で、Hyper-V を有効にする方法を使用しています。

AKS on HCI は、HCI OS が導入された環境に、AKS 用のゲスト OS を起動する必要があります。
Hyper-V によるゲスト OS の起動が必須となりますので、入れ子になった仮想化の構成 が有効なゲスト OS を 2 台準備する必要があります。

今回は、Azure VM のような IaaS の環境ではなく、自宅の検証環境の物理ハードウェアを使用して、Nested Hyper-V を使用していますので、ネットワークオプションについては、MAC アドレスのスプーフィングにより対応を行っています。

image

この環境を検証環境の HCI OS のベースとして活用していきます。

 

最初に確認をしておくべきドキュメント

Azure Stack HCI で AKS を動作させる場合には、Azure Stack HCI でクラスターを構築したのちに、AKS の導入を行います。

そのため、HCI と AKS on HCI の両方のドキュメントを確認しておく必要があります。
確認が必要なドキュメントには、次のようなものがあります。

Azure Stack HCI

AKS を動作させる前に、最初に Azure Stack HCI のクラスターの構築を行う必要があります。

Azure Stack HCI の基本的なドキュメントについては、Azure Stack HCI のドキュメント となり、基本的な構築方法については、このドキュメントに記載されています。

もう一つ大事なドキュメントが Azure Stack HCI の既知の問題 です。
Azure Stack HCI OS は現在、Preview  ですので、いくつかの既知の問題があり、Nested Hyper-V を使用する場合には、次の問題があるようです。

  • 入れ子になった仮想化を使用して Azure Stack HCI を評価する場合、仮想化ベースのセキュリティに対する Azure Stack HCI の依存関係が原因で、"仮想化サポートが有効になっていない Hyper-V をインストールできません" というようなエラーが表示されることがあります。 次の 2 つの回避策を使用できます。(1) Hyper-V 第 1 世代の VM を代わりに使用します。または、(2) Hyper-V 機能を VM の VHDX にオフラインで挿入します。 Azure Stack HCI ノードとして機能する各 VM の電源がオフになっている状態で、ホストから次の PowerShell コマンドを実行します。 Install-WindowsFeature -Vhd <path> -Name Hyper-V, RSAT-Hyper-V-Tools, Hyper-V-Powershell

HCI OS をインストールしたゲスト OS で、Nested Hyper-V を実現するために、Hyper-V の機能をインストールする場合、次のいずれかの方法を用いる必要があります。

  1. 第 1 世代のゲスト OS として、HCI OS のゲスト OS を作成する
  2. 第 2 世代のゲスト OS として、HCI OS のゲスト OS を準備した場合、Hyper-V のンストールは、HCI OS で使用している VHDX を、他の OS からオフラインで有効化する必要がある。

今回は、第 2 世代のゲスト OS を使用していますので、「2.」の方法でゲスト OS で Hyper-V を使用できるようにしています。

登録の前提条件 に、次の記載がありますので、そもそもとして第 2 世代 VM でないと NG な気もしますが。

Azure Stack HCI クラスターを作成しないと、Azure に登録することはできません。 ノードは物理マシンまたは仮想マシンにすることができますが、Unified Extensible Firmware Interface (UEFI) である必要があります。つまり、Hyper-V 第 1 世代の仮想マシンを使用することはできません。 Azure Arc 登録は Azure Stack HCI のネイティブ機能であるため、エージェントは必要ありません。

 

もう一つの注意点は、AKS を使用するための要件となるのですが、コンピューティングの要件 に次の記載があります。

このプレビュー リリースでは、EN-US リージョンと言語の選択を使用して、クラスター内の各サーバーに Azure Stack HCI オペレーティング システムをインストールする必要があります。現時点では、インストール後に変更しても十分ではありません。

HCI OS は日本語版を導入することもできますが、AKS を使用した際のシステム要件については、英語版の OS となっていますので、HCI OS は英語版を導入するようにしておきます。

その他のシステム要件については、Azure Stack HCI のシステム要件 から確認をして下さい。

 

AKS on Azure Stack HCI

AKS on Azure Stack HCI のドキュメントは、機能として独立したものが Azure Stack HCI の Azure Kubernetes Service のドキュメント として公開されており、AKS 部分については、このドキュメントから確認します。

AKS についても Azure Stack HCI 上の Azure Kubernetes Service のパブリック プレビューに関する既知の問題 で既知の問題が、Azure Stack HCI での Azure Kubernetes Service のシステム要件 でシステム要件 が公開されています。

HCI OS 側のドキュメントの項目でも記載しましたが、AKS on Azure Stack HCI には、

このプレビュー リリースでは、EN-US リージョンと言語の選択を使用して、クラスター内の各サーバーに Azure Stack HCI オペレーティング システムをインストールする必要があります。現時点では、インストール後に変更しても十分ではありません。

というシステム要件がありますので、HCI OS は英語版でインストールを行っておきます。

システム要件には、

Azure Kubernetes Service は、技術的には単一ノードの Azure Stack HCI Server で実行可能ですが、そうすることは推奨されません。

という記載があるため、技術的には 1 ノードの構成も可能なようです。

しかし、Admin Center で HCI クラスターを構築するときには、2 ノードが必要なようでしたので、今回は 2 ノード構成としています。

また、AKS on HCI については、AKS 用のコンポーネントが別途必要となりますので、Azure Kubernetes Service (AKS) on Azure Stack HCI Preview の登録 からダウンロードする必要があります。

その他のドキュメント

構築の検証をしていて、公式ドキュメント以外に、MS が公開している次のドキュメントも参考になりました。

Azure Stack HCI の構築や、k8s の PV 周りについて、これらのドキュメントから確認することができます。

 

Azure Stack HCI を動作させる環境

Azure Stack HCI を動作させる (HCI OS をインストールする) 環境ですが、Hyper-V 上に次の設定のゲスト OS を 2 台構築し、外部ネットワークに接続しています。

image

  • VM の世代 : 第 2 世代 VM
  • CPU : 8 コア
  • メモリ : 44 GB
  • ハードディスク : 3 台
    • 1 台は、OS の導入
    • 2 台は、記憶域スペースダイレクトで使用 (各 500GB のディスク)
  • ネットワークカード : 2 枚
    • HCI OS でクラスターを構築する際に 1 枚を管理用ネットワークに設定
    • 各 NIC は MAC アドレスのスプーフィングを有効化

この設定の HCI OS を 2 台構築します。

HCI OS はゲスト OS として構成しており、Nested Hyper-V を使用しますので、次のコマンドで仮想マシン上で Hyper-V が有効になるようにします。

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

 

今回は、第 2 世代 VM を使用していますので、既知の問題に記載があるように、Hyper-V のインストールについては、ホスト OS から次のコマンドを実行することで、ゲストの機能の有効化を行っています。

Install-WindowsFeature -Vhd <path> -Name Hyper-V, RSAT-Hyper-V-Tools, Hyper-V-Powershell

 

これで HCI OS のベース部分の環境は構成ができました。

Azure Stack HCI を動作させるために必要となる環境

次に HCI で必要となる環境を用意します。

Azure Stack HCI を動作させるためには次の環境が必要となります。

  • Active Directory
  • Admin Center
  • DHCP

クラスターを構築したり、Admin Center から管理をするためには、AD DS のドメインユーザーが必要となりますので、検証のためには、AD が必要です。

HCI OS は Server Core で動作し、GUI がありません。

GUI 管理を行うためには、Admin Center で接続を行う必要があります。

Admin Center はドメインコントローラーにはインストールすることができませんので、Admin Center 専用の環境を別途用意しています。

最後の DHCP ですが、HCI OS は固定 IP で運用できますが、AKS on HCI で構築されるゲスト OS については、現時点では固定 IP を明示的に設定することができないため、DHCP による IP 割り当てが必要となります。(AKS のロードバランサーについても DHCP からの IP 割り当てが基本動作となっていそうです)

これら、3 種類の役割を持つ環境が AKS on HCI の検証をするためには必要となりますので、今回は次のようなゲスト OS を HCI とは別に構築しています。

  • HCI-AD
    • AD DS / DHCP をインストール
  • HCI-AC
    • Hyper-V / WSFC の管理コンソールをインストール
    • Admin Center をインストール
    • Azure Data Studio をインストール
      • Arc Enabled Data Services を導入する際に使用

このような環境を作成し、関連する環境をすべて AD に参加させることで、検証環境のベースは整うかと思います。

構築時にはまったこと

HCI OS でクラスターを作成するときには、ドメイン環境を使用していれば、はまることはなかったのですが、AKS でちょいちょいはまっていましたので、その時の内容をメモとして。

HCI OS の更新プログラム

HCI OS は、Server Core の環境ですので、起動すると sconfig.exe のメニューが表示されます。

image

最初に、Windows Update による更新プログラムの適用を実施し、最新化を行ってから検証をした方がよいかと思います。

2020/12/08 時点ですと、2020/11 の更新プログラムが提供されています。

検証タイミングの最新の更新プログラムを適用してから検証を開始したほうが、スムーズに検証できます。

AKS 用のコンポーネントのバージョン

AKS 用のコンポーネントについては、Kubernetes Service (AKS) on Azure Stack HCI Preview の登録 からダウンロードできますが、「更新タイミングの最新のコンポーネント」を入手して導入して下さい。

環境を構築しているタイミングと、ダウンロードしたコンポーネントのバージョンの最新性が崩れている場合、HCI に AKS のサービスを追加する作業で、サポートしていないバージョンだというエラーが出て悩むことになります。(私は悩みました…。)

私の場合、

  • 12/1 に AKS のコンポーネントをダウンロード
  • 12/2 に環境構築を検証

していたのですが、12/2 に AKS のコンポーネントが、AKS-HCI-Public-Preview-Oct-2020.zip → AKS-HCI-Public-Preview-Dec-2020.zip に変わったようで、12/1 にダウロードしたコンポーネントで、12/2 に構築しようとしたらサポートされていないバージョンといわれて、AKS を HCI に導入することができませんでした…。

AKS の検証をする際には最新のコンポーネントをダウンロードして構築したほうが良いかと。

AKS を検証する際には Azure への登録を必ず行う

Azure Stack HCI に必要なもの に記載されていますが、Azure Stack HCI には、Azure サブスクリプションが必要です。

登録には 30 日の猶予期限がありますが、AKS の検証を行う場合には、Azure への登録は済ませておく必要がありそうです。

HCI クラスターの構築が完了したタイミングで Azure Stack HCI を Azure に接続する の作業を実施して、HCI を Azure に登録します。

HCI を Azure に登録していない状態で AKS を HCI にインストールしようとすると、ロードバランサー用の VM が構築されてすぐに削除されるというような動作が行われ、AKS をインストールすることができませんでした。

WSFC の管理コンソールからエラーを確認していたら、Azure へのと登録についてのメッセージが出力されていたので、Azure への登録後に AKS をインストールしたらスムーズに完了しましたので、Azure への登録を実施してから AKS をインストールしたほうが良いかと思います。

コマンドラインのインストールも把握しておく

NUC で切り詰めて検証をしていたので、メモリがネックになり、構築の途中でメモリが不足して、AKS 用のゲスト OS が起動できないということが多々ありました…。

AKS クラスターの削除 / AKS の削除を行うことで環境を初期化できるのですが、何回も環境を初期化していたりメモリサイズの調整を何回もしていると Admin Center の GUI での操作が面倒になっています。(Admin Center の GUI でエラーが出たことも何回かあるので、さらに面倒)

CUI でインストールする際には、次のようなコマンドを使用することでインストールできます。

AKS をインストールする、HCI クラスターのハードウェアリソースのチェックのスキップ (-skipHostLimitChecks) については、CUI による構築時にのみ、現時点では指定できますので、ハードウェアリソースが少ない環境では、CUI での構築が必要となってきます。

Set-AksHciConfig -deploymentType MultiNode `
-vnetName "ConvergedSwitch" `
-imageDir "C:\ClusterStorage\SharedDisk01\AksHCIImageStore" `
-cloudConfigLocation "C:\ClusterStorage\SharedDisk01\AksHCI" `
-nodeConfigLocation "C:\AksHci" `
-controlPlaneVmSize Standard_A2_v2 `
-loadbalancerVmSize Standard_A2_v2 `
-skipHostLimitChecks

Install-AksHci

New-AksHcicluster -clustername hci-cluster -LinuxNodeVmSize Standard_D4s_v3
Get-AksHciCredential -clusterName hci-cluster

UnInstall-AksHci

 

Admin Center で AKS のサービスをインストールする作業 (Install-AksHci 相当の作業) を実行した場合、AKS クラスターのWindows ノード用のイメージのダウンロード等も行われるのですが、CUI で実行した場合は、Install-AksHci では、AKS のサービスで必要となる Linux 用のイメージのダウンロードのみが行われますので、CUI の方が構築は高速だと思います。

Share

Written by Masayuki.Ozawa

12月 8th, 2020 at 8:47 am

Leave a Reply