新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

ヒッチハイカー向け OpenShift ガイド

このドキュメントでは、OpenShift 関連の用語、リンク、トピックのガイドを提供します。このドキュメントは Red Hat® OpenShift® on IBM Cloud™ に取り組んでいる開発者によって作成された、開発者のためのガイドです。

OpenShift はここに説明されているように「開発者と運用チームにとって使いやすい Kubernetes ディストリビューション」です。OpenShift は Kubernetes をベースに稼動し (前のバージョンの OpenShift ではコンテナー・オーケストレーションを処理するのに別のメカニズムを使用していました)、コンテナー化されたワークロードを実行する開発者と運用チームをサポートするツールを提供します。こうしたツールを提供できるわけは、OpenShift を駆動する Origin Kubernetes Distribution (OKD) には、Kubernetes の他に、Docker や Istio などのオープンソース・プロジェクトが含まれているためです。

以降のセクションは、アルファベット順に編成されています。「Hitchhiker’s Guide to the Galaxy」シリーズの著者である Douglas Adams 氏に敬意を表し、「慌てる必要はありません!」とアドバイスします。

ヒッチハイカー向け OpenShift ガイド

アプリケーション

OpenShift の進化に伴って、「アプリケーション」は多重定義された用語になってきています。以前は具体的な概念でしたが、OpenShift の世界ではもはや、アプリケーションは 1 つの基礎となるオブジェクトを表しません。「アプリケーション」は、いわばワークロードの特定の機能を都合よくグループ化したものとして、コンソールとコマンドライン上に存在しています。oc new-app CLI は、既存のイメージまたはソース・コードの場所から Deployment や ImageStream などを含む複数のコンポーネントを作成します。また、ポートが指定されている場合はサービスとルートの構成も作成します。

Jenkins または Tekton による CI/CD

継続的インテグレーションおよび継続的デリバリー (CI/CD) を実装する際は、いくつかの選択肢があります。継続的デリバリーのセットアップには、Jenkins というアプリケーションが広く使用されています。OpenShift では、この Jenkins を認定コンテナーとして提供しています。パッケージのビルド、単体テストと統合テストの実行、イメージのデプロイには、Jenkins を使用できます。

パイプラインを構築するのに有望なオープンソース・ツールには Tekton もあります。Tekton では、同じ操作の多くをクラウド・ネイティブに実行することができます。

コマンドライン・ツール

  • buildah: buildah は、Podman と同じように CRI-O ベースのイメージをビルドするためのツールです。buildah は基本的に Podman を介して使用できるビルド・コマンドのスーパーセットからなり、イメージの作成をきめ細かく制御することができます。

  • kubectl: kubectl は、Kubernetes クラスターを制御する際に使用する、標準的なコマンドライン・ツールです。バージョン 3.x 以降の OpenShift は Kubernetes をベースとしているため、すべての OpenShift クラスターに対して kubectl を使用できます。

  • oc: OpenShift のネイティブ構造体をファーストクラス・オブジェクト (プロジェクト、アプリケーション、ルート、ImageStream など) として操作するには、oc という OpenShift Client CLI を使用します。OpenShift は Kubernetes をベースにファーストクラス・オブジェクトを追加するため、OpenShift 固有の機能とインターフェースを取るには oc が必要です。

  • odo: odo は、共通の操作を単純化する「OpenShift do」というコマンドライン・ツールの略称です。このツールは、(運用チームではなく) 開発者が迅速にコードをデプロイして反復処理できるようにすることを目的に開発されています。

  • s2i: s2i は、GitHub ソース・コード・リポジトリー内のビルダー・イメージを結合してイメージを生成する場合に使用するコマンドライン・ツールです。このツールにより、実行可能な Docker イメージが出力されます。ビルダー・イメージとは、ソース・コードを取ってそれを実行可能なアプリケーションにコンパイルするスクリプトが組み込まれたテンプレートのようなものです。

イメージ・ストリーム

OpenShift ではイメージ・ストリームと呼ばれる抽象化を使用して、パブリック・イメージ・レジストリーからアプリケーションをデプロイするとともに、レジストリーに新しいイメージ・バージョンが追加されると動的にそのイメージをデプロイします。イメージ・ストリームを監視して、新しいイメージ・バージョンが使用可能になると自動的に自身を更新するようにビルドとデプロイを構成できます。

内部イメージ・レジストリー

OpenShift を差別化する機能には、組み込みのイメージ・レジストリーも含まれます。内部レジストリーを使用する理由は、イメージを Docker Hub や他のオンライン・レジストリーにデプロイする代わりの手段となるからです。クラスター内の複数のプロジェクトが OpenShift の内部レジストリーにアクセスするようにすれば、役割ベースのアクセス制御 (RBAC) によって、きめ細かくセキュリティーを管理できます。ただし、OpenShift クラスターが削除されると、その内部レジストリー内に保管されているイメージも削除されることに注意してください。

Kubernetes

Kubernetes は、アプリケーションのデプロイ、スケーリング、管理を自動化する、オープンソースのコンテナー・オーケストレーション・システムです。当初 Google によって設計され、現在は Cloud Native Computing Foundation で保守されています。

Minishift

Minikube を使用するとローカル・マシンに Kubernetes クラスターをセットアップしてテストすることができますが、それと同じように、Minishift を使用すると開発用の OpenShift インスタンスを実行できます。Minishift は仮想マシン内で単一ノードのクラスターを実行し、プロビジョニングには libmachine を、クラスター自体には OKD を使用します。

OKD

