Kubernetes基礎 #1 - はじめに

Last Edited: 3/11/2025

このブログ記事では、Kubernetesを始めるために必要な基本的な概念を紹介します。

DevOps

あなたのウェブアプリケーションが予想外に有名になり、一夜にして何百万ものユーザーを獲得したとします。 DockerとNginxを使用した初期のロードバランシング設定は、ほんの少し前までは問題なくリクエストを処理していましたが、 今や大量のトラフィックに対応できなくなっています。サーバーは容量制限により停止し、あなたは新しいサーバーを購入して水平スケーリングを実装する必要に迫られました。

各新サーバーに設定を複製し、リポジトリをプルしてDockerを再度実行し、複数のサーバーにトラフィックを振り分けるための追加のリバースプロキシを設定します。 しかし、アプリケーションが複数のサーバー上の複数のコンテナにまたがるようになると、レプリカの管理と継続的なアクセシビリティの確保がますます面倒になります。 サーバーがクラッシュしたりメンテナンスが必要になるたびに、リバースプロキシの設定を手動で更新し、新しいサーバーを追加し、すべてを再設定する必要があります。

ここでKubernetesの出番です。Kubernetesは2014年にGoogleによって開発されたオープンソースツールで、コンテナ管理を自動化し、 デプロイメントとスケーリングに必要な手作業を排除するように設計されています。その移植性と堅牢な機能により、 Kubernetesは複雑なプラットフォームを管理する大企業の間で急速に人気を獲得しています。このKubernetesシリーズでは、 Kubernetesを始めるための基礎を学ぶことで、万が一アプリケーションが大量のトラフィックを伴うものなった場合でも、 問題なく対応できるようにすることを目的にしています。

Kubernetesクラスター

Kubernetes(「k」と「s」の間に8文字あるため、k8sと略されることが多い)は、アーキテクチャを理解しやすくするための抽象化を提供していますが、 これが最初は混乱の原因になることもあります。そこで、始めるために必要な基本的なコンポーネントを説明します。Kubernetesでは、ノード(各ノードは物理マシンまたは仮想マシン)のクラスターを作成します。 マスターノードにはクラスター全体を監視・制御するコントロールプレーンがあり、ワーカーノードはポッド内でコンテナ化されたアプリケーションを実行します。

K8s Components

コントロールプレーンは、APIサーバー(クラスターと対話するためのエントリーポイント)、コントロールマネージャー(クラスターの情報を追跡)、 スケジューラー(ポッドをノードに賢く割り当てる)、etcd(クラスターの状態を保存する)で構成されています。 コマンドラインツールのkubectl(Kube Control)を使用して、APIサーバーを介してクラスターと対話できます。 そして、各ワーカーノードにはkubelet(指示に基づいてポッドを管理する)とkube-proxy(ノード間の通信を可能にする)が装備され、 一連のポッドを実行します。

リソース

上記で紹介したクラスター内のコンポーネントに加えて、クラスターを設定するための他の抽象化、リソースがあります。 Docker ComposeやNginxと同様に、KubernetesではYAMLファイルを使用してリソースを通じてクラスターを設定できます。 まず、デプロイメントを設定する必要があります。これはポッドの設計図として機能し、Docker Composeファイルがコンテナの構築と実行のための設計図として機能するのと似ています。 デプロイメントはクラスターが持つべきポッドの数、コンテナを構築するイメージ、コンテナポートなどを指定します。

K8s Configurables

次に、サービスを設定する必要があります。サービスは同じコンテナを実行する複数のポッドの永続的なIPアドレスまたはシンプルなエントリーポイントを提供し、 ロードバランサーとして機能します。サービスを設定することで、ポッドとのネットワーキングの詳細を抽象化できます。 サービスは外部(ワーカーノードのIPアドレスとポートでアクセス可能)または内部(クラスター内の他のノードからのみアクセス可能)にすることができます。 最後に、設定マップとシークレットを設定し、設定とシークレットに関連するキーと値のペアを保存して、単純な設定やシークレットの変更でクラスター全体を再構築しなくて済むようにします。

さらに、任意でIngressを設定できます。これはURLの公開、TLS/SSL終端、パスベースのルーティング(パスに基づいてサービスにトラフィックを分配する)を担当します。 Ingressルールは、ポッド内のリバースプロキシまたはロードバランサーであるIngressコントローラーによって実施されます。 上の図は、私たちが学んだリソースを視覚化したものです。今後の記事では、YAMLファイルでのこれらのリソースの設定方法やkubectlを使用した設定の適用方法など、 より詳細に説明します。

結論

この記事では、Kubernetesの背景にある動機と、Kubernetesを始めるための基本的なコンポーネントとリソースについて説明しました。 まだ触れていない概念もありますが、これらについては今回カバーした内容をさらに掘り下げる今後の記事で合わせて紹介していきます。

リソース