# springboot-docker **Repository Path**: com_developer/springboot-docker ## Basic Information - **Project Name**: springboot-docker - **Description**: 使用jenkins 构建springboot docker镜像的demo - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: tomcat - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2021-04-23 - **Last Updated**: 2021-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README SpringBoot容器化实践和k8s下的部署实践,目前该镜像已经通过阿里云镜像仓库公开。 # 镜像拉取 ``` docker pull registry.cn-shanghai.aliyuncs.com/shalousun/springboot:1.3 ``` # docker中部署 ``` docker run -dp 8080:8080 -t registry.cn-shanghai.aliyuncs.com/shalousun/springboot:1.4 ``` # 进入docker容器 ``` docker exec -it [containerId] /bin/sh ``` # kubernates中部署 yaml在项目的k8s目录中,该yarml包含deployment、service、ingress创建 ``` //创建 kubectl apply -f deployment.yaml //删除 kubectl delete -f deployment.yaml //进入容器 kubectl exec -it [podName] /bin/sh ``` # 访问测试 ``` curl [node ip]:30111 返回hello docker,对于1.3后版本会返回hello docker,from v xx ``` ingress测试,yarm中默认设置的域名是test.com,待在k8s中部署好后,查看pod所在节点的ip,将域名和host加入到 宿主机hosts中。 ``` curl {base_url}/benchmark/ip 返回pod ip,如果启动了多个pod,访问会返回不同的ip,此时说明ingress是生效的。 ``` 查看镜像内的时间 ``` curl {base_url}/benchmark/time ``` 测试容器内https请求 ``` curl {base_url}/benchmark/testHttps ``` 测试容器内http请求 ``` curl {base_url}/benchmark/testHttp ``` 测试请求k8s容器中的svc ``` curl {base_url}/benchmark/test.com ``` # Graceful Test 访问一个长时间处理任务(睡眠) ``` curl -i {base_url}/benchmark/long-process ``` 杀掉进程服务进程 ``` kill pid ``` 执行杀进程命令后,tomcat容器等待long-process处理完毕才关闭进程 其他更详细的接口请查看API # 版本升级 当前该demo在阿里云镜像中心有多个版本,可以利用改demo做升级演示测试,升级测试时修改deployment.yaml中的版本号, 最新的版本是1.4, ``` kubectl apply -f deployment.yaml ``` 升级过程演示是可以利用`kubectl rollout status`命令来查看升级状态 ``` kubectl rollout status deployment/springboot-docker-deployment ``` # 服务回滚 回滚到之前的版本 ``` kubectl rollout undo deployment/springboot-docker-deployment ``` 回顾过程状态查看 ``` kubectl rollout status deployment/springboot-docker-deployment ``` # 日志级别调整 可以在运行时动态的改变日志级别,用postman或者curl都可完成。 ``` curl -X POST -H 'Content-Type: application/json; charset=utf-8' -i 'http://localhost:8080/benchmark/actuator/loggers/com.benchmark.springboot' --data '{"configuredLevel":"debug"}' ``` 调整后查看日志级别 ``` curl http://localhost:8080/benchmark/actuator/loggers/com.benchmark.springboot ``` # 灰度部署测试 首先部署旧版应用 ``` kubectl apply -f https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-deployment.yaml # 测试 curl http://canary.example.com/benchmark/ ``` 部署灰度版本 ``` kubectl apply -f https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-deployment.yaml kubectl apply -f https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-ingress.yaml # 测试灰度 curl -s -H "new: always" http://canary.example.com/benchmark/ ``` 将灰度正式转成上线产品 ``` # 删除灰度发布的ingress kubectl delete -f https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-ingress.yaml kubectl apply -f https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-to-prod-ingress.yaml ``` 当然也可以先把部署模板下载到机器上方便管理 ``` wget https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-deployment.yaml wget https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-deployment.yaml wget https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-ingress.yaml wget https://gitee.com/devin-alan/springboot-docker/raw/tomcat/k8s/springboot-docker-canary-to-prod-ingress.yaml ``` # API接口文档 - 本项目启动后可查看html5文档,更多的接口说明可查看文档,文档访问路径为 ``` {base_url}/benchmark/doc/index.html ``` - 如果要查看项目接口postman collection的json文件可以访问 ``` {base_url}/benchmark/doc/postman.json ``` - 如果要查看OpenApi 3.0的接口文档可以访问 ``` {base_url}/benchmark/doc/OpenApi3.0.json ``` # Autoscaling 自动扩容有几种方式 - 基于cpu资源扩容 - 基于内存使用情况扩容 - 基于请求等操作的指标暴露 在spring boot 2.3+后,`actuator/prometheus`暴露了一些请求指标,例如以指标`http_server_requests_seconds`开头的指标。 因此可以利用这些请求指标统计作为hap的判读指标。 # Arthas 容器镜像默认集成了Arthas,进入容器后启动Arthas的命令为: ``` java -jar /opt/arthas/arthas-boot.jar ```