Durante la fase de desarrollo, implemente rápidamente aplicaciones SpringBoot en K8S

antecedentes

  1. Para el entorno de producción, generalmente utilizamos herramientas de CI && CD para completar toda la compilación y la implementación, por lo que este artículo no es adecuado para el entorno de producción;
  2. Para el entorno de aprendizaje y desarrollo, modificamos con frecuencia el código y queremos ver el efecto rápidamente Este artículo está dirigido a este escenario;

breve introducción

  1. Si está desarrollando una aplicación SpringBoot y la aplicación se implementa en el entorno K8S, puede consultar este artículo para implementar rápidamente la aplicación en el entorno K8S;
  2. La versión de SpringBoot en el artículo es 2.3.0.RELEASE. A partir de esta versión, SpringBoot recomienda oficialmente una nueva solución de construcción de imágenes acoplables. Si es una versión anterior, modifique la parte de construcción de imágenes en el artículo usted mismo;

Informacion ambiental

Hay dos entornos para este combate real: entorno de desarrollo y operación, la información del entorno de desarrollo es la siguiente:

  1. Sistema operativo: versión de escritorio Ubuntu 20.04 LTS (también verificado: MacBook pro de 13 pulgadas, macOS Catalina 10.15.4)
  2. CPU: 2,30 GHz × 4, memoria: 32 G, disco duro: 1T NVMe
  3. JDK: 1.8.0_231
  4. MAVEN: 3.6.3
  5. SpringBoot: 2.3.0.RELEASE
  6. Docker: 19.03.10
  7. Herramientas de desarrollo: IDEA 2020.1.1 (Ultimate Edition)

La información del entorno operativo es la siguiente:

  1. Sistema operativo: CentOS Linux versión 7.8.2003
  2. Gobernadores: 1,15

Además, instale sshpass en el entorno de desarrollo;

Código fuente del proyecto SpringBoot

  1. Se usó un proyecto SpringBoot ordinario en este combate real. El código fuente se puede descargar en GitHub. La dirección y la información del enlace se muestran en la siguiente tabla (https://github.com/zq2599/blog_demos):
nombre enlace Observaciones
Página de inicio del proyecto https://github.com/zq2599/blog_demos La página de inicio del proyecto en GitHub
dirección del almacén de git (https) https://github.com/zq2599/blog_demos.git La dirección del almacén del código fuente del proyecto, protocolo https
dirección del almacén de git (ssh) [email protected]: zq2599 / blog_demos.git La dirección del almacén del código fuente del proyecto, protocolo ssh
  1. Hay varias carpetas en este proyecto git. La aplicación de este capítulo se encuentra en la carpeta probeemo , como se muestra en el cuadro rojo a continuación:
    Inserte la descripción de la imagen aquí

Contenido necesario

  1. Todo el proyecto es un proyecto SpringBoot normal. Además del pom.xml común y el código fuente, hay tres archivos más:
    Inserte la descripción de la imagen aquí
  2. El archivo Dockerfile se utiliza para crear la imagen de la ventana acoplable. Si su versión de SpringBoot es 2.3.0.RELEASE o superior, se recomienda utilizar el método de creación de imágenes recomendado oficialmente por SpringBoot. Este archivo Dockerfile se puede utilizar como referencia;
  3. Está relacionado con el archivo probedemo.yaml y su proyecto específico. Modifíquelo usted mismo para asegurarse de que se pueda utilizar para implementar la implementación y el servicio;
  4. auto_deploy.sh es la clave para una implementación rápida, que se explicará en detalle a continuación;

auto_deploy.sh detallado

El rol de auto_deploy.sh es el siguiente:

  1. Invoque el comando maven para editar el proyecto de compilación;
  2. Convierta el archivo jar integrado en una imagen acoplable;
  3. Exporte la imagen de la ventana acoplable como un archivo tar;
  4. Cargue el archivo tar en el servidor K8S;
  5. Envíe el archivo probedemo.yaml al servidor K8S;
  6. Ejecute comandos de forma remota a través de sshpass para importar la imagen de la ventana acoplable al almacén de la ventana acoplable local del servidor K8S;
  7. Ejecute comandos de forma remota a través de sshpass para implementar la implementación y el servicio;
  8. El contenido completo de auto_deploy.sh es el siguiente:
#!/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}

experimentar

  1. Modifique los valores de las variables en auto_deploy.sh de acuerdo con su situación real, como la dirección del entorno K8S, la contraseña de la cuenta, etc.
  2. En la etapa de desarrollo, modifique el código java para completar;
  3. Ejecute el script auto_deploy.sh;
  4. El indicador de la consola es el siguiente:
    Inserte la descripción de la imagen aquí
  5. La implementación se ha completado y la función se puede verificar;

Precauciones

El método para actualizar la imagen en este combate real es exportarla localmente como tar y luego transferirla al entorno K8S para importarla. Esto no es adecuado cuando hay varias máquinas en el entorno K8S. Se recomienda usar un repositorio espejo privado, enviar la imagen espejo al almacén y luego K8S Tire del espejo en el almacén de espejos;

En este punto, el combate real de la implementación rápida de aplicaciones SpringBoot en K8S está completo. Este es un método de implementación remota comúnmente utilizado en mi proceso de desarrollo. Espero poder brindarles alguna referencia;

Bienvenido a mi GitHub

  • Dirección: https://github.com/zq2599/blog_demos
  • Contenido: Clasificación y resumen de artículos originales y código fuente de apoyo, que involucre Java, Docker, K8S, DevOPS, etc.

Bienvenido a seguir mi cuenta pública: programador Xin Chen

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/boling_cavalry/article/details/106594392
Recomendado
Clasificación