SpringBootアプリからKubernetesClientを使用してkubernetesを操作する方法について

この記事を書いたチーム:chocochip

目的

SpringBootアプリからkubernetesを操作したい要望があったため
ここに手順を纏めておきます。
サンプルとしてkubernetes内のpod名を全て取得する手順となっています。
JavaのAPI部分を変更することでkubernetesの様々な操作が可能となります。

前提

・kubernetesが構築されていること
・kubectlが操作できる端末があること
・操作端末にJavaがインストール済みであること
・VSCodeがインストール済みであること
・Dockerが操作できる端末があること
・Amazon ECRが作成されていること

 ※今回の手順ではDockerレジストリにAmazon ECRを使用しますが
  特に指定ではありませんので、Docker Hub等他のレジストリでも構いません。

作成アプリ

WEBでルートパス(/)にアクセスした時にkubernetes内のpod名を
すべて取得するアプリケーションを作成します。

作成手順

以下はJavaがインストール済みの端末で操作します。

例ではwindows10上で操作していきます。
【1】VSCodeに以下の拡張機能をインストールします。

Spring Boot Extension Pack
Java Extension Pack

【2】demoアプリを作成します。

①Ctr+Shift*Pを押してコマンドパレットを開きます。

②spring initializrと入力し、表示される中から「create a maven project」を選択します。

③spring bootのバージョンを選択します。
今回は「3.0.0」を選択しました。

④言語を「Java」を選択します。

⑤パッケージはデフォルトのままとします。

⑥アプリケーションの名前もデフォルトままとします。

⑦パッケージ形式は「Jar」を選択します。

⑧Javaのバージョンは「17」選択します。
※ここは自分の環境にイントールされているJavaバージョンを選択してください。

⑨プラグインを選択します。
今回は以下を選択しました。

Spring Web
Thymleaf
※上記のプラグインは必須ではありません。動作確認用に追加しています。

⑩プロジェクト作成場所は任意の場所に指定してください。

⑪VSCode左側のSpring bootのアイコンを選択し、demoアプリケーションを実行します。

ログに「Completed initialization in ~」と出力されれば起動完了です。

【3】demoアプリにkubernetes-clientコントローラを作成します。

①pom.xmlに「spring-cloud-starter-kubernetes-client」を設定します。

編集ファイル:/demo/pom.xml

 

※バージョンは2022/12/09時のものを指定しています。
 古くなっている古くなっている場合がありますので最新バージョンに書き換えをお願いします。

pom.xmlの35行目~39行目に追加してください。

②確認用コントローラを作成します。

作成ファイル:/demo/src/main/java/com/example/demo/controller/DemoController.java

このクラスでkubernetesのpod一覧を取得しています。

 

③確認用テンプレートを作成します。

作成ファイル:/demo/src/main/resources/templates/demo.html



※この時点でSpring bootを起動し「localhost:8080」にアクセスしてもkubernetes上で動作していないためエラーとなります。

【4】demoアプリをDocker化します。

①Dockerfileを作成します。

作成ファイル:/demo/docker/Dockerfile

 

②demoアプリのDockerビルドを実行します。

※ここからの手順ではdocker、kubectlがインストールされた端末で操作してください。

demoアプリのカレントディレクトリに移動します。

Docerビルドを実行します。

Successfullyと表示されればビルド成功です。

③Kubernetesから参照できるECRにDockerイメージをプッシュします。

ECRにログイン

XXXXXXXXの部分は自分のAWSアカウントIDに変更をお願いします。

タグをECR用に変更

XXXXXXXXの部分は自分のAWSアカウントIDに変更をお願いします。

demo-ecrの部分は自分のECRに変更をお願いします。

ECRにプッシュ

XXXXXXXXの部分は自分のAWSアカウントIDに変更をお願いします。

demo-ecrの部分は自分のECRに変更をお願いします。

【5】kubenetesにdemoアプリをデプロイします。

①kubernetesにデプロイするファイルを作成します。

作成ファイル:/demo/kubernetes/demo-deployment.yml

XXXXXXXXの部分は自分のAWSアカウントIDに変更をお願いします。

demo-ecrの部分は自分のECRに変更をお願いします。

※権限を「cluster-admin」で全権限を付与していますので、本番環境等で使用する場合はここの権限を絞って使用をお願いします。

②kubernetesにデプロイします。

demoアプリのカレントディレクトリに移動します。

demoアプリをデプロイします。

③demoアプリが正常に起動したか確認します。

【6】demoアプリの動作確認をします。

①demoアプリのpodに入ります。

対象のpod名を取得します。

podにログインします。

demo-deployment-74d5845f4-hpjqjの部分は上記で確認したpod名に変更してください。

②curlコマンドで動作確認を実施します。

podの一覧が取得できれば成功です。

以上

Smallitのサービス