Kubernetes を使用して Springboot または Nginx をデプロイするための詳細なチュートリアル

Kubernetes を使用して Springboot または Nginx をデプロイするための詳細なチュートリアル

1 はじめに

「Maven がワンクリックで Springboot を Docker リポジトリにデプロイして自動化の準備をする」が終わると、 SpringbootDockerイメージが準備され、 Docker上で正常に実行できるようになります。これをKubernetes上に配置して実行してみましょう。これは非常にシンプルで、 yamlファイルが 1 つだけです。

2 Springbootのワンクリックデプロイ

2.1 YAMLファイルを準備する

イメージファイルが準備できたら、それをKubernetesにデプロイするのは非常に簡単です。必要なのは、 DeploymentServiceIngressなど、必要なコンポーネントを記述できるyaml形式のファイルだけです。定義は次のとおりです。

APIバージョン: アプリ/v1
種類: デプロイメント
メタデータ:
 名前: pkslow-springboot-deployment
仕様:
 セレクタ:
 一致ラベル:
  アプリ: スプリングブート
 レプリカ: 2
 テンプレート:
 メタデータ:
  ラベル:
  アプリ: スプリングブート
 仕様:
  コンテナ:
  - 名前: スプリングブート
   イメージ: pkslow/springboot-mongo:0.0.6
   ポート:
   - コンテナポート: 8080

---
APIバージョン: v1
種類: サービス
メタデータ:
 ラベル:
 アプリ: スプリングブート
 名前: pkslow-springboot-service
仕様:
 ポート:
 - ポート: 8080
  名前: springboot-service
  プロトコル: TCP
  ターゲットポート: 8080
  ノードポート: 30080
 セレクタ:
 アプリ: スプリングブート
 タイプ: NodePort

Kind : DeploymentServicePodIngressなどを含むタイプで、非常に豊富です。

metadata : 名前、ラベルなどのコンポーネント情報を定義するために使用されます。

labels : ラベル機能は、関連付けを選択するのに非常に便利です。ただし、 label一意性を提供しないため、組み合わせを使用して選択できます。

nodePort : 外部に公開する必要があるサービスの場合、 NodePortsLoadBalancerIngress 3 つの方法があります。ここではNodePortsを使用します。デフォルトのポート範囲は[3000-32767]であることに注意してください。他の範囲が必要な場合は、関連するパラメータを変更する必要があります。

2.2 kubectlコマンドによるデプロイメント

yamlファイルの準備ができたら、次のコマンドでデプロイできます。

$ kubectl create -f pksow-springboot.yaml 
deploy.apps/pkslow-springboot-deployment が作成されました
service/pkslow-springboot-service が作成されました

コンソール ログにはDeploymentServiceが正常に作成されたことが示されます。 Dashboardを次のように表示します。

Webサービスにアクセスします: http://localhost:30080/user

コマンドラインから確認してみましょう:

$ kubectl デプロイメントを取得する
名前 準備完了 最新 利用可能 年齢
pkslow-springboot-deployment 2/2 2 2 8m2s

$ kubectl サービスを取得
名前 タイプ クラスター IP 外部 IP ポート 年齢
kubernetes ClusterIP 10.96.0.1 <なし> 443/TCP 10m
pkslow-springboot-service ノードポート 10.102.218.119 <なし> 8080:30080/TCP 8分7秒

$ kubectl ポッドを取得する
名前 準備完了 ステータス 再起動 年齢
pkslow-springboot-deployment-68dffc6795-874tp 1/1 実行中 0 8分15秒
pkslow-springboot-deployment-68dffc6795-89xww 1/1 実行中 0 8分15秒

これまでに、 Springboot Kubernetesにリリースすることに成功しました。

2.3 ポッドを強制終了してみますか?

Kubernetes最小の管理要素はコンテナではなく、 Podです。

Podを削除して何が起こるか見てみましょう。

$ kubectl ポッドを削除します pkslow-springboot-deployment-68dffc6795-89xww
ポッド「pkslow-springboot-deployment-68dffc6795-89xww」が削除されました

$ kubectl ポッドを取得する
名前 準備完了 ステータス 再起動 年齢
pkslow-springboot-deployment-68dffc6795-874tp 1/1 実行中 0 13分
pkslow-springboot-deployment-68dffc6795-gpw67 1/1 実行中 0 46秒

別のPodを削除すると、新しいPodが自動的に生成され、サービス全体の高可用性が向上することがわかります。

