Kubernetes(K8s)は、コンテナ化されたアプリケーションとサービスの管理、デプロイの自動化、構成の簡素化を実現する、オープンソースのスケーラブルで拡張性の高いプラットフォームです。急速に成長する大規模なエコシステムであり、幅広いサービス、サポート、ツールが利用可能です。
Kubernetesはギリシャ語で「操舵手」または「パイロット」を意味します。Googleは2014年にKubernetesをオープンソース化しました。Kubernetesは、Googleが長年培ってきた大規模ワークロードの運用経験と、コミュニティのベストプラクティス、アイデアを組み合わせたものです。
アプリケーションデプロイの進化:
従来のデプロイ: 初期は、アプリケーションは物理サーバー上で実行されていました。物理サーバー内のアプリケーションに対するリソース境界を定義することができず、リソースの非効率的な割り当てにつながっていました。
仮想化デプロイ: 仮想化により、1台の物理サーバーのCPU上で複数の仮想マシン(VM)を実行することが可能になりました。仮想化はVM間でアプリケーションを分離し、あるアプリケーションの情報が別のアプリケーションによって自由にアクセスされないため、セキュリティレベルの向上を提供します。仮想化は物理サーバー内のリソースのより良い利用とスケーラビリティの向上を可能にします。
コンテナデプロイ: コンテナはVMに似ていますが、オペレーティングシステム(OS)をアプリケーション間で共有する分離性を備えています。そのため、コンテナは軽量と見なされます。VMと同様に、コンテナにはファイルシステム、CPU、メモリ、プロセス空間などがあります。コンテナは、迅速なアプリケーションの作成とデプロイ、継続的な開発と統合、開発と運用の分離、システムとアプリケーションの可視化、環境の一貫性、移植性、アプリケーションの集中管理、分散マイクロサービス、リソースの分離、効率的なリソース使用など、多くの利点をもたらします。
なぜKubernetesが必要なのか?
本番環境では、アプリケーションを実行するコンテナを管理し、ダウンタイムがないことを保証する必要があります。たとえば、1つのコンテナが停止した場合、別のコンテナを起動する必要があります。Kubernetesは、分散システムを堅牢に実行するためのフレームワークを提供します。アプリケーションのレプリケーションとフェイルオーバーを処理し、デプロイメントパターンを提供します。
Kubernetesの提供機能:
- サービスディスカバリとロードバランシング: Kubernetesは、DNS名または独自のIPアドレスを使用してコンテナを公開できます。1つのコンテナへのトラフィック量が多い場合、Kubernetesはロードバランシングを行い、ネットワークトラフィックを分散してデプロイメントを安定させます。
- ストレージのオーケストレーション: Kubernetesを使用すると、選択したストレージシステムを自動的にマウントできます。
- 自動ロールアウトとロールバック: Kubernetesは、制御された頻度で実際の状態を目的の状態に変更できます。
- 自動パッキング: Kubernetesは、リソースを最大限に活用するために、コンテナをノードにスケジュールできます。
- セルフヒーリング: Kubernetesは、障害が発生したコンテナを再起動し、コンテナを交換し、ヘルスチェックの設定に応答しないコンテナを削除し、準備ができるまでクライアントにそれらをアドバタイズしません。
- 構成管理とSecrets管理: Kubernetesを使用すると、機密情報を保存および管理できます。
Kubernetesではないもの:
Kubernetesは、従来の包括的なPaaS(Platform as a Service)ではありません。ハードウェアレベルではなく、コンテナレベルで動作します。Kubernetesは:
- サポートされるアプリケーションの種類を制限しません。
- ソースコードをデプロイしたり、アプリケーションをビルドしたりしません。
- ミドルウェアなどのアプリケーションレベルのサービスを提供しません。
- ロギング、監視、またはアラートのソリューションを義務付けません。
- 言語/フレームワークスタックを規定または提供しません。
- 包括的な構成、保守、管理、またはセルフヒーリングシステムを提供または適用しません。
- 単なるオーケストレーションシステムではありません。オーケストレーションの必要性を排除します。