内容
Red Hat OpenShift on IBM Cloud勉強の手始めに、こちらのチュートリアルを実施しました。(日本語訳ページはバージョンが古いようなので英語ページを参照)
学んだことの覚え書き。
Creating an Red Hat OpenShift cluster in your Virtual Private Cloud (VPC)
目標
・ VPC上にRed Hat OpenShift on IBM Cloudクラスターの作成する
・ OpenShiftプロジェクトにアプリをデプロイしてアクセスする
OpenShift ワーカー・ノードは、有料アカウントおよび標準クラスターでのみ使用可能です。課金が発生するようです。
事前準備
権限
IBM Cloud 管理者権限を持つユーザ
各種コマンド・ライン・ツールをインストール
Tutorialに記載されているリンク先の情報に従ってセットアップ
- ibmcloudコマンド
- ibmcloudコマンドのプラグイン
- container-service(oc)
- container-registry(cr)
- observe-service(ob)
- infrastructure-service(is) ※VPC操作のため
- ocコマンド および kubectlコマンド
Step1. IBM Cloud準備〜クラスター作成
IBM Cloud準備
既存のVPC、サブネット、パブリックゲートウェイを使用。
今回はロケーション東京2で作成。
追加でオブジェクトストレージを作成(内部レジストリーのバックアップ先)。
- VPC : 既存(vpc-fj)
- サブネット : 既存(sn-fj-2) ※東京2
- パブリックゲートウェイ : 既存(pgw-fj-2) ※東京2、sn-fj-02に接続
- オブジェクトストレージ : ibmcloudコマンドで作成(fj-cos)
ibmcloud resource service-instance-create fj-cos cloud-object-storage standard global
環境のイメージ
クラスターの作成
作成パラメータ
- クラスター名 : roks-fj-cluster
- ゾーン : 東京2(jp-tok-2)
- バージョン : 4.10(5/2時点の最新)
- ワーカーノードスペック(OpenShiftの最小値)
- 4 cores, 16GB memory
- 2台
下記実行してクラスター作成。クラスターができるまでしばらくかかる。(40分くらい)
ibmcloud oc cluster create vpc-gen2 --name fj-cluster --zone jp-tok-2 --version 4.10_openshift --flavor bx2.4x16 --workers 2 --vpc-id <VPCのID> --subnet-id <サブネットのID> --cos-instance <オブジェクトストレージのID>
※オブジェクトストレージのIDは ibmcloud resource service-instances --long
コマンドで取得できる。("crn:~"で始まる文字列を指定する)
作成後確認
ibmcloud oc cluster get --cluster <クラスター名>
で作成状況を確認。(クラスターの状態が「normal」になること)
ibmcloud oc cluster config --cluster <クラスター名> --admin
でクラスターのコンテキスト構成をダウンロード。などなど。
Step2. アプリケーションのデプロイ
Tutorialに沿ってアプリのデプロイを実施。
プロジェクトの作成
oc new-project hello-world
コンテナの作成・デプロイ、サービスの作成
oc new-app --name hello-world https:...
このコマンドにより以下が行われる。
・ Githubリポジトリ上のDockerfileに基づきコンテナイメージを作成
・ コンテナをデプロイしPodを起動
・ hello-worldサービスを作成
サービスを確認。
% oc get svc -n hello-world
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world ClusterIP 172.21.194.214 <none> 8080/TCP 4s
%
EXTERNAL-IPがなくまだ外部ネットワークからサービスにアクセスできない。以降の作業で設定する。
Step3. 外部ネットワークからアクセスできるようにする
方法
Tutorialには2つの方法が記載されている
1. VPCロードバランサを経由してアプリケーションにアクセスする
2. Red Hat OpenShiftのrouteを利用する(Tip)
方法1. VPCロードバランサを経由してアプリケーションにアクセスする
OpenShift上でLoadbalancerタイプのサービスを作成すると、自動的にVPCにロードバランサが作成されサービスと紐付けられる。VPCロードバランサのURLにアクセスすることでサービスにアクセス可能となる。
作り方
Tutorialのやり方ではdeploy configurationは作成されず、Tutorial通りに実行すると "Error from server (NotFound): deploymentconfigs.apps.openshift.io "hello-world" not found" でエラーとなる。
oc expose dc/hello-world --type=LoadBalancer...
引数の「dc/hello-world」 を 「deployment/hello-world」に変えて実行する。
oc expose deployment/hello-world --type=LoadBalancer --name=hw-lb-svc --port=8080 --target-port=8080 -n hello-world
この結果、VPC側に自動的にロードバランサが作成される。VPCロードバランサのURLはoc describe service hw-lb-svc -n hello-world
の出力で「LoadBalancer Ingress」の項目で確認できる。
% oc describe service hw-lb-svc -n hello-world
Name: hw-lb-svc
Namespace: hello-world
Labels: app=hello-world
app.kubernetes.io/component=hello-world
app.kubernetes.io/instance=hello-world
Annotations: <none>
Selector: deployment=hello-world
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 172.21.41.11
IPs: 172.21.41.11
LoadBalancer Ingress: xxxxxxxx-jp-tok.lb.appdomain.cloud
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 32647/TCP
Endpoints: 172.17.9.53:8080
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 96s service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 70s service-controller Ensured load balancer
%
疎通確認
「LoadBalancer Ingress」のURLにアクセス。
% curl xxxxxxxx-jp-tok.lb.appdomain.cloud:8080
Hello world from hello-world-5794dc544c-q2lsz! Your app is up and running in a cluster!
%
方法2. Red Hat OpenShiftのrouteを利用する(Tip)
OpenShiftのRoute機能を利用してアプリケーションにアクセスする。
作り方
公開用のサービスとして(hw-rt-svc)を作成する。
oc expose deployment/hello-world --name=hw-rt-svc
作成したサービスを公開する。(シンプル)
oc expose service hw-rt-svc
サービスへの経路ができたことを確認する。
% oc get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
hw-rt-svc hw-rt-svc-hello-world.roks-fj-cluster-xxxx.jp-tok.containers.appdomain.cloud hw-rt-svc 8080 None
%
疎通確認
経路情報のHOST/PORTにアクセスする。
% curl hw-rt-svc-hello-world.roks-fj-cluster-xxxx.jp-tok.containers.appdomain.cloud
Hello world from hello-world-5794dc544c-q2lsz! Your app is up and running in a cluster!
%
接続イメージ
オプション
hello-worldプロジェクトの削除
削除対象のリスト
% oc get all -l app=hello-world -o name -n hello-world
service/hello-world
service/hw-lb-svc
service/hw-rt-svc
deployment.apps/hello-world
buildconfig.build.openshift.io/hello-world
build.build.openshift.io/hello-world-1
imagestream.image.openshift.io/hello-world
imagestream.image.openshift.io/node
route.route.openshift.io/hw-rt-svc
%
全て削除
% oc delete all -l app=hello-world -n hello-world
service "hello-world" deleted
service "hw-lb-svc" deleted
service "hw-rt-svc" deleted
deployment.apps "hello-world" deleted
buildconfig.build.openshift.io "hello-world" deleted
imagestream.image.openshift.io "hello-world" deleted
imagestream.image.openshift.io "node" deleted
route.route.openshift.io "hw-rt-svc" deleted
%
※hw-lb-svcの削除によりVPCロードバランサも削除される
以上