OpenShiftをAWSに導入するための見積もりに必要な情報

#はじめに
OpenShiftの公式ドキュメントに記載されたインストール方法の中で真っ先に紹介されているのがAWSへのインストール（[第1章 AWS へのインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-on-aws)）です。このインストール方法は、他の方がQiitaの記事でもいくつか紹介（後述）されているように非常に簡単にAWS上にOpenShiftを構築することができます。OpenShiftは複数のノード上に様々なコンポーネントを導入することになりますが、それをTerraformの機能を使って一括で設定することができます。

と、ここまでは簡単にインストールできることの紹介でしたが、実際にやってみるためには事前にお決まりの儀式が必要です。そう、「__見積もり__」です。

##見積もりに必要なAWSサービス/リソース
AWS環境の見積もりは使用するAWSサービスを洗い出す必要があります。ところが、RedHatの公式ドキュメント（[第1章 AWS へのインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-on-aws)）からはどんなAWSリソースを使うかの記載がありません。（なんとなく読み取ることはできはしますが、、）Web上の情報でもそこまで詳細にかかれたものは見つかりませんでした。
そこで、本記事では"[1.2. クラスターの AWS へのクイックインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-aws-default)"で紹介された方法でどんなAWSサービス（リソース）が出来上がるかを確認した結果を記載します。

#TL;DR
こんなAWSサービスが出来上がりました。
（主要なもののみ記載）
- VPC
- NAT Gateway
- EIP
- EC2
- EBS
- AMI
- ELB
- SecurityGroup
- S3
- Route53
- IAM

# 環境情報
OpenShiftインストーラー： openshift-client-linux-4.2.12.tar.gz
作業端末：Windows10 Subsystem for Linux（Ubuntu：VERSION=16.04.3 LTS）にAWSCLI導入済
AWS：バージニア北部リージョン（us-east-1）

#インストール

詳細なインストール方法については公式ドキュメントおよびWeb上の情報を参照ください。
今回は[1.2. クラスターの AWS へのクイックインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-aws-default)の方法でインストールを行いました。

注意）MFA有効化のIAMアカウントではインストール実行できません。
RedHat公式ドキュメントにも下記記載があります。（[1.2. クラスターの AWS へのクイックインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-aws-default)参考）
>AWS プロファイルがご使用のコンピューターに保存されている場合、マルチファクター認証デバイスを使用中に生成した一時的なセッショントークンを使用することはできません。


注意してください。ハマりました。

##インストール構成

本記事の環境はデフォルトの状態でOpenShiftを構成しています。参考までにクラスタ名など必要最低限の設定を入れたinstall-config.yamlファイルを記載します。

```yaml:install-config.yaml
apiVersion: v1
baseDomain: iseocp2019.net
compute:
- hyperthreading: Enabled
  name: worker
  platform: {}
  replicas: 3
controlPlane:
  hyperthreading: Enabled
  name: master
  platform: {}
  replicas: 3
metadata:
  creationTimestamp: null
  name: ocp4-aws
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineCIDR: 10.0.0.0/16
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  aws:
    region: us-east-1
pullSecret: '{"auths":***}'
sshKey: |
  ssh-rsa AAAA***
```

なお、OpenShiftのリソース追加・変更はこちら（[1.3. カスタマイズによる AWS へのクラスターのインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-aws-customizations)）を参考に上記yamlファイルを変更することで、対応可能です。

#できたもの
インストールは3,40分程度で完了します。
インストールが完了すると下記AWSサービス/リソースができていました。
※以下、AWSサービスの主要な設定値を記載

- VPC

|リソース|Nameタグ|CIDR|
|:---|:---|:---|
|VPC|ocp4-aws|10.0.0.0/16|

- Subnet

|Nameタグ|CIDR|
|:---|:---|
| ocp4-aws-qt9tx-private-us-east-1a | 10.0.128.0/20 |
| ocp4-aws-qt9tx-public-us-east-1a | 10.0.0.0/20 |
| ocp4-aws-qt9tx-private-us-east-1b | 10.0.144.0/20 |
| ocp4-aws-qt9tx-public-us-east-1b | 10.0.16.0/20 |
| ocp4-aws-qt9tx-private-us-east-1c | 10.0.160.0.20 |
| ocp4-aws-qt9tx-public-us-east-1c | 10.0.30.0/20 |
| ocp4-aws-qt9tx-private-us-east-1d | 10.0.176.0/20 |
| ocp4-aws-qt9tx-public-us-east-1d | 10.0.48.0/20 |
| ocp4-aws-qt9tx-private-us-east-1e | 10.0.192.0/20 |
| ocp4-aws-qt9tx-public-us-east-1e | 10.0.64.0/20 |
| ocp4-aws-qt9tx-private-us-east-1f | 10.0.208.0/20 |
| ocp4-aws-qt9tx-public-us-east-1f | 10.0.80.0/20 |

