開発段階で、SpringBootアプリケーションをK8Sにすばやくデプロイします。

バックグラウンド

  1. 本番環境では、通常、CI && CDツールを使用してビルドとデプロイ全体を完了しているため、この記事は本番環境には適していません。
  2. 学習および開発環境では、コードを頻繁に変更し、効果をすばやく確認したいと考えています。この記事は、このシナリオを対象としています。

簡単な紹介

  1. SpringBootアプリケーションを開発していて、アプリケーションがK8S環境にデプロイされている場合は、この記事を参照して、アプリケーションをK8S環境にすばやくデプロイできます。
  2. 記事のSpringBootのバージョンは2.3.0.RELEASEです。このバージョンから、SpringBootは新しいdocker画像構築ソリューションを正式に推奨しています。以前のバージョンの場合は、記事の画像構築部分を自分で変更してください。

環境情報

この実際の戦闘には2つの環境があります。開発環境と運用環境です。開発環境の情報は次のとおりです。

  1. オペレーティングシステム:Ubuntu 20.04 LTSデスクトップバージョン(検証済み:MacBook pro 13インチ、macOS Catalina 10.15.4)
  2. CPU:2.30GHz×4、メモリ:32G、ハードディスク:1T NVMe
  3. JDK:1.8.0_231
  4. MAVEN:3.6.3
  5. SpringBoot:2.3.0.RELEASE
  6. ドッカー:19.03.10
  7. 開発ツール:IDEA 2020.1.1(Ultimate Edition)

動作環境情報は以下のとおりです。

  1. オペレーティングシステム:CentOS Linuxリリース7.8.2003
  2. 知事:1.15

さらに、開発環境にsshpassをインストールしてください。

