Kubernetes とは

組織内でのコンテナの普及に伴い、コンテナ中心の管理ソフトウェアである Kubernetes は、コンテナ化アプリケーションのデプロイと運用における標準になっています。Google Cloud は Kubernetes が生まれた場所です。元々 Google で開発され、2014 年にオープンソースとしてリリースされました。Kubernetes は、15 年間にわたって Google のコンテナ化されたワークロードを実行してきた経験と、オープンソース コミュニティによる価値ある貢献のもと、構築されています。Google の内部クラスタ管理システムである Borg にインスパイアされた Kubernetes を利用すると、アプリケーションのデプロイと管理に関連するすべてが容易になります。自動化されたコンテナのオーケストレーションを提供することで、Kubernetes は信頼性を向上させ、日々の運用作業にかかる時間とリソースを削減します。

Google Skills のハンズオンラボで理解度をテストしましょう

Kubernetes の定義

Kubernetes(「K」と「s」の間にある 8 文字と合わせて「K8s」と短縮されることもあります)は、コンテナ化されたアプリケーションをどこでもデプロイ、スケール、管理できるオープンソース システムです。

Kubernetes はコンテナ管理の運用タスクを自動化し、アプリケーションのデプロイ、アプリケーションへの変更の展開、変化するニーズに合わせたアプリケーションのスケールアップやスケールダウン、アプリケーションのモニタリングなどの組み込みコマンドが含まれているため、アプリケーションの管理が容易になります。

Kubernetes の仕組み

アプリケーションが複数のコンテナやサーバーにわたってスケーリングされるため、Kubernetes では管理が簡素化されます。オープンソース API を使用してデプロイをオーケストレートし、コンテナを Pod にグループ化して需要とリソースの可用性に基づいてスケーリングします。また、Kubernetes は、サービス ディスカバリ、ロード バランシング、リソース割り当てを自動化し、コンテナの再起動やレプリケーションによる自己修復を可能にするために健全性をモニタリングします。

企業デベロッパー向けに、Kubernetes の仕組みを段階的に説明します。

  • アプリケーションを定義する: まず、YAML ファイルを使用してアプリケーションの望ましい状態を定義します。これらのファイルでは、実行するコンテナ、必要なリソース(CPU、メモリ)、ネットワークへの公開方法を指定します。
  • Kubernetes API にリクエストを送信する: これらの YAML ファイルを Kubernetes API に送信します。通常は、kubectl コマンドライン ツールを使用します。
  • スケジューラが Pod をノードに割り当てる: Kubernetes スケジューラは、アプリケーションの要件を分析し、コンテナ(Pod としてパッケージ化)を実行するのに最適なノードをクラスタ内で見つけます。
  • Kubelet がコンテナを起動する: 各ノードで、Kubelet プロセスがコントロール プレーンから指示を受け取り、コンテナを起動します。
  • Service がアプリケーションを公開する: Kubernetes Service は、アプリケーションに固定の IP アドレスと DNS 名を提供します。これにより、Pod が作成、破棄、再スケジュールされても、他のアプリケーションからこのアプリケーションにアクセスできます。
  • コントローラが望ましい状態を確保する: Kubernetes コントローラは、アプリケーションの状態を継続的にモニタリングし、必要に応じて修正措置を講じます。たとえば、Pod がクラッシュした場合、コントローラは自動的に新しい Pod を作成して置き換えます。
  • スケーリングと更新: デプロイ構成のレプリカ数を更新することで、アプリケーションを簡単にスケーリングできます。Kubernetes は、目的のスケールに合わせて Pod を自動的に作成または削除します。ローリング アップデートを使用すると、ダウンタイムなしで新しいバージョンのアプリケーションをデプロイできます。

Kubernetes のメリット

 自動化された運用

Kubernetes にはアプリケーション管理に関係する多くの手間のかかる作業を処理するためのコマンドが組み込まれており、日々の運用作業を自動化できます。アプリケーションの実行がどんなときでも確実に意図したとおりに行われるようにすることができます。

インフラストラクチャの抽象化

Kubernetes をインストールすると、自分のワークロードに代わってコンピューティング、ネットワーキング、ストレージを処理します。これにより、デベロッパーはアプリケーションに集中することができ、基盤となる環境を気にする必要がありません。

サービス正常性のモニタリング

Kubernetes は、サービスに対して継続的にヘルスチェックを実行し、障害のあるコンテナまたは停滞しているコンテナを再起動します。コンテナが実行されていることが確認できた場合のみ、ユーザーにサービスを提供します。

リソース使用率の最適化

Kubernetes は、コンテナの要件に基づいてコンテナをノード上に効率的に配置することで、リソース使用率を最適化します。これにより、リソースの無駄を減らし、インフラストラクチャの費用を削減できます。

アプリケーション管理の簡素化