※特にAZ指定はしていませんでしたが、バージニア北部（us-east-1）の全AZにまたがって設定が入ったようです
　他のリソースも同様に全AZ分のリソースができていました。


- Route Table

|Nameタグ|
|:---|
| ocp4-aws-qt9tx-private-us-east-1a |
| ocp4-aws-qt9tx-private-us-east-1b |
| ocp4-aws-qt9tx-private-us-east-1c |
| ocp4-aws-qt9tx-private-us-east-1d |
| ocp4-aws-qt9tx-private-us-east-1e |
| ocp4-aws-qt9tx-private-us-east-1f |
| ocp4-aws-qt9tx-public |

- Internet Gateway

|Nameタグ|
|:---|
| ocp4-aws-qt9tx-igw |

- Elastic IP

|Nameタグ|Elastic IP|
|:---|:---|
| ocp4-aws-qt9tx-eip-us-east-1a | 3.209.x.x |
| ocp4-aws-qt9tx-eip-us-east-1b | 35.170.x.x |
| ocp4-aws-qt9tx-eip-us-east-1c | 52.0.x.x |
| ocp4-aws-qt9tx-eip-us-east-1d | 52.1.x.x |
| ocp4-aws-qt9tx-eip-us-east-1e | 52.54.x.x |
| ocp4-aws-qt9tx-eip-us-east-1f | 54.226.x.x |


- Endpoint

|Nameタグ|サービス|
|:---|:---|
|--|S3|

- NAT Gateway

|Nameタグ|
|:---|
| ocp4-aws-qt9tx-private-us-east-1a |
| ocp4-aws-qt9tx-private-us-east-1b |
| ocp4-aws-qt9tx-private-us-east-1c |
| ocp4-aws-qt9tx-private-us-east-1d |
| ocp4-aws-qt9tx-private-us-east-1e |
| ocp4-aws-qt9tx-private-us-east-1f |


- EC2

|Nameタグ|インスタンスタイプ|AZ|備考|
|:---|:---|:---|:---|
| ocp4-aws-qt9tx-bootstrap | m4.large | us-east-1a | インストール作業後ターミネートされる |
| ocp4-aws-qt9tx-master-0 | m4.xlarge | us-east-1a | |
| ocp4-aws-qt9tx-master-1 | m4.xlarge | us-east-1b | |
| ocp4-aws-qt9tx-master-2 | m4.xlarge | us-east-1c | |
| ocp4-aws-qt9tx-worker-us-east-1a-vmjz4 | m4.large | us-east-1a | |
| ocp4-aws-qt9tx-worker-us-east-1a-5fxwz | m4.large | us-east-1b | |
| ocp4-aws-qt9tx-worker-us-east-1a-4h8zq | m4.large | us-east-1c | |

メモ）インストールが開始するとbootstrap、masterノードがまず作成され管理ノードの構成が始まります。その後workerノードが作成されます。bootstrapノードはインストール作業後に自動でターミネートされます。

なんとなく、表だけで表現すると現実味がないのでキャプチャも貼っておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/69828b5c-9e2c-ea39-bdbd-e78ba76eabdf.png)




- EBS

|Nameタグ|サイズ|ボリュームタイプ|IOPS|
|:---|:---|:---|:---|
| ocp4-aws-qt9tx-master-0 | 120GiB | gp2 | 360 |
| ocp4-aws-qt9tx-master-1 | 120GiB | gp2 | 360 |
| ocp4-aws-qt9tx-master-2 | 120GiB | gp2 | 360 |
| ocp4-aws-qt9tx-worker-us-east-1a-vmjz4 | 120GiB | gp2 | 360 |
| ocp4-aws-qt9tx-worker-us-east-1a-5fxwz | 120GiB | gp2 | 360 |
| ocp4-aws-qt9tx-worker-us-east-1a-4h8zq | 120GiB | gp2 | 360 |

- AMI

|Nameタグ|AMI名|
|:---|:---|
| ocp4-aws-qt9tx-master | ocp4-aws-qt9tx-master |

- スナップショット

（確認し忘れました。。どなたか教えて下さい。。）

- ELB

|Nameタグ|DNS名|
|:---|:---|
| ocp4-aws-qt9tx-ext | ocp4-aws-qt9tx-ext-*** |
| ocp4-aws-qt9tx-int | ocp4-aws-qt9tx-int-*** |
| a62dbe*** | a62dbe*** |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/61460e7f-c7f4-2ed5-bb45-25b216e30e5f.png)



- SecurityGroup

|Nameタグ|
|:---|
| ocp4-aws-qt9tx-master-sg |
| ocp4-aws-qt9tx-worker-sg |
|k8s-elb-**|
| (default) |


以下、ちょっと気になったのでインバウンド、アウトバウンドの情報をメモ。
・ocp4-aws-qt9tx-master-sg（インバウンド）

