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

推薦する

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...

ES6 ループと反復可能オブジェクトの例

この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...

Vue は小数点付きの星評価を実装します

この記事では、小数点付きの星評価を実装するためのVueの具体的なコードを参考までに共有します。具体的...

JavaScript でプライベート変数を宣言する 2 つの方法

序文JavaScript は、キーワードを使用してプライベート変数を宣言できる他の言語とは異なります...

GobangゲームのWebバージョンを実装するためのJavaScript

この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例動作フレームワーク...

プライベートウェアハウス(レジストリとハーバー)を構築するためのDockerの実装

使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...

高さ:100% が機能しないのはなぜですか?

高さ:100% が機能しないのはなぜですか?この知識は不人気ではありませんが、使用する際には混乱する...

LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します

目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...

Ubuntu 18仮想マシンのクローン作成後に同じIPアドレスになる問題の解決方法

序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...

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

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

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

Puppeteer を使用して Linux (CentOS) で Web ページのスクリーンショット機能を実装する

Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...

負の距離(共感) - 相互影響の反復プロセス

ネガティブな距離は共感を意味します。序文(疑問の提起):プロダクトマネージャーは機能を把握します。機...

CSS3 メディアクエリにおけるデバイス幅と幅の違いの詳細な説明

1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...