必要スペック
Desktop 用の OpenShift
である CRC (Code Ready Container)
をインストールしてみます。OpenShift 3
で使われていたMniniShift
の OpenShift 4
版の、シングルノードのOpenShift
です。(GitHub のレポジトリへのリンク)
今回使用した、CRC
1.34
の必要スペックは、マニュアルによると以下の通りです。
4物理CPUコア
9 GByte Mem
35 GByte Disk
作成されるのは、Single Node (Master
兼 Worker
) のOpenShift
環境になりますが、バニラKubernetes
(素のKubernetes
) に較べると、いろいろ入って居るので結構、CPU / Memory が必要のようです。
この仮想マシンですが、Windowsの場合、DドライブをCRCのインストールディレクトリに指定しても、仮想マシンの本体は C:\Users\User名.crcというディレクトリの配下に作成されるので、Cドライブの容量が必要です。
また私の環境は Windows 10 Professional
ですが、Windows としての Requirement に、Windows 10 Fall Creators Update (version 1709) or newer
とあり、Home Edition
はサポートされてないようです。特に記述はありませんが、Hyper-V
が使用されます。
マニュアルの Hardware / Software Requirement ページは以下です。
https://access.redhat.com/documentation/en-us/red_hat_codeready_containers/1.34/html/getting_started_guide/installation_gsg#minimum-system-requirements_gsg
ダウンロード
Red Hatのアカウントにログインします。(アカウントの作成は無料です)
ログイン後、メニューからダウンロードページまで辿ってもいいのですが、以下のリンクをクリックすると直接ダウンロードページに飛べます。
https://developers.redhat.com/download-manager/link/3868678
私の環境は Windows なので、Windows を選択します。
オレンジの枠で囲った部分をダウンロードします。CRC
本体とpull secret
と呼ばれるクレデンシャルのファイルです。
後は以下のマニュアルに従ってセットアップするだけです。
マニュアルは事、細かに手順が書いているので、この記事では上記のマニュアルを参考にしながら、必要最小限の所だけピックアップした手順にとどめます。
インストール
前述のマニュアルを読みながらインストールを進めて行きます。
ダウンロードしたファイルを解凍すると、インストーラーが出てくるので実行します。
「次へ」で完了するタイプのインストーラーです。特に難しいインストーラーではないので、細かいキャプチャーは省略します。
インストール自体は、Windowsの再起動で完了です。
CRCを起動する
Windwos 再起動後は、crc start
で CRC
を起動する事ができます。
このコマンドを実行するとHyper-V
上でCRC
の仮想マシンが起動しますが、Hyper-V
を特に意識する必要はありません。
C:\Users\yuhki>crc start
<省略>
INFO Check DNS query from host...
WARN Failed to query DNS from host: lookup foo.apps-crc.testing: no such host # このWarningが出ても動作は問題なさそう
INFO Verifying validity of the kubelet certificates...
<省略>
INFO Updating root CA cert to admin-kubeconfig-client-ca configmap...
INFO Starting OpenShift cluster... [waiting for the cluster to stabilize]
INFO Operator openshift-apiserver is degraded
INFO Operator openshift-controller-manager is progressing
INFO All operators are available. Ensuring stability...
INFO Operators are stable (2/3)...
INFO Operators are stable (3/3)...
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: UNHGv-6mXfD-FC4Mb-GgwMb
Log in as user:
Username: developer
Password: developer
Use the 'oc' command line interface:
> @FOR /f "tokens=*" %i IN ('crc oc-env') DO @call %i
> oc login -u developer https://api.crc.testing:6443
C:\Users\yuhki>
GUIでも「crc start」と同じ操作に相当する 「start」というメニューがあります。
そちらを使った場合、pull secret (はじめの方の手順で、Red Hat のサイトからダウンロードしたクレデンシャルファイル) の入力を求められる事がありました。何度か削除、再インストールして、この手順を書いたのですが、CLIでは今の所、クレデンシャルの入力を要求された事はありませんでした。(GUIがクレデンシャルの入力を求めてきたタイミングで、クレデンシャルを入力せずGUIでの作業を止めて、CLIでの作業に切り替えてもCLIの場合はクレデンシャルを求められませんでした。)
コマンド出力の最後に kubeadmin
と developer
というユーザーのパスワードが出力されます。
表示された kubeadmin
とそのパスワードで、ログインしてみます。
C:\Users\yuhki>oc.exe login -u kubeadmin -p UNHGv-6mXfD-FC4Mb-GgwMb https://api.crc.testing:6443
Login successful.
You have access to 64 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
C:\Users\yuhki>
問題なさそうです。
通常のOpenShift
では、kubectl
も使えますが、同じように使えるか試して見ます。
C:\Users\yuhki>kubectl get nodes
NAME STATUS ROLES AGE VERSION
crc-dzk9v-master-0 Ready master,worker 11d v1.22.0-rc.0+894a78b
C:\Users\yuhki>
kubectl
も行けるようです。
次に、ブラウザを起動するには以下のコマンドを実行します。
crc console
以下のようにブラウザーが立ち上がりコンソールの URLも自動入力してくれ、ログイン画面が出てくるはずです。
WSLからCRCにアクセスする
kubectl
/ oc
コマンドを使用する時に Linux の grep
等はよく使うと思います。Windows でも同様な事ができますが、Linux の各種ツールがないと苦しいので、WSL
からCRC
にアクセスできるようにセットアップしてみます。
WSL
から Code Ready Container
にアクセスする方法については、そのままではできないようで、以下の GitHub
の issueが上がっています。
https://github.com/code-ready/crc/issues/374
https://github.com/code-ready/crc/issues/2641
いろいろ書いているのですが、現在では当てはまらない記述もあるようです。CRC
側でどうにかできる問題というよりWindows
側の設定を工夫してあげる必要があるようです。
GitHub
の issue
を参考にしつつ、いろいろ実験してみた所、WSL
の /etc/hosts
を編集するだけで、WSL
からCRC
にアクセスできるようになりました。
WSLからCRCにアクセスできるようにするための設定
以下、手順になります。
WSLの Linux マシン上で /etc/hosts
を開きます。
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1 localhost
<省略>
127.0.0.1 api.crc.testing canary-openshift-ingress-canary.apps-crc.testing console-openshift-console.apps-crc.testing default-route-openshift-image-registry.apps-crc.testing downloads-openshift-console.apps-crc.testing kubernetes.docker.internal oauth-openshift.apps-crc.testing
<省略>
127.0.0.1 api.crc.testing ....
という、CRC
が使っているドメインのエントリーがあるので、その部分の127.0.0.1
のループバックIPアドレスを、自分のPCのローカルIPに変更します。自分のPCのローカルIPが192.168.11.19
の場合、以下のようになります。
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1 localhost
<省略>
192.168.11.19(←これを書き替えた) api.crc.testing canary-openshift-ingress-canary.apps-crc.testing console-openshift-console.apps-crc.testing default-route-openshift-image-registry.apps-crc.testing downloads-openshift-console.apps-crc.testing kubernetes.docker.internal oauth-openshift.apps-crc.testing
<省略>
のようにします。
このエントリーはCRCの停止のタイミングで?書き替えられて元に戻る事があるようなので、以下のように作業をシェル化しておいた方が良いでしょう。私はWSLを開き直すと書き替えが再実行されるように「~/.bash_profile」 に以下を加えました。(ただ、書き換わらない事もあり、いまいち条件が掴めてません)
<省略>
export PASSWORD=<rootのパスワード>
echo $PASSWORD | sudo -S sed -i -e '/api.crc.testing/s/127.0.0.1/<ローカルIPアドレス>/g' /etc/hosts > /dev/null 2>&1
次に、Windows のドライブにあるCRC
が生成した kubeconfig
を KUBECONFIG
にセットします。kubeconfig
は、C:\Users\<ユーザー名>\.crc\machines\crc\
の下に作られています。これも~/.bash_profile
等に書き加えておくと良いと思います。
$ export KUBECONFIG=/mnt/c/Users/<user名>/.crc/machines/crc/kubeconfig
oc login
できるか確認します。
$ oc login -u kubeadmin -p dUL4c-LvQGC-q4nXS-6znZz https://api.crc.testing:6443
Login successful.
You have access to 64 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
適当にコマンドを打って動作確認してみましょう。ここでは、oc get nodes
を実行しています。
$ oc get nodes
NAME STATUS ROLES AGE VERSION
crc-dzk9v-master-0 Ready master,worker 12d v1.22.0-rc.0+894a78b
$
良く使うコマンド
CRCの起動
crc start
CRCの停止
crc stop
CRCの状態の確認
crc status
デフォルトのブラウザでOpenShiftのコンソールを開く
crc console
マニア向けの情報
`CRC`のデフォルトで起動している`Cluster Operator`の一覧
$ oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.9.0 True False False 10h
config-operator 4.9.0 True False False 12d
console 4.9.0 True False False 10h
dns 4.9.0 True False False 10h
etcd 4.9.0 True False False 12d
image-registry 4.9.0 True False False 10h
ingress 4.9.0 True False False 12d
kube-apiserver 4.9.0 True False False 12d
kube-controller-manager 4.9.0 True False False 12d
kube-scheduler 4.9.0 True False False 12d
machine-api 4.9.0 True False False 12d
machine-approver 4.9.0 True False False 12d
machine-config 4.9.0 True False False 12d
marketplace 4.9.0 True False False 12d
network 4.9.0 True False False 12d
node-tuning 4.9.0 True False False 10h
openshift-apiserver 4.9.0 True False False 51s
openshift-controller-manager 4.9.0 True False False 10h
openshift-samples 4.9.0 True False False 12d
operator-lifecycle-manager 4.9.0 True False False 12d
operator-lifecycle-manager-catalog 4.9.0 True False False 12d
operator-lifecycle-manager-packageserver 4.9.0 True False False 3m14s
service-ca
$
VMware
上に通常インストールした 4.8.10
の OpenShift
と比較すると以下の Cluster Operator
がありませんでした。
baremetal
cloud-credential
cluster-autoscaler
insights
csi-snapshot-controller
kube-storage-version-migrator
monitoring
storage
`PV`の取り扱い
事前に100Gi
のPV
が30個作られていました。これらをPVC
を通して使用する事になりそうです。
PV
のうち一つは、OpenShift
に付属しているContainer Registryに既に使用されていました。
$ oc get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0001 100Gi RWO,ROX,RWX Recycle Bound openshift-image-registry/crc-image-registry-storage 12d
pv0002 100Gi RWO,ROX,RWX Recycle Available 12d
pv0003 100Gi RWO,ROX,RWX Recycle Available 12d
pv0004 100Gi RWO,ROX,RWX Recycle Available 12d
pv0005 100Gi RWO,ROX,RWX Recycle Available 12d
pv0006 100Gi RWO,ROX,RWX Recycle Available 12d
pv0007 100Gi RWO,ROX,RWX Recycle Available 12d
pv0008 100Gi RWO,ROX,RWX Recycle Available 12d
pv0009 100Gi RWO,ROX,RWX Recycle Available 12d
pv0010 100Gi RWO,ROX,RWX Recycle Available 12d
pv0011 100Gi RWO,ROX,RWX Recycle Available 12d
pv0012 100Gi RWO,ROX,RWX Recycle Available 12d
pv0013 100Gi RWO,ROX,RWX Recycle Available 12d
pv0014 100Gi RWO,ROX,RWX Recycle Available 12d
pv0015 100Gi RWO,ROX,RWX Recycle Available 12d
pv0016 100Gi RWO,ROX,RWX Recycle Available 12d
pv0017 100Gi RWO,ROX,RWX Recycle Available 12d
pv0018 100Gi RWO,ROX,RWX Recycle Available 12d
pv0019 100Gi RWO,ROX,RWX Recycle Available 12d
pv0020 100Gi RWO,ROX,RWX Recycle Available 12d
pv0021 100Gi RWO,ROX,RWX Recycle Available 12d
pv0022 100Gi RWO,ROX,RWX Recycle Available 12d
pv0023 100Gi RWO,ROX,RWX Recycle Available 12d
pv0024 100Gi RWO,ROX,RWX Recycle Available 12d
pv0025 100Gi RWO,ROX,RWX Recycle Available 12d
pv0026 100Gi RWO,ROX,RWX Recycle Available 12d
pv0027 100Gi RWO,ROX,RWX Recycle Available 12d
pv0028 100Gi RWO,ROX,RWX Recycle Available 12d
pv0029 100Gi RWO,ROX,RWX Recycle Available 12d
pv0030 100Gi RWO,ROX,RWX Recycle Available 12d
`Cluster Monitoring`の有効化 (Memory富豪向け)
仮想マシンに割り当てる Memory を 14GiB に増やす事でさらに Cluster Monitoring
を使用する事ができます。
(14GiB以下だと設定をしても Warningで仮想マシンが起動しません)
Cluster Monitoring を有効化する
crc config set enable-cluster-monitoring true
仮想マシンへの Memory の割り当てを 14 GiB に増やす
crc config set memory 14336
設定の確認
C:\Users\yuhki>crc config view
- consent-telemetry : no
- enable-cluster-monitoring : true
- memory : 14336
C:\Users\yuhki>
仮想マシンを再起動します。
$ oc get co | grep monitoring
monitoring 4.9.0 True False False 12m
monitoring の Cluster Operator が稼働している事がわかります。
project
名 openshift-monitoring
に移動して Cluster Monitoring
用の Pod
が起動しているか確認します。
$ oc project openshift-monitoring
Now using project "openshift-monitoring" on server "https://api.crc.testing:6443".
$ oc get pods
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 5/5 Running 0 13m
cluster-monitoring-operator-55c84d8bc5-fgq4h 2/2 Running 2 (13m ago) 14m
grafana-7bddb8d546-xrccg 2/2 Running 0 13m
kube-state-metrics-5f6567c8f8-vh5jc 3/3 Running 0 13m
node-exporter-szgqm 2/2 Running 0 13m
openshift-state-metrics-8f874c588-f42mq 3/3 Running 0 13m
prometheus-adapter-69dcbc4f56-x9hdd 1/1 Running 0 13m
prometheus-k8s-0 7/7 Running 0 13m
prometheus-operator-74dddf98cc-hdkct 2/2 Running 1 (13m ago) 13m
telemeter-client-b7f885cc4-rg5nw 3/3 Running 0 13m
thanos-querier-66957b9966-v8qbt 5/5 Running 0 13m
$
Cluster Montirong
用のPod
が起動しています。
遭遇したエラーと解決した方法
エラー・ケース1
現象 :CRCのVMが中々起動しない。(VMが作られない)
原因:Cドライブの容量不足
CRCのインストーラー起動時に、インストールディレクトリとして、D:ドライブ
の D:\Program Files\CodeReady Containers\
を指定したが、C:\Users\<ユーザー名>\.crc
の下にVM
のcrc.vhdx
ファイル等が作成される。
なので、例えD:ドライブ
にインストールしようとしてもC:ドライブ
の容量が足りないとVM
が作成されない。
D:\Program Files\CodeReady Containers\
にも crc.vhdx
は配置されるが、Hyper-V
コンソールから作成されたCRC
のVM
を確認すると実際に参照されている仮想マシンファイルは、C:\Users\<ユーザー名>\.crc
配下に配置されたcrc.vhdx
である。
ドキュメント
やピクチャ
等はDドライブ
に移動済みで(これらはフォルダのプロパティでパスを変更するだけで簡単に移動できる)、さらにそれ以外の C:\Users\
配下のディレクトリを移動させるのは大変だったので、Cドライブ
のSSD
を大きい容量に換装する事で解決しました。
課金で解決。
エラー・ケース2
現象:
oc login
時に「error: converting to : type names don't match (Unknown, RawExtension), and no conversion 'func (runtime.Unknown, runtime.RawExtension) error' registered.
」とエラーがでる。
C:\Users\yuhki>oc.exe login -u kubeadmin -p qCk7i-5LZGS-A87Uo-jd4Hb https://api.crc.testing:6443
Login successful.
You have access to 64 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "openshift-ingress".
error: converting to : type names don't match (Unknown, RawExtension), and no conversion 'func (runtime.Unknown, runtime.RawExtension) error' registered.
C:\Users\yuhki>mkdir tmp
原因:これは個人的な環境の問題だった。
ググると kubectl
とクラスターのバージョンがマッチしていないと同じエラーが起きる事があるらしいので、別のバージョンのoc
コマンドを参照しているのでは?と当たりをつけて検索。
丁度コマンドを実行したディレクトリに昔インストールした oc.exe
コマンドが残っていた。古い oc.exe
コマンドを削除(rename) する事で解決。
ちなみにCRC
によってインストールされる oc.exe
は、C:\Users\<ユーザー名>\.crc\bin\oc\oc.exe
とその近くの cache と名前が付いたディレクトリに存在している。CRCのインストーラーを起動した時にインストールディレクトリとして指定した D:\Program Files\CodeReady Containers\
のディレクトリには存在していなかった。
エラー・ケース3
現象:GUIの「Status and Logs」を確認すると以下のエラーがログに大量に表示されている。
原因:多分、問題無い?
C:\Users\<ユーザー名>\.crc\crdc.log
を見ると同様のエラーが記録されているものの、タイムスタンプを見る限り、テンポラリーのエラーで間欠的に出る感じで、動作的には問題があるように見えない。
time="2021-10-25T15:32:45+09:00" level=error msg="net.Dial() = dial tcp 192.168.122.1:16509: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."