Kubernetes クラスターアーキテクチャの構築

KubernetesBeginner
オンラインで実践に進む

はじめに

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 つまたは複数のコンテナで構成されます。

タスク

  1. Nginx コンテナを含む Pod 設定ファイル simple-pod.yaml を作成してください。
  2. 適切な kubectl コマンドを使用して、その Pod をデプロイしてください。
  3. クラスター内で動作している 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 アドレスとポート番号のリスト。

タスク

  1. Nginx Pod 用のサービス設定ファイル nginx-service.yaml を作成してください。
  2. 適切な kubectl コマンドを使用して、サービスをデプロイしてください。
  3. クラスター内で動作しているサービスの情報を表示してください。

要件

  • /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 クラスターを構成するこれらの要素とその相互作用を理解することは、コンテナ化されたアプリケーションを適切にデプロイ・管理するための強固な基礎となります。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習