SpringBootプロジェクトのソースコード

  1. この実際の戦闘では、通常のSpringBootプロジェクトが使用されました。ソースコードはGitHubからダウンロードできます。アドレスとリンクの情報を次の表(https://github.com/zq2599/blog_demos)に示します。
名前 リンク 備考
プロジェクトホームページ https://github.com/zq2599/blog_demos GitHub上のプロジェクトのホームページ
gitウェアハウスアドレス(https) https://github.com/zq2599/blog_demos.git プロジェクトのソースコードの倉庫アドレス、httpsプロトコル
gitウェアハウスアドレス(ssh) [email protected]:zq2599 / blog_demos.git プロジェクトのソースコードの倉庫アドレス、sshプロトコル
  1. このgitプロジェクトには複数のフォルダがあります。この章のアプリケーションは、以下の赤いボックスに示すように、probeemoフォルダの下にあります。
    ここに画像の説明を挿入

必要な内容

  1. プロジェクト全体は通常のSpringBootプロジェクトです。一般的なpom.xmlとソースコードに加えて、さらに3つのファイルがあります。
    ここに画像の説明を挿入
  2. Dockerfileファイルは、Dockerイメージをビルドするために使用されます。SpringBootのバージョンが2.3.0.RELEASE以降の場合は、SpringBootが公式に推奨するイメージのビルド方法を使用することをお勧めします。このDockerfileは参照用に使用できます。
  3. これは、probeemo.yamlファイルと特定のプロジェクトに関連しています。自分で変更して、デプロイメントとサービスのデプロイに使用できることを確認してください。
  4. auto_deploy.shは迅速な展開の鍵です。これについては次に詳しく説明します。

auto_deploy.sh詳細

auto_deploy.shの役割は次のとおりです。

  1. mavenコマンドを呼び出して、ビルドプロジェクトを編集します。
  2. ビルドしたjarファイルをDockerイメージにします。
  3. Dockerイメージをtarファイルとしてエクスポートします。
  4. tarファイルをK8Sサーバーにアップロードします。
  5. probedemo.yamlファイルをK8Sサーバーに送信します。
  6. sshpassを介してリモートでコマンドを実行し、K8SサーバーのローカルDockerウェアハウスにDockerイメージをインポートします。
  7. sshpassを介してリモートでコマンドを実行し、展開とサービスを展開します。
  8. auto_deploy.shの完全な内容は次のとおりです。
#!/bin/bash

# 判断是否安装了sshpass
if ! [ -x "$(command -v sshpass)" ]; then
  echo '请安装sshpass后再使用此脚本!'
  exit 1
fi

# 镜像名
IMAGE_NAME='bolingcavalry/probedemo'

# TAG名
TAG_NAME='0.0.1'

# 配置了deployment和service的yaml文件名
DEPLOY_SERVICE_YAML='probedemo.yaml'

# K8S环境的IP地址
K8S_IP_ADDRESS='192.168.50.135'

# K8S环境的SSH账号
K8S_SSH_ACCOUNT='root'

# 8S环境的SSH密码
K8S_SSH_PSWD='888888'

# K8S上存放tar和yaml文件的位置
K8S_FILE_PATH='~/deploy_temp'

# 当前名目录
CURRENT_DIR=`pwd`

echo '开始自动构建和部署,当前目录是:'${CURRENT_DIR}

# 执行maven命令构建项目
mvn clean package -U -DskipTests

echo "构建镜像文件:"${IMAGE_NAME}/${TAG_NAME}
docker build -t ${IMAGE_NAME}/${TAG_NAME} .

echo "将镜像导出为tar文件:"${IMAGE_NAME}/${TAG_NAME}
docker save ${IMAGE_NAME}/${TAG_NAME} > ${CURRENT_DIR}/image.tar

echo "在K8S服务器创建存放文件的目录:"${K8S_FILE_PATH}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "mkdir -p ${K8S_FILE_PATH}"

echo "将yaml文件发送到K8S服务器:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} scp ${CURRENT_DIR}/${DEPLOY_SERVICE_YAML} ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS}:${K8S_FILE_PATH}/

echo "将镜像tar文件发送到K8S服务器:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} scp ${CURRENT_DIR}/image.tar ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS}:${K8S_FILE_PATH}/

echo "如果K8S环境之前已经部署过,就先清理:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "kubectl delete -f ${K8S_FILE_PATH}/${DEPLOY_SERVICE_YAML}"

echo "等待10秒"
sleep 10

echo "清理之前加载到本地仓库的镜像:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "docker rmi ${IMAGE_NAME}/${TAG_NAME}"

echo "从tar文件加载镜像:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "docker load < ${K8S_FILE_PATH}/image.tar"

echo "部署:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "kubectl apply -f ${K8S_FILE_PATH}/${DEPLOY_SERVICE_YAML}"

echo "删除tar文件:"${CURRENT_DIR}/image.tar
rm -rf ${CURRENT_DIR}/image.tar

echo "删镜像:"${IMAGE_NAME}/${TAG_NAME}
docker rmi ${IMAGE_NAME}/${TAG_NAME}

実験

  1. K8S環境アドレス、アカウントパスワードなどの実際の状況に応じて、auto_deploy.shの変数の値を変更してください。
  2. 開発段階で、Javaコードを変更して完了します。
  3. スクリプトauto_deploy.sh;を実行します。
  4. コンソールプロンプトは次のとおりです。
    ここに画像の説明を挿入
  5. 展開が完了し、機能を確認できます。

予防

この実際の戦闘でイメージを更新する方法は、ローカルでイメージをtarとしてエクスポートしてから、K8S環境に転送してインポートします。これは、K8S環境に複数のマシンがある場合は適していません。プライベートミラーリポジトリを使用し、ミラーイメージをウェアハウスにプッシュしてから、K8Sを使用することをお勧めしますミラー倉庫でミラーを引く。

この時点で、K8SへのSpringBootアプリケーションの迅速な展開の実際の戦いは完了しました。これは、私の開発プロセスで一般的に使用されているリモート展開方法です。参考にしてください。

GitHubへようこそ

  • アドレス:https : //github.com/zq2599/blog_demos
  • 内容:元の記事の分類と要約、およびJava、Docker、K8S、DevOPSなどを含むサポートソースコード

私のパブリックアカウントへようこそ:プログラマーXin Chen

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/boling_cavalry/article/details/106594392