第1章 Kubernetes の概要

Kubernetes は、Google が開発したオープンソースのコンテナーオーケストレーションツールです。Kubernetes を使用して、コンテナーベースのワークロードを実行および管理できます。最も一般的な Kubernetes のユースケースは、相互接続されたマイクロサービスのアレイをデプロイし、クラウドネイティブな方法でアプリケーションを構築することです。オンプレミス、パブリック、プライベート、またはハイブリッドクラウド全体のホストにまたがることができる Kubernetes クラスターを作成できます。

従来、アプリケーションは単一のオペレーティングシステムの上にデプロイされていました。仮想化を使用すると、物理ホストを複数の仮想ホストに分割できます。共有リソース上の仮想インスタンスで作業することは、効率やスケーラビリティの面で最適とは言えません。仮想マシン (VM) は物理マシンと同じ数のリソースを消費するため、CPU、RAM、ストレージなどのリソースを VM に提供するとコストがかかる可能性があります。また、共有リソースでの仮想インスタンスの使用により、アプリケーションのパフォーマンスが低下する場合があります。

図1.1 従来のデプロイメント向けのコンテナーテクノロジーの進化

247 OpenShift Kubernetes の概要

この問題を解決するには、コンテナー化された環境でアプリケーションを分離するコンテナー化テクノロジーを使用することができます。VM と同様に、コンテナーには独自のファイルシステム、vCPU、メモリー、プロセススペース、依存関係などがあります。コンテナーは基盤となるインフラストラクチャーから切り離されており、クラウドや OS ディストリビューション間で移植可能です。コンテナーは本来、全機能を備えた OS よりもはるかに軽量で、オペレーティングシステムカーネルで実行される軽量の分離されたプロセスです。仮想マシンは、(コンテナーよりも) 起動に時間がかかり、物理ハードウェアを抽象化したものです。VM は、ハイパーバイザーを使用して単一のマシンで実行されます。

Kubernetes を利用すると、以下のようなアクションを行うことができます。

  • リソースの共有
  • 複数のホストにまたがるコンテナーのオーケストレーション
  • 新しいハードウェア設定のインストール
  • ヘルスチェックと自己修復アプリケーションの実行
  • コンテナー化されたアプリケーションのスケーリング

1.1. Kubernetes コンポーネント

表1.1 Kubernetes コンポーネント

コンポーネント目的

kube-proxy

クラスター内のすべてのノードで実行され、Kubernetes リソース間のネットワークトラフィックを維持します。

kube-controller-manager

クラスターの状態を管理します。

kube-scheduler

Pod をノードに割り当てます。

etcd

クラスターデータを保存します。

kube-apiserver

API オブジェクトのデータを検証および設定します。

kubelet

ノード上で実行され、コンテナーマニフェストを読み取ります。定義されたコンテナーが開始され、実行されていることを確認します。

kubectl

ワークロードの実行方法を定義できるようにします。kubectl コマンドを使用して、kube-apiserver と対話します。

Node

ノードは、Kubernetes クラスター内の物理マシンまたは VM です。コントロールプレーンはすべてのノードを管理し、Kubernetes クラスター内のノード全体で Pod をスケジュールします。

コンテナーランタイム

コンテナーランタイムは、ホストオペレーティングシステムでコンテナーを実行します。Pod をノードで実行できるように、各ノードにコンテナーランタイムをインストールする必要があります。

永続ストレージ

デバイスがシャットダウンされた後でもデータを保存します。Kubernetes は永続ボリュームを使用して、アプリケーションデータを保存します。

container-registry

コンテナーイメージを保存してアクセスします。

Pod

Pod は、Kubernetes における最小の論理単位です。Pod には、ワーカーノードで実行する 1 つ以上のコンテナーが含まれています。