Red Hat OpenShift on IBM Cloud の無料Hands-onを試してみる - Lab1

# はじめに
以下の記事を参考に、Red Hat OpenShift on IBM Cloudを試してみたときのログです。
参考: [OpenShift on IBM Cloud をデモサイトから無料で試す方法](https://qiita.com/ayatokura/items/3cd9596d0243d940d143)
このデモサイトでは、IBM Cloud上で稼働するOpenShift4.3の環境が一時的にアサインされて、その環境を使ったハンズオンを無料でお手軽に実施できます。
アサインされる環境の利用時間は限られていて、Provisioningされてから4時間で使用できなくなります。1時間単位で3回延長可(すなわち最長7時間は利用可)です。長期にわたって環境を維持できる訳では無いのでまとまった時間を取って実施するのがよいでしょう。

まずはHands on LabsへのアクセスとLab1の実施の所までやってみます。

## 関連記事
[Red Hat OpenShift on IBM Cloud の無料Hands-onを試してみる - Lab1](https://qiita.com/tomotagwork/items/22c09cb73d5614fb08a5)
[Red Hat OpenShift on IBM Cloud の無料Hands-onを試してみる - Lab2](https://qiita.com/tomotagwork/items/d3a86fe43cd6972a1401)
[Red Hat OpenShift on IBM Cloud の無料Hands-onを試してみる - Lab3](https://qiita.com/tomotagwork/items/f8bc20832933f685b8d7)


# Hands on Labs へのアクセス

以下にアクセスしてRedHat OpenShift on IBM Cloud を選択。
https://www.ibm.com/demos/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/4da6af8b-3871-a72f-0a23-6e623886f4b3.png)

一番下の Hands on Labs for Red Hat OpenShift on IBM Cloudを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/eacd0e02-4b94-8a07-fc9d-88d80124b5dc.png)

IBM Cloudのアカウントでログイン。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d983c7d9-f2bc-b7d7-cb4a-06a6eb32e594.png)

以下のように、動画やハンズオンのメニューが出てくるので、ここから適宜選択してやってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/db19a226-9986-0b9f-9cee-b64e3d6f6ea0.png)

# Hands on 実施

## Lab1

Lab1では、管理コンソールや、アプリのデプロイから稼働までの基本的な流れなどが体験できます。

Lab1で扱う環境の全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5e0c9214-4c1c-1e76-053c-072036961c26.png)


Lab1の Launch Labをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/eb7d5664-4b64-7fd7-8fab-c272524caa49.png)

しばらくするとActiveになるので再度Launch Labをクリック 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/80b8bd39-fffb-58d3-5f95-b411d42d1a34.png)

別のタブが開くので、左側のメニューに従ってハンズオンを実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a3ae2e0a-2052-8cdb-39da-5f67a07b6782.png)

### Exercise1 / Basics

ここでは、IBM Cloud Portalと、OpenShift Web Consoleの画面を確認します。
Exerciseの記述に従って、いくつか画面を確認してみます。

#### IBM Cloud Portal

左側のガイドに記載されているリンクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/02ed3ff7-f440-8cbf-6efb-280def878335.png)

IBM Cloud の画面が開きます(IBM CloudにログインするとDTE Cloud Platformというデモ用アカウントへのアクセス権限が一時的に付与されて、OpenShiftのクラスターの状況はそこから参照できるようになるようです)。
「概要」のメニューからワーカーノードの数やステータスが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b58a08b9-2f3e-d3f1-e2fd-397f7ce14bc1.png)

ワーカーノードの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/fe0b6c95-91c7-80fa-466e-93fdb72b22a9.png)

ワーカープールの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/723c8d08-4093-b48d-0e7c-14f8e6dbe94c.png)

#### OpenShift Web Console

IBM Cloud Portal画面の右上の「OpenShift Webコンソール」をクリックすると、OpenShift Web Consoleが開きます。
Administrator/Developerと、役割に応じてPerspecitiveを切り替えて利用することができます。

Administrator
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bbdc8546-eaaa-8c7f-8289-43c424f12e71.png)

