OpenShift 4.11 UPI install on bare metal

# はじめに

OpenShift 4.11 のベアメタルへのUPIインストールについて、以前のバージョンのインストール手順と比較して留意すると良いポイントをご紹介します。

今回インストールしたバージョンは `4.11.6` となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/ebaffb8c-0602-e29c-f4b0-dd98f2aa6d5f.png)

余談 : `ベアメタルへのUPIインストール` という表現で界隈の方には何となく通じると思っているのですが、正確な呼び方かどうか不明。良い呼び方を教えていいただけますと幸いです。

## 1. 公式ドキュメント

- `docs.openshift.com` 版(英語のみ)
  - [Installing a user-provisioned cluster on bare metal - Installing on bare metal | Installing | OpenShift Container Platform 4.11](https://docs.openshift.com/container-platform/4.11/installing/installing_bare_metal/installing-bare-metal.html)
- `redhat.com/documentation` 版(日本語あり)
  - [11.2. ユーザーによってプロビジョニングされるクラスターのベアメタルへのインストール OpenShift Container Platform 4.11 | Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.11/html/installing/installing-bare-metal)

## 2. 参考文献

今回構築した環境や手順はこれまでにご紹介した 4.6 や 4.7 のインストール手順と同様となります。
以下の記事も併せてご参照ください。

https://qiita.com/loftkun/items/044b6302d734d7f94587

https://qiita.com/loftkun/items/9de7708128caa760ccfd

## 3. 留意ポイント1 : install-config.yaml への capabilities 設定の追加

以下は公式ドキュメントに記載されているサンプルの `install-config.yaml` です。
過去のバージョンと比較すると `capabilities` の設定が追加されています。

( 余談ですが 以前のバージョンでは `clusterNetworks` だった項目名が `clusterNetwork` になっている気がします。ちょっと気になりましたが、サンプルに記載の通り単数形にてインストールできました。 )

```yaml
apiVersion: v1
baseDomain: example.com 
compute: 
- hyperthreading: Enabled 
  name: worker
  replicas: 0 
controlPlane: 
  hyperthreading: Enabled 
  name: master
  replicas: 3 
metadata:
  name: test 
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14 
    hostPrefix: 23 
  networkType: OpenShiftSDN
  serviceNetwork: 
  - 172.30.0.0/16
platform:
  none: {} 
fips: false 
pullSecret: '{"auths": ...}' 
sshKey: 'ssh-ed25519 AAAA...' 
capabilities:
  baselineCapabilitySet: None
  additionalEnabledCapabilities:
  - openshift-samples
```

`capabilities` については以下リリースノートに記載があります。

https://docs.openshift.com/container-platform/4.11/release_notes/ocp-4-11-release-notes.html#ocp-4-11-capabilities

上記に記載のとおり、OpenShift 4.11 から、`baremetal`、`marketplace`、`openshift-samples` の cluster operator のインストールを無効化できるようになっています。

私の場合、`capabilities` の設定については サンプルの `install-config.yaml` の記載通りとしてインストールを行いました。

以下のように確かに `baremetal` と `marketplace` の cluster operator はインストールされていませんでした。  
`openshift-samples` の cluster operator はインストール されていますね。

```bash
[root@bastion ocp]# ./oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.11.6    True        False         False      79s
cloud-controller-manager                   4.11.6    True        False         False      99m
cloud-credential                           4.11.6    True        False         False      107m
cluster-autoscaler                         4.11.6    True        False         False      94m
config-operator                            4.11.6    True        False         False      96m
console                                    4.11.6    True        False         False      4m51s
csi-snapshot-controller                    4.11.6    True        False         False      94m
dns                                        4.11.6    True        False         False      93m
etcd                                       4.11.6    True        False         False      84m
image-registry                             4.11.6    True        False         False      80m
ingress                                    4.11.6    True        False         False      12m
insights                                   4.11.6    True        False         False      81m
kube-apiserver                             4.11.6    True        False         False      82m
kube-controller-manager                    4.11.6    True        False         False      91m
kube-scheduler                             4.11.6    True        False         False      84m
kube-storage-version-migrator              4.11.6    True        False         False      96m
machine-api                                4.11.6    True        False         False      94m
machine-approver                           4.11.6    True        False         False      94m
machine-config                             4.11.6    True        False         False      83m
monitoring                                 4.11.6    True        False         False      3m41s
network                                    4.11.6    True        False         False      94m
node-tuning                                4.11.6    True        False         False      16m
openshift-apiserver                        4.11.6    True        False         False      7m28s
openshift-controller-manager               4.11.6    True        False         False      84m
openshift-samples                          4.11.6    True        False         False      80m
operator-lifecycle-manager                 4.11.6    True        False         False      95m
operator-lifecycle-manager-catalog         4.11.6    True        False         False      95m
operator-lifecycle-manager-packageserver   4.11.6    True        False         False      7m36s
service-ca                                 4.11.6    True        False         False      96m
storage                                    4.11.6    True        False         False      96m
[root@bastion ocp]# 
```

インストールは無事に終了しましたが、特に `marketplace` cluster operator がインストールされていないとどのような影響があるのでしょうか？(次章へ続く)

なお、後述する状況を鑑みて、始めからインストール時に `marketplace` を設定することのご検討をいただくのがおすすめです。

## 4. 留意ポイント2 : No OperatorHub items found と表示されて OperatorHub が利用できない場合の対応策

`marketplace` cluster operator をインストールしていない場合、`Administrator` パースペクティブの `OperatorHub` を表示しようとすると、
`No OperatorHub items found` ( 日本語表示している場合 `OperatorHub 項目が見つかりません` ) と表示され、OperatorHub を使用することができませんでした。

以下のような説明文も表示されます。

```
Please check that the OperatorHub is running and that you have created a valid CatalogSource.
For more information about OperatorHub, please click here.

( click here の リンク先は https://github.com/operator-framework/operator-marketplace )
```

上記説明文に従い状況を確認してみましょう。
`CatalogSource` という CR はありますが、オブジェクトはありませんでした。

```log
[root@bastion ocp]# ./oc get CatalogSource -A
No resources found
[root@bastion ocp]#
```

`OperatorHub` については以下のドキュメントに説明があります。

https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.11/html-single/operators/index#olm-understanding-operatorhub

上記ドキュメントに以下のような記述があります。

> OperatorHub UI コンポーネントは、デフォルトで OpenShift Container Platform の openshift-marketplace namespace で Marketplace Operator によって実行されます。

`openshift-marketplace` ns を確認してみると、配下にオブジェクトは ありませんでした。

```log
[root@bastion ocp]# ./oc get pods -n openshift-marketplace
No resources found in openshift-marketplace namespace.
[root@bastion ocp]# ./oc get all -n openshift-marketplace
No resources found in openshift-marketplace namespace.
[root@bastion ocp]#
```

同ドキュメントに以下のような記述もあります。

> Marketplace Operator は、OperatorHub で提供されるデフォルトの CatalogSource オブジェクトを管理する cluster という名前の OperatorHub カスタムリソース (CR) を管理します。

確認してみると、`OperatorHub` という CR 自体がありませんでした。

```log
[root@bastion ocp]# ./oc get OperatorHub -A
error: the server doesn't have a resource type "OperatorHub"
```

OperatorHub を表示するには、Marketplace Operator が必要という可能性がありそうですね。

前章で、`capabilities` の設定 に `marketplace` を明示的に指定せずにインストールを行っため、
Marketplace Operator が稼働せず、OperatorHub が表示されていない状況であると推測しました。

幸い、リリースノートの以下章に、インストール後にも capabilities を設定できると記述がありました。
UPIインストールはお時間もかかりますので再インストールしなくてよさそうなのはありがたいです。

https://docs.openshift.com/container-platform/4.11/release_notes/ocp-4-11-release-notes.html#ocp-4-11-cluster-capabilities

以下ドキュメントに記載されている方法で、インストール後でも機能を有効化することができるとのこと、早速試してみましょう。

`Post-installation configuration` の `Cluster capabilities` ドキュメント :

https://docs.openshift.com/container-platform/4.11/post_installation_configuration/cluster-capabilities.html#setting_additional_enabled_capabilities_cluster-capabilities

`additionalEnabledCapabilities` に `marketplace` を追加しました。

```bash
[root@bastion ocp]# ./oc patch clusterversion/version --type merge -p '{"spec":{"capabilities":{"additionalEnabledCapabilities":["marketplace","openshift-samples"]}}}'
clusterversion.config.openshift.io/version patched
[root@bastion ocp]# ./oc get clusterversion version -o jsonpath='{.spec.capabilities}{"\n"}{.status.capabilities}{"\n"}'
{"additionalEnabledCapabilities":["marketplace","openshift-samples"],"baselineCapabilitySet":"None"}
{"enabledCapabilities":["marketplace","openshift-samples"],"knownCapabilities":["baremetal","marketplace","openshift-samples"]}
[root@bastion ocp]# 
```

確かに `marketplace` cluster operator が追加でインストールされました。

```bash
[root@bastion ocp]# ./oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.11.6    True        False         False      4d14h
cloud-controller-manager                   4.11.6    True        False         False      18d
cloud-credential                           4.11.6    True        False         False      18d
cluster-autoscaler                         4.11.6    True        False         False      18d     
config-operator                            4.11.6    True        False         False      18d
console                                    4.11.6    True        False         False      11d
csi-snapshot-controller                    4.11.6    True        False         False      18d
dns                                        4.11.6    True        False         False      18d
etcd                                       4.11.6    True        False         False      18d
image-registry                             4.11.6    True        False         False      18d
ingress                                    4.11.6    True        False         False      18d
insights                                   4.11.6    True        False         False      18d
kube-apiserver                             4.11.6    True        False         False      18d
kube-controller-manager                    4.11.6    True        False         False      18d
kube-scheduler                             4.11.6    True        False         False      18d
kube-storage-version-migrator              4.11.6    True        False         False      18d
machine-api                                4.11.6    True        False         False      18d
machine-approver                           4.11.6    True        False         False      18d
machine-config                             4.11.6    True        False         False      4d17h
marketplace                                4.11.6    True        False         False      71s
monitoring                                 4.11.6    True        False         False      11d
network                                    4.11.6    True        False         False      18d
node-tuning                                4.11.6    True        False         False      18d
openshift-apiserver                        4.11.6    True        False         False      11d
openshift-controller-manager               4.11.6    True        False         False      18d
openshift-samples                          4.11.6    True        False         False      18d
operator-lifecycle-manager                 4.11.6    True        False         False      18d
operator-lifecycle-manager-catalog         4.11.6    True        False         False      18d
operator-lifecycle-manager-packageserver   4.11.6    True        False         False      18d
service-ca                                 4.11.6    True        False         False      18d
storage                                    4.11.6    True        False         False      18d
[root@bastion ocp]#
```

空っぽだった `openshift-marketplace` ns 配下にデプロイされています。いい感じですね。

```bash
[root@bastion ocp]# ./oc get all -n openshift-marketplace                                                                                                                                                                                                       
NAME                                        READY   STATUS    RESTARTS   AGE
pod/certified-operators-pcrhg               1/1     Running   0          4h4m
pod/community-operators-vh8mj               1/1     Running   0          4h4m
pod/marketplace-operator-56846cf448-wfkdj   1/1     Running   0          4h5m
pod/redhat-marketplace-h97sw                1/1     Running   0          4h4m
pod/redhat-operators-txgnv                  1/1     Running   0          4h4m

NAME                                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/certified-operators            ClusterIP   172.30.139.240   <none>        50051/TCP           4h4m
service/community-operators            ClusterIP   172.30.20.19     <none>        50051/TCP           4h4m
service/marketplace-operator-metrics   ClusterIP   172.30.67.90     <none>        8383/TCP,8081/TCP   4h5m
service/redhat-marketplace             ClusterIP   172.30.27.147    <none>        50051/TCP           4h4m
service/redhat-operators               ClusterIP   172.30.183.137   <none>        50051/TCP           4h4m

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/marketplace-operator   1/1     1            1           4h5m

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/marketplace-operator-56846cf448   1         1         1       4h5m
[root@bastion ocp]#
```

`OperatorHub` という CR と オブジェクトも作成されています。いけそうです！

```bash
[root@bastion ocp]# ./oc get OperatorHub
NAME      AGE
cluster   4h7m
[root@bastion ocp]# 
```

`Administrator` パースペクティブの `OperatorHub` を表示してみましょう、正常に表示されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/18c23278-8562-3065-50cc-9a5f5c0e3aa0.png)

