CodeReady ContainersでWindows上にOpenShift環境を構築する


OpenShift4.2がリリースされたので、家で使ってみようと、 CodeReady Containers(crc) をインストールしてみた。 CodeReady Containersは、これまで minishift という名前のプロダクトだったものが、OpenShift 4.xになって名前が変わったもので、テストとか開発とかに使えるものである。

10/17に、github上では、1.0.0のタグが切られていたが、まだpre-releaseということで、Red Hat Developers Programに登録していれば、 Developer Preview版が利用できるようだ。

導入した環境

  • Windows 10 Professional
  • メモリ 64 GB (メモリはわりと食うので少ないとつらいと思う)

ダウンロード

ここからリンクを辿っていくとダウンロードできる。

https://developers.redhat.com/products/codeready-containers

OSごとのバイナリと、インストール時に入力が必要なpull secretをダウンロードしておく。 2GBぐらいあり、わりと重たい。

起動

基本ドキュメント通りにやればよいはず。

  1. ダウンロードしたファイルを展開し、 crc バイナリをパスの通った場所に配置する

  2. 仮想マシンを作成する

    たぶん場合によってはHyper-Vのネットワークが作成されたりするはず。

    λ crc setup
    INFO Checking if running as normal user
    INFO Caching oc binary
    INFO Unpacking bundle from the CRC binary
    INFO Check Windows 10 release
    INFO Hyper-V installed
    INFO Is user a member of the Hyper-V Administrators group
    INFO Does the Hyper-V virtual switch exist
    Setup is complete, you can now run 'crc start' to start a CodeReady Containers instance
    
  3. 起動する

    起動時にデフォルトではメモリを8GBで起動するが、何かやるには到底足りないので、16GBぐらいは指定しておきたい。また、DNSサーバを指定しておかないと、他の仮想マシンを動かしてたり仮想ネットワークが複数あったりした場合に、うまく名前解決できないケースがあったので指定しておくのが吉。

    λ crc start -m 16384 -n 8.8.8.8
    INFO Checking if running as normal user
    INFO Checking if oc binary is cached
    INFO Check Windows 10 release
    INFO Hyper-V installed and operational
    INFO Is user a member of the Hyper-V Administrators group
    INFO Does the Hyper-V virtual switch exist
    
  4. pull secretを入力する

    初回起動時には、pull secretの入力を求められるのでバイナリと一緒にダウンロードしておいたjsonから情報を貼り付ける。

    ? Image pull secret [? for help] **********************************
    INFO Loading bundle: crc_hyperv_4.2.0-0.nightly-2019-09-26-192831.crcbundle ...
    INFO Creating CodeReady Containers VM for OpenShift 4.2.0-0.nightly-2019-09-26-192831...
    INFO Verifying validity of the cluster certificates ...
    INFO Adding 8.8.8.8 as nameserver to Instance ...
    INFO Will run as admin: add dns server address to interface vEthernet (Default Switch)
    INFO Check internal and public dns query ...
    INFO Copying kubeconfig file to instance dir ...
    INFO Adding user's pull secret and cluster ID ...
    INFO Starting OpenShift cluster ... [waiting 3m]
    INFO
    INFO To access the cluster, first set up your environment by following 'crc oc-env' instructions
    INFO Then you can access it by running 'oc login -u developer -p developer https://api.crc.testing:6443'
    INFO To login as an admin, username is 'kubeadmin' and password is XXXXX-XXXXX-XXXXX-XXXXX
    INFO
    INFO You can now run 'crc console' and use these credentials to access the OpenShift web console
    CodeReady Containers instance is running
    

    インストール直後は、一般ユーザである developer ユーザ(パスワードはdeveloper)と、管理者ユーザである kubeadmin ユーザの2種類のユーザが存在する。kubeadminユーザのパスワードは起動時に表示されるのでそれを見ておく。

ログイン

ログインは、CLIとWebコンソールのふたつがある。

CLI ログイン

OpenShiftでは、kubernetesでいうところの kubectl に相当する、 oc コマンドが存在する。 crcにもocコマンドは同梱されているので、以下のコマンドでパスの通しかたがわかる。

λ crc oc-env
SET PATH=C:\Users\grugrut\.crc\bin;%PATH%
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('crc oc-env') DO @call %i%i

ocコマンドの場所にパスを通したら、あとはログインするだけである。

λ oc login
Authentication required for https://api.crc.testing:6443 (openshift)
Username: kubeadmin
Password:
Login successful.

You have access to 51 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

Webコンソールログイン

OpenShiftには、はじめからブラウザ経由でアクセスできるWebコンソールが用意されているので、そちらを使うことも多いだろう。 crc console コマンドを実行することで、ブラウザが起動し、Webコンソールにアクセスできる。

オレオレ証明書なので、そこは目をつぶってそのまま接続するとログイン画面が出てくる。

