オンプレOpenShiftのインストール練習を爆速で回す!環境構築・破棄ツール ocp_create_vm の紹介 – 赤帽エンジニアブログ


はじめまして、Red HatでOCPとかAnsibleのコンサルタントをやっているワタナベです。

この記事では自分が作成したOpenShift Container Platform (OCP) の環境構築練習ツール ocp_create_vm を紹介します。
これはOpenShiftインストールを練習するための「OpenShift Node(Cluster VM/ISOマウントして起動)」と「周辺環境(Bastion VM/デフォルトはCentOS Stream9が起動)」をお手軽に払い出すAnsible Roleとそれを便利に使うスニペットをまとめたリポジトリです。

gitlab.com

OpenShift構築の学習や検証において、一番のハードルは「OpenShiftそのもの」よりも、「インストールを試すための土台(マシンの払い出し)の準備」 にあると感じたことはないでしょうか?

例えば、あなたはオンプレミス OCP構築担当としてプロジェクトにアサインされた新人メンバだとします。そうすると、自ずとこんなことになってしまうでしょう。

検証用にサーバー1台もらったからOpenShift入れてみようかな……あーでも、とりあえずSNO(シングルノードOpenShift)で組んだとしても、ノード落ちた時のテストとかできないか。本番インストール方法とも違うし、インストールの練習にもならないしなぁ。
じゃあマルチノードで練習するなら、サーバーにVM環境立てなきゃいけないってことか。いやでも、OpenShift入れたいだけなのに、わざわざその下の仮想基盤の構築から勉強してる時間なんてないって。
結局、本番はぶっつけでやるしかなさそうだから、それまではドキュメントベースの机上検証にしとくか。。。
ごめんね! アプリチーム!作った基盤でアプリのnodeダウンテストをしたいっていったけどOpenShift localとかで我慢して!

とかとか。いや、OpenShift localが良くないわけじゃないんですけど、複数nodeで動作したときの挙動とかnode障害テストをしたいってときにちょっと物足りなさはあったりします。

このツールは、そんな問題「複数nodeを前提としたオンプレミスOpenShiftのインストール手順(Agent-based Installer や Assisted Installer)を何度も練習したい。ついでにいうなら失敗して壊れてもささっと作り直しをして検証したい」 というニーズに特化した、環境構築・破棄の自動化ツールです。

一言で言うと、OpenShiftインストールを練習するための「OpenShift Node(VMスペック定義/ISOマウントして起動)」と「周辺環境(Bastion VM)」を一本で払い出すAnsible Roleとそれを便利に使うスニペットをまとめたリポジトリです。
裏側ではTerraformが動いていますが、Ansibleでラッピングしているため、ユーザーがTerraform(HCL)を記述する必要はありません。AnsibleのPlaybookを実行するだけで、以下のサイクルを高速に回すことができます。

  1. 環境構築(Bastion VM)
  2. Bastionインストール
  3. OpenShiftインストール→ISO作成
  4. 環境構築(Cluster VMs)
  5. OpenShift設定/Operator検証
  6. 環境破棄(Destroy)
  7. → 1に戻る

まず、RHEL9系のLinuxマシンを用意します。その後、AnsibleとかTerraformとかKVMのセットアップをして・・・ってめんどくせー!

curl -fsSL https://gitlab.com/tawatana/ocp_create_vm/-/raw/main/setup-host.sh | sh

これでできます。とりあえずクリーンインストールしたRHEL9にrootアカウントでこれを実行したらおまかせで全部入ります。

なに?物理マシンも持ってない?そんな人にはこれ!

お手元のmacとかWSLにansibleをインストールしてこのplaybookを実行してください。AWSにAnsibleとかTerraformとかKVMがいい感じにセットアップされたベアメタルインスタンスがご飯食べてる間に払い出されます。もちろんAWS環境丸ごと削除するplaybookも入ってるのでお片付けも簡単です。
(※AWSのベアメタルインスタンスは料金が高めなので、検証が終わったら必ず削除Playbookを実行してください!)

さてさて、これでKVMホストは用意できましたね。じゃあ「Step 1: Bastion(踏み台)の作成」を実施します。

これより後ろはAgent-based方式をサンプルに使い方を案内します。

