OpenShift Container Platform 4 をIPIインストールする

## はじめに

本記事では

* OpenShift 4 をAWS上にIPIインストールする
  - IPIとはinstaller-provisioned infrastructure
  - IPIの他にUPI(user-provisioned infrastructure)インストールがある

方法を扱います。参考文献は[こちら](https://cloud.redhat.com/openshift/install/aws/installer-provisioned)です。

## AWSの準備

### Route 53

以下のいずれかで、好き勝手レコード登録できるHosted Zoneを準備する

* Route 53でドメイン取得
* 他のRegisterで取得したドメインをAWSに移管
* 既にRoute 53上のHosted Zoneからサブドメインを切り出す

### IAM User

以下の要件でユーザを作成し、Access Key IDとSecret Access Keyを控える。

* ユーザ名を`ipiuser`（なんでもいい）
* アクセスの種類を`プログラムによるアクセス`
* ポリシーを`AdministratorAccess`

## ここからすぐにインストール開始したい場合

[こちら](https://docs.openshift.com/container-platform/4.4/installing/installing_aws/installing-aws-default.html#installing-aws-default)の手順を実行してください。

## 少しyamlを変える

[こちら](https://docs.openshift.com/container-platform/4.4/installing/installing_aws/installing-aws-customizations.html#installing-aws-customizations)の手順に沿って、気持ち程度ですが、お財布に優しいOpenShiftを作ります。

### 気持ち程度、お財布に優しくしたい

以下の方針で作成したいと思います。

* m5系のインスタンスタイプで構成したい
  * デフォルトだとm4系で作成される
  * m5系の方が気持ち程度安い
* replicaを減らしたかった（無理だった）

### ssh秘密鍵をssh-agentにセットする

鍵を作成する

```shell-session
$ ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /home/openshift/.ssh/id_rsa.
Your public key has been saved in /home/openshift/.ssh/id_rsa.pub.
The key fingerprint is:
...snip...
```

ssh-agentプロセスをバックグラウンド実行する

```shell-session
$ eval "$(ssh-agent -s)"
Agent pid 1259
```

鍵を追加する

```shell-session
$ ssh-add ~/.ssh/id_rsa
Identity added: /home/openshift/.ssh/id_rsa (/home/openshift/.ssh/id_rsa)
```

### インストーラのダウンロード

[こちら](https://cloud.redhat.com/openshift/install/aws/installer-provisioned)からダウンロードする。

* Select OSは`Linux`

tar.gzを解凍する

```shell-session
$ tar xvf ./openshift-install-linux.tar.gz
```

### インストール設定ファイルを作る

配置場所を作る

```shell-session
$ mkdir installation
```

インストール設定ファイルの雛形を作る

```shell-session
$ ./openshift-install create install-config --dir=./installation/
```

プロンプト上で以下を聞かれるので、入力する

* ? SSH Public Key
  - 作成した秘密鍵のファイルパス（Enterでいけた）
* ? Platform
  - aws
* ? AWS Access Key ID
  - IAM UserのAccess Key ID
* ? AWS Secret Access Key
  - IAM UserのSecret Access Key
* ? Region
  - ap-northeast-1
* ? Base Domain
  - 好き勝手できるRoute 53のドメイン名を書く（Enterでいけた）
* ? Cluster Name
  - 適当な名前を入力
* ? Pull Secret
  - [インストーラーをダウンロードしたページ](https://cloud.redhat.com/openshift/install/aws/installer-provisioned)からコピペする

作成されていることを確認

```shell-session
$ ll installation/
合計 4
-rw-r-----. 1 openshift openshift 3305  6月 19 23:16 install-config.yaml
```

お財布に優しいyamlに変更する

* replica数をmasterを`3`に、workerを`3`に
  - replicaの数を減らすとインストールに失敗する
  - インスタンスタイプを大きくすると行けるかもしれないが、未検証
* インスタンスタイプをmasterを`m5.xlarge`に、workerを`m5.large`に

```yaml
installation/install-config.yaml 
apiVersion: v1
baseDomain: ...snip...
compute:
- architecture: amd64
  hyperthreading: Enabled
  name: worker
  platform:
    aws:
      type: m5.large
  replicas: 3
controlPlane:
  architecture: amd64
  hyperthreading: Enabled
  name: master
  platform:
    aws:
      type: m5.xlarge
  replicas: 3
metadata:
  creationTimestamp: null
  name: pov
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  aws:
    region: ap-northeast-1
publish: External
pullSecret: ...snip...
sshKey: ...snip...
```

## クラスターをデプロイする

デプロイコマンドを実行する

```shell-session
$ ./openshift-install create cluster --dir=./installation/ --log-level=info
```

## (case) デプロイに失敗した時

自動で消えたりはしないので、デストロイコマンドを実行する

```shell-session
$ ./openshift-install destroy cluster --dir=./installation/ --log-level=info
```

## (option) IAM Userのポリシー変更

インストーラーにセットしたIAM Userが保持している権限を剥奪しておく

* ポリシーの`AdministratorAccess`を外す

## コンソールログイン

インストーラが走り終わったら、以下のログが出ているので、この情報を使ってログインする

```shell-session
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/opt/ocp/installation/auth/kubeconfig' 
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.pov.ocp.example.com
INFO Login to the console with user: kubeadmin, password: xxxxx-xxxxx-xxxxx-xxxxx

```

おしまい。大きなサーバなので、使っていないときは落とそう。（EIPはお金かかるけど。）