NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

CAPX で Kubernetes 環境構築してみる。Part-01

CAPX(Cluster API Provider Nutanix Cloud Infrastructure)で、Nutanix CE に Kubernetes 環境を構築してみます。

入口はこちら。

今回は、CAPX で使用する Kubernetes ノード仮想マシンのイメージを作成します。

イメージ作成の手順は、下記が参考になります。

今回の内容です。

今回の環境

CAPX では、Prism Central が必要になります。今回は下記のように、Nutanix CE 上に Prism Central を用意してあります。

仮想マシン イメージ作成の作業マシンとして、Linux マシンを使用しました。今回は、Oracle Linux 8 を使用しています。

[root@lab-capi-01 ~]# cat /etc/oracle-release
Oracle Linux Server release 8.9

1. 仮想マシン イメージ作成の環境準備

まずは、前提となるパッケージをインストールしておきます。

# dnf install git make jq unzip python3.11 python3.11-pip -y

GitHub から、Cluster API 用の仮想マシン イメージを作成する Image Builder のリポジトリをダウンロードします。

# git clone https://github.com/kubernetes-sigs/image-builder.git

ディレクトリを移動します。

# cd image-builder/images/capi/

Nutanix AHV むけのイメージを作成するための環境を準備します。この make コマンドで、Ansible や Packer がインストールされます。

# make deps-nutanix

ansible の自動インストールが失敗した場合の対応

ansible がインストールされていないという Warning が表示された場合は、手動で Ansible をインストールしておきます。

# pip3 install ansible
# export PATH=/root/.local/bin:$PATH

ansible を手動で追加インストールした場合は、ansible コマンドが実行できるようになったことを確認しておきます。

# ansible --version
ansible [core 2.16.1]
  config file = /root/image-builder/images/capi/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /root/.local/lib/python3.11/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /root/.local/bin/ansible
  python version = 3.11.5 (main, Nov 15 2023, 18:13:17) [GCC 8.5.0 20210514 (Red Hat 8.5.0-20.0.1)] (/usr/bin/python3.11)
  jinja version = 3.1.2
  libyaml = True

Ansble を手動インストールした場合は、make deps-nutanix を再実行して、Warning が表示されずに、処理が完了することを確認します。

$ make deps-nutanix

2. 仮想マシン イメージの作成

イメージを作成する環境を定義する JSON ファイルを作成します。これのファイルは直前の make コマンドで用意されますが、デフォルトでは、なにも定義されていません。

# cat packer/nutanix/nutanix.json
{}

このファイルは、下記のように記載します。nutanix_subnet_name に指定する AHV ネットワークでは、IPAM を有効にしておきます。これは、このマシンから、イメージ作成中に起動される仮想マシンにアクセスできるように、IP アドレス プールやデフォルト ゲートウェイを設定しておきます。

{
  "nutanix_endpoint": "Prism Central IP / FQDN",
  "nutanix_port": "9440",
  "nutanix_insecure": "true",
  "nutanix_username": "Prism Central Username",
  "nutanix_password": "Prism Central Password",
  "nutanix_cluster_name": "Prism Element Cluster Name",
  "nutanix_subnet_name": "AHV Subnet Name"
}

今回は、下記のようにパラメータを設定しています。

{
  "nutanix_endpoint": "lab-nxpc-01.go-lab.jp",
  "nutanix_port": "9440",
  "nutanix_insecure": "true",
  "nutanix_username": "admin",
  "nutanix_password": "パスワード",
  "nutanix_cluster_name": "lab-nxce-01",
  "nutanix_subnet_name": "nw-vlan-12"
}

下記の make コマンドを実行して、仮想マシン イメージをビルドします。今回は、Ubuntu 2204 の仮想マシンです。

# make build-nutanix-ubuntu-2204

処理中に、イメージ サービスに Ubuntu のディスク イメージ(jammy-server-cloudimg-amd64.img)が登録されます。

このディスク イメージから仮想マシン(ubuntu-2204-kube-v1.26.7)が作成 → 起動されて、Packer や Ansible によってゲスト OS が Kubernetes ノード用に準備されたディスク イメージが作成されます。

ゲスト OS の準備が終わると、最終的にイメージ サービスにディスク イメージ(ubuntu-2204-kube-v1.26.7)が登録されます。そして、この元になる仮想マシンは削除されます。

ビルド処理が成功すると、最終的に下記のように表示されます。

==> Wait completed after 10 minutes 15 seconds

==> Builds finished. The artifacts of successful builds are:
--> nutanix: ubuntu-2204-kube-v1.26.7
--> nutanix: ubuntu-2204-kube-v1.26.7

これで、CAPX 用の仮想マシン イメージが作成されました。

つづく。

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。