はじめに
今回はIBM Cloud上のOpenShift Virtualizationを使ってCentOSを構築し、nginxをインストールしてテストページにアクセスしてみたので、その流れを整理しています。
本検証にはIBM Cloudアカウントのほか、以下の前提条件が満たしていることが前提となります。
今回記事の前提条件
- IBM Cloud CLIおよびOpenshift CLIがインストールされている
- 利用するOpenShiftクラスターが作成されている
- 今回の検証にはMacbook(MacOS)を利用しています
Openshift Virtualizationとは?
Openshift Virtualizationとは、OpenShift環境上でVMを利用することができるデフォルトの機能です。
特徴としては、LinuxのディストリビューションとWindowsのテンプレートが用意されているほか、RedHat Enterprise Linux の仮想マシンは無償・無制限で使用することができる機能です。
VMwareのコンテナ版だと考えるとイメージしやすいですが、さらに仮想マシンとコンテナの両方を統合したインフラとして、運用のしやすさがメリットとして挙げられる機能です。
また、最近のVMware社のライセンス形態が変更されたことによって、VMware(VCF)の代替案としても注目を集めています。
また、OpenShift VirtualizationをIBM Cloud上で利用するにあたって必要な条件は以下となります。
- 4.17 以降の Red Hat OpenShift on IBM Cloud クラスター
- ベアメタルワーカーノード
- オペレーティングシステムはRHCOS
- アウトバウンド・トラフィック保護が無効
- OpenShift Data Foundation(ODF)のインストール
作業の流れ
① OpenShift Virtualizationのインストール
OpenShift Virtualizationは全てOpenShiftコンソール上でインストールすることができます。
まず、OpenShiftの仮想マシンを立ち上げるため、前提条件に記載した通り作成済みのOpenShiftクラスターにアクセスし、Openshift Web コンソール
をクリックします。
OpenShift Virtualizationを利用する際の前提の通り、データの永続性のために最初にODFをインストールします。
すでに用意されているクラスターのコンソールにアクセスし、左側のOperatorHubカテゴリーにてOpenShift Data Foundation
を検索します。
ODFをインストールします。
今度は、同じ方法でOpenShift Virtualization
をインストールします。
OpenShift Virtualizationがインストールされたら、少し間を空けてHyperConverged
の作成を要求されます。こちらのHyperConvergedは仮想マシン管理機能のコンポーネントを構成・有効化するため要求されるものであり、作成が必要になります。
以下のように右上のチェックマークが入り、下のCreate HyperConverged
か活性化されたらをクリックし作成します。
作成画面が表示されたら、HyperConverged名など適宜設定します。
次はinfraとworkloadsのaffinityに関する設定を行います。ここでKeyを入力する必要がありますが、作成したクラスターのノードラベルに基づいて入力します。
今回はIBM Cloud Kubernetes Service(IKS)に自動で付与されるibm-cloud.kubernetes.io/machine-type
を入力しました。
またValuesにクラスターのプロファイルも入力します。
もし、クラスターにどんなラベルが付与されているか確認したい場合には、以下のコマンドを試してみてください。
oc get nodes --show-labels | grep ibm-cloud.kubernetes.io/machine-type
また、OpenShift Virtualizationのためのストレージとして、ODFだけではなくFile Storage for VPCを利用することもできます。もしFile Storage for VPCを利用したい場合には、こちらの手順に沿ってFile Storage for VPCをインストールください。
File Storage for VPCのみの構成でも稼働はしますが、IBM Cloudとしてはサポート外となります。そのため、上記のOpenShift Data Foundationのデプロイも必ず実施ください。
無事全てのインストールが完了したら、コンソール画面のOperator
→インストール済みのOperator
に諸々のOperatorが入っていることがわかります。
② OpenShift VirtualizationでのVM作成
OpenShift Virtualizationが無事インストールされたら、左のカテゴリーにVirtualization
が表示されるようになります。
Virtualization
→VirtualMachines
をクリックします。
なお、こちらのVirtualization
カテゴリーは前提条件の通りインストールしていない場合には表示されませんのでご注意ください。
VirtualMachines
にアクセスし、今回利用する仮想マシンを立ち上げます。
右側のCreate
→From InstanceType
をクリックします(必要に応じてテンプレートやYAMLファイルにて立ち上げることも可能です)。
仮想マシンの作成画面にてVMの設定を行います。
OSや仮想マシンのインスタンス名、CPU/Memory/Storageなどのスペックを選択し、設定が終わったら下端のCreate VirtualMachine
をクリックします。
なお、必要に応じてSSH Keyを指定することも可能でして、今回の検証にもSSH Keyを利用しています。
Public SSH Key
→Not configured
をクリックし、Public SSH Keyを登録します。
作成ページにて作成ボタンをクリックすると、仮想マシンはすぐに立ち上がって稼働開始します(Status : Running)。環境にもよるかと思いますが、私の環境では約5秒ぐらいですでに稼働を始めていました。
これで仮想マシンの立ち上げは完了です。
③ 仮想マシンにログイン
次は仮想マシンにログインし、テストページを表示させます。
コンソール右上のアカウント
→ログインコマンドのコピー
をクリックします。
Display Token
をクリックします。
ログイントークンをコピーします。
ターミナルを開き、コピーしたログイントークンを入力します。
moonsy@moon ~ % oc login --token=sha256~xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx --server=https://xxxxxxxxxxx.xxxxxxxxxxx.xxxxxxxxxxx.cloud.ibm.com:xxxxx
Logged into "https://xxxxxxxxxxx.xxxxxxxxxxx.xxxxxxxxxxx.cloud.ibm.com:xxxxx" as "IAM#xxxxxxx@xxxxx.com" using the token provided.
You have access to 70 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
次はKubernetes上で仮想マシンを運用できるコマンドであるKubeVirt(virtctl)
をインストールします。
Macの場合以下のコマンドを利用しますが、検証時点での最新版はv1.4.1でした。
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/$1.4.1/virtctl-$1.4.1-darwin-amd64
moonsy@moon ~ % curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/$1.4.1/virtctl-$1.4.1-darwin-amd64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9 100 9 0 0 35 0 --:--:-- --:--:-- --:--:-- 35
もしくは、コンソール右上の?
→コマンドラインツール
からもインストール可能です。
virtctlコマンドが使えるようになったら、次は以下のコマンドにて仮想マシンにログインします。
virtctl ssh --namespace default --username {選択したOS} {仮想マシン名}
usernameは基本的に選択したOS名になっているため、そのまま入力したら問題ないかと思います。今回はCentOSにしているので、usernameもcentos
でした。
moonsy@moon ~ % virtctl ssh --namespace default --username centos moon-test
Enter passphrase for key '/Users/moonsungyun/.ssh/id_rsa':
Last login: Mon May 26 07:20:57 2025 from xxx.xx.xxx.xxx
[centos@moon-test ~]$
仮想マシンへのSSHログインは以上です。
④ nginxのインストール
仮想マシンにログイン後、以下のコマンドでnginxをインストールします。
sudo yum install -y nginx
[centos@moon-test ~]$ sudo yum install -y nginx
CentOS Stream 10 - BaseOS 7.7 MB/s | 6.6 MB 00:00
CentOS Stream 10 - AppStream 8.0 MB/s | 3.2 MB 00:00
CentOS Stream 10 - Extras packages 30 kB/s | 6.1 kB 00:00
Dependencies resolved.
============================================================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================================================
Installing:
nginx x86_64 2:1.26.3-1.el10 appstream 33 k
Installing dependencies:
centos-logos-httpd noarch 100.2-3.el10 appstream 855 k
nginx-core x86_64 2:1.26.3-1.el10 appstream 662 k
nginx-filesystem noarch 2:1.26.3-1.el10 appstream 12 k
Transaction Summary
============================================================================================================================================================================
Install 4 Packages
Total download size: 1.5 M
Installed size: 3.2 M
Downloading Packages:
(1/4): nginx-1.26.3-1.el10.x86_64.rpm 230 kB/s | 33 kB 00:00
(2/4): nginx-filesystem-1.26.3-1.el10.noarch.rpm 694 kB/s | 12 kB 00:00
(3/4): nginx-core-1.26.3-1.el10.x86_64.rpm 2.8 MB/s | 662 kB 00:00
(4/4): centos-logos-httpd-100.2-3.el10.noarch.rpm 2.8 MB/s | 855 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 3.6 MB/s | 1.5 MB 00:00
CentOS Stream 10 - AppStream 959 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial-SHA256
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: nginx-filesystem-2:1.26.3-1.el10.noarch 1/4
Installing : nginx-filesystem-2:1.26.3-1.el10.noarch 1/4
Installing : nginx-core-2:1.26.3-1.el10.x86_64 2/4
Installing : centos-logos-httpd-100.2-3.el10.noarch 3/4
Installing : nginx-2:1.26.3-1.el10.x86_64 4/4
Running scriptlet: nginx-2:1.26.3-1.el10.x86_64 4/4
Installed:
centos-logos-httpd-100.2-3.el10.noarch nginx-2:1.26.3-1.el10.x86_64 nginx-core-2:1.26.3-1.el10.x86_64 nginx-filesystem-2:1.26.3-1.el10.noarch
Complete!
インストールが完了したら、次は以下のコマンドにてnginxを起動します。
sudo systemctl enable --now nginx
[centos@moon-test ~]$ sudo systemctl enable --now nginx
Created symlink '/etc/systemd/system/multi-user.target.wants/nginx.service' → '/usr/lib/systemd/system/nginx.service'.
最後にnginxの状態を確認するために、以下のコマンドを入力します。
sudo systemctl status nginx
[centos@moon-test ~]$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-05-26 07:31:32 EDT; 7s ago
Invocation: d6e41f5de0d346c18dfb263ff295a89a
Process: 4572 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 4574 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 4576 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 4577 (nginx)
Tasks: 2 (limit: 22860)
Memory: 2.4M (peak: 2.9M)
CPU: 25ms
CGroup: /system.slice/nginx.service
├─4577 "nginx: master process /usr/sbin/nginx"
└─4579 "nginx: worker process"
May 26 07:31:32 moon-test systemd[1]: Starting nginx.service - The nginx HTTP and reverse proxy server...
May 26 07:31:32 moon-test nginx[4574]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
May 26 07:31:32 moon-test nginx[4574]: nginx: configuration file /etc/nginx/nginx.conf test is successful
May 26 07:31:32 moon-test systemd[1]: Started nginx.service - The nginx HTTP and reverse proxy server.
これで無事nginxがインストールされ、問題なく起動されていることがわかります。
次の操作のためexit
コマンドにて仮想マシンから出てローカルに戻ります。
[centos@moon-test ~]$ exit
logout
Connection to vmi/moon-test.default closed.
moonsy@moon ~ %
⑤ ServiceとRouteの作成
nginxのインストールが完了したら、次は以下のコマンドにてnginxにアクセスするためのServiceとRouteを作成します。今回サービス名は任意でnginx
、ポート番号は27017
、ターゲットポート番号は80
にしています。
virtctl expose vmi {仮想マシン名} --name {Service名} --port {ポート番号} --target-port {ターゲットポート番号}
moonsy@moon ~ % virtctl expose vmi moon-test --name nginx --port 27017 --target-port 80
Service nginx successfully exposed for vmi moon-test
以下のコマンドにて、Serviceが作成されていることを確認します。
Cluster IPは後ほどページ確認の際に利用するため、メモしておいてください。
oc get svc
moonsy@moon ~ % oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP 172.xxx.xxx.xx <none> 27017/TCP 2m
oc get route {Service名}
moonsy@moon ~ % oc get route nginx
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
nginx nginx-default.openshiftvirt-417-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.ca-tor.containers.appdomain.cloud nginx 80 None
Serviceが問題なく作成されたら、次は以下のコマンドを使ってRouteを作成し、HTTPベースで外部に公開します。
oc expose svc/{Service名}
moonsy@moon ~ % oc expose svc/nginx
route.route.openshift.io/nginx exposed
⑥ 結果確認
最後に外部公開したnginxを確認しますが、以下三つの方法で確認します。
まずは上でRouteを作成して外部向けのエンドポイントを作成しているので、直接そちらにアクセスすることができます。
oc get route nginx
で取得したHOST/PORTの内容を確認し、前方にhttp://
をつけてアクセスします。
http://nginx-default.openshiftvirt-417-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0000.ca-tor.containers.appdomain.cloud
次の方法は仮想マシンにログインしてnginxを確認します。
仮想マシンにログイン後、ServiceとRoute作成後に取得したCluster IPの172.xxx.xxx.xx
と任意のポート番号27017
を使います。
以下のコマンドを入力すると、HTTP形式でページが表示されることがわかります。
curl {Cluster IP}:{ポート番号}
curl http://172.xxx.xxx.xx:27017
<!DOCTYPE html>
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.8.0" />
<title>HTTP Server Test Page</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<link rel="shortcut icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAB2lBMVEVHcEyhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4yhT4z///+mWJKgTouhTozZuNDr2eb//v/ImLyfTIr17fO+ha/vpyT+/f6gTYukVZCmWZKlU4fYt9ClVpGlV5HHl7v2zIHlzt/7683++O779/rvpiLelDupX5bq2Obu4Ovs2+f0wmbwqCOgTYrTrMn9/P3AirP99un0wmf9+/zYts/8+vy7f6z69vnUr8ueSYi0c6OeSoijUo7vpSDvpiDytkr38PXJmr2fS4qybqHt3env4OvKnL6uZ5ufS4nq1+Xp1uTbu9KkUoilVIepXI6lU4X0wmjekznflTnvqCXxrS/wqCLfmEf63aX31pjrzLn///2kVI/+/P3+/v+/hrD58/fHlrqhTov99uj0w2nwqy348fb87dLs2+j++O/87NC+hrD0wWX48vbRhUzxqSH69fmqYZfxsDr++/bP99evAAAANXRSTlMAAvJs9o3mb8v84eALums0oF0l6HzjFTfk4ix4XDrzvyu7JhNtvKQM6RJ3/jsUwPS9MjMq5z2a768AAAAJcEhZcwAALz4AAC8+AZ80I6wAAANMSURBVEjHlZZnV+JAFIYD0gTFrtjWsqvb++aCIt0Gogg2EHvD3nXtvfe6bv2vO8kEkhDgHO4XMjfvk8PMvHPvEERYJH1WpypkEpKUyBTlCSkvidhRKk/+lkiGIvFViTw9hjxPqiQFoZIWR5FnZ2aREUOZ/zyS/t0HMmqU5QjkojQNV6GrrtZxx7kFojD9CzFPX1NXV8MjxAkivv4jT6+tBKjU8ohnPKJAHKavAqgKI8RprD4nF+cq6LDReiGhKQzq33/CmXotFXYP0vcNDPQhYnWtFsXKd/y+KJsB8hn9cpseRUurFWBweHgQ4ORgd8Ptdm/+ZIhMrC/G21uhbYNQOEZGHOjncG97p6Pj1+YKBrLyaEDKTECrRxLXGQ0YjEYD/bC/ZbF0uGuZaUgpfbqKA/w+PzVxga51CxdQliJATrKA65y0mU0s0NXdbLFs7YQAUo78n8wBzk5tpI4i5qam5gAukb55fX97IwQkJxFfMoKAvQXAZNaRtscnmJmenoH7K6Tv7oK93bUgkJFCJATPi83TChRh09WjyczOAjxcN1N6ODxYDe5gopooZ/1gpaZpeqz/c4fX9vbv9dUl9XDC7nkqoeD6h4on/Z0LGpuaGuHf7cM9zrEuURCyMD2Ohh/tDdxxiJAREux/yj+DDoPBMDcD0NgwPjo63tAIsDSJUo5eKyLw+ZAQNFddh74yMDxiNBqnpmehqX3MYhlrb4LF+QWUGurvQa/rqmlp/EDcfynuSQuWdcLpvMHLeuN0TgiXNTV848wBuxPLnPYA7USwcjdOHW4N3UUAAYuLCAhc0E6EVo+NtUaKwHw68wQszc8vwQQ9QESLvYI1H8/eLr8XSyYXFiYx7vW7QK+tYO3NO0CdviMv9wCZzN4jXycHkFMtQck5osc+P++Imvy+Y2ABVbqgCHS6+EXA1QkcQIrbSFaEMjM05GBHbQygZFpLprCQ9fb396L1b22hMm3L9ViRH2w9RYJSae3pofzjsdMpRl8WakSFmijF2IYzTFPhtKG0OMs9IUp4Fl9DQUR8LQsRBbmxmqImTSToozklb6O23aLCSI369RtVZHlWZnaUu8BXqSrS1SEvxm0jXZ6cEcflhL7+pLDXn1S18PrzH6q3ssF28EqqAAAAAElFTkSuQmCC" />
<style type="text/css">
/*<![CDATA[*/
/*!
* The CentOS HTTP Server Test Page
* Copyright 2021 Alain Reguera Delgado
* Licensed under CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
*/
@charset "UTF-8";
/*!
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
.
.
.
(省略)
.
.
.
<footer class="footer small bg-dark bg-image text-light">
<div class="container border-5 border-top border-primary">
<div class="row mt-4">
<div class="lead">
HTTP Server Test Page
</div>
</div>
</div>
<div class="container py-1">
<div class="row my-3">
<div class="col">
<span>Copyright ©</span> <span>2024</span> <span>The CentOS Project</span> <span class="border-start ms-2 ps-2"><a class="link-light link-offset-3 link-underline-opacity-25 link-underline-opacity-100-hover link-underline-light" href="https://www.centos.org/legal">Legal</a></span> <span class="border-start ms-2 ps-2"><a class="link-light link-offset-3 link-underline-opacity-25 link-underline-opacity-100-hover link-underline-light" href="https://www.centos.org/legal/privacy">Privacy</a></span> <span class="border-start ms-2 ps-2"><a class="link-light link-offset-3 link-underline-opacity-25 link-underline-opacity-100-hover link-underline-light" href="https://git.centos.org/centos/centos.org">Site source</a></span>
</div>
</div>
</div>
</footer>
</body>
</html>
[centos@moon-test ~]$ exit
logout
Connection to vmi/moon-test.default closed.
最後の方法は、ローカルポートフォワードをしてブラウザGUIで確認する方法です。
上記の通りアカウント制限上直接ブラウザにて確認することはできないですが、ポートフォワード機能を利用することで一時的にテストページにアクセスすることが可能となります。
ローカルマシンにて以下のコマンドを入力します。
oc port-forward svc/{Service名} 21017:27017
moonsy@moon ~ % oc port-forward svc/nginx 21017:27017
Forwarding from 127.0.0.1:21017 -> 80
Forwarding from [::1]:21017 -> 80
このままlocalhostでURLにてアクセスすると、ターミナルではForwarding
に次いでHandling
メッセージが追加され、ブラウザではテストページが表示されます。
http://localhost:21017
moonsy@moon ~ % oc port-forward svc/nginx 21017:27017
Forwarding from 127.0.0.1:21017 -> 80
Forwarding from [::1]:21017 -> 80
Handling connection for 21017
Handling connection for 21017
参考
IBM Cloud Docs - Red Hat OpenShift on IBM Cloud クラスタに OpenShift Virtualization Operator をインストールする