带有docker-compose和Kubernetes部署的Spring Boot案例源码


这是一个非常基本的Spring Boot应用程序,它将浮点值存储在Redis键/值存储中。要使用HttpIE添加值(应用程序在端口8080上运行):

~ $ http -f post localhost:8080/value/foo?value=10

HTTP/1.1 201
Content-Length: 0
Date: Thu, 03 Jan 2019 21:42:11 GMT

读取一个值:

~ $  http localhost:8080/value/foo

HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Date: Thu, 03 Jan 2019 21:42:21 GMT
Transfer-Encoding: chunked

10.0

这个应用包括Spring Actuator端点,这对后面K8s部署很重要:

~ $ http localhost:8080/actuator/health
 
HTTP/1.1 200
Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8
Date: Thu, 03 Jan 2019 22:11:25 GMT
Transfer-Encoding: chunked

{
    "status": "UP"
}

如果应用无法访问Redis,status将显示为DOWN。


在docker-compose中运行
构建应用程序jarfile:
mvn clean package

docker-compose.yaml的内容:

version: '3'
services:
  web:
    build:
      context: .
      args:
        JAR_FILE: target/kubeboot-0.0.1-SNAPSHOT.jar
    ports:
      - "9999:8080"
    environment:
      - SPRING_REDIS_HOST=keyvalue

  keyvalue:
    image: "redis:alpine"
    ports:
      - "6379:6379"

开启两个服务,Web和Redis, Web编译本地的Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Redis是直接下载redis的alpine镜像,端口在6379 

运行命令:

docker-compose build
docker-compose up

只是docker-compose up应该工作,但它不会在所有情况下重建应用程序容器。该应用程序将公开在端口9999上。
需要注意的一点是,keyvalue服务中的前端端口对于组合工作不是必需的; 无论如何,端口将暴露在内部网络上。但转发它意味着您可以使用本地连接redis-cli 来解决问题。

在Kubernetes上运行

kubectl apply -f kubernetes/

Kubernetes部署使用Spring Actuator /health端点作为准备探测器,一旦建立与Redis的连接并且状态变为UP(参见上文),该pod将变为就绪状态。

要获取在Minikube上访问的URL:

url=$(minikube service kubebootsvc --url)
http $url/actuator/health
http $url/value/foo

Kubernetes部署创建了pod的2个副本,代码添加了一个自定义标头 X-Pod-IP,其中包含为您的请求提供服务的pod的内部IP(因此您可以看到正在执行的负载平衡):

http $url/value/foo

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Sat, 05 Jan 2019 00:20:20 GMT
Transfer-Encoding: chunked
X-Pod-IP: 172.17.0.10

3.14


本站文章点击标题查看原文Github项目!