Kubernetes
名詞 · オーケストレーション
Googleが作成したオープンソースのコンテナオーケストレーションシステムで、コンテナ化されたアプリケーションのデプロイメント、スケーリング、運用管理を自動化します。大規模な本番環境でマイクロサービスを実行するための業界標準となっています。
アプリケーションの望ましい状態を継続的に監視し、障害のあるコンテナを自動的に再起動し、トラフィックを分散し、サービスの無停止アップデートを管理する分散クラウドコンピューティングプラットフォーム(K8sとも呼ばれます)。
Cloud Native Computing Foundation(CNCF)が支えるmatureで拡張可能なエコシステムで、ツールのネットワーク(Helm、Istio、Prometheus)を提供し、AWS(EKS)、Google Cloud(GKE)、Azure(AKS)が参照するクラウドネイティブのオーケストレーション層として採用されています。
DockerとKubernetesは補完的です。Dockerは個々のコンテナを作成・実行し、Kubernetesは本番環境でこれらのコンテナ群全体をオーケストレーション・管理します。Dockerはアプリケーションをパッケージングし、Kubernetesは適切な数のレプリカで実行し、自動的に修復し、ダウンタイムなしで更新することを保証します。当社では、クライアントにレジリエントで自動スケーラブルなアーキテクチャを提供するため、両方の技術を組み合わせています。
Kubernetesは宣言的モデルで動作します。インフラの望ましい状態(レプリカ数、リソース、ネットワーク)をYAMLファイルに記述し、Kubernetesのコントロールプレーンがその状態を維持するために継続的に動作します。スケジューラーがPodをノードに割り当て、コントローラーマネージャーが逸脱を監視し、kubeletが各ノードでコンテナを実行します。当社では、クライアントに最大の可用性とゼロダウンタイムデプロイメントを保証するためにこのメカニズムを活用しています。
Kubernetesは、アプリケーションが可変負荷を処理する必要がある場合、高可用性が必要な場合、またはマイクロサービスアーキテクチャに基づいている場合に不可欠です。水平スケーリング、ロードバランシング、ローリングアップデート、コンテナ障害時の自動復旧を自動化します。当社では、一貫したパフォーマンスとほぼ100%の可用性を維持しながら、予測不能なトラフィックピークに対応する必要があるWebアプリケーションを持つ企業にKubernetesを推奨しています。
Kubernetesは、Google、Spotify、Airbnb、Adidas、NASAなど世界最大のテクノロジー企業のほか、成長中の中小企業やスタートアップでも使用されています。CNCFによると、クラウドを採用している組織の96%以上がKubernetesを使用または評価しています。当社では、Webの巨人と同じ堅牢性と弾力性を提供するため、クライアントのプロジェクトをKubernetes上にデプロイしています。
Kubernetesは包括的な機能セットを提供します:コンテナオーケストレーション、水平・垂直オートスケーリング、サービスディスカバリとロードバランシング、自動ローリングアップデートとロールバック、シークレットと設定の管理、永続ボリュームのマウント、自己修復(self-healing)。セキュリティのためのRBACシステムも統合し、マルチテナント分離のためのNamespaceをサポートしています。当社では、堅牢でセキュアなクラウドプラットフォームを構築するためにこれらの機能を活用しています。
Kubernetesクラスターは、コントロールプレーンの監督下でコンテナ化されたアプリケーションを実行するマシン(ノード)の集合です。コントロールプレーンにはAPI Server、スケジューラー、etcd(分散データベース)が含まれ、ワーカーノードはアプリケーションコンテナを含むPodをホストします。当社では、コストとレジリエンスを最適化するため、マネージドクラウドプロバイダー(EKS、GKE)上でクライアントのクラスターをサイジング・設定しています。
Kubernetesを使用するには、まずクラスター(ローカルのMinikube/Kind、またはクラウドプロバイダーのマネージド)を用意し、Deployment、Service、Ingressを定義するYAMLマニフェストにアプリケーションを記述します。コマンドラインツール`kubectl`でこれらの設定を適用し、クラスターの状態を監視できます。当社では、HelmやArgoCDなどのツールを用いたCI/CD統合を含め、クラスターの初期化から本番リリースまでクライアントをサポートしています。
Kubernetesは「クーバネティス」と発音し、K8s(KとSの間の8文字を「8」で表す)とよく略されます。名前は古代ギリシャ語の「κυβερνήτης」(kubernetes)に由来し、「操縦士」や「舵取り」を意味します。これはプラットフォームの役割、つまりアプリケーションコンテナを操縦しオーケストレーションすることを完璧に反映しています。Async Codeでは、日常の技術的なやり取りではより簡潔なK8sという略称を好んで使用しています。
基本的な違いは、Dockerがコンテナ化ツール(コンテナの作成と実行)であるのに対し、Kubernetesがオーケストレーター(本番環境での数百のコンテナの管理と調整)であることです。Dockerは単一マシンで使用され、Kubernetesはマシンのクラスター上で使用されます。両者は競合ではなく補完的です。Dockerがコンテナを構築し、Kubernetesがそれをオーケストレーションします。当社では、高可用性のマイクロサービスアーキテクチャをデプロイするためにこの補完性を熟知しています。
Kubernetesの主要な利点には、オートスケーリング(負荷ピークへの自動適応)、セルフヒーリング(障害コンテナの自動再起動)、ゼロダウンタイムデプロイメント、マルチクラウドポータビリティ、リソースのインテリジェントなビンパッキングによるインフラコストの最適化が含まれます。Kubernetesは単一クラウドプロバイダーへのベンダーロックインも軽減します。当社では、レジリエントで経済的かつ成長に対応できるアプリケーションを保証するため、各クライアントプロジェクトにこれらの利点を統合しています。