0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#013: Spring Boot Microservices 開発環境の準備

Last updated at Posted at 2024-09-21

1. ツールのインストール

Java + Spring Boot を使ってMicroservice開発について調査を始める。
自分に必要なコマンドをインストール。
ついでに、あまり馴染みのないツールについては、少し調査。

brew tap spring-io/tap
brew install spring-boot
brew tap homebrew/cask-versions 
brew install --cask microsoft-openjdk
brew install --cask docker
brew install jq
brew install helm
brew install siege

1-1. Spring boot を追加

brew tap spring-io/tap
brew install spring-boot

1-1-1. brew tap

「tap」は、追加のbrewパッケージを提供するソースリポジトリ。

brew tap <リポジトリオーナー>/<リポジトリ名>
  • リポジトリオーナー:githubの所有者名
  • リポジトリ名:所有者が管理するリポジトリ名

「spring-io」というgithubアカウントの「tap」というリポジトリをbrewに追加し、brew経由でSpring関連パッケージを管理できるようにする。

1-1-2. brew tapの利点

  • 公式に含まれないパッケージの利用
  • 異なるバージョン(過去バージョンなど)のインストール

1-1-3. tapの削除

brew untap <リポジトリオーナー>/<リポジトリ名>

1-2. Microsoft Open JDKの追加

自分はこれを使っている。

どれでもいいけど、Azure勉強しているので、同じベンダーであるMicrosoftさんのJDKを使わせてもらう。

brew tap homebrew/cask-versions
brew install --cask microsoft-openjdk

1-2-1. homebrew/cask-versionsという追加パッケージ

homebrewの追加パッケージで、GUIアプリケーションや大きいパッケージ(pkg or dmg)をインストールするためのもの。

1-3. jsonデータの加工ツールの追加

「jq」はREST APIをデバッグするなどで重宝するので入れておいた方がよい。

brew install jq

1-3-1. jqの便利な使い方集

  • jsonの整形

未整形のJSONを見やすい形式で出力する。

sato@[12:07:46]:~% echo '{"name":"John","age":30,"city":"New York"}' | jq
{
  "name": "John",
  "age": 30,
  "city": "New York"
}
  • 特定キー値の抽出

nameフィールドの値だけを取り出す。

sato@[12:10:43]:~% echo '{"name":"John","age":30,"city":"New York"}' | jq '.name'
"John"
  • データのフィルター

配列データの中で条件を満たす要素だけを抽出。

sato@[12:11:58]:~% echo '[{"name":"John","age":30},{"name":"Jane","age":25}]' | jq '.[] | select(.age == 30)'
{
  "name": "John",
  "age": 30
}
  • jsonの変更

たとえばjsonのcityという項目の値を変更。

sato@[12:13:21]:~% echo '{"name":"John","age":30,"city":"New York"}' | jq '.city = "Los Angeles"'
{
  "name": "John",
  "age": 30,
  "city": "Los Angeles"
}

1-3-2. jqの利用シーン

  • APIのレスポンス解析: REST APIからのJSONレスポンスを加工・フィルタリング
  • データ変換: 大量のJSONデータから特定のキーを抽出したり、他のフォーマットに変換
  • ログやデバッグの補助: JSON形式のログ解析時、特定フィールドのみを確認

1-4. K8Sパッケージマネージャーのインストール

helmについて簡単に整理。

1-4-1. Helmとは

  • Kubernetes(K8s)でアプリケーションを管理するための **パッケージマネージャで、**Kubernetes上で複雑なアプリケーションのデプロイや管理を簡単にする
  • アプリケーションを チャート(Chart) というパッケージ形式で管理、チャートには、Kubernetesのリソース(Pod、Service、Ingressなど)のテンプレートが含まれており、アプリケーションの構成情報や依存関係が記述されている
  • アプリケーションのインストール、アップグレード、ロールバック、削除などの操作が一貫して行えるため、Kubernetes上でのアプリケーション管理が簡単になる

1-4-2. Helmの主な機能

  • K8Sへのアプリケーションデプロイの簡素化
  • バージョン管理(アップグレード、ロールバック)
  • 再利用性(Helmチャートにより再利用可能パッケージ)

Helmの主要コマンド例

  • helm install
    指定チャートを使ってK8Sクラスタにアプリケーションをデプロイ
  • helm upgrade
    既存アプリケーションをアップグレード
  • helm rollback
    アプリケーションを以前のバージョンにロールバック

1-4-3. helmを利用するメリット

  • 複雑なアプリケーションデプロイの自動化
    チャートを使うことで、複雑なアプリケーションの設定や依存関係を管理した状態でデプロイを自動化
  • アップグレードとロールバックを管理
  • マイクロサービスの管理
  • helmチャートの再利用

1-5. コマンドラインベースのWEB負荷テストツールのインストール

多分使うのだろうから、これは入れておく。

brew install siege

1-5-1. Siegeとは

HTTPサーバーへの負荷テストを行うためのコマンドラインツール。ウェブアプリケーションのパフォーマンスを評価し、特定のURLに対して同時にリクエストを送信してサーバーの応答時間やパフォーマンスを測定できる。

1-5-2. Siegeの主な機能

  • 同時リクエストをシミュレート
    高負荷状態のサーバー動作を検証可能。
  • シナリオ設定
    URLリストやクエリパラメータを設定することで、様々なシナリオを定義可能
  • 結果の分析
    リクエストの成功率、応答時間、スループットの分析情報を確認できる

