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

推薦する

CSS3 列を使用したカード ウォーターフォール レイアウトを実装するためのサンプル コード

この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

DOCTYPE要素詳細説明完全版

1. 概要この記事では、DOCTYPE要素を体系的に説明します。同時に、多くの情報を調べました。イン...

Ubuntu 19.10 で ssh サービスを有効にする (詳細なプロセス)

Ubuntuでsshを開くのに1時間以上かかりました。主な原因は、最初に読んだチュートリアルの手順...

MySQL実行計画の詳細な説明

EXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情報を提供します...

SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細

パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...

MySQL でのフィルター条件なしのカウントの詳細な説明

カウント(*)成し遂げる1. MyISAM: テーブル内の行の総数をディスク上に保存し、フィルタリン...

Dockerコンテナを停止および削除できない問題の解決策

実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...

Centos7 での Mysql5.7.19 の詳細なインストールチュートリアル

1. ダウンロード公式サイトからmysql-5.7.19-linux-glibc2.12-x86_6...

ドラミング効果を実現するJavascript

この記事では、ドラミング効果を実現するためのJavascriptの具体的なコードを参考までに紹介しま...

VMware WorkStation を Docker for Windows で使用するための詳細なチュートリアル

目次1. はじめに2. Windows用Dockerをインストールする1. Windows用Dock...

Kubernetes (k8s) 入門

Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと...

docker compose を使用してハーバープライベートウェアハウスをインストールする詳細なチュートリアル

概要港とは何ですか?英語の単語の意味は「港」です。 Harborはコンテナ(貨物)を保管するために使...

Vue の computed と watch の違いを分析する

目次1. 計算入門1.1、getとsetの使い方1.2. 計算された属性キャッシュ2. 時計の紹介3...