AWS上でOpenShiftクラスタ（ROSA)を動かしてみました。

# 概要
　最近はOpenShiftを利用し始めました。AWS上も構築可能と聞いて実際に作ってみました。
　正式のサービス名称は[Red Hat OpenShift Service on AWS](https://aws.amazon.com/jp/rosa/)だそうです。頭文字をとって、ROSA(ロサ)と略しているのようです。以下はROSAで表記します。

# ROSAの構築作業
## 事前準備作業
* [Redhat](（https://www.redhat.com/ja/global/japan）)のアカウントにログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/03d69bb5-acde-b9b8-111a-926d05dc8cd8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/3d6a3d72-774c-dc27-e541-123b633d9ca7.png)
* [Redhatコンソール](https://console.redhat.com/)画面
* ログイン後、Redhatコンソール画面に遷移して、画面の真ん中下にがる「Redhat Openshift」を選択してください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/2d6cd6b6-78a2-2e88-b090-233708013c38.png)
* Create an OpenShift cluster(OpenShiftクラスタ作成する)ボタンをクリック、作成画面に遷移します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/2bc777ba-6ec0-8fef-c119-34f03cc9077e.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/8a13f466-814d-68d9-bc24-f467511cf49a.png)
* 提供できるベンダはいくつかありますが、今回はAWSを選択します。
    * 作成方法はCLIとWeb Interface２つあります。
        * 今回はWeb Interfaceで作成します。
    * 初めての場合にAWS側にいくつかの準備が必要です。[Create Cluster]ボタン下の[Prerequisties]リンクボタンを押下してください。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/15cefebf-1f42-66c0-4673-02a73865c8c3.png)
* 事前準備作業のステップ一覧
    * Pre-Step1. AWSアカウント側でROSAサービスの有効化
    * Pre-Step2. ROSA/AWS CLIのインストール
    * Pre-Step3. ELBためのサービスリンクロール作成
    * Pre-Step4. AWSアカウントロールとポリシーの作成
    * Pre-Step5. 最終確認

ではPre-Step1から実施します。
#### Pre-Step1.  AWSアカウント側でROSAサービスの有効化
* Open AWS Consoleボタン押下してAWS Console画面に遷移
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/a4e84ebc-9ca0-01c7-ecae-0f593aa4aa6c.png)
* 利用料金についても一応確認してみてください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/e337c9fc-73e7-cddb-73d3-6dffd6df78ac.png)
* Red Hat OpenShift Service on AWS (ROSA)下にある「使用を開始」ボタン押下
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/3a74b2c2-a0f7-041f-0aae-afcc055f91ab.png)
* チェックボックス「連絡先情報を Red Hat と共有することに同意します。」にチェックを入れて、「ROSAを有効にする」ボタン押下
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/052f1975-1be8-4e5b-06bf-a2df20ed64e7.png)
*  ROSAを有効にしたことを確認
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/bdf3a3a2-f02a-3f80-befa-a06c320f74d6.png)
#### Pre-Step2. ROSA/AWS CLIのインストール
* AWS CLIのインストール/セッティングは割愛とさせてください。
* 「Download the ROSA CLI」ボタンクリックしてROSA CLIをダウンロード
    * rosa-windows.zipを解凍してください
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/070b9405-9b56-9d31-870c-efdc406156ff.png)
    * コマンドプロンプトで実行確認
        * rosa.exe -h
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/a7133698-3e3e-2f80-f7e3-fb4f5221ce26.png)

#### Pre-Step3. ELBためのサービスリンクロール作成
Create the service linked role for the Elastic Load Balancer (ELBためのサービスリンクロールを作成します。すでに存在してあるため、Step4に進みます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/92e15f8a-938a-f2c3-d643-8e3ac36af18f.png)
* 存在しない場合には以下のコマンドで作成できます。
    * aws iam get-role --role-name "AWSServiceRoleForElasticLoadBalancing"
#### Pre-Step4. AWSアカウントロールとポリシーの作成
Log in to the ROSA CLI with your Red Hat account token and create AWS account roles and policies（ROSA CLIを利用してAWSアカウントロールとポリシーを作成します）
* Pre-Step4-1. 画面上提示したコマンドをそのままコピペで実行（tokenの部分は個人専用のため省略）
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/8133af06-e7f0-a3b5-aec9-82ad3a0467a7.png)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/bf01ba80-99a7-d19d-0e70-4ab97d1b5acb.png)
  * コマンドプロンプト上、下記が表示されたらログインOKです。
      * INFO: Logged in as 'hogehoge' on 'https://api.openshift.com'