Developer
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1015164e-791a-1725-f1f0-8d0d0a97930a.png)

Number of nodes in the cluster inventory dashboard
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3360ccf7-b810-4109-42e0-0d8dd8d01800.png)


Standard services deployed in the default project
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/294df342-ad53-ebf5-b3ba-e896274609ba.png)

Operators installed
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/fd281f89-4736-576d-1757-32257a9ee309.png)

### Exercise2 / Deploying an application

ここでは、s2i (Source to Image)の流れを確認します。

Developer Perspective - Topology - Project - Create Project選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/928c2479-d23d-64d6-f398-6da8fb3263f6.png)

Name, Display Nameを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/af7f5881-fee8-906f-f466-9c2cd4e51439.png)

From Gitを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/075eafe1-24e4-8836-4914-20117107f719.png)

Git Repo URLに`https://github.com/svennam92/node-s2i-openshift` を指定して、Builder ImageからNode.jsを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8efc120e-3451-f0ab-e3e8-67bcc3b8a9f5.png)

その他デフォルトのまま「Create」クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/517ce3b5-2fa7-85b7-3993-ba5827fa5c09.png)

Build Runningステータスとなり...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a3e24107-9614-9022-7a99-dca7c96282ce.png)

しばらくするとBuild Completeのステータスとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3732809b-eb6c-babc-510a-b4d5877fbe59.png)

Nodeのラベルをクリックすると、詳細が表示されます。
Node.jsのアプリが特定のPodで稼働していること、そのPodへのアクセス方法などが確認できます。
右下のRoutesで示されているリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7aeadd76-045a-848b-3d9c-bab07fa06cd3.png)

Podで稼働しているNode.jsのアプリケーションにアクセスすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1a99b328-e80c-b6b3-ecad-dcc77b663b16.png)

ログインしてみます。(任意のユーザーID/パスワードが指定可)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d13ec546-ab78-fb18-609b-e408c30d5b62.png)

アプリケーションが使えることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/438cfe44-f9c8-35f4-1366-7e5195dae4e4.png)


### Exercise3 / Using the command line interface (CLI)
ここでは、CLI(ocコマンド)を使ってみます。

最初にLaunchしたときに接続される右側のターミナルを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/aee999e4-9b18-6305-ec55-4f2ba828fb74.png)

クラスターにログイン

```
container-lab$ oc login --server https://c100-e.us-south.containers.cloud.ibm.com:3xx2 -u apikey -p 8xxxxx3
Login successful.

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

Using project "default".
Welcome! See 'oc help' to get started.
```

デフォルトプロジェクトの設定

```
container-lab$ oc project example-health
Now using project "example-health" on server "https://c100-e.us-south.containers.cloud.ibm.com:32642".
```

ホスト名確認

```
container-lab$ oc get routes
NAME                   HOST/PORT                                                                                                                       PATH   SERVICES               PORT       TERMINATION   WILDCARD
node-s-2-i-openshift   node-s-2-i-openshift-example-health.dte-ocp4-0t7vlh-915b3b336cabec458a7c7ec2aa7c625f-0000.us-south.containers.appdomain.cloud          node-s-2-i-openshift   8080-tcp                 None
```

負荷をかけるためのコマンド(無限ループ)
「oc get routes」で取得されるホスト名に対して、1秒毎にCURLの発行を無限に繰り返す。

```
container-lab$ APP_ROUTE=`oc get routes --no-headers|cut -d' ' -f4`
container-lab$ while sleep 1; do curl -s http://$APP_ROUTE/info; echo "";done
{"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
{"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
{"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
{"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
...
```

後のExerciseで使うので、一旦ここでは停止させておきます。


### Exercise4 / Logging and events

ここではLogの情報などを確認してみます。

OpenShift Web ConsoleからNode.jsが稼働しているPodを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f9d7d9f0-90a8-c89c-f969-0ec75bcd7f4f.png)

Logをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e8ac8476-7042-e3f5-8f3a-f1d2b1a67572.png)

メッセージが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/24840178-800e-4e1e-2220-648acfc8ba65.png)

