猿でもできるOpenShift4インストール編

# はじめに
OpenShift4クラスターをAWS上に構築してみます。
多少AWSの知識は必要になるものの，インストール手順は(ガチで)猿でも分かるレベルで簡単でした。

少しばかりその手順を記載してみます。

>ご注意:
2019/6/10時点の私のインストールメモをベースに記載しています。
>適宜アップデートしていますが古い情報もあります。ご了承ください。

# OpenShift4のインストール方法について
IPIによるインストール，UPIによるインストールの2つの方法があります。
詳しくは[公式ドキュメント](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/installing/index)を参照ください。

- IPI (Installer-Provisioned Infrastructure)
    - デフォルト設定を使用してOpenShift4インストーラーがインフラ環境を準備してインストールする方法
    - 対応クラウドプロバイダー
        - AWS
        - Azure
        - GCP (Tech Preview)
- UPI (User-Provisioned Infrastructure)
    - ユーザー独自に準備したインフラ環境にインストールする方法
    - 対応プラットフォーム
        - AWS (CloudFormationテンプレート利用)
        - vSphere
        - ベアメタル

# 事前準備
- Emailアドレス
- クレジットカード
- ブラウザ (Chrome or Firefox)
- ターミナル (e.g. iTerm2)

※わざわざ書くべきか悩みましたが一応・・・

# OpenShift4クラスターの構築手順
IPIでOpenShift4をAWS上にインストールする場合は以下のように進めます。
  
- Red Hat Customer Portalのアカウントの準備 **※初回のみ**
- AWSアカウントの準備 **※初回のみ**
    - AWS IAMユーザーの作成と権限，認証情報の確認
    - AWS Route53サービスの作成
    - AWSリソースの制限緩和
    - AWS CLIのセットアップ
- OpenShift4のインストール
    - インストーラー(openshift-install)取得
    - install-config.yaml作成
    - インストール

![ocp4-overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/1ceb6410-2609-b268-fd05-5484cec1159f.png)


