コンテナ技術とKubernetesを基盤としたアプリケーション開発は急速に普及し、その中でもエンタープライズ向けのプラットフォームとしてOpenShiftが注目されていますが、最小構成を構築する場合もそこそこ良いスペックのノードが複数必要となり、気軽に試すには少々ハードルが高いと思います。
そんな方におすすめなのが「Red Hat OpenShift Local」というものです。これは、1台のサーバ上でOpenShiftクラスタを手軽に動作させることができる開発・検証向けの環境であり、OpenShiftの機能や操作感を再現できます。
本記事では、OpenShift Localを実際にセットアップし、基本的な動作確認やWebコンソールへのアクセス方法、OpenShiftクラスタの停止方法を紹介します。これからOpenShiftに触れてみたい方や、検証環境を手軽に構築したい方の参考になれば幸いです。
サーバ要件
OpenShift Localを試すサーバの要件を記載します。本記事ではRHEL 9を使用してOpenShift Localを構築します。
- OS: Linux, macOS, Windows
- 最小スペック(プリセットがopenshiftの場合)
- CPU: 4
- メモリ: 10.5 GB
- ディスク: 35 GB
OpenShift LocalのCLIツールのダウンロード
はじめにRed Hat Customer Portal(https://access.redhat.com)にアクセスし、OpenShift LocalのCLIツール crcを取得します。Red Hatアカウントが無い場合は作成してください。
Customer Portalにログイン後、画面上部にある[Red Hat Console]をクリックします。その後、Red Hat Hybrid Cloud Console上に表示されているRed Hat OpenShiftを選択します。
OpenShiftクラスタの種類を選択する画面で、Red Hat OpenShift Container Platformの[Create cluster]をクリックします。

OpenShift LocalのCLIツールおよびプルシークレットをダウンロードします。プルシークレットとは、コンテナイメージをダウンロードするための認証情報で、CLIツールを用いた後述の作業で必要になります。

OpenShift Localの構築
前章でダウンロードしたCLIツールとプルシークレットを使用して、OpenShift Localを構築します。
CLIツールの準備
CLIツール(本記事ではcrc-linux-amd64.tar.xz)とプルシークレット(pull-secret.txt)をインストール先サーバ(RHEL 9)の任意のディレクトリ(本記事では~/ocp)に格納し、CLIツールを含む圧縮ファイルを解凍します。
|
1 2 3 4 5 |
$ cd ~/ocp $ tar xvf crc-linux-amd64.tar.xz crc-linux-2.60.1-amd64/ crc-linux-2.60.1-amd64/LICENSE crc-linux-2.60.1-amd64/crc |
OpenShift LocalのCLIツールcrcが展開されるのでPATHを通します。本記事では、crcを/usr/local/bin/にコピーすることでPATHを通しています。
|
1 2 3 |
$ sudo cp crc-linux-2.60.1-amd64/crc /usr/local/bin/ $ which crc /usr/local/bin/crc |
crcコマンドが動作するかバージョンを確認してみます。
|
1 2 3 4 |
$ crc version CRC version: 2.60.1+701ff9 OpenShift version: 4.21.8 MicroShift version: 4.21.0 |
コンフィグの設定
crcコマンドの準備ができたら、OpenShift Localのコンフィグを一部編集します。
プリセットを設定します。デフォルトがopenshiftのため、okdまたはmicroshiftを選択しない場合は実施不要です。
|
1 |
$ crc config set preset openshift |
ネットワークモードを設定します。デフォルトではuser-modeですが、OpenShift Local上のアプリケーションを外部公開(別端末からアクセス)する場合は、system-modeの方が適切です。後ろの章でWebサーバであるNGINXをデプロイし、別端末からのアクセスを試すため、ここではsystem-modeを選択しておきます。
|
1 |
$ crc config set network-mode system |
OpenShift Localのコンフィグには、CRC VMに割り当てるリソース(CPU/メモリ)など、他にも環境に合わせて編集できるパラメータがあります。編集できるパラメータはcrc config --helpコマンドで確認できます。
パラメータによっては、次節のcrc setupコマンドを実行する前に設定する必要があります。OpenShiftの構築後に当該パラメータを変更したい場合は、既存のOpenShift環境の削除および再構築が必要になる場合があります。本節で設定したパラメータの場合、プリセットの変更にはOpenShiftの再構築が必要です。ネットワークモードの変更には、OpenShiftの再構築は必須ではありませんが、一部のネットワーク設定に変更が入り、それに応じた更新作業が必要になります。
OpenShift Localの構築・起動
パラメータの編集ができたら、OpenShift Localを構築・起動します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ crc setup # Initialize environment for cluster $ crc start --pull-secret-file pull-secret.txt # Start the cluster INFO Using bundle path /home/ocpuser/.crc/cache/crc_libvirt_4.21.8_amd64.crcbundle INFO Checking if running as non-root INFO Checking if running inside WSL2 ...(省略)... INFO Operators are stable (3/3)... INFO Waiting until the user's pull secret is written to the instance disk... INFO Adding crc-admin and crc-developer contexts to kubeconfig... Started the OpenShift cluster. The server is accessible via web console at: https://console-openshift-console.apps-crc.testing Log in as administrator: Username: kubeadmin Password: im3zx-UpP5X-DYWTY-VXQ8z Log in as user: Username: developer Password: developer Use the 'oc' command line interface: $ eval $(crc oc-env) $ oc login -u developer https://api.crc.testing:6443 |
crc statusコマンドを実行し、ステータスを確認します。
|
1 2 3 4 5 6 7 |
$ crc status CRC VM: Running OpenShift: Running (v4.21.8) RAM Usage: 6.269GB of 10.95GB Disk Usage: 26.89GB of 32.68GB (Inside the CRC VM) Cache Usage: 31.52GB Cache Directory: /home/ocpuser/.crc/cache |
CRC VMとはOpenShiftクラスタが動いている仮想マシンのことです。つまり、crc startコマンドによってRHEL 9の上にCRC VMが作成され、その中でOpenShift Localが動いている状況です。
Webコンソールにアクセス
OpenShiftはWebコンソールを提供しており、crc startコマンドの実行結果に記載されているURLhttps://console-openshift-console.apps-crc.testingにブラウザからアクセスすると、OpenShiftのWebコンソールにログインできます。ログイン情報はcrc startコマンドの実行結果にUsername/Passwordが記載されています。

ただし、本記事を作成するにあたって、OpenShift Localのインストール先サーバとしてRHEL 9(非GUIサーバ)を使用しておりブラウザアクセスができないため、別のWindows端末からアクセスすることにします。アクセスするためには追加設定が必要ですが、ここでは手軽にWindows端末のhostsファイルを編集し名前解決することで対応します。
メモ帳を管理者として実行し、C:\Windows\System32\drivers\etc\hostsを開き、以下の記述を追記します(xxx.yyy.zzz.wwwはRHEL 9のIPアドレス)。
|
1 2 3 |
xxx.yyy.zzz.www console-openshift-console.apps-crc.testing # ブラウザからアクセスするWebコンソールのURL xxx.yyy.zzz.www oauth-openshift.apps-crc.testing # Webコンソールアクセス時にリダイレクトされるログイン(認証)用エンドポイント xxx.yyy.zzz.www api.crc.testing # 今回は不要だがWindows経由でOpenShift APIを使う場合は必要 |
RHEL 9のファイアウォール設定でhttpsが許可されていない場合は許可します。
|
1 2 3 |
sudo firewall-cmd --list-all # 確認 sudo firewall-cmd --add-service=https --permanent # 許可 sudo firewall-cmd --reload # 設定反映 |
ocコマンドを使ってみる
ocコマンドは、OCPクラスタの操作やアプリのデプロイ、管理を行うためのCLIツールです。
以下、crc startコマンドの実行結果に記載されている手順を基に、ocコマンドを使う準備をします。
ocコマンドへのパスを通す
crcコマンドと同様、ocコマンドもデフォルトではPATHが通っていないためPATHを通します。
|
1 2 3 |
$ eval $(crc oc-env) $ which oc # PATHが通っていることを確認 ~/.crc/bin/oc/oc |
OpenShiftクラスタの認証
oc loginコマンドを実行すると、OpenShiftクラスタへAPIアクセスするための認証トークンを取得します。
|
1 2 3 4 5 6 |
$ oc login -u developer https://api.crc.testing:6443 Logged into "https://api.crc.testing:6443" as "developer" using existing credentials. You don't have any projects. You can try to create a new project, by running oc new-project <projectname> |
現在のユーザを表示すると、認証できていることが確認できます。
|
1 2 |
$ oc whoami developer |
アプリケーションのデプロイ
本章では、OpenShift環境にアプリケーションとしてNGINX(OSSのWebサーバ)をデプロイしてみます。
プロジェクトの作成
はじめに、アプリケーションをデプロイするためのプロジェクトを作成します。
|
1 2 3 4 5 6 7 8 9 10 |
$ oc new-project nginx-demo Now using project "nginx-demo" on server "https://api.crc.testing:6443". You can add applications to this project with the 'new-app' command. For example, try: oc new-app rails-postgresql-example to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application: kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.43 -- /agnhost serve-hostname |
作成したプロジェクトは以下のコマンドで確認できます。
|
1 2 3 |
$ oc get project NAME DISPLAY NAME STATUS nginx-demo Active |
コンテナイメージのデプロイ
次に、作成したプロジェクトにNGINXのコンテナイメージ(アプリケーション)をデプロイします。oc new-appコマンドを実行すると、必要なリソースが自動生成され、1コマンドでデプロイが完了します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ oc new-app registry.access.redhat.com/hi/nginx:latest --name=nginx warning: Cannot find git. Ensure that it is installed and in your path. Git is required to work with git repositories. --> Found container image be8729f (10 hours old) from registry.access.redhat.com for "registry.access.redhat.com/hi/nginx:latest" High-performance HTTP server, reverse proxy, and load balancer optimized for concurrency and low memory usage. Supports HTTP, HTTPS, SMTP, POP3, and IMAP proxying. * An image stream tag will be created as "nginx:latest" that will track this image --> Creating resources ... imagestream.image.openshift.io "nginx" created deployment.apps "nginx" created service "nginx" created --> Success Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/nginx' Run 'oc status' to view your app. |
なお、oc new-appコマンドの実行時に指定したコンテナイメージは、Red Hat Ecosystem Catalogに登録されているもので、具体的にはRed Hat Hardened Images nginxという名称のイメージです。
oc get allコマンドを実行すると、自動生成されたリソース(Deployment/Service/Pod)などを確認できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ oc get all Warning: apps.openshift.io/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+ NAME READY STATUS RESTARTS AGE pod/nginx-69dbb67fcb-bwmzj 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx ClusterIP 10.217.5.36 <none> 8080/TCP 21s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1/1 1 1 21s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-58f5fb6965 0 0 0 21s replicaset.apps/nginx-69dbb67fcb 1 1 1 20s NAME IMAGE REPOSITORY TAGS UPDATED imagestream.image.openshift.io/nginx default-route-openshift-image-registry.apps-crc.testing/nginx-demo/nginx latest 20 seconds ago |
アプリケーションの外部公開
前節の作業でアプリケーションのデプロイは完了しましたが、外部からはアクセスできない状態です。そのため、外部アクセスできるように設定します。
外部公開ルートの追加
oc exposeコマンドで、デプロイしたアプリケーションへ外部からアクセスできるようにします。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# アプリケーションのデプロイ時点ではルートが未設定 $ oc get route No resources found in nginx-demo namespace. # ルートを作成しアプリケーションを公開 $ oc expose service/nginx route.route.openshift.io/nginx exposed # ルートが追加されていることを確認 $ oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nginx nginx-nginx-demo.apps-crc.testing nginx 8080-tcp None |
oc get routeコマンドで確認したホスト名に対してcurlコマンドでHTTPリクエストを送信すると、NGINXアプリケーションからの応答を確認できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ curl http://nginx-nginx-demo.apps-crc.testing <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> |
ネットワーク設定の追加
現状の設定では、CRC VMに直接アクセスできるのはホストOS(本記事ではRHEL 9)のみのため、OpenShiftのWebコンソールと同様、別のWindows端末からWebサーバ(NGINX)にアクセスできるようにします。
まずは、ホストOS(RHEL 9)側の設定を行います。
以下のパッケージをインストールします。
| パッケージ名 | 概要 | 目的 |
|---|---|---|
| haproxy | リバースプロキシ、ロードバランサなど | リバースプロキシとして、ホストOSの80/443/6443番ポートでリッスンし、CRC VMの同ポートに転送 |
| /usr/sbin/semanage | SELinux管理ツール | HAProxyが6443番ポートでリッスンすることを許可(デフォルトでは非標準ポートのバインドがSELinuxによって制限される) |
パッケージのインストールには、以下のコマンドを実行します。
|
1 |
$ sudo dnf install -y haproxy /usr/sbin/semanage |
次に、ファイアウォール設定で80/443/6443番ポートの通信を許可します。
|
1 2 3 4 5 |
$ sudo systemctl enable --now firewalld $ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent $ sudo firewall-cmd --add-service=kube-apiserver --permanent $ sudo firewall-cmd --reload |
SELinuxについて、6443番ポートの通信を許可します。
|
1 2 |
$ sudo semanage port -a -t http_port_t -p tcp 6443 $ sudo semanage port -l | grep http_port_t |
HAProxyを設定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
export CRC_IP=$(crc ip) # CRC VMのIPアドレスを取得 sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak # 設定ファイルをバックアップ sudo tee /etc/haproxy/haproxy.cfg >/dev/null <<EOF global log /dev/log local0 defaults balance roundrobin log global maxconn 100 mode tcp timeout connect 5s timeout client 500s timeout server 500s listen apps bind 0.0.0.0:80 server crcvm $CRC_IP:80 check listen apps_ssl bind 0.0.0.0:443 server crcvm $CRC_IP:443 check listen api bind 0.0.0.0:6443 server crcvm $CRC_IP:6443 check EOF |
HAProxyを起動します。
|
1 2 |
$ sudo systemctl enable --now haproxy $ sudo systemctl status haproxy |
以下の作業は、Windows端末で実施します。
メモ帳を管理者として実行し、C:\Windows\System32\drivers\etc\hostsを開き、以下の記述を追記します(xxx.yyy.zzz.wwwはRHEL 9のIPアドレス)。
|
1 2 |
# 以下の行を追記 xxx.yyy.zzz.www nginx-nginx-demo.apps-crc.testing # ブラウザからアクセスするWebサーバのURL |
Windows端末のブラウザにhttp://nginx-nginx-demo.apps-crc.testingと入力すると、以下の画面が表示されます。

OpenShift Localの停止
OpenShift Localを停止させたい場合は、crc stopコマンドを実行します。本コマンドにより、OpenShiftクラスタ、CRC VMの順に停止され、CPU/メモリが解放されます。
|
1 2 3 |
$ crc stop INFO Stopping the instance, this may take a few minutes... Stopped the instance |
crc statusコマンドを実行し、リソースが停止したことを確認します。
|
1 2 3 4 5 6 |
$ crc status CRC VM: Stopped OpenShift: Stopped (v4.21.8) Disk Usage: 0B of 0B (Inside the CRC VM) Cache Usage: 31.52GB Cache Directory: /home/ocpuser/.crc/cache |
再度OpenShift Localを起動したい場合は、crc startコマンドを実行します。
以上、ここまで。