Step 1: Bastion(踏み台)の作成

KVMホストで次のPlaybookをrootで実行します。

# create_bastion.yml
---
- name: Create bastion
  hosts: localhost

  tasks:
    - name: Create bastion
      ansible.builtin.import_role:
        name: ocp_create_vm
      vars:
        ocp_create_vm_create_bastion: true
        ocp_create_vm_ocp_network_mode: "nat"

実行方法

ansible-playbook create_bastion.yml

実行後、KVMホスト上に以下の構成でネットワークとVMが作成されます。

KVM HOST NIC
     │ 
default (192.168.122.0/24)(デフォルトゲートウェイ経由でインターネット接続可)
     │
bastion01
├── NIC 1: default (192.168.122.10)
└── NIC 2: openshift_network
     │
openshift_network (192.168.10.0/24)(デフォルトゲートウェイ経由でインターネット接続可)
     │

もし、ProxyやDisconnectedの練習がしたかったら「ocp_create_vm_ocp_network_mode: “nat”」を削るとデフォルト値の「ocp_create_vm_ocp_network_mode: “none”」が適用され、OCP VMがデプロイされるネットワークは疎通ができない構成になります。

bastionのログイン情報はplaybookに記載されます(Ansibleの変数変えてなかったらこれがデフォルトです。)

TASK [ocp_create_vm : Display login info] 
ok: [localhost] => {
    "msg": [
        "VM Connection Information",
        "IP Address : 192.168.122.10",
        "User       : rhel",
        "Password   : redhat"
    ]
}

これで、bastionサーバの構築は完了です。対象サーバにログインしていろいろインストール&設定しましょう!

# ssh rhel@192.168.122.10
rhel@192.168.122.10's password: 
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon Dec  1 03:42:06 2025 from 192.168.122.1
[rhel@bastion0 ~]$ sudo -i
[root@bastion0 ~]# dnf install xxx

Step2: Bastionインストール

BastionサーバにはOpenShiftインストールに必要なコンポーネントやCLIを設定します。
何をインストールするかは環境ごとに一概には言えませんが、4.20のAgent-based installerなら以下ドキュメントを見ることになります。

docs.redhat.com

DNSとかロードバランサーとかProxyでのクラスタ構築とかとか・・・え、めんどい・・・?
じゃあ、これで一発構築できます。Bastionサーバのrootで実行してください。

curl -fsSL https://gitlab.com/tawatana/ocp_create_vm/-/raw/main/examples/helper_node.sh | sh

詳細はスクリプトの中身をみてもらうとして、
いろんな構成に対応するためproxyとかntpも入っていますがOCP側で参照するように設定しなければ悪さはしません。
openshift-installのstable最新も入ってるのでAgent-based方式のISO作成もできます。

Step 3,4: ISOの準備とCluster VMの作成

4.20のAgent-based installerなら以下ドキュメントをみてISOファイルを生成するためのYAMLを作ってください。

docs.redhat.com

これも面倒・・・?はい。これも自動化のスクリプトを作ってます。Bastionサーバのrootで実行してください。
3 Control plane, 3 workerのサンプルyamlをベースにしたISOが作成されます。
(インストールの練習のためにもスクリプトの中身はぜひ読んでください!)

curl -fsSL https://gitlab.com/tawatana/ocp_create_vm/-/raw/main/examples/create_ocp4_iso.sh | sh

ISO作成後、KVMホストの/terraform/agent.x86_64.isoにISOをコピーして、以下playbookを実行してください。

# create_cluster.yml
---
- name: Create cluster
  hosts: localhost

  tasks:
    - name: Create cluster
      ansible.builtin.import_role:
        name: ocp_create_vm
      vars:
        ocp_create_vm_create_cluster: true
        ocp_create_vm_cluster_os_image_path: "/terraform"
        ocp_create_vm_cluster_os_image_name: "agent.x86_64.iso"
        ocp_create_vm_cluster_master_count: 3
        ocp_create_vm_cluster_worker_count: 3

実行方法

ansible-playbook create_cluster.yml

実行後、KVMホスト上に追加でOpenShift VMが作成されます。

KVM HOST NIC
     │ 
