概要
コンテナを使うと、開発者はアプリケーションに専念し、運用チームはインフラストラクチャに集中できます。コンテナ・オーケストレーションとは、企業内のこのようなデプロイメントを管理する方法です。
Kubernetes はオープンソースのコンテナ・オーケストレーション・プラットフォームで、コンテナ化アプリケーションのデプロイ、管理、スケーリングに伴う多くの手動プロセスを自動化します。
Kubernetes は、コンテナ化アプリケーション、レガシーアプリケーション、クラウドネイティブ・アプリケーションだけでなく、プライベートクラウドや、Amazon Web Services (AWS)、Google Cloud、IBM Cloud、Microsoft Azure などの主要なパブリッククラウド・プロバイダーを含めた各環境にわたり、マイクロサービスにリファクタリングされたアプリケーションの大規模なデリバリーと管理にも役立ちます。
Kubernetes アーキテクチャ
Kubernetes は、物理または仮想マシンからなるクラスタ上でコンテナをスケジューリングして実行するためのプラットフォームを提供します。Kubernetes アーキテクチャはクラスタを、互いに連携するコンポーネントに分割し、定義されたクラスタの状態を維持します。
Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するためのノードマシン群です。Kubernetes クラスタは 2 つのパーツとして視覚化できます。コントロールプレーンと、コンピュートマシンつまりノードです。各ノードは独立した Linux® 環境であり、物理マシンでも仮想マシンでもかまいません。各ノードは、コンテナで構成される Pod を実行します。
Kubernetes API (アプリケーション・プログラミング・インタフェース) は Kubernetes コントロールプレーンのフロントエンドであり、ユーザーはこれを使用して Kubernetes クラスタと対話します。API サーバーは要求が有効かどうかを判断して処理します。
Kubernetes API は Kubernetes クラスタの管理、作成、構成に使用されるインタフェースで、ユーザーや外部コンポーネント、そしてクラスタの各部分が相互に通信する方法です。
この Kubernetes 関する簡単なチュートリアルでは、クラスタを作成してアプリケーションをデプロイする方法をご紹介しています。
Kubernetes クラスタの他の要素
ノード:
要求に基づいてコントロールプレーンによって割り当てられたタスクを実行するマシン。
Pod:
1 つのノードにデプロイされた、1 つ以上のコンテナのセット。Pod は、最小かつ最も単純な Kubernetes オブジェクトです。
サービス:
一連の Pod で実行されているアプリケーションをネットワークサービスとして公開する方法。Pod から作業の定義を分離します。
Kubectl:
Kubernetes クラスタを管理できるコマンドライン・インタフェース。初心者向けの基本的な kubectl コマンドと Helm コマンドについてはこちらをご覧ください。
kubelet:
コントロールプレーンと通信する各ノード内にある小さなアプリケーション。kubelet は、コンテナが Pod で実行されていることを確認します。
Kubernetes を使い始める準備ができている場合は、オープンソースツールの Minikube でローカルの Kubernetes クラスタを設定することが可能です。これにより、ノートパソコンを使って Kubernetes を試してみることができます。
Kubernetes の効果
Kubernetes は、定義された状態と実際の状態に基づいて機能します。Kubernetes オブジェクトはクラスタの状態を表し、ワークロードをどのように見せたいかを Kubernetes に伝えます。
オブジェクトが作成および定義されると、Kubernetes はそのオブジェクトが常に存在することを確認します。
コントローラーは、Kubernetes オブジェクトの状態をアクティブに管理し、クラスタを現在の状態から望ましい状態に移行する変更を行います。
開発者やシステム管理者は、Kubernetes API に送信する YAML または JSON ファイルを使用して、定義された状態を指定します。Kubernetes はコントローラーを使用して、新しく定義された状態とクラスタ内の実際の状態の違いを分析します。
Kubernetes クラスタの望ましい状態は、どのアプリケーションまたは他のどのワークロードを実行する必要があるか、どのコンテナイメージを使用するか、どのリソースを利用できるようにするべきかといった構成の詳細を定義します。
構成データとクラスタの状態に関する情報は、key-value ストアデータベースである etcd 内にあります。etcd は、フォールトトレラントで分散されており、クラスタに関する信頼できる基本的な情報源となるように設計されています。
Kubernetes は、自動的にクラスタを管理して望ましい状態に一致させます。コントローラーは通常、API サーバーにメッセージを送信して必要な変更を行うことでこれを実行します。一部の Kubernetes リソースには組み込みコントローラーがあります。
Kubernetes が望ましい状態を管理する方法の例として、望ましい状態を「3」に設定してアプリケーションをデプロイするとします。この設定は、アプリケーションの 3 つのレプリカが実行されている必要があることを表します。
これらのコンテナの 1 つがクラッシュした場合、Kubernetes のレプリカセットは、実行されているレプリカが 2 つだけだということを認識し、レプリカを 1 つ追加して望ましい状態を保持します。
レプリカセットは、指定された数の Pod が常に確実に実行されるようにするコントローラーです。
Kubernetes デプロイメントは、レプリカセットの管理に推奨される手法であり、Pod に宣言型の更新を加えるので、手動でそれらを管理する必要はありません。
Kubernetes で自動スケーリングを使用して、ユーザーの需要に基づいてサービスのスケールを管理することもできます。アプリケーションまたはサービスの望ましい状態を指定するとき、需要が増加した場合は追加の Pod を使用可能にするようコントローラーに指示することもできます。
たとえば、忙しい時間帯に、アプリケーションの望ましい状態が、通常は 3 つのレプリカであるのに対して 10 に増える場合があります。
Kubernetes デプロイメント
Kubernetes デプロイメントとは、アプリケーションに宣言的アップデートを提供する、Kubernetes でのリソースオブジェクトです。
デプロイメントによって、アプリケーションのライフサイクルを記述できます。たとえば、アプリケーションに使用するイメージ、配置する Pod の数、Pod をアップデートする方法などを記述できます。
コンテナ化アプリケーションのアップデートを手作業で行うと、時間と手間がかかりがちです。Kubernetes デプロイメントはこのプロセスを自動化し、繰り返し利用可能にします。
デプロイメントはすべて Kubernetes バックエンドで管理され、アップデートプロセス全体はサーバー側で実行され、クライアントとのやり取りはありません。
Kubernetes デプロイメント・オブジェクトでは、以下のことができます。
- レプリカセットまたは Pod のデプロイ
- Pod とレプリカセットのアップデート
- デプロイメントの前のバージョンへのロールバック
- デプロイメントのスケーリング
- デプロイメントの一時停止または続行
Kubernetes パターン
Kubernetes パターンは、コンテナベースのアプリケーションおよびサービス向けの設計パターンです。
Kubernetes はクラウドネイティブ・アプリケーションの作成に役立ち、アプリケーション・プログラミング・インタフェース (API) のライブラリと、アプリケーションをビルドするためのツールを提供します。
しかし、これらの機能を使用してビジネスニーズを満たし、目標を達成するための完全なシステムを構築する方法についての開発者やアーキテクト向けガイドラインが、Kubernetes では提供されていません。
パターンとは、アーキテクチャを再利用する方法です。アーキテクチャをすべて自作するのではなく、既存の Kubernetes パターンを使用できるので、機能が想定どおりに動作することも保証されます。
パターンは Kubernetes 開発者が必要とするツールであり、システムの構築方法を示します。
Kubernetes Operator
Kubernetes Operator は、Kubernetes アプリケーションをパッケージ、デプロイ、管理する手段です。Kubernetes アプリケーションは Kubernetes にデプロイされ、Kubernetes API と kubectl ツールを使用して管理されます。
Kubernetes Operator は、Kubernetes API の機能を拡張したアプリケーション固有のコントローラーで、Kubernetes ユーザーに代わって複雑なアプリケーションのインスタンスを作成、設定、管理します。
Operator SDK を使用して、10 分で Kubernetes Operator を構築する方法を学びましょう。
Kubernetes のリソースとコントローラーの基本コンセプトをベースに構築されていますが、ドメインまたはアプリケーション固有の知識を含み、管理対象のソフトウェアのライフサイクル全体を自動化します。
Kubernetes Operator の詳細と、それがなぜ重要なのかを知りたい方のために、簡単な説明をこちらでご紹介しています。
Operator を使ってコードを作成し、Kubernetes が提供する基本的な自動化機能では対応していないタスクを自動化できます。DevOps またはサイト信頼性エンジニアリング (SRE) アプローチに従うチームについては、Operator は SRE プラクティスを Kubernetes に取り入れるために開発されました。
Kubernetes Operator の動作を実例を交えて説明し、Operator Framework とソフトウェア開発キットで Operator を構築する方法を紹介します。
トレーニングと管理作業
Deploying Containerized Applications Tech Overview
短時間の講義と詳細なデモンストレーションを集めたこのオンデマンドシリーズでは、Docker、Kubernetes、および Red Hat® OpenShift® Container Platform を使用した Linux コンテナやコンテナ・オーケストレーション技術についての基礎を説明します。
Red Hat OpenShift Administration
このコースでは、Red Hat OpenShift Container Platform をインストールして管理する方法を習得できます。この実践的なラボベースのコースでは、OpenShift クラスタをインストール、設定、管理する方法を説明し、サンプルアプリケーションをデプロイすることで、開発者がプラットフォームを使用する方法の理解を深めます。
Introduction to OpenShift Applications
このコースは、Red Hat OpenShift アプリケーションのビルド、デプロイ、スケーリング、およびトラブルシューティングのための開発者向け入門コースです。OpenShift と Kubernetes が広く導入されるようになり、開発者には、コンテナ化されたアプリケーション・プラットフォームでアプリケーションを開発、ビルド、デプロイする方法を理解することがますます求められています。
エンタープライズ向け Kubernetes
Red Hat OpenShift は、企業向けの Kubernetes です。Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。
Red Hat OpenShift を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアが迅速かつ簡単にビジネスにつながるのを助けます。
無料の 60 日評価版で Red Hat OpenShift を使用し、コンテナ運用の自動化を試してみることができます。