Kubernetes でアプリケーション管理を合理化します。Kubernetes により、複雑さの異なるアプリケーションを一貫した方法でデプロイ、更新、管理できます。

ポータビリティの強化

Kubernetes は、オンプレミスのデータセンターからパブリック クラウドまで、さまざまな環境で一貫して実行されるオープンソース プラットフォームであり、企業に柔軟性とポータビリティを提供します。

Google Cloud でビジネスの課題を解決する

新規のお客様には、Google Cloud で使用できる無料クレジット $300 分を差し上げます。
お客様独自の課題については、Google Cloud のセールス スペシャリストまで詳しくご相談ください。

Kubernetes と Docker の比較

Kubernetes と Docker は、どちらか一方だけを選択するものと誤解されることが多いですが、コンテナ化されたアプリケーションを実行するための、異なりながらもお互いに補い合うテクノロジーです。

Docker を使用することで、アプリケーションを実行するために必要なすべてのものを、必要なときに必要な場所に保存して開くことができるボックスに入れておくことができます。アプリケーションをボックスに入れ始めると、それらを管理する方法が必要になります。それが Kubernetes の役割です。

Kubernetes はギリシャ語で、「船長」を意味します。船長が海上で船を安全に航行する責任があるように、Kubernetes はこれらのボックスを使用できる場所に安全に運んで届ける責任があります。

  • Kubernetes は Docker の有無にかかわらず利用できます。
  • Docker は Kubernetes の代替品ではないので、「Kubernetes か Docker か」はあまり問題ではありません。Docker とともに Kubernetes を使用してアプリケーションをコンテナ化し、大規模に実行することが重要です
  • Docker と Kubernetes の違いは、アプリケーションをコンテナ化して実行する際にそれぞれが果たす役割に関係しています
  • Docker は、アプリケーションをコンテナでパッケージして配信するためのオープンな業界標準です
  • Kubernetes は Docker を使用してコンテナ化されたアプリケーションをデプロイ、管理、スケーリングします

一般的な Kubernetes のユースケース

Kubernetes は、どこでも簡単に管理してデプロイできるアプリケーションを作成するのに使用されます。マネージド サービスとして利用できる場合、Kubernetes は必要に応じて幅広いソリューションを提供します。一般的なユースケースを次に示します。

開発速度の向上

Kubernetes は、クラウドネイティブのマイクロサービス ベースのアプリを構築するのに役立ちます。また、既存アプリのコンテナ化もサポートしており、アプリケーションのモダナイゼーションの基盤となり、アプリをすばやく開発できます。

  • 例: 金融サービス会社が Kubernetes を使用してオンライン バンキング プラットフォームのマイクロサービスをデプロイし、開発サイクルを短縮してスケーラビリティを向上

どこでもアプリケーションをデプロイ

Kubernetes はどこでも使用できるように構築されており、オンサイト デプロイとパブリック クラウド、そしてその間のハイブリッド デプロイにまたがるアプリケーションの実行が可能になります。そのため、必要な場所でアプリケーションを実行できます。

  • 例: グローバルな e コマース企業が Kubernetes を使用して複数のクラウド プロバイダにアプリケーションをデプロイし、高可用性を確保してベンダー ロックインを回避

効率的なサービスの実行

Kubernetes は、サービスを実行するために必要なクラスタのサイズを自動的に調整できます。これにより、需要に応じてアプリケーションを自動的にスケールアップまたはスケールダウンし、効率的に運用できます。

  • 例: メディア ストリーミング サービスが Kubernetes を使用して、コンテンツを視聴しているユーザー数に基づいて動画エンコード インフラストラクチャを自動的にスケーリングし、リソース使用率を最適化して費用を削減

よくある質問

Kubernetes に関するよくある質問を確認する

Kubernetes クラスタは、Kubernetes によってオーケストレートされたコンテナ化されたアプリケーションを実行するノード(仮想マシンまたは物理マシン)で構成されます。

Kubernetes Pod は、デプロイ可能な最小単位であり、1 つ以上のコンテナを格納し、単一の実行プロセス インスタンスを表します。

Kubernetes Deployment は、レプリカの管理とスムーズな更新によって、アプリケーションの望ましい状態を確保します。

Kubernetes Service は、アプリケーションに固定の IP アドレスと DNS 名を提供して、他のアプリケーションがアクセスできるようにする Kubernetes オブジェクトです。

アプリケーションをスケーリングするには、デプロイ構成のレプリカ数を更新します。Kubernetes は、目的のスケールに合わせて Pod を自動的に作成または削除します。

次のステップ

$300 分の無料クレジットと 20 以上の Always Free プロダクトを活用して、Google Cloud で構築を開始しましょう。

  • Google Cloud プロダクト
  • 100 種類を超えるプロダクトをご用意しています。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。また、すべてのお客様に 25 以上のプロダクトを無料でご利用いただけます(毎月の使用量上限があります)。
Google Cloud