ゼロから始めよう、ROKS on IBM CloudでのNginxサーバ構築


## はじめに

NginxのWebサーバをたててアクセスする手順を紹介する記事が多いですが、ROKS（Red Hat OpenShift on IBM Cloud））で構築する手順はあまり多くなかったので、今回はゼロからIBM Cloud VPC環境にROKSのクラスターを構成しNginx Podをデプロイする手順をご紹介します。

IBM Cloudやcontainerを操作した経験のない初心者の方に向けた手順です。

では、一緒にやってみましょう。



本手順では、
**Step1 VPC環境の構築**
**Step2 ROKSのオーダー**
**Step3 ROKSクラスターへのログイン**
**Step4 Nginxサーバ作成、アクセス**
の流れで実施します。



## 前提・環境

必要な物は以下です

- IBM Cloudアカウント
- IBM Cloud CLI
（インストール：https://cloud.ibm.com/docs/cli?topic=cli-getting-started ）
- OC CLI
（インストール：https://docs.openshift.com/container-platform/4.7/cli_reference/openshift_cli/getting-started-cli.html#installing-openshift-cli ）

- Plug-in （下記コマンドでインストール）

  ```shell
  $ install vpc-infrastructure
  $ ibmcloud plugin install container-service
  $ ibmcloud plugin install container-registry
  $ ibmcloud plugin install observe-service
  ```

本手順の環境はwindows 10です。
準備完了したら、構築手順を進めていきましょう。



## Step1 VPC環境の構築

まず、IBM Cloudにログインします。
本手順では、API key でログインしていますが、他の方法でもできます。お好きな方法でログインしてください。

```shell
$ ibmcloud login --apikey <API_KEY> -g <RESOURCE_GROUP_NAME> -r jp-tok

例：$ ibmcloud login --apikey <API_KEY> -g rg-common -r jp-tok

API エンドポイント: https://cloud.ibm.com
認証中です...
OK
```


> Tips:
> API keyを獲得する方法はこちらのリンクに参照してください↓
> https://www.ibm.com/docs/en/app-connect/containers_cd?topic=servers-creating-cloud-api-keyhttps://www.ibm.com/docs/en/app-connect/containers_cd?topic=servers-creating-cloud-api-key


step1ではvpc、subnet、public gateway（ROKS用security group）、cloud object storage（データ保管用)、これら4つのサービスをオーダーします。オーダーする方法を1つずつご紹介いたします。

今回は1つのIBM Cloudの中に3つのゾーンを作り、各ゾーンに１つROKS用subnetとpublic gatewayを作成します。以下に環境のアーキテクチャーを示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/d4c648a0-be7a-90df-1849-d893e06eb2fc.png)

以下に設定項目を示します。

| 項目                      | 数量 | 設定                                                |
| ------------------------- | ---- | --------------------------------------------------- |
| IBM Cloud: Zone           | 3    | jp-tok-1, jp-tok-2, jp-tok-3 （region: Japan）      |
| IBM Cloud: recourse group | 1    | rg-common                                           |
| VPC                       | 1    | vpc-common                                          |
| Subnet                    | 3    | subnet-common1,  subnet-common-2,   subnet-common-3 |
| Public Gateway            | 3    | pgw-common-tok1, pgw-common-tok2, pgw-common-tok3   |
| IBM Cloud Object Storage  | 1    | objectstorage-common                                |

### 1.1 vpc

```shell
##vpc作成
$ ibmcloud is vpc-create <VPC_NAME>   
例：$ ibmcloud is vpc-create vpc-common
```

### 1.2 subnet

```shell
##subnet作成
$ ibmcloud is subnet-create <SUBNET_NAME> <VPC_ID> --zone jp-tok-1 --ipv4-address-count ADDR_COUNT --resource-group-name <RESOURCE_GROUP_NAME> 

例：$ ibmcloud is subnet-create subnet-common1 r022-xxxxxxx --zone jp-tok-1 --ipv4-address-count 256 --resource-group-name rg-common
```

3つのsubnetが必要なので、commandを繰り返して入力してください。


### 1.3 public gateway

public gatewayをオーダーしていきます。
オーダー方法は二つがあります。一つ目は、GUI（IBM cloud console画面）で直接オーダーできます。二つ目はCLIでcommandを打ってオーダーします。本手順では、CLIからオーダーする方法をご説明いたします。

```shell
##public gateway作成
$ ibmcloud is public-gateway-create <PUBLIC_GATEWAY_NAME> <VPC_ID> <ZONE_NAME>
例：$ ibmcloud is public-gateway-create pgw-common-tok1 r022-xxxxxxxx jp-tok-1

##作ったpublic gatewayをsubnetに繋げる
$ ibmcloud is subnet-update <SUBNET_ID> --public-gateway-id <PUBLIC_GATEWAY_ID>
例：$ ibmcloud is subnet-update 02f7-xxxxxx --public-gateway-id r022-393xxxxxxxxxxxxx
```

subnetの個数分繰り返します。


### 1.4 object storage

最後にobject storageをオーダーします。GUIから非常に作りやすいので、IBM Cloudでオーダーしましょう。
右上の「カタログ」→「object storage」と入力→「object storage」をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/955b5ed0-bcdf-7574-6667-91adce46ded3.png)

このobject storageはVPC環境に構築されるROKSのデータを格納するために利用します。ライトプランではこの目的での利用ができないため、最低でもstandardプランでのオーダーが必要となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/566bf7b6-e589-db6c-6bc5-fd92c11280c4.png)