Advanced - Eventメニューからは各種イベントの情報(Podの生成など)が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/684a8d06-af2c-c23c-9ed1-51ad8b7b18a2.png)

### Exercise5 / Metrics and Dashboards

ここではメトリック情報などを確認します。

OpenShift Web Consoleにて Monitoring - Dashboardsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/391737c3-8ad9-d6d2-6cdf-cc84c377bfe9.png)

Log in with Openshiftをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f3568791-d982-e98b-a1df-36eac8e0ce69.png)

Allow selected permissionsをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/789ab6e4-136a-d698-ba90-fce5cbc5c3ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/345a2092-7a46-fe06-58bd-56be8583f383.png)

Grafanaに接続されます。
Homeをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a0455847-3dc6-9274-ba5b-92c8d811ddb1.png)

Kubernetes / Compute Resources / Namespace (Workloads)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f950639e-a3d0-5727-8c16-dc5bf41e3fe5.png)

namespaceからexample-healthを選択。
CPU,Memory状況などが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/748cee81-068f-86ae-c5ef-c1c7f653fde6.png)

Openshift Web Console - Monitoring - Metricsのメニューでは、PrometheusのUIが提供されており、Prometheus Query Languageを使用したメトリックス情報可視化が行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b20b0cfd-521c-a677-ef1f-5f2eb2e0f669.png)


### Exercise6 / Scaling the application

ここではアプリケーションのスケーリングを試してみます。
Exercise3の負荷をかけるコマンドを裏で実行しておきます。

OpenShift Web ConsoleのWorkloads - Deploymentsのメニューを選択し、node-s-2-i-opensiftを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e48d80a4-93b9-a1cd-a01f-aed1f0671464.png)

右側のActionsのプルダウンからEdit Deploymentを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8f29318e-13ff-03dc-0a34-333dd854dffe.png)

`resources{}`部分を以下のように修正。

```yml
          resources:
            limits:
              cpu: 30m
              memory: 100Mi
            requests:
              cpu: 3m
              memory: 40Mi
```

以下のイメージ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/fcaa904a-6317-da40-35c4-4023cf0cd8af.png)

変更をSaveしてReloadします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/34664780-8c87-de12-a818-b75c9ba56e03.png)

この修正では、コンテナに対してリソース(CPU,Memory)の割り当てや制限を追加で指定しています。
参考:
 [Kubernetes - コンテナおよびPodへのCPUリソースの割り当て](https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-cpu-resource/)
 [KubernetesのResource RequestsとResource Limitsについて](https://qiita.com/sheepland/items/eb0e4c65aaae70ec4e2f)

変更されたDeploymentのstart/stopをEventで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d27cb387-76e0-ea48-3f9f-3cac5b6674d3.png)

Workload - Deployments - node-s-2-i-openshiftを選択し、pod数が1であることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3f7027fd-b01d-0661-b0a9-23380324db95.png)

次に、Workloads - Horizontal Pod Autoscales メニューから、Create Horizontal Pod Autoscalerをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8a064cd6-d49c-b67c-1e48-3596a01282d3.png)

Autoscaleの定義を以下のように更新してCreateをクリックします。

```yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: patient-hpa
  namespace: example-health
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: node-s-2-i-openshift
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/02e56070-91f1-f170-9c0d-f996d2944cf6.png)

参考:
 [Kubernetes - Horizontal Pod Autoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)
 [Kuberentes の水平オートスケール](https://qiita.com/shmurata/items/8ebaf74028365fc950c9)
 [KubernetesのPodとNodeのAuto Scalingについて](https://qiita.com/sheepland/items/37ea0b77df9a4b4c9d80)

DeoploymentのPod数を確認すると、徐々にスケールアップされてPod数が増えていくのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8004180a-f957-9f7a-d6d2-7fa96a2bea7a.png)

Grafanaの状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a2994e3a-10b7-7011-63e7-16d357c30d83.png)

最終的にPodの数は10まで増えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c76838bb-9b79-af82-ea50-1c93038bf4d2.png)