APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

OpenShift LocalでPodを動かしてみた。

はじめに

こんにちは。クラウド事業部の山田です。
Red Hat OpenShift の勉強のため、Red Hat OpenShift Local をインストールし、Kubernetes で動作させたイメージを転用して動かすところまで検証してみました。

参考)
 OpenShift Local をインストールしてみた

目次

概要

OpenShift Local
自分のPCの中で1台の仮想マシンとして動く、検証用の最小構成の OpenShift です。
1台構成であるためノード追加の操作や複数台にわたる可用性の検証はできませんが、今回は基本的なPod起動の操作を目指すため問題ありません。
一方、監視機能の検証のため監視モジュールの追加を試みましたが、PCのスペック不足なのかうまくいきませんでした。

前提
Hyper-V が動作する Windows の Proエディションが必要です。

検証

導入

Windowsへのインストール

・下記ページで2つのファイルをダウンロードします。(要アカウント登録)
 Red Hat OpenShift Local
  [ Donwload OpenShift Local ]ボタン ⇒ crc-windows-installer.zip
  [ Donwload pull secret ]ボタン    ⇒ pull-secret.txt

・crc-windows-installer.zip を解凍します。

・crc-windows-amd64.msi からインストールして再起動します。

・PowerShell を起動し、コマンドが使用可能になっていることを確認します。
 > crc version
  CRC version: 2.59.0+e90757
  OpenShift version: 4.21.4
  MicroShift version: 4.21.0

セットアップ

・下記コマンドでセットアップします。
 > crc setup
  ⇒ 1時間以上かかりました。

起動

クラスタ起動

※検証のたびに実施します。

・クラスタを起動します。
 > crc start
  ? Please enter the pull secret
  ⇒ 初回のみ:pull-secret.txt の内容をすべて貼り付けます。

 ※ 検証終了時のクラスター停止
 > crc stop

・アカウントとパスワードを確認します。
 アカウントのサンプルとして、クラスター管理者アカウント(kubeadmin)と プロジェクト管理者アカウント(developer)が用意されています。

・Web管理画面のログイン画面を開きます。
 ブラウザで下記URLを開きます。
 https://console-openshift-console.apps-crc.testing/
 もしくは下記コマンドによりブラウザのログイン画面が開きます。
 > crc console

・指定されたアカウント名とパスワードで、クラスター管理者アカウントまたはプロジェクト管理者アカウントとしてログインします。

OCコマンド使用の準備

コマンドラインでの操作の前に毎回行います。

・指定する環境変数を確認します。
 > crc oc-env
  ・・・
  $Env:PATH = "C:\Users\<ユーザー名>.crc\bin\oc;$Env:PATH"
  ・・・

・環境変数の設定
 > $Env:PATH = "C:\Users\<ユーザー名>.crc\bin\oc;$Env:PATH"

・コマンドが使用可能になっていることを確認します。
 > oc version
  ・・・
  Client Version: 4.21.4
  Kustomize Version: v5.7.1
  ・・・

**・コマンドラインでログインします。
 > oc login -u developer -p developer https://api.crc.testing:6443
  もしくは
 > oc login -u kubeadmin -p <パスワード> https://api.crc.testing:6443

アンインストール

アンインストール

・コマンドでクリーンアップします。
 > crc delete
 > crc cleanup

・フォルダを削除します。
 C:\Users\<ユーザー名>\ .crc

・アプリをアンインストールします。
 "OpenShift Local" を Windows からアンインストールします。

Podの起動まで

ログイン

ここでは、以降のPod起動までそのPodを扱うプロジェクトのプロジェクト管理者アカウント(developer)で操作します。

・Web管理画面にログインします。
 ユーザー名:developer
 パスワード:developer

・コマンドラインでログインします。
 > oc login -u developer -p developer https://api.crc.testing:6443

プロジェクト作成

※ Web管理画面とコマンドラインともに、プロジェクト管理者でログインしてそのままプロジェクト作成を行うとプロジェクト管理者にそのプロジェクトの権限を付与する手間が省けます。

・プロジェクト(名前空間)を作成します。
 1) メニュー[ホーム] > [プロジェクト]を開きます。
 2) 右上[プロジェクトの作成]ボタンを選択します。
 3) 表示される[プロジェクトの作成]画面にて、下記のような設定でプロジェクトを作成します。
  名前:project1
  表示名:proj1

  もしくはコマンドラインで作成します。
  > oc new-project project1 --display-name proj1

イメージのビルド