* Pre-Step4-2. AWSアカウントで必要なロールを作成します
    * AWS CLI(aws credentials)が事前に設定しておいてください。
    * コマンドプロンプトでrosa create account-roles --mode auto実行、各ロール作成の確認でYesと押下。
    ``` 
    INFO: Logged in as 'xxxxx@xxxx.com' on 'https://api.openshift.com'
    INFO: Validating AWS credentials...
    INFO: AWS credentials are valid!
    INFO: Validating AWS quota...
    INFO: AWS quota ok. If cluster installation fails, validate actual AWS resource usage against https://docs.openshift.com/rosa/rosa_getting_started/rosa-required-aws-service-quotas.html
    INFO: Verifying whether OpenShift command-line tool is available...
    WARN: OpenShift command-line tool is not installed.
    Run 'rosa download oc' to download the latest version, then add it to your PATH.
    INFO: Creating account roles
    INFO: Creating roles using 'arn:aws:iam::xxxxxxxx:user/xxxxx'
    ? Create the 'ManagedOpenShift-Installer-Role' role? Yes
    INFO: Created role 'ManagedOpenShift-Installer-Role' with ARN 'arn:aws:iam::xxxxxxxx:role/ManagedOpenShift-Installer-Role'
    ? Create the 'ManagedOpenShift-ControlPlane-Role' role? Yes
    INFO: Created role 'ManagedOpenShift-ControlPlane-Role' with ARN 'arn:aws:iam::xxxxxxxx:role/ManagedOpenShift-ControlPlane-Role'
    ? Create the 'ManagedOpenShift-Worker-Role' role? Yes
    INFO: Created role 'ManagedOpenShift-Worker-Role' with ARN 'arn:aws:iam::xxxxxxxx:role/ManagedOpenShift-Worker-Role'
    ? Create the 'ManagedOpenShift-Support-Role' role? Yes
    INFO: Created role 'ManagedOpenShift-Support-Role' with ARN 'arn:aws:iam::xxxxxxxx:role/ManagedOpenShift-Support-Role'
    INFO: To create a cluster with these roles, run the following command:
    rosa create cluster --sts
    ```
    * AWSコンソール、IAMコンソール画面に作成されたロール確認してください。無事に４つ全部表示されています。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/4e079d45-2283-fad9-a662-aefc3f0d4f4c.png)
#### Pre-Step5. 事前準備の最終確認
* Pre-Step5.1コマンドプロンプトでrosa whoamiを実行、以下の情報が表示されます。※右側の値の部分は割愛
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/83681230-ba95-19e6-a51a-eab6bc12ea77.png)
* Pre-Step5.2 AWSクォーターの確認が満たしているかどうかを確認のため、コマンドプロンプトでrosa verfiy quota実行します。問題がなければ以下のが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/7aaa224d-d7f6-2c3a-d905-427d3e2c9552.png)
    * クォータ情報は下記で確認できます。
        * https://docs.openshift.com/rosa/rosa_getting_started/rosa-required-aws-service-quotas.html
    * これで事前準備が完了です。


## OpenShiftクラスタの作成
* コンソール画面でCreate Clusterボタン（With Web Interface）を押下
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/acdd5061-748f-38f7-1e3e-b94fb505ee63.png)
* 初めての場合にはRed Hat Terms and Conditionsに同意が必要です。同意しSubmitボタン押下
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/ca60b2bf-1295-ce82-4607-598eca3d3336.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/53966115-42f1-6cd7-27e9-baad5fe96955.png)
* クラスタ作成には６つのステップあります。

