OKD4 が 2020年7月にGAとなった。ドキュメントを読むかぎり、Minishiftとは大きく異なり、ハイブリッドクラウドを意識した内容となっているので、実際に動かしてみることにした。
OKD4 は、The Origin Community Distribution of Kubernetes の略とされる(なんか順番違うけど)。OpenShift v4 の大部分の上流となっているオープンソースプロジェクト Origin から配布される。これは Apache License, Version 2.0. で配布されるオープンソースである。
ダウンロード
パソコンに、ocコマンドがインストールされていれば、以下のコマンドでダウンロードすることができる。
$ oc adm release extract --tools quay.io/openshift/okd:4.5.0-0.okd-2020-07-14-153706-ga
バイナリをブラウザでダウンロードする場合は、https://github.com/openshift/okd/releases から入手できる。
インストールの実行
OKD4のインストールは、自身のパソコンにインストールするのではなく、Terraform を利用して、AWS, Azure, GCP, RHV, vSphere, OpenStack、そして、ベアメタルなどにインストールする。 今回はAWSを利用して検証した。
先にダウンロードしたファイルを展開すると、openshift-install
コマンドが出てくるので、/usr/local/bin
など配置して、シェルから利用できるようにする。
AWSの事前準備
以下の条件を満たす必要がある。特にドメイン名を取得する必要がるので、最安レベルでも $9.00 程度の費用が発生する。
- AWSにアカウントを持っておりログイン可能であること。
- Route 53 パブリックでアクセス可能なドメインを持っていること。
- AWSのCLIコマンド aws がセットアップされていること。
- VPC設定があり、インターネットGW、サブネットなど、必要な内容が設定されていること。
インストールコマンドの実行
上記の条件が整っていないと、次のコマンドが動作しない。それから、インストールを開始してから完了するまでに、およそ40分を要したことから、時間的に余裕がある時に実施した方が良い。対話式で必要な項目を要求するので、順番に従ってインストールする。 質問の中で Pull Secret
の入力を要求するところには、{"auths":{"fake":{"auth": "bar"}}}
をインプットすれば良い。これで待っているだけで、マスターノードx3、ワーカーノード x3 のクラスタが出来上がる。
$ openshift-install create cluster
? Platform aws
INFO Credentials loaded from the "default" profile in file "/Users/maho/.aws/credentials"
? Region ap-northeast-1
? Base Domain takara-teck.uk
? Cluster Name okd4-1
? Pull Secret [? for help] **********************************
INFO Creating infrastructure resources...
INFO API v1.18.3 up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.okd4-1.takara-teck.uk:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/Users/maho/openshift/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.okd4-1.takara-teck.uk
INFO Login to the console with user: "kubeadmin", and password: "****-****-*****-*****"
INFO Time elapsed: 38m2s
完了時のAWSコンソール画面は次のようになっている。 m4.xlargeだと月額2万くらいなので、全部で10万円/月くらいの料金となる。
OKD4 クラスタへのアクセス
インストールコマンドを実行したディレクトリに、認証情報がダウンロードされるので、環境変数 KUBECONFIG にパスを設定することで、ocコマンド、または、kubectl コマンドからクラスタへアクセスすることができる。 OCPではバージョンが少し遅れるが、OKDではかなり新しい。
$ export KUBECONFIG=`pwd`/auth/kubeconfig
$ oc get node
NAME STATUS ROLES AGE VERSION
ip-10-0-138-142.ap-northeast-1.compute.internal Ready worker 17m v1.18.3
ip-10-0-145-133.ap-northeast-1.compute.internal Ready master 32m v1.18.3
ip-10-0-161-71.ap-northeast-1.compute.internal Ready master 32m v1.18.3
ip-10-0-170-100.ap-northeast-1.compute.internal Ready worker 18m v1.18.3
ip-10-0-193-251.ap-northeast-1.compute.internal Ready worker 18m v1.18.3
ip-10-0-194-197.ap-northeast-1.compute.internal Ready master 32m v1.18.3
ウェブコンソールへのアクセス
ウェブ画面へのアクセスも、インストールコマンドのアウトプットにURLとパスワードが表示されているので、その表示に従ってアクセスすれば良い。
ログイン後は、OCPv4と同じと思って良い。
AWSとの連動程度を確認
高良執筆の本で利用しているサンプルのマニフェストを実行することで、AWSのロードバランサーと連携しているか確認してみる。
$ git clone https://github.com/takara9/codes_for_lessons
$ cd codes_for_lessons/step09
$ ls -al
total 72
drwxr-xr-x 11 maho staff 352 7 29 17:13 .
drwxr-xr-x 17 maho staff 544 7 29 17:13 ..
-rw-r--r-- 1 maho staff 2593 7 29 17:13 README.md
-rw-r--r-- 1 maho staff 423 7 29 17:13 deploy.yml
-rw-r--r-- 1 maho staff 112 7 29 17:13 svc-ext-dns.yml
-rw-r--r-- 1 maho staff 120 7 29 17:13 svc-ext.yml
-rw-r--r-- 1 maho staff 196 7 29 17:13 svc-headless.yml
-rw-r--r-- 1 maho staff 175 7 29 17:13 svc-lb.yml
-rw-r--r-- 1 maho staff 150 7 29 17:13 svc-np.yml
-rw-r--r-- 1 maho staff 158 7 29 17:13 svc-sa.yml
-rw-r--r-- 1 maho staff 244 7 29 17:13 svc.yml
Nginxのポッドをデプロイしたあと、type=LoadBalancer のサービスをデプロイする。このLoadBalancerはクラウドサービスのロードバランサーのデプロイをリクエストする。
以下の通り、結果は、ELBがデプロイされ、DNS名でアクセスできるようになった。
maho:step09 maho$ oc apply -f deploy.yml
deployment.apps/web-deploy created
maho:step09 maho$ oc apply -f svc-lb.yml
service/web-service-lb created
maho:step09 maho$ oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.30.0.1 <none> 443/TCP 66m
openshift ExternalName <none> kubernetes.default.svc.cluster.local <none> 51m
web-service-lb LoadBalancer 172.30.243.5 a97b7ba2627d64bfcaca4880ed09b3e9-1916899538.ap-northeast-1.elb.amazonaws.com 80:30941/TCP 6s
DNSへ追加されたロードバランサーの情報が安定したところで、curlコマンドでアクセスを試みる。問題なくアクセスできた。
maho:step09 maho$ curl http://a97b7ba2627d64bfcaca4880ed09b3e9-1916899538.ap-northeast-1.elb.amazonaws.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<以下省略>
永続ボリュームの利用
PVCをデプロイしてみたが、権限が不足しているためか、Pending状態から先へ進むことがなかった。 ストレージクラスにはAWS EBS用のプロビジョナーが組み込まれているが、問題解決は料金がかかるので見送る。
$ oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc-1 Pending gp2 78m
$ oc get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 118m
クリーンナップ
次のコマンドで、EC2インスタンスを消去できる。
$ openshift-install destroy cluster
INFO Credentials loaded from the "default" profile in file "/Users/maho/.aws/credentials"
INFO Disassociated instance=i-0c17651e19a37ab61 name=okd4-1-k446v-worker-profile role=okd4-1-k446v-worker-role
INFO Deleted InstanceProfileName=okd4-1-k446v-worker-profile arn="arn:aws:iam::102321567306:instance-profile/okd4-1-k446v-worker-profile" instance=i-0c17651e19a37ab61
INFO Disassociated instance=i-0926f0a10b0442c39 name=okd4-1-k446v-master-profile role=okd4-1-k446v-master-role
INFO Deleted InstanceProfileName=okd4-1-k446v-master-profile arn="arn:aws:iam::102321567306:instance-profile/okd4-1-k446v-master-profile" instance=i-0926f0a10b0442c39
<以下省略>
まとめ
OKD4 は Minishitの流れを組み、個人がパソコンを使って自己研鑽で利用できる環境と考えていたが、クラウドやオンプレミスの仮想環境で利用するものであり、デフォルト設定では月額10万程度必要な、本格的な構成が出来上がってしまう。
これは凄い! ユーザー企業で OCPv4 の予算を確保するための効果測定の検証であれば、OKD4を利用しても良いのではと思ってしまう。もちろん、OCP4とOKD4は全く同じソフトウェアではないので、あくまでも代用品である。
FAQには、シングルノードのクラスタを構築できるとあるので、次回に試してみたい。
参考資料
[1] OKD Latest Documentation, https://docs.okd.io/latest/installing/installing_aws/installing-aws-default.html
[2] https://github.com/openshift/okd/releases
[3] https://github.com/openshift/okd#getting-started