前回は、Kubernetesの概要と、minikubeのインストール方法について説明しました。今回は、Kubernetesのアーキテクチャと、基本的な用語について説明していきます。
Kubernetesの基本用語
Kubernetesを学んでいくと、様々なKubernetes用語が出てくるので、基本的なものをここに整理しておきたいと思います。それぞれの詳細については、次回以降の記事にて説明したいと思いますので、ざっくりとどんなものかだけ見ていただければと思います。
用語 | 概要 | 特徴・機能 |
---|---|---|
クラスター(Cluster) | Kubernetesの基本単位で、複数のノードから構成される | ノード間でコンテナ化されたアプリケーションが協調して動作 |
ノード(Node) | クラスター内の単一のマシン(物理または仮想) | マスターノードとワーカーノードがある |
ポッド(Pod) | Kubernetesでデプロイされる最小のコンピューティングユニット | 一つまたは複数のコンテナを含み、同じネットワーク名前空間とストレージを共有 |
レプリカセット(ReplicaSet) | 特定の数のポッドを常に実行することを保証 | 高可用性と負荷分散を実現 |
デプロイメント(Deployment) | アプリケーションのデプロイと更新を管理するための宣言的なオブジェクト | レプリカセットを管理し、ロールアウトやロールバックを制御 |
サービス(Service) | ポッドの集合に対する永続的なIPアドレスとDNS名を提供し、ロードバランシングを行う | ClusterIP、NodePort、LoadBalancerなどの種類がある |
ネームスペース(Namespace) | クラスター内のリソースを論理的に分離する | 大規模なクラスター管理やマルチテナント環境で有用 |
コンフィグマップ(ConfigMap) | 環境設定データをキー-バリュー形式で保存し、ポッド内のコンテナに設定情報を提供 | 設定ファイルやコマンドライン引数の外部化に使用 |
シークレット(Secret) | パスワードやAPIキーなどの機密情報を安全に保存し、ポッド内のコンテナに提供 | ベース64エンコードで保存され、適切な権限設定が必要 |
イングレス(Ingress) | クラスター外部からクラスター内のサービスへのHTTPおよびHTTPSルートを管理 | ロードバランシング、SSL/TLS終了、名前ベースのバーチャルホスティングを提供 |
ボリューム(Volume) | ポッド内のコンテナがデータを共有および永続化するためのストレージを提供 | emptyDir、hostPath、persistentVolumeClaimなどの種類がある |
クーバレット(Kubelet) | 各ノード上で動作するエージェントで、ポッドのライフサイクルを管理 | クラスターの状態をマスターノードに報告 |
マスターノード(Master Node) | クラスター全体を管理するコンポーネントが動作するノード | APIサーバー、コントローラーマネージャー、スケジューラーなどが含まれる |
ワーカーノード(Worker Node) | 実際にコンテナを実行するノード | クーバレットやコンテナランタイムが動作 |
kube-proxy | 各ノード上で動作するネットワークプロキシで、サービス間の通信を管理 | iptablesやipvsを使用してトラフィックをルーティング |
Kubernetesのアーキテクチャ
Kubernetesのアーキテクチャは、公式ページには以下のように書かれています。
Kubernetesクラスターは、まずコントロールプレーンとワーカーノードの二つの役割のノードから構成されます。コントロールプレーン、ワーカーノードともに複数台のマシンから構成することができます。この絵では、コントロールプレーンが一台、ワーカーノードが2台の構成になっています。
コントロールプレーン
コントロールプレーンは、クラスターの管理に必要な以下のコンポーネントが配置されています。
- kube-api-server
- etcd
- scheduler
- Controller Manager
- cloud-control-manager
kube-api-server
Kubernetesクラスターのフロントエンドになるコンポーネントです。全ての操作がこのAPIサーバーを通じて行われます。例えば、Kubernetesリソースの作成、更新、削除などのリクエストを受け取り、処理を行います。
etcd
Kubernetesの主要なデータストアで、クラスタのすべてのデータを永続化します。クラスタの設定情報、状態、メタデータなどを保存するために使われます。
scheduler
Kubernetesのスケジューリングコンポーネントで、新しいPodがどのノードで実行されるかを決定します。
controller manager
Kubernetesのコントローラを管理するコンポーネントで、クラスタの状態を所望の状態に保ちます。レプリカセット、デプロイメントなどのリソースを監視して、必要に応じてPodを作成、更新、削除します。
cloud-control-manager
クラウドプロバイダ固有のコントローラを実行するコンポーネントで、クラウドリソースの管理を行います。例えば、ノードの管理であったり、ロードバランサの作成などを行います。
ワーカーノード
ワーカーノードは、実際のワークロードを実行するために必要な以下のコンポーネントが配置されています。
- kubelet
- kube-proxy
kubelet
各ノード上で、Podとコンテナのライフサイクルを管理します。Podの健康状態を監視して、APIサーバーにノードの状態を報告します。ユーザーは、このkubeletの報告をコマンドラインから確認することができます。
kube-proxy
各ノード上でサービス間のネットワーク通信を管理し、適切なPodにトラフィックをルーティングします。
まとめ
今回は簡単にKubernetesの各コンポーネントの役割と、アーキテクチャを説明しました。次回は、実際にKubernetesクラスタ上にPodをデプロイしてみたいと思います。