Red Hat OpenShift on IBM CloudがGAしたので早速使ってみた


0. この投稿がきっかけで記事を書きました。(2019年10月27日追記)

最速で評価して書いたこのQiitaの記事をきっかけに、アットマークITに記事を書く機会をいただきました。
この記事では、Tok02だけのシングルサイトですが、記事では3つのデーターセンターを使った構成になってます。よかったら、記事の方もご一読頂けたら嬉しいです。

IBMのRed Hat買収の成果「Red Hat OpenShift on IBM Cloud」によって、複雑なマルチゾーンのOpenShiftクラスタの構築はどれほど簡単になるのか?
https://www.atmarkit.co.jp/ait/articles/1910/21/news003.html

1. はじめに

2019年8月1日に IBM Cloudの 「 Red Hat OpenShift on IBM Cloud 」がサービスインしました。
早いもの好きの1ユーザーとして、早速、OpenShiftのクラスターを作成してみます。

2. Red Hat OpenShift on IBM Cloud クラスター の作成

IBM Cloudポータルから「 Red Hat OpenShift Cluster 」を作成する

  1. IBM Cloudポータルから「 カタログ 」、 「 コンテナ 」、「 Red Hat OpenShift Cluster 」、「作成」の順番に遷移します。

  2. 「 Create a new OpenShift cluster 」が表示されます。

  • 「クラスタ名」を入力
  • 「リージョン」、「ロケーション」、OpenShiftのワーカーノードを展開する「ワーカーゾーン」を選択
    今回は、評価目的なので、ロケーションはtokyoで、ワーカーゾーンはtok02のみにしました。
  • デーフォルトのワーカープールで使用するフレーバを選択する。
    今回は最小の4vCPU,16GB RAM RHELを選択
  • ゾーンごとに作成するワーカーノード数を設定します。(デフォルト3)
  • 「クラスターの作成」をクリックしてクラスターの作成開始

「クラスターの作成」をクリックしてから約30分から45分でOpenShiftのクラスターが起動します。

リソースの一覧の中から気になったところは主に以下の4つです。

  • OpenShiftのバージョンは3.11
  • このサービスはAZ(アベイラビリティーゾーン)対応のロケーションでサービスインされていてる。 例えば、ロケーションをtokyoを選択すると、ワーカーゾーンは tok02, tok04, tok05の3つ利用できる。
  • ワーカーノードで選択できるマシンは、仮想・共有、仮想・専用、ベア・メタル(物理サーバ)と用途に合わせて選択できて便利  オンプレミスと違って、後から、ユースケースに合わせてワーカーノードを追加・削除できる
  • GPUのマシンも選べる

OpenShiftのCLI環境の準備

OpenShift clusterデプロイ中に、CLIの環境を準備します。

  1. IBM Cloud Developer Tools をインストールします。
$ curl -sL https://ibm.biz/idt-installer | bash
[main] --==[ IBM Cloud Developer Tools for Linux/MacOS - Installer, v1.2.3 ]==--
  1. oc clientをダウンロードして設置します。
$ curl -LO https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-mac.zip
$ unzip openshift-origin-client-tools-v3.11.0-0cbc58b-mac.zip
Archive:  openshift-origin-client-tools-v3.11.0-0cbc58b-mac.zip
  inflating: oc                      
  inflating: kubectl                 
  inflating: README.md               
  inflating: LICENSE                 
$ cp oc /usr/local/bin/
$ cp kubectl /usr/local/bin/
$ which oc
/usr/local/bin/oc

3. OpenShift Clusterデプロイ後の確認

OpenShift Webコンソールへのアクセス

  1. OpenShift clusterのデプロイ終了後、「 OpenShift Webコンソール 」をクリックすることで 「 OpenShift Webコンソール 」が表示されます。
  • 「 OpenShift Webコンソール 」画面

OpenShiftへのCLIでのログイン

  1. OpenShiftのCLI操作をするために、まずは上記、 「 OpenShift Webコンソール 」画面の右上のユーザ名をクリックして表示された「Copy Login Command」をクリックして、クリップボードにコピーします。

  2. コピーしたコマンド「oc login https://c100-e.jp-tok.containers.cloud.ibm.com:31532 --token=<< ログイン用のAPI token >>」をターミナルで実行してログインします。

$ oc login https://c100-e.jp-tok.containers.cloud.ibm.com:31532 --token=<< ログイン用のAPI token >>

Logged into "https://c100-e.jp-tok.containers.cloud.ibm.com:31532" as "IAM#[email protected]" using the token provided.

You have access to the following projects and can switch between them with 'oc project <projectname>':

  * default
    ibm-cert-store
    ibm-system
    kube-proxy-and-dns
    kube-public
    kube-service-catalog
    kube-system
    openshift
    openshift-ansible-service-broker
    openshift-console
    openshift-infra
    openshift-monitoring
    openshift-node
    openshift-template-service-broker
    openshift-web-console

Using project "default".

4. 初めてのアプリケーションの作成

1. 「 oc new-project <<プロジェクト名>>でOpenShiftのプロジェクトを作成します。

$ oc new-project sample
Now using project "sample" on server "https://c100-e.jp-tok.containers.cloud.ibm.com:31532".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git

to build a new example application in Ruby.