| タイプ | プロトコル | ポート範囲 | ソース |
|:---|:---|:---|:---|
| カスタム | UDP | 6081 | master-sg |
| カスタム | UDP | 6081 | worker-sg |
| カスタム | UDP | 6443 | 10.0.0.0/16 |
| カスタム | UDP | 9000-9999 | master-sg |
| カスタム | UDP | 9000-9999 | worker-sg |
| カスタム | UDP | 2379-2380 | master-sg |
| カスタム | UDP | 10257 | master-sg |
| カスタム | UDP | 10257 | worker-sg |
| カスタム | UDP | 22623 | 10.0.0.0/16 |
| カスタム | UDP | 30000-32767 | master-sg |
| カスタム | UDP | 4789 | master-sg |
| カスタム | UDP | 4789 | worker-sg |
| ICMP | すべて | 該当なし | 10.0.0.0/16 |
| カスタム | UDP | 10259 | master-sg |
| カスタム | UDP | 10259 | worker-sg |
| カスタム | UDP | 30000-32767 | master-sg |
| カスタム | UDP | 22 | 10.0.0.0/16 |
| カスタム | UDP | 9000-9999 | master-sg |
| カスタム | UDP | 9000-9999 | worker-sg |
| カスタム | UDP | 10257 | master-sg |
| カスタム | UDP | 10257 | worker-sg |
| カスタム | UDP | 6641-6642 | master-sg |
| カスタム | UDP | 6641-6642 | worker-sg |

※重複しているところもあるようですが、表示されたそのままを記載しました。

・ocp4-aws-qt9tx-master-sg（アウトバウンド）

| タイプ | プロトコル | ポート範囲 | ソース |
|:---|:---|:---|:---|
|すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |

・ocp4-aws-qt9tx-worker-sg（インバウンド）

| タイプ | プロトコル | ポート範囲 | ソース |
|:---|:---|:---|:---|
| カスタム | UDP | 3000-32676 | worker-sg |
| カスタム | UDP | 6081 | master-sg |
| カスタム | UDP | 6081 | worker-sg |
| すべて | すべて | すべて | k8s-elb-sg |
| カスタム | UDP | 9000-9999 | worker-sg |
| カスタム | UDP | 9000-9999 | master-sg |
| カスタム | UDP | 22 | 10.0.0.0/16 |
| カスタム | UDP | 30000-32767 | master-sg |
| カスタム | UDP | 9000-9999 | master-sg |
| カスタム | UDP | 9000-9999 | worker-sg |
| カスタム | UDP | 10250 | master-sg |
| カスタム | UDP | 10250 | worker-sg |
| カスタム | UDP | 4789 | master-sg |
| カスタム | UDP | 4789 | worker-sg |
| ICPM | すべて | 該当なし | 10.0.0.0/16 |

・ocp4-aws-qt9tx-worker-sg（アウトバウンド）

| タイプ | プロトコル | ポート範囲 | ソース |
|:---|:---|:---|:---|
|すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |


- S3

|バケット名|
|:---|
|ocp4-aws-qt9tx-image-registry-us-east-1-***|

- Route53

・ホストグループ

|ドメイン名|タイプ|備考|
|:---|:---|:---|
|icpocp2019.net.|パブリック| 事前に準備したドメイン |
|ocp4-aws.icpocp2019.net.|パブリック| |

・icpocp2019.net.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/f97ce652-5c56-47c9-45ae-adeb1dcb57ee.png)


・ocp4-aws.icpocp2019.net.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/333b802f-97d0-a24c-f5e4-4bb712543de5.png)


- IAM

・IAMロール

|ロール名|信頼されたエンティティ|
|:---|:---|
| ocp4-aws-qt9tx-master-rle | AWSサービス：ec2 |
| ocp4-aws-qt9tx-worker-rle | AWSサービス：ec2 |


#まとめ
OpneShiftはTerraformをつかって簡単・一括でOpenShiftの環境をAWS上に構築することができます。構築されたAWSサービス/リソースは上記の通り多種多様なものがあります。
上記情報が今後AWS上にOpneShiftを構築する人の見積もり情報の参考になれば幸いです。

※追記：下記リンク先の情報が今回確認できたリソース情報の参考になるかと思います。
[第4章 ユーザーによってプロビジョニングされた AWS へのインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/installing/installing-on-user-provisioned-aws)

#おまけ
このOpenShift環境を削除する場合も、コマンド（openshift-install destroy cluster）一発できれいサッパリ消すことができます。
インストール後にworkerノードを追加していても特に設定変更することなく上記コマンド一発で消えることを確認しました。（→”[AWS上に導入したOpenShiftを削除する](https://qiita.com/rjegg/items/b7eb02a5cfa02b3fe90e)” 参照）


#参考
以下AWS上にOpenShiftを構築例の参考情報です。
[OpenShift 4 を AWS上に構築してみた](https://qiita.com/SightSeekerTw/items/a1f6a3aaf8d00b4e8c08)
[猿でもできるOpenShift4インストール編](https://qiita.com/capsmalt/items/c812ed1d6cb9a027366f)
[AWS上にOpenShift 4.1のクラスタを構築した](https://qiita.com/tettsu__/items/3851669343782f242799)