Red Hatでソリューションアーキテクトをしている田中司恩です。前回記事ではRed Hat CodeReady Containers(以下、CRC)をリモート接続してシングルノードのOpenShiftとして利用する方法を紹介しました。
今回はCRCを利用する上で構築する時の注意点とTipsをいくつかご紹介します。 CRCについてはまとめ記事を書いていますのでそちらも参考にしてください。
CRC構築時の注意点
CRC構築時の注意点、ハマりポイントをいくつかピックアップします。
ディスク容量
CRCのディスク要件はかなり大きめで「35GBの空きスペースが必要」となっています。
CRCは1つのバイナリcrc
でコマンドの実行とコマンド自体に格納されたイメージの展開を行います。そのためcrc
バイナリの容量が非常に大きいです(Linux版 v.1.24.0 約2.3GB)。また、セットアップ時に展開されるイメージ(.crc/cache/crc.qcow2)の容量が約10GBあり、さらにCRC起動時にマシンイメージ(.crc/machines/crc.qcow2)が追加で作成されます。
(参考)CRCセットアップ後の関連ファイルの構成(v.1.24.0)
$ tree ~/.crc /home/user/.crc ├── bin │ ├── admin-helper-linux │ ├── crc-driver-libvirt │ └── oc │ └── oc -> /home/user/.crc/cache/crc_libvirt_4.7.2/oc ├── cache │ ├── crc_libvirt_4.7.2 │ │ ├── crc-bundle-info.json │ │ ├── crc.qcow2 │ │ ├── id_ecdsa_crc │ │ ├── kubeadmin-password │ │ ├── kubeconfig │ │ └── oc │ └── crc_libvirt_4.7.2.crcbundle ├── crc.json ├── crc.log └── machines └── crc ├── config.json ├── crc.qcow2 ├── id_ecdsa ├── id_ecdsa.pub ├── kubeadmin-password └── kubeconfig 6 directories, 18 files
CRCはユーザー権限での実行が前提となりますので、ユーザーのホームディレクトリのあるパーティションの空き容量には十分注意ください。
crc delete
で消えない.crc
フォルダ
CRCの削除用にcrc delete
コマンドがあります。実行するとOpenShiftクラスターの削除を行なってくれるのですが、完全にデータを削除するようにはなっていません。削除されるのは~/.crc/machines/crc/
ディレクトリのみです。その他のキャッシュデータなどはそのままです。
crc delete
実行後も約13GB程度のファイルは残っているので(v.1.24.0の場合)、完全に削除する場合は~/.crc
フォルダごと削除してください。
なお、再度crc setup
を実行することで環境は再構築されます。
crc start
初回の起動時間
CRCの初回起動はセットアップのプロセスを含むので若干時間がかかります(手元の環境で7分程度)。二回目以降の起動時間はやや短縮され、手元の環境では5分半程度になりました。 なお、同じ検証仮想環境上で実行するシングルノードのOCPの起動時間は9分程度かかりました。CRCは実行ホスト上の仮想マシンでの実行オーバーヘッドを考慮しても短い時間で起動できるようにチューニングされているようです。
仮想環境でのネスト実行
CRCの実行ホストを仮想環境で動かす場合、CRC自体は実行ホスト上の仮想マシンとして動作することになるためネスト(Nested)に対応した環境が必要です。
例)VMware ESXi上の仮想マシンでは、CPU>ハードウェア仮想化を有効化する
ハードウェア仮想化オプションが有効になっていない場合、crc setup
の実行時にエラーになります。
$ crc setup INFO Checking if running as non-root INFO Checking if admin-helper executable is cached INFO Checking if running on a supported CPU architecture INFO Checking minimum RAM requirements INFO Checking if Virtualization is enabled INFO Setting up virtualization You need to enable virtualization in BIOS
Tips
CRCを利用する上で便利なコマンドや機能について紹介します。
pull-secretをファイルから読み込ませる方法
CRCの初回起動時にはプルシークレットの入力が求められます。手順としてはプルシークレットの内容をコピペするだけなのですが、起動時のコマンドに引数をつけることで手動でのコピペ作業を回避し、ファイルから直接読み込ませることができます。
引数でプルシークレットのファイルを指定した初回実行コマンド
(pull-secretは任意の名前) $ crc start -p pull-secret
(参考)プルシークレットはOpenShift Cluster Managerより入手可能です。
PVは事前に作成済み
CRCは事前構成済みのOpenShift 4環境ですが、永続ボリューム(PV)についても事前に構成されているものが使えます。
pv0001
〜pv0030
の30個のPVが事前に用意されていて、全て容量は100Giとなっています。
なお、pv0001
はイメージレジストリー用のPVとして使用済みです。残りの29個を自由に利用できます。
kubeadminのパスワードの確認
CRCの管理者であるkubeadmin
のパスワードは、crc start
の完了後にコンソール画面に表示されます。その後にコンソールの画面をクリアするなどしてパスワードが分からなくなった場合は下記のコマンドで確認することが可能です。
$ crc console --credentials To login as a regular user, run 'oc login -u developer -p developer https://api.crc.testing:6443'. To login as an admin, run 'oc login -u kubeadmin -p XXXXX-XXXXX-XXXXX-XXXXX https://api.crc.testing:6443'
パスワードファイルの実体から確認することも可能です。
$ cat ~/.crc/machines/crc/kubeadmin-password XXXXX-XXXXX-XXXXX-XXXXX
oc コマンドのパスを設定する方法
CLIでアクセスする場合の「oc」コマンドは下記の手順で使用できます(別途入手したocコマンドを使用するのも可)。
crc oc-env を実行します
$ crc oc-env
exportから始まるコマンドを実行し、環境変数にパスを追加します。 (下記はユーザー名「user」の例)
export PATH="/home/user/.crc/bin/oc:$PATH" # Run this command to configure your shell: # eval $(crc oc-env)
ocコマンドのタブ補完を有効にする
$ oc completion --help
を実行すると出力されたExampleの中に設定方法の記述があります。
macOSとLinux向けのそれぞれの設定方法が記載されています。
(参考)Linux向けの設定方法
oc completion bash > ~/.kube/completion.bash.inc printf " # Kubectl shell completion source '$HOME/.kube/completion.bash.inc' " >> $HOME/.bash_profile source $HOME/.bash_profile
CRC VMへSSHログインする
~/.crc/machines/crc
配下にあるSSHキーを使用することでCRC VMへSSH接続することができます。
- CRC VMのIPアドレスは
crc ip
コマンドで確認 - 初回接続時のみフィンガープリントの確認があります
$ export CRC_IP=$(crc ip) $ ssh -i ~/.crc/machines/crc/id_ecdsa core@$CRC_IP The authenticity of host '192.168.130.11 (192.168.130.11)' can't be established. ECDSA key fingerprint is SHA256:a39rGpjdfzT/RWRzLY3POzL0iyKYFzxAyoLOLELR0oA. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.130.11' (ECDSA) to the list of known hosts. Red Hat Enterprise Linux CoreOS 47.83.202103051045-0 Part of OpenShift 4.7, RHCOS is a Kubernetes native operating system managed by the Machine Config Operator (`clusteroperator/machine-config`). WARNING: Direct SSH access to machines is not recommended; instead, make configuration changes via `machineconfig` objects: https://docs.openshift.com/container-platform/4.7/architecture/architecture-rhcos.html --- [core@crc-rsppg-master-0 ~]$
CRC VMのvCPU/Memory割り当て量を変更する
crc config
コマンドを使用することで CRC VMのカスタマイズを行うことが可能です。
vCPU、Memory容量はCRC上で実行するコンテナ/Podの起動可否に大きく関わってきますので、必要に応じて適切に設定してください。
CRCデフォルトのvCPU/Memoryの値を確認
$ crc config get cpus Configuration property 'cpus' is not set. Default value is '4' $ crc config get memory Configuration property 'memory' is not set. Default value is '9216'
vCPU→6、Memory→12GBへ変更する(MemoryはMiBで指定)
$ crc config set cpus 6 $ crc config set memory 12288
変更後、確認
$ crc config get cpus cpus : 6 $ crc config get memory memory : 12288
CRC実行ホストの空きメモリ容量を上回る設定すると警告が出て実行されません
$ crc config set memory 16384 Value '16384' for configuration property 'memory' is invalid, reason: only 16.6GB of memory found (17.18GB required)
crc config
には他にもオプションがありますので、いろいろ試してカスタマイズに挑戦してみてください。
最小構成のRHEL上でCRCを実行する手順
最小構成でインストールしたRHEL上で最小限のステップでCRCを実行する手順の参考です。
例)RHEL 8.3を最小構成でインストールした環境
- OSインストール後、ホスト名、固定IPアドレスは設定済みの状況
- 作業ディレクトリ:~/CRC
crc
実行パスの配置先:~/bin
subscription-manager登録、OSのアップデート
$ sudo subscription-manager register --auto-attach $ sudo dnf update -y
CRCの入手と展開(v.1.24.0の場合)
$ mkdir ~/CRC && cd CRC $ curl -O https://mirror.openshift.com/pub/openshift-v4/clients/crc/latest/crc-linux-amd64.tar.xz $ xz -dc crc-linux-amd64.tar.xz |tar xvf - $ CRC_DIR=~/CRC/crc-linux-1.24.0-amd64
CRCの初期セットアップ
$ mkdir ~/bin $ ln -s $CRC_DIR/crc ~/bin/crc $ crc setup
CRCの初回起動(pull-secretはcloud.redhat.comから別途入手して配置しておくこと)
$ crc start -p pull-secret
以降は前回記事を参考にリモート接続の構成を行うことでシングルノードのOpenShift環境が出来上がります。
まとめ
CRC構築時の注意点やTipsをいくつかご紹介しました。公式ドキュメントにあまり詳細に書いていない点も多くありますので、是非参考にしてCRCをさらに活用してみてください。 RHELやLinuxホストを1台用意できれば簡単にCRCのリモート構成も構築可能です。開発や検証用に一家に一台、シングルノードなOpenShiftの導入をお勧めします。