OpenShift 4.4を構築してアプリを動かしてみる - OpenShift準備編 -

# OpenShift 4.4を構築してアプリを動かしてみる - OpenShift準備編 -

## 1. Redhatから資産をダウンロード
- 以下のサイトにアクセスします。（Redhatのユーザ登録が必要です）  
https://cloud.redhat.com/openshift/install/metal/user-provisioned

### 1.1 Pull secret
[Download pull secret]を選択します。
※この操作のみ、`クライアントマシン` で操作します。
※OpenShift Installerなど、他の資産はコマンドでダウンロードするため、ダウンロード後閉じても問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/9996179d-84f7-344d-519c-e8484bc17e4c.png)


### 1.2 OpenShift Installer
RedHatのサイトからは、常に最新がダウンロードされてしまうため、curlコマンドでバージョンを指定してダウンロードします。
Bastionの端末で操作します

```
# mkdir -p /opt/ocp/installer
# cd /opt/ocp/installer
# curl -O https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.4.33/openshift-install-linux-4.4.33.tar.gz
# tar xvfz openshift-install-linux-4.4.33.tar.gz
# cp openshift-install /usr/local/bin
```

### 1.3 OpenShift Client
RedHatのサイトからは、常に最新がダウンロードされてしまうため、curlコマンドでバージョンを指定してダウンロードします。
Bastionの端末で操作します

```
# mkdir -p /opt/ocp/client
# cd /opt/ocp/client
# curl -O https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.4.33/openshift-client-linux-4.4.33.tar.gz
# tar xvfz openshift-client-linux-4.4.33.tar.gz
# cp oc /usr/local/bin
# cp kubectl /usr/local/bin
```

### 1.4 RedHat Core OS
RedHatのサイトからは、常に最新がダウンロードされてしまうため、curlコマンドでバージョンを指定してダウンロードします。
Bastionの端末で操作します

```
# mkdir -p /opt/ocp/rhcos
# cd /opt/ocp/rhcos
# curl -O https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.4/4.4.17/rhcos-metal.x86_64.raw.gz
# mv rhcos-metal.x86_64.raw.gz bios.gz
```

## 2.SSH キーの生成
Bastionから各端末（bootstrap, master, worker) を操作するために、SSHキーを生成します。

```
# ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/new_rsa
# ssh-add ~/.ssh/new_rsa
```
```
# ssh-add -l
4096 SHA256:xxxxxxxxxxxxxxxxxxxxxxxx /root/.ssh/new_rsa (RSA)
```
```
# cat ~/.ssh/new_rsa.pub
ssh-rsa XXXX..... root@bastion
```

## 3.インストール設定ファイルの生成
インストール設定ファイルを作成します。

```yaml
# vi /opt/ocp/install-config.yaml
apiVersion: v1
baseDomain: openshift.local
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: lab
networking:
  clusterNetworks:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  none: {}
fips: false
pullSecret: '{"auths":{"cloud.openshift.com"....XXXXX....}' #1.1でpullした内容
sshKey: 'ssh-rsa XXXX..... root@bastion' #2の最後でcatしたnew_rsa.pubの内容
```

## 4.ignitionファイルの作成

※ 一定期間たったignitionファイルは再利用できない（？）可能性があります。
時間をおいて、OpenShiftのインストールをされる場合は、再生成してください。

※ `install-config.yaml` が `openshift-install`の`manifest`実行時に削除されますので注意してください。
　必要に応じて、 `install-config.yaml`を事前にバックアップしてください。

```
# mkdir -p /opt/ocp/bare-matel
# cd /opt/ocp/bare-metal
# cp /opt/ocp/install-config.yaml ./
```
```
# cd /opt/ocp
# /usr/local/bin/openshift-install create manifests --dir=bare-metal
INFO Consuming Install Config from target directory
WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings
```
```yaml
# vi /opt/ocp/bare-metal/manifests/cluster-scheduler-02-config.yml
kind: Scheduler
metadata:
  creationTimestamp: null
  name: cluster
spec:
  mastersSchedulable: false # trueからfalseに変更
  policy:
    name: ""
status: {}
```
```
# cd /opt/ocp
# /usr/local/bin/openshift-install create ignition-configs --dir=bare-metal
INFO Consuming Master Machines from target directory
INFO Consuming Openshift Manifests from target directory
INFO Consuming Worker Machines from target directory
INFO Consuming OpenShift Install (Manifests) from target directory
INFO Consuming Common Manifests from target directory
```

## 5.各種ファイルの配備
1.4でダウンロードしたbios.gzファイルと、4で作成したignitionファイルをnginxの公開ディレクトリに配備します。


### 5.1. WEBサーバの構成
OpenShiftのインストール時に、raw.gzやignが必要になり、手打ちで入力することになります。
そのため、本記事では以下のような構成にしております。

```
# mkdir -p /usr/share/ngix/html/ocp/ign
```

- ディレクトリ構成

```
/usr/share/nginx/html/
├── ocp
    └── ign
```

### 5.2. bios.gzの配備
```
# cd /opt/ocp/rhcos
# cp bios.gz  /usr/share/nginx/html/ocp
# chmod 644 bios.gz
```

### 5.3. 各種ignの配備
```
# cd /opt/ocp/bare-metal
# cp *.ign  /usr/share/nginx/html/ocp/ign
# cd /usr/share/nginx/html/ocp/ign
# chmod 644 *
# ls -l
total 304
-rw-r--r--. 1 root root 301073 Feb 25 18:06 bootstrap.ign
-rw-r--r--. 1 root root   1824 Feb 25 18:06 master.ign
-rw-r--r--. 1 root root   1824 Feb 25 18:06 worker.ign
```