・Dockerfile修正の例
 OpenShift向けのイメージでは、アプリケーションを実行するディレクトリに対する権限設定を行います。
 RUN mkdir -p /app && \
 chown -R :0 /app && \
 chmod -R g+w /app

・ビルド設定(BuildConfig)を定義します。
 ここでは、"project1"プロジェクトに"timer-sample"イメージを登録します。
 > oc new-build --strategy=docker --binary --name=timer-sample -n project1

・手元の Dockerfile からイメージをビルドし、タグを指定します。
 > cd <Dockerfile保存先フォルダ>
 > oc start-build timer-sample --from-dir=. --follow -n project1
  ・・・
  Successfully pushed image-registry.openshift-image-registry.svc:5000/project1/timer-sample@sha256:・・・・・・
  Push successful
 > oc tag timer-sample:latest timer-sample:1.0 -n project1

・ビルドされたイメージを確認します。
 1) メニュー[Builds] > [ImageStreams]を開きます。
 2) 表示されるイメージ名を選択します。
 3) 表示される画面下部に、登録されたイメージのタグが表示されます。
  ⇒ ここでは、同じIDである "latest" タグと "1.0" タグが表示されています。

  もしくはコマンドラインで確認します。
  > oc get is timer-sample -n project1
   NAME IMAGE REPOSITORY TAGS UPDATED
   timer-sample default-route-openshift-image-registry.apps-crc.testing/project1/timer-sample 1.0,latest 2 minutes ago

Pod起動

・Podを起動します。
 ここでは、指定した数値(例:60)の秒数スリープして終了するPodをJobとして起動します。
 > oc create job timer-job --image=image-registry.openshift-image-registry.svc:5000/project1/timer-sample:1.0 -n project1 -- /bin/sh -c "python3 TimerSample4.py 600"

・Podの一覧を確認します。
 1) メニュー[Workloads] > [Pods]を開きます。
 2) 表示されるPod一覧を確認します。

  もしくはコマンドラインで確認します。
  > oc get pod -n project1
  NAME READY STATUS RESTARTS AGE
  timer-job-xxxxx 1/1 Running 0 35s
  ・・・

・Podのイベントを確認します。
 1) メニュー[Workloads] > [Pods]を開きます。
 2) 表示されるPod一覧から対象のPodを選択します。
 3) [イベント]タブを開きイベントを確認します。

  もしくはコマンドラインで確認します。
  > oc get events -n project1 --field-selector involvedObject.name=timer-job
   LAST SEEN TYPE REASON OBJECT MESSAGE
   5m56s Normal Scheduled pod/timer-job Successfully assigned project1/timer-job-xxxxx to crc
   ・・・
   5m53s Normal Started pod/timer-job Started container timer-job

・必要に応じてPodに入って状態を確認します。
 1) メニュー[Workloads] > [Pods]を開きます。
 2) 表示されるPod一覧から対象のPodを選択します。
 3) [ターミナル]タブからコマンドラインで操作します。

  もしくはコマンドラインで操作します。
  > oc rsh timer-job-xxxxx
   $ hostname
    timer-job-xxxxx

・終了したPodのログを確認します。
 終了したPodが記録した標準出力を確認します。
 1) メニュー[Workloads] > [Pods]を開きます。
 2) 表示されるPod一覧から対象のPodを選択します。
 3) [ログ]タブを開きログを確認します。

  もしくはコマンドラインで確認します。
  > oc logs timer-job-xxxxx -n project1 -f
   Passed arguments: ['/app/TimerSample.py', '600']
   start: 2026-04-13 16:51:49.647781
   Waiting for 600 seconds ...
   end: 2026-04-13 17:01:49.647980

・作成したJobを削除します。
 次回、同名のJobは作成できないため削除します。
 1) メニュー[Workloads] > [Jobs]を開きます。
 2) 表示されるJob一覧の対象Job右端から[Job の削除]を選択してJobを削除します。

  もしくはコマンドラインで操作します。
  > oc delete job timer-job -n project1

所感

・Kubernetesでアプリケーションを実行するときと比較して、イメージの登録から実行までを単一のプロダクトで完結することができ、アプリケーション修正に関わる操作の多くを省くことができ、非常に有用と感じました。
・実行したPodの監視や結果確認もGUIから行うことができ、問題の対処に集中できると思います。
・一方で、OpenShift Localでは複数ノードを用いた検証は当然できないうえ、今回は監視専用モジュールの機能を確認できなかったため、複数のハードウェアやPodを横断した監視を体験することはできませんでした。実業務において負荷の増加を考慮しつつそれらを実装する必要がありそうです。