# 1) Red Hatアカウント Customer Portalアカウントの準備
OpenShift4のインストールに必要なクレデンシャル情報などを取得するために必要です。  
[Red Hatページ](https://cloud.redhat.com/)にアクセスし，[Log in your Red Hat account] > [Red Hat アカウントをお持ちでないお客様] からいくつかの項目を入力し，アカウントを作成します。  

![ocp4-redhat-account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/440fce79-8949-4f51-3c26-01a9dca967c6.png)
図: Red Hat Customer Portal アカウントの作成

## 2) AWSアカウントの準備
### 2-1) AWSアカウントの作成
OpenShift4をインストールする際に必要なEC2やロードバランサーなどのAWSリソースを利用するために必要です。[AWSページ](https://aws.amazon.com/jp/)にアクセスして作成しましょう。

### 2-2) AWS IAMユーザーの作成と権限，認証情報の確認
インストール作業を行うユーザー用にIAMユーザーを作成します。作成時に適切な権限(“Programmatic access” のアクセス権限と，“AdministratorAccess” のポリシー)を付与しましょう。なお，IAMユーザーの作成は必須ではありませんが，AWSアカウントにはアカウント作成に使用したメールアドレスに基づくrootユーザーアカウントが含まれており，高い権限が含まれています。このため，初期アカウントおよび請求設定のみに使用することが推奨されています。

参考までに以下にて，IAMユーザーの作成および権限付与について手順を記載しますが，基本的にはAWS公式ドキュメントに従ってユーザー作成などの操作を行ってください。

- IAMユーザーの作成と権限付与の手順
    1. [IAMページ](https://console.aws.amazon.com/iam/)を開き，[ユーザー]>[ユーザーを追加]を開きます。ユーザー名に任意の名前(図例では “capsmalt-aws”)を指定し，「プログラムによるアクセス」，「AWSマネジメントコンソールへのアクセス」にチェックを入れ，[次のステップ:アクセス権限]に進みます。
    2. [既存のポリシーを直接アタッチ]を開き，「AdministratorAccess」にチェックを入れて，[次のステップ:タグ]に進みます。
    3. デフォルト値のままで，[次のステップ:確認]に進みます。
    4. デフォルト値のままで，[ユーザーの作成]と進みます。

![ocp4-aws-iam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/02f4e145-a6b8-7cb6-7348-5ec76514313b.png)
図: AWS IAMユーザーの作成と権限設定


以上の操作でIAMユーザーが作成され，“AWS IAMユーザー認証情報” が表示されます。

![ocp4-aws-accessKey_SecretKey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/8b027e0b-7da8-a5df-9734-c5bfb1a6cde9.png)
図: AWS IAMユーザー認証情報

“アクセスキーID”，”シークレットアクセスキー” はAWS CLI(後述)からAWSリソースを制御するために必要になりますので，忘れずにメモしておきましょう。「.csvのダウンロード」を選択して認証情報をローカルに保存しておくと便利です。

(参考) [OpenShift4インストールに必要なパーミッション](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/installing/installing-on-aws#installation-aws-permissions_installing-aws-account)

### 2-3) AWS Route53のサービスの作成
OpenShift4クラスターに外部から接続するために必要です。既に利用可能なドメインがあれば新規に取得する必要はありません。取得したドメインは，後ほどOpenShift4インストーラーを実行する際に指定しますのでメモしておきましょう。(e.g. “capsmalt.net”)

- Route 53でドメイン登録
    1. AWSにログインし，[サービス]>[Route 53]>[ドメインの登録-今すぐ始める]>[ドメインの登録]を開きます。
    2. 任意のドメイン名を決めて，[チェック]>[カートに入れる]>[続行]と進めて，決済など契約手続きを行います。
    3. ドメインの自動更新の[無効化]を選択し，規約を確認してチェックを入れます。また登録者のメールアドレスに送られる通知の確認も行います。最後に[購入の完了]を選択します。
    4. ドメイン登録のステータスが進行中から成功に変わるのを待ちましょう。(30分程度かかりました)

![ocp4-aws-route53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/c89cb176-fb02-18fc-5ba0-dab157293cb8.png)
図: Route 53サービスでドメイン登録

(参考) [Route 53サービス](https://console.aws.amazon.com/route53/)

### 2-4) AWSリソースの制限緩和 (デフォルト構成の場合は不要 as of 2019/8/16)
AWSアカウント作成直後の状態ではリソース利用量に対して制限がかかっているため，制限緩和の作業が必要になる場合があります。OpenShift4をインストールするために必要なリソースは “OpenShift Limits Calculator” で確認できます。2019年8月16日時点では，AWSアカウントの初期状態でもOpenShift4をデフォルト構成でインストール可能です。一方で，カスタマイズ構成でクラスター構築する場合や，複数クラスターを構築するなど，多量のリソースが必要になる場合は事前にAWSサポート窓口経由で制限緩和リクエスト挙げる必要があります。


(参考) [OpenShift4のインストールおよび実行に影響を与えうるAWSリソース制限](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/installing/installing-on-aws#installation-aws-limits_installing-aws-account)
(参考) [OpenShift Limits Calculator](https://access.redhat.com/labs/ocplimitscalculator/)
(参考) [AWS東京リージョンの制限](https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Limits:)
(参考) [AWS制限緩和のリクエストページ](https://console.aws.amazon.com/support/cases?#/create?issueType=service-limit-increase)

### 2-5) AWS CLIのセットアップ
OpenShift4インストーラー([3-1](https://qiita.com/capsmalt/items/c812ed1d6cb9a027366f#3-1-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%A9%E3%83%BC%E5%8F%96%E5%BE%97%E3%81%A8%E3%82%AF%E3%83%AC%E3%83%87%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E3%81%AE%E6%BA%96%E5%82%99)にて後述)がAWSアカウントの認証情報を使用するために構成しておく必要があります。`$ aws configure`を実行して，[2-2](https://qiita.com/capsmalt/items/c812ed1d6cb9a027366f#2-2-aws-iam%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8%E6%A8%A9%E9%99%90%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E7%A2%BA%E8%AA%8D)で取得したアクセスキーID，シークレットアクセスキーを指定します。またリージョン(東京の場合は ap-northeast-1)も指定しましょう。

![ocp4-aws-cli-configure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/7a70d38e-a153-4377-db81-92408c624557.png)
図: AWSアカウントの認証情報の構成(CLI)

## 3) OpenShift4のインストール
### 3-1) インストーラー取得とクレデンシャルの準備
最初にIPIインストールを実行するためのインストーラーと，クレデンシャル情報を用意します。Red Hat Customer Portalアカウントにログインし，[AWSへのIPIインストール](https://cloud.redhat.com/openshift/install/aws/installer-provisioned)から取得します。

OpenShift4インストーラー(openshift-installコマンド) は，OpenShift4をIPIという方法でインストールする際に必要です。インストール操作を行うクライアントOS(linux or mac)に合わせたインストーラーを取得します。

![ocp4-installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/95968e33-9030-7471-5b1e-631b55fc5d08.png)
図: OpenShift4インストーラー (linux or mac)

以下のように実行して展開し，openshift-installコマンドを実行できるようにしておきます。 

``` 
$ tar xzf openshift-install-mac-4.1.9.tar.gz 
```

クレデンシャル情報(Pull-Secret) は，OpenShiftクラスターを管理する際に使用されるためRed Hat アカウント毎に異なります。openshift-installコマンドを実行した際に入力します。


![ocp4-pull-secret.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/bb26fb72-7a3e-5030-a223-8b55c4e5841a.png)
図: クレデンシャル情報(Pull-Secret)

### 3-2) インストール用Configファイルの作成 (install-config.yaml)
必要な情報は揃いましたので，図の実行例を参考にOpenShift4をAWS上にインストールしてみましょう。  
まずはインストールに使用する構成情報(install-config.yaml)を作成します。  

![ocp4-openshift-install_create_install-config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/62ed7a7a-eccc-1971-3f46-e7358e041a9e.png)
図: openshift-install create install-config 実行イメージ

上記を実行した際に作成されるinstall-config.yamlは以下です。

```
apiVersion: v1
baseDomain: capsmalt.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: ap-northeast-1
pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"XXX","email":"capsmalt@gmail.com"},"quay.io":{"auth":"XXX","email":"capsmalt@gmail.com"},"registry.connect.redhat.com":{"auth":"XXX","email":"capsmalt@gmail.com"},"registry.redhat.io":{"auth":"XXX","email":"capsmalt@gmail.com"}}}'


```

OpenShift4を構築するコマンドを実行した際にinstall-config.yamlは，自動削除されてしまいますのでバックアップを取っておきましょう。(例: `$ cp -p install-config.yaml{,.org}`)

>Tips:  
>クラスター構成のカスタマイズ
>
>`$ openshift-install create install-config`で作成された install-config.yamlを編集してから，`$ openshift-install create cluster`を実行することで行なえます。初期状態ではMasterノード3台，Workerノード3台の計6台構成でOpenShift4クラスターは構築されます。例えば，Workerノードを6台に変更する場合は以下のようにyamlを編集します。
>
>```
編集前:
compute:
- hyperthreading: Enabled
  name: worker
  platform: {}
  replicas: 3
>
編集後:
compute:
- hyperthreading: Enabled
  name: worker
  platform: {}
  replicas: 6
>```
>
>他にもEC2インスタンスのタイプをm4.largeからm4.xlargeに変更したり，リージョンやゾーンを指定するなど様々なカスタマイズが行えます。
>
>(参考) [カスタマイズによるAWSへのクラスターのインストール](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/installing/installing-on-aws#installing-aws-customizations)


### 3-3) OpenShift4クラスターのインストール
AWS上にOpenShift4を構築するコマンド(`$ openshift-install create cluster`)を実行します。  
クラスター構築完了までに3-40分ほどかかります。


![ocp4-openshift-install_create_cluster.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/2f526d7d-9ca1-256b-11ac-a05744ebc354.png)
図: $ openshift-install create cluster 実行イメージ

>Tips:  
>ログの確認 (.openshift_install.log)
>
>ログはコマンド実行ディレクトリに生成されます。
>`$ tail -f .openshift_install.log` などでログを追ってみるのも良いかもしれません。


以下のような文字列(URLおよびログイン情報)の出力が確認できればクラスター構築は完了です。

- Kubernetes API (Master): `https://api.ocp4-aws.capsmalt.net:6443`
- Console: `https://console-openshift-console.apps.ocp4-aws.capsmalt.net`
- ログインユーザー: kubeadmin
- ログインパスワード: Nmp83-XXXXX-XXXXX-YHtst

![ocp4-openshift-install_create_cluster_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69447/2d7d1bcb-722d-c55f-e6f4-a73638a90dc6.png)
図: クラスター構築完了時点の出力イメージ

インストールに失敗した場合は，「Tips: OpenShift4インストールに失敗した場合の前処理」を参照ください。AWSリソース不足では無い場合は，何度か繰り返しトライしてみてください。  
AWSアカウントを作成した直後の状態では，リージョンやリソースの準備ができていないせいか，うまくクラスター作成できない場合があります。あくまで経験上の話にはなりますが，作成したばかりのAWSアカウントの場合は，2,3回トライするとクラスター作成が無事成功するようになりました。

>Tips:
>
>OpenShift4インストールに失敗した場合の前処理
>
>OpenShift4のインストールに失敗し，エラー末尾に以下のようなメッセージが出力される場合があります。
>
>```
"failed to fetch Cluster: failed to generate asset \"Cluster\": failed to create cluster: failed to apply using Terraform"
>```
>
>例えば，AWSの指定リージョンの準備が出来ていない場合や，AWSリソースの制限にかかるケースなどいくつかのパターンが考えられます。  
>この場合，エラーメッセージを参考に対処した上で再インストールの作業が必要です。再インストールする際は，以下を忘れずに実施しましょう。
>
>```
>$ openshift-install destroy cluster                 # AWS上のOpenShift4関連のリソースを削除
>$ rm terraform.tfstate 		                     # Terraformのstateファイルの削除
>$ cp install-config.yaml.org install-config.yaml    # OpenShift4構成ファイルのコピー
上記を実行後に，再度インストールコマンドを実行
>$ openshift-install create cluster                  # 再インストール
>```

# OpenShift4のアンインストール
ずっと放置するとコストがかかるので，不要になれば削除しておきましょう。

インストールコマンド(`$ openshift-install create cluster`)を実行したディレクトリで以下を実行します。Terraformでいっきに削除されます。

```
$ openshift-install destroy cluster
```

念の為，AWSのダッシュボード上で，EC2やESB，ELBなどが削除(あるいはTerminatingで削除中)になっていることも確認しておきましょ〜。もしミスったら・・・・ポチポチとAWSコンソールで削除しましょう。



# まとめ
OpenShift4クラスターは，インストール用のConfig作成(コマンド実行)と，インストール(コマンド実行)だけでAWS上に構築できました。同じようにAzureやGCP(Tech Preview)にも構築できるようなのでトライしてみようと思います。

Kubernetesクラスターのインストール，アンインストール，バージョンアップ，マイグレーション，などクラスター自体の運用のツラミを減らせそうなのは嬉しいです。その辺はまた今度試してみます。


# 余談
AWS経験も無く，Red Hatにゆかりも無い私の友人Aも迷うこと無くOpenShift4を無事インストールできました。
(猿ではないですがw)

「マネージドKubernetesみたいに使える(使えそうな)のは良いですな〜」 by 友人B