Openshift 4.x vSphere UPIデプロイパターンでデプロイするために必要なこと（ベアメタルデプロイパターンとの変更内容について）

本記事はOpenshift vSphere UPIデプロイパターンでデプロイするためにvSphere側で準備すべきことやベアメタルデプロイパターンと異なる設定について簡単にまとめたものです。
最新情報はRed Hatが公開しているドキュメントを参照ください。
ベアメタルデプロイパターンでデプロイしたことがある人向けの記事になっております。

## ベアメタルデプロイパターンからの変更点

### install-config.yaml

基本的にベアメタルデプロイパターンのinstall-config.yamlに以下のパラメータを付与すればOK

```yaml
platform:
  vsphere:
    vCenter: vcsa1
    username: Administrator@vsphere.local
    password: Passw0rd!
    datacenter: Datacenter
    defaultDatastore: target0
    folder: "/Datacenter/vm/openshift"
```

| パラメータ                           | 説明        |
|:------------------------------------|:------------|
| platform.vsphere.vCenter            | vCenterサーバーを指定        |
| platform.vsphere.username           | vCenterサーバーのユーザーを指定      |
| platform.vsphere.password           | 上記ユーザーのパスワードを指定        |
| platform.vsphere.datacenter         | vSphere上で設定したデータセンター名を指定          |
| platform.vsphere.defaultDatastore   | vSphere上で設定したデータストアクラスターのデータストアを指定（1つしか設定できないもよう）       |
| platform.vsphere.folder             | Openshiftノード用仮想マシンを配置しているフォルダー名を指定（指定しなくてもデプロイできるが、後々のPV作成やPVCアタッチ時にはまることになるので指定するのが無難）     |

:::note warn
platform.vsphere.apiVIP、platform.vsphere.ingressVIPを設定するとvSphere IPIデプロイパターンになるので要注意
:::

### vSphereの設定内容

・データストアクラスター設定（`platform.vsphere.defaultDatastore`に設定する）
![vsphere volume1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377697/bcf999a2-8f0e-8ad8-f9e2-b02c4616dab3.png)

・各ノード用仮想マシンに `disk.EnableUUID`を`TRUE`に設定する。
![disk.EnableUUID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377697/366aef8f-94d5-7579-2d2c-ddb9609171b2.png)

・各ノード用仮想マシンを配置するためのフォルダーを作成する。（`platform.vsphere.folder`に設定する）
![フォルダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377697/1e340820-460f-ab2a-4c7b-c8ec672a9716.png)

### 管理サーバーの設定内容

・ブラウザからvCenterへアクセスしルートCA証明書をダウンロードし、oc/openshift-installコマンドを配置している管理サーバーへインポートする。
![vCenterルートCA証明書ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377697/265d3c12-b55d-c448-e229-65fc9f2e053b.png)

```bash
[root@prov ~]# ll /root/download.zip
-rw-r--r--. 1 root root 5708 Nov  1 18:16 /root/download.zip
[root@prov ~]# unzip download.zip
Archive:  download.zip
  inflating: certs/lin/4904e9a0.0
  inflating: certs/mac/4904e9a0.0
  inflating: certs/win/4904e9a0.0.crt
  inflating: certs/lin/4904e9a0.r0
  inflating: certs/mac/4904e9a0.r0
  inflating: certs/win/4904e9a0.r0.crl
[root@prov ~]# cp certs/lin/* /etc/pki/ca-trust/source/anchors
[root@prov ~]# update-ca-trust extract
```

### 参考情報

・デフォルトストレージクラスとは別にストレージクラスを追加したい場合

```bash
oc create -f - <<'EOF'
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: app
provisioner: kubernetes.io/vsphere-volume
parameters:
  diskformat: thin
  datastore: target1
reclaimPolicy: Retain
volumeBindingMode: Immediate
EOF
```

```bash
[root@prov vsphere-upi]# oc get sc
NAME             PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
app              kubernetes.io/vsphere-volume   Retain          Immediate           false                  7s
thin (default)   kubernetes.io/vsphere-volume   Delete          Immediate           false                  169m
```

・PVCを作成するとデータストアにPV用のvmdkファイルが作成される。

```bash
oc create -f - <<'EOF'
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  name: "app-vol1"
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "100Mi"
  storageClassName: "app"
EOF
```

```bash
[root@prov vsphere-upi]# oc get pvc
NAME       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
app-vol1   Bound    pvc-6b9f72b9-46ba-45f2-ab7a-c2a84142915d   100Mi      RWO            app            13s

[root@prov vsphere-upi]# oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS   REASON   AGE
pvc-6b9f72b9-46ba-45f2-ab7a-c2a84142915d   100Mi      RWO            Retain           Bound    default/app-vol1   app                     17s
```

・データストアに `kubevols`というフォルダーが作成され、その中にPV用のvmdkファイルが作成される。
![pvc作成1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377697/890960d2-5dc7-77f7-1ea8-c189659595cc.png)


以上です。