ローカル環境でkind を使ってKubernetesの動きを確認する

ローカル環境でkind を使ってKubernetesの動きを確認する手順 Kubernetes

Kubernetesを使いWordPress+MySQL環境を作成の記事では、Docker Desktop内のKubernetesクラスタに、シングルインスタンスのWordPress+MySQLをデプロイしましたが、Kubernetesが持つコンテナオーケストレーション機能まで確認できませんでした。

Kubernetesクラスタに、シングルインスタンスのWordPress+MySQLをデプロイ

そこで、この記事では、DockerコンテナをKubernetesノードとして使用してクラスターを構築できるKind(Kubernetes in Docker)を使って、ローカル環境にKubernetesクラスターを構築し、クラスターの動作確認を行ってみることにしました。

Kindクラスターをローカル環境に構築して

作業環境

  • Windows 11
  • Docker Desktopインストール
    (Kindでクラスターを作成するので、設定の「Enable Kubernetes」はONにしません。)
  • WSL2 + Ubuntu
  • Visual Studio Code + Remote – Containers 拡張

環境の詳細は、こちらの記事を参照してください。

kubectl のインストール

【参考】Linux上でのkubectlのインストールおよびセットアップ

kind のインストール

【参考】kind – Quick Start

ターミナル操作

kind クラスタの作成

Kindマニフェストファイル(kind-config.yaml)を作成し、kindクラスタを起動します。

Kindマニフェストファイル(kind-config.yaml) を作成

kind クラスタを起動

以下のコマンドを実行し、kindクラスタの起動と確認を行う。

サンプルアプリ(3レプリカ NGINX)のデプロイ

Kubernetesマニフェストファイルの作成

3つのNginx Pod(app: demo)を作成し、リソース制限を定義。
Service(demo-svc)を作成し、上記Podを負荷分散対象に設定。
トラフィックルーティングは、Serviceのポート80への接続を、Podのポート80に転送。

アプリをデプロイ

deployment.yamlファイルに定義されたリソースをKubernetesクラスターに適用し、アプリをデプロイする。(DeploymentとServiceの両方が作成される)

ターミナル操作

nginxアクセス確認

nginxアクセス確認 nginxブラウザ表示画面
ブラウザ表示

自動スケーリング(HPA)のテスト

Kubernetesにおける自動スケーリング(HPA: Horizontal Pod Autoscaler)のテストとは、HPAが期待通りにPodの数を増減させ、アプリケーションのパフォーマンスを維持できるかを確認するテストです。

HPAは、CPU使用率、メモリ使用率、またはカスタムメトリクス(例:QPS、メッセージキューの長さなど)に基づいて、DeploymentやStatefulSetなどのワークロードのPodレプリカ数を自動的に調整します。

自動スケーリング(HPA: Horizontal Pod Autoscaler)
HPAの構成図

metrics-server のデプロイ(HPA の前提)

HPA は Pod の CPU/メモリ使用率を取得する metrics-server が必要です。

自動スケーリング (HPA) の設定と確認

ターミナル操作

自動復旧(自己修復)のテスト

Deployment は常に指定レプリカ数を維持しようとします。

Control Plane
ReplicaSet Controller: ポッドが不足していることを検知し、新しいポッドの作成を決定 Node Controller: ノードの異常を検知し、そのノード上のポッドを「削除対象」として判定 kube-scheduler: 新しいポッドをどのWorker Nodeに配置するかを決定

Worker Node
kubelet: Control Planeからの指示を受けて、実際にポッドを起動・停止・再起動

Pod の手動削除で自己修復

コンテナプロセスの強制終了(Crash)で自己修復

Kubernetes テスト環境の削除

まとめ

以上の手順で、ローカルの kind クラスタ上で 3 Pod の自動スケーリング・自動復旧を確認しました。

Kubernetesを使いWordPress+MySQL環境を作成の記事での、シングルインスタンスのWordPress+MySQLをデプロイから、Kubernetesの理解が少し進んだ様に思います。

タイトルとURLをコピーしました