### Step1 利用するAWSアカウントを指定
* 初めての場合にはロール利用するアカウントにアソシエートが必要です。Associate a new AWS account押下してアカウントリンクページに遷移します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/302d462d-37f8-92b4-6919-938bee635b35.png)
* Step1-1. OpenShift Cluster Manager roleを作成します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/c5c42a24-ac01-0629-7ac9-c157c018d58e.png)
* 以下の感じでコマンドプロンプトでrosa create ocm-role --adminを実行してください。
    ```
    C:\rosa-windows>rosa create ocm-role --admin
    INFO: Creating ocm role
    ? Role prefix: [? for help] (ManagedOpenShift) sample
    
    ? Role prefix: sample
    ? Permissions boundary ARN (optional): [? for help]
    
    ? Permissions boundary ARN (optional):
    ? Role Path (optional): [? for help]
    
    ? Role Path (optional):
    ? Role creation mode: auto
    INFO: Creating role using 'arn:aws:iam::xxxx:user/xxxx'
    ? Create the 'sample-OCM-Role-xxxxx' role? Yes
    INFO: Created role 'sample-OCM-Role-xxxxx' with ARN 'arn:aws:iam::xxxxxxxx:role/sample-OCM-Role-xxxx'
    INFO: Linking OCM role
    ? OCM Role ARN: [? for help] (arn:aws:iam::xxxxx:role/sample-OCM-Role-xxxxx)
    
    ? OCM Role ARN: arn:aws:iam::xxxxx:role/sample-OCM-Role-xxxxx
    ? Link the 'arn:aws:iam::xxxxx:role/sample-OCM-Role-xxxxx' role with organization 'xxxxxxx'? Yes
    INFO: Successfully linked role-arn 'arn:aws:iam::xxxxxxx:role/sample-OCM-Role-xxxxxx' with organization account 'xxxxxx'
    ```

    * AWS IAM画面でAdminロールが作成されたことを確認
       ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/c8bb3d46-374b-2427-7922-2efb254339ec.png)
    * Step1-2 続いて、同じくコマンドプロンプトでUser role作成

    ```
    rosa create user-role
    INFO: Creating User role
    ? Role prefix: [? for help] (ManagedOpenShift) sample
    
    ? Role prefix: sample
    ? Permissions boundary ARN (optional): [? for help]
    
    ? Permissions boundary ARN (optional):
    ? Role Path (optional): [? for help]
    
    ? Role Path (optional):
    ? Role creation mode: auto
    INFO: Creating ocm user role using 'arn:aws:iam::xxxxxx:user/xxx'
    ? Create the 'sample-User-xxxxx@xxxxx.com-Role' role? Yes
    INFO: Created role 'sample-User-xxxx@xxxxx.com-Role' with ARN 'arn:aws:iam::xxxxxx:role/sample-User-xxxxx@xxxxx.com-Role'
    INFO: Linking User role
    ? User Role ARN: [? for help] (arn:aws:iam::xxxxx:role/sample-User-xxxxx@xxxxx.com-Role)
    
    ? User Role ARN: arn:aws:iam::xxxxx:role/sample-User-xxxx@xxxx.com-Role
    ? Link the 'arn:aws:iam::xxxxx:role/sample-User-xxxxx@xxxxx.com-Role' role with account 'xxxxxxx'? Yes
    INFO: Successfully linked role ARN 'arn:aws:iam::xxxxx:role/sample-User-xxxx@xxxxx.com-Role' with account 'xxxxxx'
    ```

    * AWS IAM画面でユーザーロールが作成されたことを確認
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/e2bffe75-d550-dfef-153f-7b018c9e0484.png)
　　* Step1のAccounts and roles画面に戻って、リンク用AWSアカウントを選択してください。AWSアカウントIDが表示されない場合には、右側にある「Refresh」ボタンを押して更新してください。
    　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/4b18d4e8-34df-5646-b475-f85520cc4c10.png)
    　　* Installer role, Support role, Worker role, Control plane roleがセットされていることも確認してください。
### Step2.クラスタの設定
* Step2.1 Cluster details（クラスタ詳細設定）
    * ClusterName(クラスタ名)
      * ルールに従って作成してください
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/a3b8acd8-8838-96ee-cb96-abec80c4761d.png)
    * Version(OpenShiftバージョン)
      * 用意する時点最新の4.12.7を選びます
    * Region（リージョン）
      * ap-northeast-1 / Tokyoリージョン
    * Avaiabiltity（AWS AZ　ゾーン)
      * Mulit-zoneにします
      * 耐障害性向上のため、AZゾーンごとにOpenShiftのワーカーノードを配布します。
    * モニタリングを有効にします
    * 暗号化キー
      * デフォルトのAWS kmsを利用するか、カスタマイズキーを用意することが可能です。
    * etcd encryption
      * 必要に応じてチェックいれてください。今回はないで構築しました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/554f5a68-add7-89b5-b878-0d814e6b5d2d.png)