OpenShift を駆動する Origin Kubernetes Distribution (OKD) には、Kubernetes の他に、Docker や Istio などのオープンソース・プロジェクトが含まれています。

OpenShift の開発者用コンソール

OpenShift をベースの Kubernetes から区別する特徴としては、豊富な機能を備えた開発者用コンソールも挙げられます。OpenShift Web コンソールを使用して OpenShift 環境を一元管理できます。この Web コンソールは主に以下のビューからなります。

  • クラスター・コンソール: OpenShift Web コンソールには、管理操作を容易にするビューが組み込まれています。このビューでは、基礎となるハードウェアの詳細を含め、OpenShift クラスターの全体像を把握できます。組み込みの Grafana または Prometheus ダッシュボードでクラスターの使用状況に関する指標を確認したり、ルートと Ingress を管理したりすることもできます。

  • アプリケーション・コンソール: アプリケーション・コンソールでは、アプリケーションとデプロイメントの作成と削除、デプロイメントの管理を行うことができます。プロジェクトに含まれているデプロイ済みのすべてのポッドのログを 1 つの画面で表示し、ビルドの履歴を確認できます。

  • サービス・カタログ: サービス・カタログでは、データベースとミドルウェア・アプリケーションをコンソールから直接デプロイできます。コンソール内のサービスは OpenShift と連動できるよう事前に認証されています。サービス・カタログに含まれる、さまざまな言語に対応するベース・イメージと GitHub リポジトリー内のソース・コードからポッドを作成できます。また、Jenkins パイプラインを作成することも可能です。

Operator

Operator はパッケージと同じような役割を果たします。つまり、特定のソフトウェアをインストールする手段となります。ただし、OpenShift での Operator はソフトウェア・デプロイをさらに一歩進め、ソフトウェアの状態 (バージョン番号など) を常時確認して、目的とされる構成との不一致があるとそれを修正します。

Podman

Podman は、Linux システム上での OCI コンテナーの開発、管理、実行を目的に開発された、デーモンレス・コンテナー・エンジンです。コンテナーを root として実行することも、rootless モードで実行することもできます。簡単にいうと次のとおりです。

alias docker=podman.

プロジェクト

OpenShift でのプロジェクトは、Kubernetes での名前空間の概念に似ていますが、名前空間に現在の機能の多くが備わる前から存在しています。論理的には、プロジェクトによって OpenShift クラスター内でのマルチテナンシーが可能になり、複数のチームが単一のクラスター内でそれぞれに隔離されたワークロードを安全に実行することが可能になります。したがって、必要以上に OpenShift インスタンスをプロビジョニングしてオーバーヘッドとコストを増やすという事態を回避できます。クラスター管理者が、プロジェクトの作成権限をユーザーに付与して、プロジェクトごとにアクセスを制御できます。さらに、事前定義された一連のオブジェクトを使用してテンプレートを作成し、新しいプロジェクトのベースとして使用することもできます。

ルート

ルートは、アプリケーションを公開する手段です。さらに具体的に言うと、特定のサービスを URL によって外部に公開する手段となります。 ホスト名はクラスターのプロビジョニング時に管理者 (おそらく皆さん) が指定します。

セキュリティー

OpenShift は、セキュリティーを重視する成熟した企業がクラウドに移行する際に採用する Kubernetes プラットフォームになるよう意図されています。そのため、実行中のマルチテナント型のコンテナー化ワークロードの安全を確保することを目的としたさまざまな機能が組み込まれています。何層にも重ねられたセキュリティー (「多重防護」) によって、「知らないことを知らない」領域にあるエクスプロイトを阻止できます。その一例として、OpenShift Protects against Nasty Container Exploit をご覧ください。

  • デフォルトでは、コンテナーは root として実行されるのではなく、コンテナーに動的にユーザー ID が割り当てられます。
  • Security Context Constraints により、ユーザーのポッド内で実行できるコンポーネントと、それらのコンポーネントがアクセスできるリソースが制御されます。
  • OpenShift のインストール時にデフォルトで SELinux が有効にされます。

Source-to-Image (S2I)

OpenShift Source-to-Image (S2I) は、再現可能な Docker イメージをビルドするためのツールです。アプリケーションのソースを Docker イメージに注入して新しい Docker イメージをアセンブルし、そのまますぐに実行できるイメージを生成します。新しく生成されるイメージにはベース・イメージ (ビルダー) とビルド・ソースが結合され、docker run コマンドを使用できる状態になっています。S2I では、前にダウンロードされた依存関係とビルド済み成果物を再利用する増分式ビルドをサポートしています。

テンプレート

OpenShift のテンプレートは、OpenShift Web コンソールにクイックスタート・アプリケーションとその他のコンテンツを取り込む手段としてよく知られています。その一方で、クラスターのさまざまな側面とアプリケーションの状態を管理するコード・ソリューションとしてうまく使いこなせば、インフラストラクチャーのビルディング・ブロックにもなる強力なツールです。

まとめ

OpenShift を使いこなす上で、このガイドが皆さんの役に立つことを願います。チュートリアル、動画、実用的なコード・パターンについては、Red Hat OpenShift on IBM Cloud ページを参照してください。

ぜひ、この「ヒッチハイカー向け OpenShift ガイド」で取り上げたトピックに関するフィードバックをお寄せください。このガイドを改善するための追加内容や提案がありましたら、Anton McConville まで連絡してください。「Hitchhiker’s Guide to Galaxy」がクラウドソーシングされたように、このガイドもクラウドソーシングされるはずです!