CodeReady Containers(CRC)構築時の注意点とTips

Red Hatでソリューションアーキテクトをしている田中司恩です。前回記事ではRed Hat CodeReady Containers(以下、CRC)をリモート接続してシングルノードのOpenShiftとして利用する方法を紹介しました。

rheb.hatenablog.com

今回はCRCを利用する上で構築する時の注意点とTipsをいくつかご紹介します。 CRCについてはまとめ記事を書いていますのでそちらも参考にしてください。

rheb.hatenablog.com

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>ハードウェア仮想化を有効化する

VMware ESXiのハードウェア仮想化オプション
VMware ESXiのハードウェア仮想化オプション

ハードウェア仮想化オプションが有効になっていない場合、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より入手可能です。

OpenShift Cluster Managerのプルシークレット取得場所
OpenShift Cluster Managerのプルシークレット取得場所

PVは事前に作成済み

CRCは事前構成済みのOpenShift 4環境ですが、永続ボリューム(PV)についても事前に構成されているものが使えます。 pv0001pv0030の30個のPVが事前に用意されていて、全て容量は100Giとなっています。 なお、pv0001はイメージレジストリー用のPVとして使用済みです。残りの29個を自由に利用できます。

CRCの事前構成済み永続ボリューム(PV)
CRCの事前構成済み永続ボリューム(PV)

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の導入をお勧めします。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。