Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

Kubernetes とは

 

Kubernetes の正式な定義はこちら (https://kubernetes.io/) でご覧いただけます。

“Kubernetes (K8s) は、コンテナ化されたアプリケーションの導入、拡張、管理を自動化するオープンソースシステムです。アプリケーションを論理ユニットに構成するコンテナをグループ化することで、管理と検出を容易に実行できるようになります。Kubernetes は、Google で実働ワークロードを実行する15年の経験をベースに構築されており、コミュニティーの優れたアイデアや実践と組み合わせています。”

Kubernetes に関する重要な事柄を以下に示します。

  • ’Google によって開始されたオープンソースプロジェクト

  • ’成熟した安定した製品

  • オーケストレーション’ツールとして

  • これ’は、上位レベルのコンテナを処理するプラットフォームです。

Kubernetes は、2014の Google のエンジニアのグループによって作成されており、Google’s 内部システム Borg によって設計および開発モデルが影響を受けます。Kubernetes は、システムリソース (CPU、メモリ、またはその他のカスタムメトリック) に基づいて、ノードの分散型アプリケーションを統合するメカニズムを総称的に提供する構築オブジェクトのセットを定義しています。Kubernetes は、必要な機能に REST Api を提供することで、コンテナのグループの管理の複雑さを解消します。

簡単に言えば、Docker などのコンテナ技術にはコンテナー内アプリケーションのパッケージ化と配信の機能がありますが、Kubernetes などのオーケストレーションシステムでは、コンテナーを比較的高いレベルで導入して管理できます。さらに簡単な方法ではありません。

Note

多くの Kubernetes ドキュメントは、技術を k8s (または K-8 文字) として省略しています。現在のメジャーリリース (この本書の執筆時点では) は v 1.14 です。

第1章では、Docker は、最も成熟したコンテナ技術であり、Kubernetes が必要なのはなぜでしょうか。技術的には、Kubernetes は Dockers よりも比較的高いレベルで動作するため、まさにそれは何を意味するのでしょうか。

Kubernetes を Docker と比較すると、Python と C 言語を比較するという、役に立つ例えと言えます。C は、多数の基本的な OS コンポーネントと Api を含むほぼすべてを構築するのに十分な性能を発揮しますが、実際には、作業負荷のタスクを自動化するスクリプトを作成することをお勧めします。つまり、C を使用するよりもはるかに Python を使用することを意味します。Python では、すでに必要な機能を提供している既存のモジュールを把握し、それをアプリケーションにインポートしてから、その機能を使用して必要なものを実現する方法に焦点を絞る必要があります。低レベルのシステム API 呼び出しとハードウェアの詳細について心配する必要はほとんどありません。

ネットワークの例えは、TCP/IP インターネットプロトコルです。FTP などのファイル転送ツールを開発する場合は、raw ソケットではなく TCP ソケットをベースにして作業を開始することをお勧めします。Tcp ソケットは TCP プロトコル上で実行されています。これにより、エラー検出、フロー、輻輳制御、再送信などの組み込みの信頼性機能をすべて備えた堅牢な基盤が実現します。検討すべきことは、一方のエンドからデータを配信し、それをもう一方のエンドユーザーに受信する方法です。Raw ソケットで IP プロトコルとさらに低いレイヤーを使用しているため、ツールのファイル転送機能を開始する前に、信頼性に関するすべての機能を検討して実装する必要があります。

そのため、Kubernetes に戻ります。複数のコンピューターで複数のコンテナを実行したいと考えている場合、Docker と直接対話するには、多くの作業が必要になります。以下のタスクは少なくとも、考慮すべき事項のリストにあります。

  • さまざまなマシンでのログオン、ネットワーク経由でのコンテナの生成

  • コンテナを追加または削除して需要を変更した場合のスケールアップ/ダウン

  • アプリケーションの複数のインスタンスによるストレージの一貫性を維持

  • 異なるノードで実行されているコンテナ間でロードを分散

  • さまざまなマシンで障害が発生した場合の新しいコンテナの起動

このような作業をすべて手動で実行すると、すべてが圧倒的なものになるということがすぐにわかります。高レベルの抽象化とそれらを Kubernetes API で表現することで、これらすべてのタスクが非常に容易になります。

Note

Kubernetes は、その種類の唯一のツールではありません。 Docker には、群れという独自のオーケストレーションツールがあります。’しかし、これは別のガイドの議論にすぎません。本書では、Kubernetes について説明しています。