Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Kubernetes の基礎を学ぶ

PFCP はオープンソースのコンテナオーケストレーションプラットフォームである Kubernetes をベースに構成されています。このサイトのドキュメントは Kubernetes の基本的なコンセプトや用語を理解していることが前提になっています。まだ Kubernetes に慣れていない方は、ここで Kubernetes の基礎を確認してください。また、公式サイトや書籍を通じて Kubernetes についてさらに深く知ることで、PFCP をより効果的に利用できるようになります。

Kubernetes の概要

Kubernetes は、Cloud Native Computing Foundation(CNCF)にホストされたオープンソースのコンテナオーケストレーションプラットフォームです。コンテナ化されたアプリケーションの展開、スケーリング、可用性の管理を自動化するためのツールで、この分野の標準として広く採用されています。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Info

PFCP は Kubernetes をベースとして深層学習・AI ワークロード向けのクラウドサービスとして構成されています。提供するクラスタはマネージドで、ユーザがクラスタ自体を運用する必要がありません。

クラスタとノード

クラスタはワークロードを実行・管理するためのマシン群の集合体です。ユーザからみると 1 つのまとまった計算リソースとして扱えます。

ノードはクラスタを構成する 1 つのマシンで、その実体は一般的な仮想マシンや物理マシンです。

Kubernetes はユーザからワークロードのデプロイが指示されると、ワークロード定義に記述された CPU やメモリ、MN-Core といったデバイスの要求数を確認し、適切なノードにワークロードをスケジュール、実行します。

Info

PFCP ではユーザのワークロードを実行するためのノードのことを「計算ノード」と呼びます。

Namespace

Kubernetes Namespace は 1 つのクラスタを論理的に分割するための機能です。 Kubernetes ではリソースの名前が Namespace 内でユニークである必要があります。 ステージングや本番などの環境を分割したり、複数のチームやプロジェクトから使用する場合に Namespace を使うことでリソースの管理が容易になります。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Info

一般に Kubernetes Namespace の管理にはクラスタ全体の管理者権限が必要ですが、PFCP では Kubernetes カスタムアドオンを使用して組織管理者が Namespace を管理できます。

Pod

Kubernetes ではワークロードを Pod という 1 つ以上のコンテナで構成します。Pod は Kubernetes におけるデプロイ可能な最小単位です。 1 つの Pod に含まれるコンテナは必ず同一のノード上で実行され、同じネットワークとストレージを共有しながら動作します。

詳細は、Kubernetes の公式ドキュメントを参照ください。

コンテナとコンテナイメージ

コンテナはシステムの他の部分とは分離して一連のプロセスを実行する技術です。コンテナはホストや他のプロセスから切り離されるため、環境依存による問題を引き起こしにくく、どの環境でも同じように実行できます。

コンテナを実行するために必要なコードやライブラリ、ランタイムはコンテナイメージと呼ばれるパッケージに含める必要があります。 コンテナイメージはコンテナイメージレジストリと呼ばれるサービスに保存され、配信されます。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Info

PFCP の専用コンテナイメージレジストリは、MN-Core の使用に必要なファイルやソフトウェアを含むコンテナイメージを提供しており、すぐに MN-Core の使用を開始できます。

Note

PFCP ではユーザ自身がビルドしたコンテナイメージをクラスタで使用するためのコンテナイメージレジストリを提供していません。 外部のコンテナイメージレジストリサービスをご利用ください。

Pod を管理する上位のリソース: Deployment、StatefulSet、Job、CronJob...

Kubernetes は Pod を管理するより上位のリソースタイプを提供し、様々な種類のワークロードをサポートします。

  • Deployment: クラスタのノード間で分散された複数の Pod レプリカを実行します。失敗した Pod や応答しなくなった Pod は自動的に置き換えられるため、サービスを可用性高く運用する用途に向いています。
  • StatefulSet: 各 Pod レプリカに一意の ID を保持して実行します。ステートフルなアプリケーションの実行に役立ちます。
  • Job: 1 つ以上の Pod レプリカを作成して指定された数の Pod が正常に終了するまで、Pod の作成と実行を再試行し続けます。ワンショットの学習を行う用途に向いています。
  • CronJob: Linux cron のように指定のスケジュールに基づき Kubernetes Job を作成します。

Note

上位リソースを使わずにユーザにより直接作成された Pod(Bare Pod)はノードの障害などが理由で停止された場合に自動的に他のノードで再実行されません。 基本的に直接 Pod を作成することは避け、上位のリソースを使用してください。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Info

PFCP では深層学習・AI ワークロードの実行に便利な Kubernetes 組み込みではないカスタムのリソースも提供しています。カスタムのリソースについては、本ユーザガイドをご参照ください。

Service

Service は一連の Pod に固定されたネットワークエンドポイントを提供します。 Pod は実行するたびに異なる IP アドレスが自動先に割り当てられるため、直接 Pod に対しては安定してアクセスできません。

加えて、Kubernetes はクラスタ内部のアドレス解決用に組み込みの DNS を提供し、Service の名前を使用したサービスディスカバリ機能を提供します。Service の名前を使用して安定してワークロードにアクセスできます。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Ingress

Ingress はクラスタ外から Kubernetes Service に対しての HTTP/HTTPS アクセスを提供します。ホスト名やパスに応じたリクエストの振り分けが可能です。

詳細は、Kubernetes の公式ドキュメントを参照ください。

Info

PFCP では、Ingress を使用してサービスにインターネットから安全に公開できます。 ワークロードをウェブ API として公開する または ワークロードをウェブアプリとして公開する を参照してください。

永続ストレージ

実行中の Pod に保存されたデータは Pod の停止とともに失われます。 Pod の存続期間を超えてデータを保持する必要がある場合には、PersistentVolumeClaim を使用して永続ストレージをプロビジョニングし、Pod にマウントして使用できます。

詳細は、Kubernetes の公式ドキュメントを参照ください。

マニフェストファイル

クラスタ上に作成・管理したいリソースの状態(構成)を記述した YAML または JSON 形式のファイルをマニフェストファイルと呼びます。一般に YAML 形式で記述されます。

Kubernetes ではクラスタに対してワークロードをデプロイするにはコマンドラインツールなどから命令的に作成・更新する方法と、マニフェストファイルを使用して宣言的に作成・更新する方法の 2 つがあります。 命令的な方法は一時的に操作する場合に素早く行える利点があります。一方で再現性が低いため、多くの場合に望ましい状態をファイルとして管理できるマニフェストファイルを使用した宣言的な方法の使用を推奨します。

詳細は、Kubernetes の公式ドキュメントを参照ください。