これで `OpenShift GitOps`、`OpenShift Pipelines`、`OpenShift Serverless` などを利用するために必要なOpratorを OperatorHub 画面上でインストールできる他、さまざまなOperatorも検索可能ですね

試しに `OpenShift GitOps` オペレーターをインストールしてみました。

`OpenShift GitOps`で検索してきちんとHITしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/71437630-0449-6b64-c741-3e85db39b846.png)

インストールしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/7bc84c2d-fc29-fbc0-2312-c3f3d8e50ed5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/60bb2072-e8db-4f0e-1927-9e54d3689ea1.png)

インストールできたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/c1d118c5-c4a8-aa59-981a-62c6d5d6b7d9.png)

確かに Argo CD がデプロイされており、ログインもできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/8c90da47-def2-0ebe-f6d1-9ace62359301.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21106/c5b94265-2237-6e8e-5d7e-3a688d4b26e1.png)

一例として `OpenShift GitOps` Operator で試してみた結果、問題なく OperatorHubからOperatorの検索やインストールもできてそうですね。

## 5. まとめ

OperatorHub を利用するためには `marketplace` cluster operator がインストールされている必要があるようですね。

インストール時に `install-config.yaml` の `capabilities` に `marketplace` を設定しておく、もしくはインストール後に`additionalEnabledCapabilities` に `marketplace` を設定することで、`marketplace` cluster operator がインストールされ、OperatorHub を利用することができます。

OperatorHub を利用することが確定している場合は、前者が良さそうですね。
本記事が OpenShift 4.11 インストール手順の参考になりましたら幸いです。

関連つぶやき:

https://twitter.com/loftkun/status/1585059234336501761

https://twitter.com/loftkun/status/1585117745477144576