レッドハットの織です。2022年のOpenShift Advent Calendarの1日目ということで、改めてOpenShiftのご紹介をしたいと思います。
OpenShiftとは
OpenShiftは、Red Hatが開発・提供するKubernetesディストリビューションです。エンタープライズ/ミッションクリティカルなワークロードで使用されることを想定し、upstreamのKubernetesに対して様々な改良を加えたりコンポーネントを追加したりし、オープンソースソフトウェア製品として提供しています。CNCFの認定を取得し、Kubernetesの標準に準拠しています [1]。
OpenShiftの現在のバージョンはv4.11ですが、v2を提供していた2014年8月に「OpenShift v3はDocker + Kubernetesをベースに作り直す」ことを表明しました。その後2015年6月にKubernetes v1.0ベースのOpenShift v3をGAして以降、Kubernetesコミュニティと協力しながらOpenShiftを発展させてきました。
OpenShiftの特徴はいろいろありますが、個人的にはその中でも次の2つが大きな特徴と考えています。
様々なエコシステムのコンポーネントが、いい感じに設定された状態で入っている
バージョンアップがサポートされる
まず 1. についてですが、Kubernetesを使用する際、メトリックス管理のためにPrometheus、ログ管理のためにElasticSearch+Fluentd+Kibana、あとIngress ControllerとWeb dashboardと、アプリのCI/CDの仕組みも欲しいしサービスメッシュも検討したいし、...と、Kubernetes本体だけでなく、エコシステムの様々なコンポーネントを一緒に使用することがほとんどだと思います。OpenShiftでは、これらのほとんどがデフォルトで入っている、もしくは必要に応じて追加できる(追加費用がかからないものもたくさんあります)ようになっており、また入れるだけでいい感じに設定され、すぐに使用することができます。お客様がよりアプリケーション開発に注力できるよう、Kubernetesに付加価値をつけて提供している、と言えるかもしれません。
2.のバージョンアップは、特にupstreamの進化の速いソフトウェアを使用するときはいつも課題になることが多いと思います。Kubernetesは今でも1年に3回マイナーバージョンが上がっており、OpenShiftもそれに合わせてバージョンアップします。OpenShiftでは、Operatorの考え方をベースにKubernetesのコアコンポーネントを含めた全てのコンポーネントを管理しており、その仕組みを使ったin-placeなバージョンアップをサポートしています。
OpenShiftがKubernetesに対して追加している機能を具体的にいくつか挙げてみます。
- Web GUI
- アプリケーションのビルドの仕組み
- デフォルトのセキュリティ設定が厳し目
- マウス数クリック (もしくはコマンド1発) でin-placeアップグレード
- Operatorによるクラスター全体(OSも含めて)の自動管理
- Metrics管理 (Prometheus)
- HAProxyベースのIngress Controller
- Multusによる複数Podネットワーク管理
- コンテナアプリを稼動させることに特化したOS (Red Hat Enterprise Linux CoreOS, RHCOS) 上で稼動し、RHCOS自体の管理もOpenShiftから行う (OpenShiftのバージョンを上げると、RHCOSのバージョンも自動的に上がります)
さらに、必要に応じてOperatorHubから機能追加することができます [2]。
- Windowsのワーカーノード管理
- Logging管理 (ElasticSearch/Fluentd/Kibna, Grafana Loki/Vector)
- Local Storage Operator (内蔵ディスクの管理)
- Compliance Opeartor (セキュリティ標準への準拠のサポート)
- File Integrity Operator (ファイル改竄検知)
- Performance Addon Operator (低レイテンシーを要求するアプリケーション特有のチューニング、v4.11以降はOpenShiftの標準機能になりました)
- SR-IOV Operator
- MetalLB Operator
- Service Mesh (Istioベースのサービスメッシュ)
- Virtualization (KubeVirtベースの仮想化)
- Serverless
- Pipelines (Tektonを用いたCI/CD)
- GitOps (ArgoCDを用いたGitOps)
- PTP Operator
- OADP Operator (バックアップ/リストア)
- MTC Operator (OpenShiftクラスターのマイグレーション)
- その他たくさん
OpenShiftを使ってみよう
OpenShift Container Platform
OpenShift Container Platform (OCP) は、サブスクリプションを購入して使っていただく製品版のOpenShiftです。今は厳密には、単に「OpenShift」と言うとOKD(後述するコミュニティ版)は含まず製品版のみを意味します。が、製品版のことを「OCP」と呼んだり、OKDとOCPの総称としてOpenShiftという呼び名を使うこともあったり、この辺りはわりと適当です [3]。
OpenShiftは様々な形で利用していただくことができます。
- マネージド: クラウド事業者さんと協力して提供するマネージドサービス。ROSA (AWSのOpenShiftマネージドサービス) や ARO (AzureのOpenShiftマネージドサービス) 等があります。OpenShiftを動かす基盤の運用管理は基本的にRed Hat SREが行います。
- セルフマネージド: 利用者が自身で構築・運用する形態
セルフマネージドな使い方の場合、IPI, UPIの2種類のインストール方法があります。
- IPI (Installer Provisioned Infrastructure): OpenShiftが使用するインフラをインストーラが自動的に作成します。例えばAWS上でIPIインストールすると、VPCやELBなども含め、必要なものをインストーラが作成します。
- UPI (User Provisioned Infrastructure): OpenShiftが使用するインフラは、インストーラ実行前にユーザーが手動で作成しておきます。
IPIはAWSやOpenStackなど、主にクラウド環境で利用されるインストール方法ですが、OpenShiftではベアメタルサーバやvSphere、Nutanix等の環境に対してもIPIインストールの仕組みを提供しています。 ベアメタルIPIの場合は、OpenStack Ironicの仕組みを流用したMetal3 [4] を使ってノードのプロビジョニングを行います。通常APIサーバやIngressコントローラの前段に配置するロードバランサに相当する機能は、HAProxy と Keepalived をOpenShiftノード上で稼動させることで実現します。
IPIインストールのお手軽さは、猿でもできるOpenShift4インストール編を見ていただけると雰囲気がわかるかと思います。
UPIインストールは、DNSやDHCP、ロードバランサ等を事前に用意する必要があり、他の方法と比べると若干手間がかかります。検証環境を作るときは、OpenShift-AiOなどのAnsible Playbookを使ったり、爆速でインストールするスクリプトを使ったりする人が多いようです。
セルフマネージドでご利用いただく際は、サブスクリプションを購入していなくても、60日は無料で使用していただくことができます [5]。
OpenShiftのドキュメントは以下のURLにあります。
- 英語版 https://docs.openshift.com/container-platform/latest/welcome/index.html
- 日本語版 https://access.redhat.com/documentation/ja-jp/openshift_container_platform/
OKD
OKDはコミュニティ版のOpenShiftです。
OpenShift v3の頃はOpenShift Originという名前のupstreamプロジェクトがあったのですが、OpenShift v4になってOriginがなくなり、OKDになりました。 OriginはOCPの関係はupstream-downstreamの関係でしたが、OKDとOCPの関係は「兄弟」だそうです [6]。
OKDのドキュメントはこちらにあります。マネージドサービスはありませんが、セルフサービスでIPI/UPIインストールする点はOpenShiftと同じです。ベースのOSとしては、Fedora CoreOS (FCOS) を使用します [7]。
OKDのnightly buildはこちらから取得できます。
最近、OKD Streams という新しい取り組みを始めました。OKD Streamsでは、OKDをビルドするためのTekton CIパイプラインを公開することで、ユーザーさんが独自の機能追加をしたりバグフィックスをしたり、OKDに対してフィードバックしやすくなることを目指しています。
最後に
Advent Calendar初日というわけで、OpenShiftの紹介をさせていただきました。機会があったらぜひOpenShift/OKDを試してみてくださいね。
- ここで言う「Kubernetesの標準への準拠」はAPIの互換性を意味しており、Kubernetesに対して動いたDeployment等のマニフェストがそのままOpenShiftで稼動することを意味するわけではありません。例えばOpenShiftはデフォルトではかなり厳しいセキュリティ設定となっており、root権限で動く(もしくは特定のUIDを指定する)コンテナイメージをOpenShiftで動かすためには、Security Contextを設定する必要があります。↩
- ここで挙げたものは無償で追加できるOperatorですが、その他にもマルチクラスタ管理やRook Cephベースのストレージなど、有償の製品もあります。↩
- 以前、コミュニティ版を「OpenShift Origin」と呼んでいた時代があり、その頃は単に「OpenShift」というとOCPとOriginの総称を意味していた...ような気がします。その名残かもしれません。↩
- Metal³ - Metal Kubed↩
- Pull Secret (コンテナイメージをpullするためのクレデンシャル情報) を取得するために、Red Hatのカスタマーポータルでユーザー登録していただく必要があります。↩
- 解釈が難しい表現ですね...↩
- CentOS StreamベースのCoreOS (SCOS) も開発中です https://github.com/openshift/os↩