* Step2.2 マシンプールで構築用サーバー情報設定(最小構成)
    *  EC2インスタンスタイプ： m5.xlarge, 動作確認用のため小さ目のインスタンスを利用。
    *  Enable AutoScalingの場合：Min:1　Max:1
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/32ebed23-71a2-fa1f-2dd3-6e11e1d47ae8.png)
    *  Enable AutoScalingなしの場合、Compute node count(per zone) 1に指定
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/649dcbda-a856-46d4-fbee-1ef63c56d8d1.png)
    *  Edit node labels:
        * env:demo
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/605a492b-ead9-fc61-d6a3-6b78e42a9d2f.png)
### Step3. ネットワーク設定
* Step3-1. Networking設定
    *  クラスタポリシー（下記両者の区別を意識したうえで作成してください。）
        *  Public:今回はこちら
            *  k8sのAPIエンドポイントは公開インタネットからアクセスが可能
        *  Private
            *  k8sのAPIエンドポイントはプライベートインタネットからアクセスが可能
    *  Virtual Private Cloud (VPC)
        *  新規VPC作成する：今回はこちら
        *  既存のVPCにインストールすることは可能です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/f8b65a2f-f08c-07ef-17d5-9206b370f5c2.png)
* Step3-2. CIDRレンジ設定
    * 必要に応じて柔軟で定義可能で、今回はDefaultバリューのままで構築
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/cda1acf3-5446-7c2b-cbcb-e943d47ff749.png)

### Step4. クラスタロールとポリシー
* 今回デフォルトのままで構築
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/d8bcff60-c155-0a64-3dfc-16a9c6249ea2.png)

### Step5. クラスタアップデートポリシー
* OpenShiftクラスタバージョンアップデート方針をここで選びます。
* 自動更新させたくない場合にはIndividual updatesを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/1ef69b46-d2a3-0210-217f-38016f8f12ba.png)

### Step6. クラスタ作成前最終確認
* 作成前に最終のレビューをやりましょう。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/94f333b1-b1e3-399a-3843-a287fb775682.png)

* Create clusterボタン押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/e2fdb1f3-3312-51d1-365a-d8fda0ca8d90.png)

* 作成中画面が表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/3646177d-55c3-5f06-b6c3-970c8052bb8e.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/e7cd8a7d-37ed-23b6-fdc8-6c29cef5677f.png)

* 完成画面が表示されるまでしばらく待ちます、目安30分~1時間は必要です。（Cluster creation usually takes 30 to 60 minutes to complete.）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/f4b5c9dc-3c7a-068c-74a8-c6a480499e9b.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/ac3b7f63-2524-0877-05ff-becba2abc8b4.png)
### 作成完了後の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/7c73567b-8abc-d281-5c20-a87a0b0a9f59.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/ada62054-10ab-5d3f-d157-80daa0d508f2.png)

* 作成されたEC2インスタンス（一部抜粋あり）
    * Master3台、Worker3台、Infra3台、BootStrap1台
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/4ce76438-551b-250b-a25f-18055ae5cb85.png)

### OpenShiftの管理画面にログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/24880fd5-c281-30c9-eddd-87dadfc496a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/c59aa50a-f493-82e5-7253-905aedb70356.png)
※htpasswdユーザー作成の部分は割愛

* 構築できたOpenShiftの管理画面
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/9eba9e12-9cd1-40fe-1fd6-b0bba3a1f328.png)
* OpenShiftオペレータインストール画面
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/a7a86040-01f9-5fb0-43bc-64d9d5d49957.png)
  
ここまででROSAのインストールが完了しました。

## OpenShiftクラスタの削除
* OpenShiftクラスタには停止（Shutdown）機能がないため、EC2インスタンスの料金が発生しないように、今回構築後、合わせってクラスタの削除も実施します。
    * RedHatコンソールのクラスタ一覧画面に遷移し、削除したいクラスタを選択し、「Delete Cluster」をクリック
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/92daf892-c181-0f27-c542-65ee906b48e3.png)
    * 確認ポップアップでクラスタ名を入力
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/bc68e1fc-f873-0927-dcf8-555b0a640140.png)
    * 「Delete」ボタン押下
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/6a88b7bd-faa1-980b-72d4-4b33dd8c605e.png)
    * Uninstallingと表示されて、削除処理実施中
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/4a6c01cf-ed1d-7794-e602-09fc0f4d9013.png)
    * AWS側でEC2インスタンスが終了済みなっていること確認
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/ebad4077-2f2d-5b37-440c-1e041f8b0b09.png)

　　* Redhatコンソールのクラスタ一覧画面に更新して、削除されたことを確認
    　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2239717/5e226b35-016d-7600-bc41-978a26db9617.png)


これで一通り終わりました。お疲れ様でした。

感想的にいうと、構築の速さとやりやすさです。今回はおおよそ1時間以内でROSAクラスタの構築ができました。CLIなども利用可能で、とても便利だとり感じております。
では今回はここまでとさせてください。ご覧いただきありがとうございます。