2.4 コンテナを強制終了してみますか?

コンテナ インスタンスを強制終了すると何が起こるかを見てみましょう。

$ docker ps
$ docker rm -f 57869688a226
57869688a226

$ docker ps

実験した結果、コンテナを強制終了すると、新しいコンテナ インスタンスが自動的に生成されることがわかりました。 Pod変更または再生成されません。

2.5 ポッドの急速な拡張

ユーザーリクエスト数が急増し、サービスが対応できなくなる場合は、 Podの数を増やす必要があります。 yaml構成ファイル内のreplicasを変更し、 replicas: 4に更新するだけです。次に、次のコマンドを実行します。

$ kubectl apply -f pksow-springboot.yaml

Dashboardを確認すると、元の 2 つのポッドに加えてさらに 2 つのPodが追加されていることがわかります。

3 Nginxのワンクリックデプロイ

Springbootイメージがない場合は、公式のNginxイメージを使用できます。yaml yamlは次のとおりです。

APIバージョン: アプリ/v1
種類: デプロイメント
メタデータ:
 名前: nginx-deployment
仕様:
 セレクタ:
 一致ラベル:
  アプリ: nginx
 レプリカ: 3
 テンプレート:
 メタデータ:
  ラベル:
  アプリ: nginx
 仕様:
  コンテナ:
  - 名前: nginx
   イメージ: nginx:1.19.0
   ポート:
   - コンテナポート: 80

---
APIバージョン: v1
種類: サービス
メタデータ:
 ラベル:
 アプリ: nginx
 名前: nginx-service
仕様:
 ポート:
 - ポート: 80
  名前: nginx-service1
  プロトコル: TCP
  ターゲットポート: 80
  ノードポート: 30000
 - ポート: 81
  名前: nginx-service2
  プロトコル: TCP
  ターゲットポート: 80
  ノードポート: 30001
 セレクタ:
 アプリ: nginx
 タイプ: NodePort

デプロイメントコマンドを実行します。

$ kubectl apply -f nginx-deployment-scale.yaml 
デプロイメント.apps/nginx-deployment が作成されました
サービス/nginx-service が作成されました

Dashboardを次のように表示します。

http://localhost:30000/ または http://localhost:30001 でサービスにアクセスします。 2つ設置したからです。

4 結論

この記事では、 Kubernetesを知覚的に理解できるように 2 つの例を使用します。これは、後で概念をより深く理解するのに非常に役立ちます。原則と詳細については後ほど説明します。

Kubernetes で Springboot または Nginx をデプロイする方法についての記事はこれで終わりです。Kubernetes で Springboot または Nginx をデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Kubernetes での Nginx 構成のホットロードの全プロセス

<<:  MySQL 8の新機能である降順インデックスの基礎となる実装の詳細な説明

>>:  派手なカルーセル効果を実現するJavaScript

推薦する

JavaScript を使用してソートアルゴリズムを実装する方法

目次バブルソート選択ソート挿入ソート要約するバブルソートバブルソートは、シーケンスの右側から始めて、...

ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js

この記事の例では、ドロップダウンボックス選択コンポーネントを実装するためのjsの具体的なコードを参考...

CSS の優先順位に関する詳細な紹介

CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...

JavaScript 配列メソッドの詳細な例

目次導入配列の作成作成方法詳しい説明方法参加する() push() と pop() shift() ...

Vue の vue.$set() メソッドのソースコード例の詳細な説明

Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...

Dockerイメージをプルしてバージョンを確認する方法

イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...

Photoshop を使って Web ワイヤーフレームを作成する方法

この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...

テキストエリアの残りの単語数を動的に取得する方法

仕事で、これまで一度も書いたことのないケースに遭遇しました。午後の半分をその作業に費やし、ついに書き...

CSS 背景画像を設定するための 6 つの興味深いヒント

background-image は、おそらくすべてのフロントエンド開発者がキャリアの中で少なくとも...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

MySQL の左結合操作における on 条件と where 条件の違いの紹介

優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...

docker で golang イメージに基づいて ssh サービスを構築する方法

以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...

シンプルなCSSアニメーションのtransition属性の詳しい説明

1. 遷移属性の理解1. transition 属性は、次の 4 つの遷移プロパティを設定するために...

Ubuntu環境でxdebugをコンパイルしてインストールする方法

この記事では、Ubuntu 環境で xdebug をコンパイルしてインストールする方法について説明し...