/ox-hugo/20191019-crc-login.png

kubeadminユーザでログインするときは、 kube:admin を、developerユーザでログインするときは、 htpasswd_provider を選択する。

ログインに成功すると、ダッシュボードが表示されるはずだ。

/ox-hugo/20191019-crc-dashboard.png

初期設定

ここまでですぐにOpenShiftが使える状態ではあるが、ベータ版でさわってみてた感じ、以下の設定はやっておいたほうがよさそう。

  • 監視機能の有効化
  • ユーザの作成

監視機能の有効化

ダッシュボードでクラスタのリソース状況が見れたり、Podの状況が見れる枠はあるものの、デフォルトでは監視機能が無効化されているため、まったく意味をなしていない。

そこで、監視を有効化して、情報を収集できるようにしておく。

方法はドキュメントに書いてあるとおりで、以下のコマンドを順にCLIで実行すればよい。ドキュメントだと、セミコロン区切りでまとめて書いてあるが、windowsの場合はセミコロンで複数コマンドを順番に実行することができないので、ひとつずつ分割して実行する。

λ oc scale --replicas=1 statefulset --all -n openshift-monitoring
statefulset.apps/alertmanager-main scaled
statefulset.apps/prometheus-k8s scaled

λ oc scale --replicas=1 deployment --all -n openshift-monitoring
deployment.extensions/cluster-monitoring-operator scaled
deployment.extensions/grafana scaled
deployment.extensions/kube-state-metrics scaled
deployment.extensions/openshift-state-metrics scaled
deployment.extensions/prometheus-adapter scaled
deployment.extensions/prometheus-operator scaled
deployment.extensions/telemeter-client scaled

しばらくすると、ダッシュボードに収集した値が表示されるようになるだろう。ちなみに結構監視機能はメモリを消費するので、デフォルトの8GBだとメモリが足りなくて必要なPodを起動できず動かない問題が確認できている。

ユーザの追加

kubeadminユーザでWebコンソールにログインすると上の方で警告画面がでているところからもわかるとおり、 kubeadminユーザは一時的なユーザらしく、あまりこれを使うのは好ましくないらしい。まあパスワードも覚えにくいし、適当に自分で作ったほうがよいだろう。

ログイン手段の作成方法もいくつかあるが、デフォルトで用意されているdeveloperユーザ用の htpasswdに自分用のユーザを作成するのが楽だろう。

https://console-openshift-console.apps-crc.testing/k8s/ns/openshift-config/secrets/htpass-secret

にアクセスすると(もしくは左のメニューの Workloads の中の Secrets から、 htpass-secret を探すのもよい)、ログイン用のhtpasswdが書かれたsecretの設定を見ることができる。ここから、右上の Actions から Edit Secret を選択する。

htpasswdの設定を作成する方法はいくつかあるが、たとえば WSL 等のLinux環境がある場合は、 htpasswdコマンドを使えば簡単に作成できる。今回は、私用に、grugrutユーザを作っている。

$ sudo apt install apache2-utils
$ htpasswd -n grugrut
New password:
Re-type new password:
grugrut:XXXXXXXXXXXXXXXXXXXXXXXXXX

これで oc login してみると、作成したユーザでログインできるはず。だが、これだけだと何もできないただログインできるだけのユーザなので、クラスタ管理者の権限である cluster-admin ロールをバインドする。

kubeadminユーザで https://console-openshift-console.apps-crc.testing/k8s/all-namespaces/rolebindings にアクセスし、 Create Binding ボタンをクリック。

  • Binding Type は、 Cluster-wide Role Binding を選択
  • Name は、名前がかぶると怒られるので、 cluster-admin-(作成するユーザ名) とでもすればよい
  • Role Name は、 cluster-admin を選択
  • Subject は、 User を選び、先程作成したユーザ名を入れる

これで作成すれば、晴れてクラスタ管理者となれる。ちなみにコマンドだと、 oc adm policy add-cluster-role-to-user cluster-admin (ユーザ名) であり、もしかしたらこっちのほうが楽かもしれない。

kubeadminユーザの削除

自分自身をクラスタ管理者にしたら、もはやkubeadminユーザは不要なので消してしまってもよいはず。ドキュメントにも消しかた書いてあるし。

https://docs.openshift.com/container-platform/4.2/authentication/remove-kubeadmin.html

kubeadminユーザを削除することによって、Webコンソールへのログイン時に、「kube:admin」か「htpasswd」なのか選ばなくてよくなるので、ユーザを作ったあとは消してしまってよいかもしれない。

まとめ

これで家の環境でOpenShiftが使えるようになったので、今後コンテナ動かすところなども見ていきたい。

注意点

今のところバグで、30日で証明書が期限切れになり、起動できなくなってしまうらしい。解決策はなく、一度削除して(当然作成したものも消える)、作りなおす必要があるとか。おそろしい話である。