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

推薦する

Linux ソースコードの解析 epoll

目次1. はじめに2. シンプルなepollの例2.1、epoll_create 2.2、構造体イベ...

Linux のハードリンクとソフトリンクの原理と使用法の分析

Linux システムには、ファイル共有を解決するために使用できるリンク ファイルと呼ばれる種類のファ...

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...

NginxはLua+Redisを使用してIPを動的にブロックします

1. 背景日常的なウェブサイトのメンテナンスでは、このような要件に頻繁に遭遇します。特定のクローラー...

JavaScript でのモグラ叩きゲームの実装

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

Vuex のコアコンセプトと基本的な使用法の詳細な説明

目次導入始めるインストール①直接ダウンロードする方法②CND法③NPM方式④糸法NPMインストールの...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

開発効率を向上させる 20 の JavaScript ヒント

目次1. 配列を宣言して初期化する2. 合計、最小値、最大値を計算する3. 文字列、数値、オブジェク...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...

フォーム要素とプロンプトテキストが揃っていない問題

最近のプロジェクトでは、多くのフォーム、特にチェックボックスとラジオボタンの作成が含まれます。しかし...

MySQL 5.7 でルートパスワードを変更する方法

MySQL 5.7 以降では、多くのセキュリティ更新が追加されました。旧バージョンのユーザーは慣れて...

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...