個人利用での Kubernetes, OpenShift 導入方法の選択肢まとめ


2023年3月時点での個人利用目的でコンテナ実行環境 Kubernetes / OpenShift を導入する方法について調べ、簡単にまとめた．

## Kubernetes の導入方法
詳細は公式リファレンス [はじめに | Kubernetes](https://kubernetes.io/ja/docs/setup/) に書かれている．

### プロダクション環境
#### kubeadm
クラスタノードの数だけ手動でインストールする必要があり手間がかかる。
#### kubespray
Ansible playbook を用いてクラスタノードの設定を一斉に行う。（内部的には kubeadm が用いられている）。
Terraform + kubespray を用いてローカルの KVM 環境に Kubernetes クラスタを構築する方法は、以下の記事を参照：

https://qiita.com/sawa2d2/items/c592dcbd958f69441068

### 学習環境
minikube ([minikube start | minikube](https://minikube.sigs.k8s.io/docs/start/))

Kubernetes クラスタをローカル環境で簡単に実行することができる。
Terraform を用いてローカルの KVM 環境に Minikube を構築する方法は、以下の記事を参照：

https://qiita.com/sawa2d2/items/6d3c0b015144eba44ea2

## OpenShift / OKD の導入方法

### OpenShift, OKD とは

OpenShift は RedHat がエンタープライズ向けに提供する、 Kubernetes を中心とした包括的な CNCF 環境である。
またOKD は OpenShift のコミュニティ・エディションとしての位置付けになっている。
RedHat による説明を引用すると：

> OpenShift はコンテナ・オーケストレーション機能としての [Kubernetes](https://www.redhat.com/ja/topics/containers/what-is-kubernetes) を活用し、CNCF オープンソース・エコシステムの[機能](https://www.redhat.com/ja/openshift-4/details) を含むほか、そのすべてが Red Hat によって包括的なアプリケーション・プラットフォームとしてテスト、パッケージ化、およびサポートされています。
> (中略)
> OKD は Kubernetes の実行に必要なソフトウェア・コンポーネントをパッケージ化したコミュニティ・プロジェクトで、以前は OpenShift Origin と呼ばれていました。(中略) OKD は、一般的に OpenShift よりも機能面で数リリース先行しています。
> (中略)
> OKD と OpenShift の一番の違いは、OpenShift がエンタープライズ・ソフトウェアの要件に対応している点です。OpenShift はセキュリティ対応チーム、長期サポートオプション、検証済みのサードパーティ運用者、認定データベースやミドルウェアを提供し、大規模運用に必要な要件を満たしています。
>    -- <cite>[Red Hat OpenShift とOKD](https://www.redhat.com/ja/topics/containers/red-hat-openshift-okd)</cite>

OKD の導入方法には以下の選択肢がある（いずれも RedHat が公式に提供するもの）。

### プロダクション環境
#### OKD
[Preparing to install on bare metal - Installing on bare metal | Installing | OKD 4](https://docs.okd.io/latest/installing/installing_bare_metal/preparing-to-install-on-bare-metal.html) に従って導入する。

各ノードの OS には、コンテナ運用に特化した軽量 OS である Fedora CoreOS (FCOS) 、あるいはそのエンタープライズ版である RedHat CoreOS (RHCOS) が用いられる。

クラスタの構成は、3 以上の control-plane からなる High-availability (HA) cluster と、3未満の control plane からなる non-HA cluster の2種類に大別される。compute ノード数を 0 としてクラスタを構成すると、control-plane が compute を兼ねるようになり、両タスクは同一ノード上で動作する。単一ノードからなるクラスタは特に SNO (Single Node OpenShift) と呼ばれることがある。

下図に構成例を示す。

![pattern.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261727/60d55cf2-d044-783f-6e58-ca5eaa5444a9.png)

詳しくは次のリンクを参照：

https://docs.okd.io/latest/operators/operator_sdk/osdk-ha-sno.html 


参考までに、Linux マシン上に SNO を構築する方法については、以下の記事を参照：

https://qiita.com/sawa2d2/items/45eda993ccd1c54e6fcd

また、1台の物理ホスト上にHA 構成 (3-master + 2-worker) の OKD クラスタを構築する方法については、以下の記事を参照：

https://qiita.com/sawa2d2/items/3cf9c9d5d9ce5f589124


### 学習環境
#### Red Hat OpenShift Local (旧称：CodeReady Containers (CRC))
OKD  version 4 の学習環境。Minikube の OpenShift 版に例えられる。30日間の体験期間を過ぎると利用できなくなる。
#### Minishift
OKD version 3 以前の学習環境。CRC の前身。


## その他・ハンズオン教材など
参考までに、学習・ハンズオン用途で利用可能な OpenShift 環境には次のものがある。

#### [OpenSift Learning (旧称: Learn OpenShift)](https://developers.redhat.com/learn)
ブラウザ上で動作する OpenShift sandbox が提供されている．(RedHat アカウントが必要)
#### [IBM Open Labs](https://openlabs3-ui.mybluemix.net/openlabs/demo)
ブラウザ上で OpenShift 環境を試すことができる．(IBM Cloud アカウントが必要)

## 関連リンク
- [OpenShift Infra：マスターノードのマルチアベイラビリティゾーン設計は2つのAZか3つのAZか？ - 赤帽エンジニアブログ](https://rheb.hatenablog.com/entry/2019/12/11/OpenShift_Infra%EF%BC%9A%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E3%83%9E%E3%83%AB%E3%83%81%E3%82%A2%E3%83%99%E3%82%A4%E3%83%A9%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%82%BE) ... OpenShift で HA を実現する上で、なぜ control plane が3つ以上必要なのか解説されている
- [個人環境で無料で利用できるOpenShift 4.x環境4選 - zaki work log](https://zaki-hmkc.hatenablog.com/entry/2020/09/23/202914#2-IBM-Open-Labs)