仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

OpenShift Localの現状とかなりストレージが少ない環境でOpenShift Localを動かすときのノウハウ

導入

CodeReady Containersは以前ブログにも書いたように、ワンバイナリーで個人で使うOpenShiftの評価環境を構築できるツールです。名前がずいぶん前に変わって、OpenShift Localと言う名前で今も開発されています。

OpenShift Localを触って見ようといざ検索すると、情報を見つけるのに結構苦労します。またGoogleのアルゴリズムが変わったのでしょうか。最近特に調べたいものがなかなか出てきません。

OpenShift Localは、Red Hat Developerの製品一覧を検索すると見つかります。

developers.redhat.com

Web検索すると、Red Hat のドキュメントサイトを検索すると、OpenShift Localの前身の「CodeReady Containers」の日本語のドキュメントだけが出てきます。基本的な使い方はOpenShift Localも一緒なので、今のうちにPDF形式で保管しておきましょう。

docs.redhat.com

OpenShift Localの公式の情報はなぜかGoogle検索してもなかなか引っかかりませんが、おそらくこれです。

developers.redhat.com

OpenShift Localのダウンロードはこちらから。

console.redhat.com

OpenShiftの各コマンドラインツールのダウンロードはこちらから。OpenShift LocalはバンドルされたCLIがありますが、たぶんここからOpenShift command-line interface (oc)だけはダウンロードしておいたほうが便利です。 OSとアーキテクチャーに注意してください。

console.redhat.com

ちなみにPodman Desktopを普段使っている場合は、Podman DesktopからKubernetesやOpenShift LocalをつかったOpenShiftのデプロイ、管理ができます。一瞬PodmanコンテナでOpenShift が動くのかなと思いきや、VMで動くようです。一元管理をPodman Desktopでできるだけみたいですね。

ここまでで必要なものはそろったので、インストールをしましょう。 どうやって使うかは、こちらに書かれている通りです。

crc.dev

デプロイ後はCLIやOpenShiftのWebインターフェイスでOpenShiftを体験できます。 久しぶりに使ってみたら、Webインターフェイスのデザインが変わってみやすくなっていました。

OpenShift Localとストレージ利用率に関する問題

私が普段使っている作業環境は、メモリー16GB、ストレージ256GBのM4 Mac miniです。去年Amazonでセールがあったときに買いました。このモデルは普段使いには特に困らないのですが、OpenShift Localを動かす環境としてはメモリーが結構ぎりぎりです。

以下のページの冒頭に書かれている通り、それなりにメモリーとストレージを消費します。

crc.dev

システムストレージの使用状況は、256GB中100GBくらい使用済みなので、残りは150GBくらいです。 普段この環境でVirtualBoxを使っていますが、VMのストレージはISOファイルなどは外付けのストレージに置いているし大きなデータを処理するときは外付けストレージを使っていたので、256GBでも特に問題ないです*1

普段はこういうのをM4 Mac miniに接続して、外付けストレージとして運用しています。まだ安く変えた時期にNVMe SSD 2枚と一緒に購入し、片方にTime Machineバックアップ用として、もう片方は色々なデータ置き場として活用しています。Time Machineバックアップ用が1TB、データ置き場は512GBです。この運用方法は結構良かったので、データ置き場用のNVMe SSDはもっと大きい容量のストレージにすれば良かったと後悔しています*2

www.amazon.co.jp

というなので、Macの残りストレージが150GBくらいでも何とかなっています*3

VirtualBoxは先ほど言ったように設定を変えるだけで、データファイルの置き場を変更できます。 ところがOpenShift Localには、別のストレージにデータをおくようなオプションは無さそうです。

以前のcrc CLIにはVirtualBoxをデプロイ環境として選択するオプションがありました。これを使えば自動的にデータが外部ストレージに置かれると思ったのですが、すでにそのオプションはだいぶ前に削除されていたのでした。残念。

何も設定せずにOpenShift Localツールを使ってOpenShiftを動かすと、ストレージの残りが見る見る減っていき、117GBくらいになっていました*4

作業後、OpenShift Localで構築したOpenShiftを消すと少し空き容量が回復しますが、OpenShift Localを使い始めるときと比べて32GBくらいが行方不明でした。あとでその32GBはキャッシュ*5であることがわかりました。

そこで、OpenShift Localを実行したときに色々なファイルが保存される~/.crc/ディレクトリーを、シンボリックリンクを張って外付けのストレージに設定してみました。すると、「プロセスファイルが作れない」のようなエラー(すみません。スクショもログも取るのを忘れておぼろげです)が表示されて、クラスターの実行に失敗しました。全体をシンボリックリンクで外に逃がす対応はダメそうです。

考えた。だったらキャッシュディレクトリーだけ対象にしよう

ストレージとして常時消費するのは~/.crc/cacheなのだから、このディレクトリーだけを別のディレクトリーにシンボリックリンクをにしたら良いのではと思い、まずそれを試してみました。

% du -h ~/.crc/cache
 25G    ./crc_vfkit_4.21.0_arm64
 31G    .

% ls -lh
total 13267568
drwxr-xr-x@ 7 ytooyama  staff   224B  2 19 20:14 crc_vfkit_4.21.0_arm64
-rw-rw-r--@ 1 ytooyama  staff   6.3G  2  4 16:18 crc_vfkit_4.21.0_arm64.crcbundle