default (192.168.122.0/24)(デフォルトゲートウェイ経由でインターネット接続可)
     │
bastion01
├── NIC 1: default (192.168.122.10)
└── NIC 2: openshift_network
     │
openshift_network (192.168.10.0/24)(デフォルトゲートウェイ経由でインターネット接続可)
     │
     ├── master0
     ├── master1
     ├── master2
     │
     ├── worker0
     ├── worker1
     ├── worker2

Step 5: OpenShift設定/Operator検証

ここまで来たら普通のOpenShiftのインストールと同じです。
bastionサーバーでopenshift-install --dir agent wait-for install-completeとか眺めてログイン情報が出力するまで待ちましょう。

Step 6: 環境破棄(Destroy)

検証が終わったり、インストールに失敗してやり直したい場合は以下Playbookを実行すればきれいに削除されます。

# destroy_all.yml
---
- name: Destroy Cluster and bastion
  hosts: localhost

  tasks:
    - name: Destroy all
      ansible.builtin.import_role:
        name: ocp_create_vm
      vars:
        ocp_create_vm_destroy_all: true

実行方法

ansible-playbook destroy_all.yml

以上がベーシックな使い方です。

bondingとかmultusを試したい場合

例えば、OCPをbondingでnic2つ構成にして、Virtのためにもう1本、合計3本のnicを接続したOCPを構築したいとします。
もちろんその構成のデプロイも対応してます。create_cluster.ymlの隣にocp_create_vm roleディレクトリをおいてdefaults/main.ymlを編集してみましょう。

.
├── create_cluster.yml
└── ocp_create_vm/
    └── defaults/
        └── main.yml

54行目あたりからこんなふうに編集

# クラスタ構成情報
ocp_create_vm_cluster_master:
  - name: master0
    cpu: "{{ ocp_create_vm_cluster_master_vcpu }}"
    memory: "{{ ocp_create_vm_cluster_master_memory }}"
    disk:
      - "{{ ocp_create_vm_cluster_disk_size }}"
    mac_address:
      - "52:54:00:26:a1:10"
      - "52:54:00:26:a2:10"
      - "52:54:00:26:a3:10"
#      - "52:54:00:26:a4:10"

これで、OCP VMに3本結線され、openshift_networkに接続されるようになりました。簡単ですね。

OpenShift Virtualizationを試したい場合

これはサポートされない構成になってしまうのですが、セットアップスクリプトでKVMホストを構築した場合、Nested KVMが有効になっています。
これで多段VMが可能になるので、KVM上で作ったOCPの上でOpenShift Virtualizationが動作するようになります。とりあえず試してみる程度なら十分利用できます。

このツールは、特に以下のような方に刺さると思います。

  • OpenShiftのインストールを練習したい人: Agent-based Installer や Assisted Installer の挙動を何度も確認したい方。
  • インストールの仕組みを深く理解したい人: どのタイミングで何が必要なのか、試行錯誤しながら学びたい方。
  • インストール手順書を作りたい人: 何度も「更地」に戻せるため、再現性のある手順作成に最適です。
  • OpenShift上のアプリ/設定手順を作りたい人: クラスター自体を使い捨てにできるため、常にクリーンな環境で検証できます。
  • Virtをとりあえず試したい人: Nested KVM環境で動作確認が可能です。

詳細なセットアップ方法やコードはGitLabで公開しています。 ぜひ試してみてください。
最後に当たり前のことになるんですが、このコードは個人開発で書かれたものですのでRed Hatがサポートすることはできません。あしからず。

とりあえず動くOCPが自動でできてほしいというわがままな方! 実は私がRoleのテスト用に書いたスクリプトがあります。

ansible-galaxy role install git+https://gitlab.com/tawatana/ocp_create_vm.git --force
git clone --depth 1 https://gitlab.com/tawatana/ocp_create_vm.git
cd ocp_create_vm/examples
# Copy from https://cloud.redhat.com/openshift/install/pull-secret
vi $HOME/openshift-pull-secret
sh provision-openshift.sh

これで先程の手順のstep4まで自動でやってくれます。楽ちんですね。中でどんなことをやってるか読み解けばいろいろカスタムとかインストールの自動化の理解ができるかと思います。




元の記事を確認する

関連記事