2. oc new-appコマンドを使って、プロジェクト作成時に出力されたRubyのサンプルアプリケーションを作成します。 今回は、centos/ruby-25というイメージを使用してアプリケーション[ https://github.com/sclorg/ruby-ex.git ]をビルドします。

$ oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
--> Found Docker image cb490f3 (4 months old) from Docker Hub for "centos/ruby-25-centos7"
--> Creating resources ...
    imagestream.image.openshift.io "ruby-25-centos7" created
    imagestream.image.openshift.io "ruby-ex" created
    buildconfig.build.openshift.io "ruby-ex" created
    deploymentconfig.apps.openshift.io "ruby-ex" created
    service "ruby-ex" created
--> Success
    Build scheduled, use 'oc logs -f bc/ruby-ex' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/ruby-ex' 
    Run 'oc status' to view your app.

3. oc get allコマンド実行してデプロイの結果を確認します。 -o wide オプションをつけると ノード名が表示されます。   
  pod/ruby-ex-1-q4jmbのSTATUSがRunningになっているのでデプロイは正常に終了しています。

$ oc get all -o wide
NAME                  READY     STATUS      RESTARTS   AGE       IP              NODE            NOMINATED NODE
pod/ruby-ex-1-build   0/1       Completed   0          12m       172.30.152.71   10.129.139.47   <none>
pod/ruby-ex-1-q4jmb   1/1       Running     0          9m        172.30.152.72   10.129.139.47   <none>

NAME                              DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                                                                                                       SELECTOR
replicationcontroller/ruby-ex-1   1         1         1         9m        ruby-ex      172.21.210.124:5000/sample/ruby-ex@sha256:c2c95649aa6624cce585cf09ad7c0b52d0e35ace9ff0c2eff69011c17854cdc1   app=ruby-ex,deployment=ruby-ex-1,deploymentconfig=ruby-ex

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE       SELECTOR
service/ruby-ex   ClusterIP   172.21.180.60   <none>        8080/TCP   12m       app=ruby-ex,deploymentconfig=ruby-ex

NAME                                         REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/ruby-ex   1          1         1         config,image(ruby-ex:latest)

NAME                                     TYPE      FROM      LATEST
buildconfig.build.openshift.io/ruby-ex   Source    Git       1

NAME                                 TYPE      FROM          STATUS     STARTED          DURATION
build.build.openshift.io/ruby-ex-1   Source    Git@c00ecd7   Complete   12 minutes ago   3m7s

NAME                                             DOCKER REPO                                               TAGS      UPDATED
imagestream.image.openshift.io/ruby-25-centos7   docker-registry.default.svc:5000/sample/ruby-25-centos7   latest    12 minutes ago
imagestream.image.openshift.io/ruby-ex           docker-registry.default.svc:5000/sample/ruby-ex           latest    9 minutes ago

4. oc new-appコマンドでは、外部アクセス用のrouteは作成されないので、作成してアクセスします。

$ oc expose svc ruby-ex
route.route.openshift.io/ruby-ex exposed

$ oc get route
NAME      HOST/PORT                                                                                                 PATH      SERVICES   PORT       TERMINATION   WILDCARD
ruby-ex   ruby-ex-sample.mycluster-980608-148bd19a50ab440a3dbebb29a6cc6e69-0001.jp-tok.containers.appdomain.cloud             ruby-ex    8080-tcp                 None

$ curl http://ruby-ex-sample.mycluster-980608-148bd19a50ab440a3dbebb29a6cc6e69-0001.jp-tok.containers.appdomain.cloud
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>Welcome to OpenShift</title>
 [以下省略]

HTMLのタイトル「Welcome to OpenShift」が出力されました。

デフォルトのホストネームのフォーマットは'< service_name>-< namespace>.< cluster_name>-< random_ID>.< region>.containers.appdomain.cloud' と、とても長いのですが、 oc exposeをする際に --hostname= オプションを使うと独自ドメインを使用することもできます。

5. 外部アクセス用のrouteを削除して、独自ドメインでアクセスできるrouteを作成してアクセスします。

(前提)下図の様に独自ドメインのDNS設定に  Ingresssサブドメインをポイントするcloudapps(任意の名前) のワイルドカード DNS エントリーを作成します。

$ oc delete route ruby-ex
route.route.openshift.io "ruby-ex" deleted

$ oc expose svc ruby-ex --hostname ruby-ex-sample.cloudapps.example.com
route.route.openshift.io/ruby-ex exposed

$ oc get route
NAME      HOST/PORT                                  PATH      SERVICES   PORT       TERMINATION   WILDCARD
ruby-ex   ruby-ex-sample.cloudapps.example.com                 ruby-ex    8080-tcp                 None

$ curl http://ruby-ex-sample.cloudapps.example.com
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>Welcome to OpenShift</title>
 [以下省略]

独自ドメインでも、HTMLのタイトル「Welcome to OpenShift」が出力されました。

  • 2019年8月3日時点で Ingressサブドメインのフォーマットが、tutorialのドキュメント、IBMCloudポータルのOpenShiftの概要、OpenShiftからの返却値が、一致してなくて混乱しますが、 いずれ改修されるはずですが、現時点では、oc get routeコマンドで出力される Ingressサブドメインが正しいです。

5.最後に

サポートがあると言ってもオンプレミスでOpenShiftを運用することは大変でした。

例)

  • 3ヶ月に1回のペースでバージョンがあがっていくのを追っかけなければならない
  • 何でもできるエンジニアがいつもいるわけでないので、メンバーの育成しないといけないけど、難しいとか

今回、IBM CloudのフルマネージドのOpenShiftを使うことによって、インフラの部分の負担は軽減されて、アプリケーションのリリースにリソースを割くことができることでしょう♪ 今後の展開をとっても期待してます!