キャッシュを外部に移動します。

mkdir -p /Volumes/data/crc-cache
mv ~/.crc/cache /Volumes/data/crc-cache

シンボリックリンクを張ります。これで~/.crc/cacheの実態は別のストレージになりました。

% ln -s /Volumes/data/crc-cache ~/.crc/cache
% ls -ld ~/.crc/cache
lrwxr-xr-x@ 1 ytooyama  staff  23  2 19 20:35 /Users/ytooyama/.crc/cache -> /Volumes/data/crc-cache

OpenShift Localツールを使ってOpenShiftを実行してみます。今度はうまくいきました。 ただ、この変更でCache Usage Sizeのところは表示されなくなります。 実サイズはdu -sh /Volumes/data/crc-cacheコマンドで確認できるので、この際無視します。

% crc start
% crc status
CRC VM:          Starting
OpenShift:       Starting
Disk Usage:      0B of 0B (Inside the CRC VM)
Cache Usage:     23B
Cache Directory: /Users/ytooyama/.crc/cache

% crc status
CRC VM:          Running
OpenShift:       Running (v4.21.0)
RAM Usage:       6.459GB of 10.93GB
Disk Usage:      24.24GB of 36.98GB (Inside the CRC VM)
Cache Usage:     23B
Cache Directory: /Users/ytooyama/.crc/cache

OpenShift VMが動いている間のストレージ消費

ただ、この対応だけだと、OpenShiftが動くVMのイメージはデフォルトそのままのディレクトリーなので、OpenShiftが動いている(=VMが動いている)間はシステムストレージを消費してしまいます。 キャッシュよりそちらの方が大きかったのでした。

そこで、OpenShift Localを使ったときのストレージ消費の激しいサブディレクトリーを調べました。 一つは先に設定変更したキャッシュディレクトリーで、もう一つはOpenShift Localを使ってクラスターを実行したときにその実行環境(VM)関連のファイルが保管される~/.crc/machinesディレクトリーです。

そこで、~/.crc/machinesディレクトリーもシンボリックリンクを張って外付けのストレージに移すことにしました。 データが置かれるだけのディレクトリーですから、うまくいけば問題なく動作します。

最初はデータ移行をしようと思ったのですが、思った以上に時間がかかるのでそれをあきらめ、クラスターをまっさらにしてから実行しました。

//いったんクラスターごと消す
% crc delete
Do you want to delete the instance? [y/N]: y
Deleted the instance

//マシンディレクトリーをいったん消す
% rm -rf ~/.crc/machines

//外部ストレージにマシンディレクトリーを作成
% mkdir -p /Volumes/data/crc-machines

//マシンディレクトリーのシンボリックリンクを張る
% ln -s /Volumes/data/crc-machines ~/.crc/machines

//エイリアスができた
% ls -ld ~/.crc/machines
lrwxr-xr-x@ 1 ytooyama  staff  26  2 19 21:10 /Users/ytooyama/.crc/machines -> /Volumes/data/crc-machines

//起動をテスト
% crc setup    # Initialize environment for cluster
% crc start     # Start the cluster

//ストレージ使用量を確認
% du -sh /Volumes/data/crc-machines
 27G    /Volumes/data/crc-machines

/Volumes/data/crc-machines が 27GB になっているので、次が 外付けのストレージに生成されています。

  • qcow2 仮想ディスク
  • VM メタデータ
  • RHCOS 展開領域

問題なくクラスターも動作しました。 macOSのシステムディスクも、ほとんど消費されずに稼働するのを確認しました。

% crc status
CRC VM:          Running
OpenShift:       Running (v4.21.0)
RAM Usage:       6.737GB of 10.93GB
Disk Usage:      24.25GB of 36.98GB (Inside the CRC VM)
Cache Usage:     23B
Cache Directory: /Users/ytooyama/.crc/cache

これで問題解決です。

注意点

一部のディレクトリーを外出しにしたことで、使用上の注意事項が増えています。 以下に注意して使う感じでしょうか?

  • 外部SSDを使っているため、取り外す前にcrc stopを実行
  • 外部SSDをスリープ中に抜かない
  • /Volumes/data のマウント名を変えないように注意

*1:とは言え、心の余裕と言う意味では、もう少しストレージが大きかった方が良かったと思います。次買い替えるときはストレージは512GBのモデルにします

*2:現在もAI需要とかで価格が高騰中ですからね。もう少し安くなったら買い替えを検討しようかと思います

*3:カスタマイズすればもっと大きいストレージ容量のMacを買うことはできるのですが、Amazonで買ったのでそういうカスタマイズはできなかったですし、去年はMac miniは256GBモデルしかありませんでした。Apple公式で買えば自由に選べていいのですが、ストレージとメモリーは昔から割高なんですよね。Apple

*4:気持ちの問題なのですが、空き容量が120GBを下回ると、私はそわそわしてしまいます。顔色は青くなり、冷や汗が垂れてきます(大嘘)。ストレージを使い潰していって自滅するんじゃないかって、心配で心配で。心配しすぎ?

*5:キャッシュはVMイメージのテンプレートです。圧縮されていて、OpenShiftを動かすときに圧縮イメージが展開されてから環境が動き始めていました。ディレクトリーを見ると、圧縮されたイメージが6GB、展開されたイメージがおおよそ30GBくらいでした