## **Step2 ROKSのオーダー**

ROKSのオーダーもGUIから実施します。

「カタログ」→「openshift」と入力→「Red Hat OpenShift on IBM CLoud」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/7ac0c6a8-f9b9-a7b9-a3c9-a7b4cd6e5500.png)

以下にROKSの設定情報をしめします。 以下の画像通りに進めてください。

| 項目                 | 設定                                                |
| -------------------- | --------------------------------------------------- |
| クラスターname       | ROKS-common                                         |
| Infrastructure       | VPC                                                 |
| Cloud object storage | objectstorage-common                                |
| Zone                 | jp-tok-1, jp-tok-2, jp-tok-3                        |
| Worker pool          | 1（ゾーンあたりワーカー・ノード）                   |
| Subnet               | subnet-common1,  subnet-common-2,   subnet-common-3 |
| Security Group       | default SG                                          |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/cc97c41e-a9f5-e1b8-4d79-95210c930faa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/3c3d5522-fba1-a79b-3d16-fb9102cb7cf2.png)
右下の「作成」をクリックして、ROKSのオーダーは完了です。


## **Step3 ROKSクラスターへのログイン**

次に、CLIからROKSクラスターへログインする方法をご説明いたします。

クラスターへのログイン方法は二つがあります。

一つ目は、IBM Cloud の IAM のでAPI キーを作成し、その API キーを使用してROKSクラスターにログインできます。こちらの資料に参照してください　→　https://cloud.ibm.com/docs/openshift?topic=openshift-access_cluster#access_api_key

```shell
$ oc login -u apikey -p <API_KEY>
```

二つ目は、openshift web consoleから、ログインcommandをコピーして、CLIにペーストします。
「OpenShift Web コンソール」→右上の「IAM#ACCOUNT_NAME」→「Copy Login Command」→「Display Token」→「Log in with this token」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/f61bafd6-0349-9f17-7bd8-0836d5985425.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/52339d50-a7c8-ff0e-19ff-6187e45b582c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/3c10f6b1-0ed8-3c1b-58d7-d48e94183683.png)

では、CLIからクラスターへログインします。

```shell
# amdin権限でkubeconfig取得
$ ibmcloud oc cluster config --cluster <ROKS_NAME> --admin
例：$ ibmcloud oc cluster config --cluster roks-common --admin

#kubeconfigをダウンロード
$ ibmcloud oc cluster config -c <ROKS_NAME>
例：$ ibmcloud oc cluster config -c roks-common

# クラスターへログイン
#方法１：
$ oc login -u apikey -p <API_KEY>
Login successful.

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

Using project "default".

#方法２：
$ oc login --token=<XXXXXX> --server=<XXXXXX>
Logged into "XXXXXXX" as "IAM#xxxxxxx" using the token provided.

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

Using project "default".
```



次に、security groupにROKS用の設定を追加します。

```shell
# SecurityGroupのIDを取得
$ ibmcloud is security-groups

# SecurityGroupにROKS用のルールを追加
$ ibmcloud is security-group-rule-add <SECURITY-GROUP-ID> inbound tcp --port-min 30000 --port-max 32767
$ ibmcloud is security-group-rule-add <SECURITY-GROUP-ID> inbound udp --port-min 30000 --port-max 32767

例：$ ibmcloud is security-group-rule-add r022-xxxxxx inbound tcp --port-min 30000 --port-max 32767
例：$ ibmcloud is security-group-rule-add r022-xxxxxx inbound udp --port-min 30000 --port-max 32767

```

projectを作成します。

```shell
$ oc new-project <project_name> --description="<DESCRIPTION>" --display-name="<DISPLAY-NAME>
例：$ oc new-project test-common --description="this is a test page" --display-name="test-common"

二回目以降は、先に使いたいprojectを選択します
$ oc project <PROJECT-NAME>
例：$ oc project test-common
Now using project "test-common" on server "https://xxxxxx".
```

以上で、ROKSクラスターへのログイン、またprojectへのログインについてのご紹介を終わります。



## **Step4 Nginxサーバ作成、アクセス**

projectへログインして、nginxサーバを作成して、アクセスしてみます。

```shell
#Pod作成、Service作成
$ oc run nginx --image=nginx --restart=Never --expose --port=80

#ServiceをRouteに紐付け
$ oc expose service nginx
OR ($ oc expose svc nginx)

#新しく作成されたRouteを確認
$ oc get route
NAME    HOST/PORT                  PATH   SERVICES   PORT   TERMINATION   WILDCARD
nginx   xxxxxxxxxxxxxxxxx                  nginx      80                   None
```

openshfit web consoleから「developer」→「topology」→podの右上の矢印をクリックして、nginxを確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/c6639b44-ec48-1776-ebc8-64cf9c20a778.png)

下の画面ができたら完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1934715/353f4c10-8263-1dc3-2eb1-c3bd455a87e2.png)

以上が、ゼロからIBM CloudのROKS環境を構築し、Nginxを建て、アクセスする方法になります。

ご参考になれば幸いです。



## 参考資料

https://rheb.hatenablog.com/entry/2021/07/01/Red_Hat_OpenShift_on_IBM_Cloud_%28ROKS%29_

https://www.tutorialworks.com/openshift-deploy-web-server/

https://ibm.github.io/openshift-on-ibm-cloud-workshops/4-openshift.html

https://github.com/ibm-cloud-docs/vpc/blob/master/hello-world-vpc.md