1-5-3. Siegeの主な利用例

同時アクセス数10、5回のリクエストを実行する。

siege -c 10 -r 5 http://example.com

1-5-4. MacOSへのインストール時に表示される留意事項

インストール時に以下のメッセージが表示される。

macOS has only 16K ports available that won't be released until socket
TIME_WAIT is passed. The default timeout for TIME_WAIT is 15 seconds.
Consider reducing in case of available port bottleneck.

You can check whether this is a problem with netstat:

    # sysctl net.inet.tcp.msl
    net.inet.tcp.msl: 15000

    # sudo sysctl -w net.inet.tcp.msl=1000
    net.inet.tcp.msl: 15000 -> 1000

Run siege.config to create the ~/.siegerc config file.

1-5-5. Siege利用時の制限

  • 利用可能なポート数に制限がある

macOSでは、同時に利用できるポートが16kに限定される。

  • TIME_WAITによるポート再利用までの待機時間ある

一度TCP接続に利用さたポートは、TCP切断後、「TIME-WAIT」(デフォルトで15秒)が経過するまで解放されず再利用できない

このため、siegeで大量の同時アクセスを行うと、ポートが枯渇する可能性がある。

1-5-6. Siege利用制限への対応方法

  • TCP MSL (Maximum Segment Lifetime)の変更

TIME_WAITはMSLに設定されているので、これを変更することで制限を緩和できる。

# 現在のMSLを確認
sysctl net.inet.tcp.msl

# MSLを変更
sudo sysctl -w net.inet.tcp.msl=1000

1-6. Dockerデスクトップのインストール

DockerデスクトップはGUIも含めて大きなパッケージ。caskオプションでバイナリーを直接インストールする。

brew install --cask docker

1-7. k8sのコマンドラインツール「kubernetes-cli」(kubectl)のインストール

k8sクラスタを管理するためのコマンドラインツール。

brew install kubernetes-cli

1-7-1. kubectlの主な機能

  • リソース管理
    k8sクラスタ上のポッド、サービス、デプロイメントなどのリソースの作成、削除、更新、確認を行う。
kubectl get pods # ポッド情報の取得
kubectl create -f deployment.yaml # デプロイメントの作成
kubectl delete pod my-pod # ポッドの削除
  • クラスタ情報の取得
    クラスタの状態、各リソースの状態を確認。
kubectl cluster-info # クラスタ情報の取得
kubectl get nodes # ノード情報の取得
  • デバッグ・監視
    ログ確認、リソースのイベント監視、ポッドへの接続
kubectl logs <pod-name> # ポッドのログ確認
kubectl exec -it <pod-name> -- /bin/bash # ポッドに接続してbashを実行

1-8. マイクロサービスのサービスメッシュレイヤーを実現するistioのコマンドラインツール「istioctl」をインストール

brew install istioctl

1-8-1. istioとは

マイクロサービス間の通信を効率的かつ安全に行うための技術として「サービスメッシュ」レイヤーがある。istioはサービスメッシュレイヤーを担う代表的なツール。

1-8-2. サービスメッシュレイヤーの主な機能

  • サービス間トラフィック管理
    ルーティングや負荷分散、障害時のリトライなどを管理する。1つのサービスをロールアウトして新バージョンに徐々に移行するカナリアリリース、1つのサービスの旧バージョンと新バージョンに対してトラフィックを分散するブルー・グリーンデプロイが可能。
  • サービス間通信セキュリティ
    サービス間の通信をTLSを使用して通信したり、サービス間で認証・認可の機能を提供する。
  • 各サービスの観測
    サービス間の通信状況、パフォーマンスメトリクス(遅延、スループット、エラー率など)を監視。
  • フォールトトレランス
    1つのサービスが一時的に遅延している場合にサーキットブレイカーを使用してそのサービスへのリクエストを一時的に停止し、回復後に再開するなどの制御が可能。

1-8-3. istioの構成

2つのプレーンで構成される。

  • データプレーン
    各サービスに配置するサイドカー(Envoyプロキシ)を通してサービス間のすべての通信を管理する。istioはサイドカーをすべてのサービスに自動的に追加、各サービス間の通信はすべてこのサイドカーを通して行われる。
  • コントロールプレーン
    サービスメッシュレイヤー全体の設定やポリシー(トラフィックルールやセキュリティポリシー)を一元管理する。

1-9. ローカル環境で実行できる小さなk8s環境「minikube」をインストール

brew install minikube

1-9-1. minikubeとは

ローカル環境でk8s向けアプリのクラスタのセットアップやテストが実行できる。通常K8sは複数のノード(クラスタ)で構成されるが、Minikubeにより1台のコンテナで軽量なk8sのシングルノードのクラスタを実行できる。

Docker や VirtualBoxが必要だが、今回はDockerを利用。

1-9-2. minikubeの主な機能

  • ローカルk8s環境の提供
    DockerやVirtualBoxを使ってローカルPC上で簡易なk8sアプリの開発、デバッグ、テストが実行可能。
  • k8s用アプリのローカルテスト
    クラウド上の環境にデプロイする前に、minikubeを使ってk8s対応アプリの動作確認が可能。
  • k8sと同等の管理機能
    k8sと同じようにkubectlでアプリケーションのデプロイやクラスタ管理が可能。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?