はじめに
Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するコンテナオーケストレーションプラットフォームです。このチャレンジでは、Kubernetes クラスターを構成する各コンポーネントとその相互作用について、実際の操作を通じてアーキテクチャを深く理解していきます。
Kubernetes コントロールプレーンコンポーネント
Kubernetes のコントロールプレーン(Control Plane)は、クラスター全体のオーケストレーションを司り、アプリケーションのデプロイやスケーリング、クラスターの状態管理を行います。主なコンポーネントは以下の通りです。
- kube-apiserver: コントロールプレーンのフロントエンドであり、クラスターに対するすべての管理リクエストを処理します。
- etcd: クラスターのすべての構成データや状態を保存する、高可用な分散キーバリューストアです。
- kube-scheduler: 新しく作成された Pod を検知し、どのノードで実行させるかを決定します。
- kube-controller-manager: クラスターの状態を監視し、あるべき状態(Desired State)に維持するための各種コントローラーを実行します。
タスク
あなたのタスクは、kube-apiserver、etcd、kube-scheduler、kube-controller-manager を含むコントロールプレーンコンポーネントのステータスを取得し、表示することです。
要件
kubectlコマンドを使用して、コントロールプレーンコンポーネントのステータスを取得してください。- コマンドは
/home/labex/projectディレクトリで実行してください。 - 出力結果には、各コントロールプレーンコンポーネントの健康状態(Status)が表示されている必要があります。
例
コントロールプレーンのステータスを取得した際の期待される出力例は以下の通りです。
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
scheduler Healthy ok
Kubernetes ノードコンポーネント
Kubernetes のノード(Node)コンポーネントは、各ワーカーマシン上で動作し、コンテナの実行環境を提供します。主なコンポーネントは以下の通りです。
- kubelet: 各ノードで動作するエージェントで、コンテナが PodSpec に従って正常に動作していることを管理します。
- kube-proxy: クラスター内のネットワークルールを管理し、適切なコンテナへトラフィックをルーティングするネットワークプロキシです。
タスク
Kubernetes クラスター内で動作しているノードの情報を表示してください。これには、ノード名、ステータス、およびその他の関連詳細が含まれます。
要件
kubectlコマンドを使用して、クラスター内のノードを一覧表示してください。- コマンドは
/home/labex/projectディレクトリで実行してください。 - 出力には、クラスター内の各ノードの詳細情報が表示されている必要があります。
例
ノード情報を表示した際の期待される出力例は以下の通りです。
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 2m52s v1.26.1
Kubernetes Pod コンポーネント
Pod(ポッド)は Kubernetes における最小のデプロイ単位であり、クラスター内で実行されるプロセスの単一インスタンスを表します。1 つの Pod は、ネットワーク名前空間やストレージボリュームを共有する 1 つまたは複数のコンテナで構成されます。
タスク
- Nginx コンテナを含む Pod 設定ファイル
simple-pod.yamlを作成してください。 - 適切な
kubectlコマンドを使用して、その Pod をデプロイしてください。 - クラスター内で動作している Pod の情報を表示してください。
要件
/home/labex/projectディレクトリに、Nginx イメージを使用するsimple-podという名前の Pod 設定ファイルsimple-pod.yamlを作成してください。kubectlコマンドを使用して、作成した YAML ファイルから Pod を作成してください。- 別の
kubectlコマンドを使用して、クラスター内で動作している Pod の一覧を表示してください。
例
Pod を作成し、表示した際の期待される出力例は以下の通りです。
pod/simple-pod created
NAME READY STATUS RESTARTS AGE
simple-pod 1/1 Running 0 29s
Kubernetes サービスコンポーネント
Kubernetes のサービス(Service)は、論理的な Pod のセットと、それらにアクセスするためのポリシーを定義する抽象化レイヤーです。主な要素は以下の通りです。
- Service IP: サービスに割り当てられる仮想 IP アドレス(Cluster IP)。
- Service Port: サービスに割り当てられるポート番号。
- Endpoint: サービスの背後にある Pod の IP アドレスとポート番号のリスト。
タスク
- Nginx Pod 用のサービス設定ファイル
nginx-service.yamlを作成してください。 - 適切な
kubectlコマンドを使用して、サービスをデプロイしてください。 - クラスター内で動作しているサービスの情報を表示してください。
要件
/home/labex/projectディレクトリに、ポート 80 を公開するnginx-serviceという名前のサービス設定ファイルnginx-service.yamlを作成してください。kubectlコマンドを使用して、作成した YAML ファイルからサービスを作成してください。- 別の
kubectlコマンドを使用して、クラスター内で動作しているサービスの一覧を表示してください。
例
サービスを表示した際の期待される出力例は以下の通りです。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m42s
nginx-service ClusterIP 10.96.184.71 <none> 80/TCP 4s
まとめ
このチャレンジでは、コントロールプレーン、ノード、Pod、サービスといった Kubernetes の主要なアーキテクチャコンポーネントについて学びました。各種コンポーネントのステータス確認方法、基本的な Pod とサービスの作成方法、そして Pod を外部に公開する仕組みを実践しました。Kubernetes クラスターを構成するこれらの要素とその相互作用を理解することは、コンテナ化されたアプリケーションを適切にデプロイ・管理するための強固な基礎となります。


