Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/la3rence/kubernetes-springboot-demo

使用 Kubernetes 编排最简单的 Spring Boot 2.x,并与 Redis 做了简单交互。可以学习基础的 Deployment、Pod、Service、Ingress、HPA 用法。Ingress 分支包含了滚动更新的 demo。
https://github.com/la3rence/kubernetes-springboot-demo

cloud-native kubernetes spring-boot

Last synced: about 17 hours ago
JSON representation

使用 Kubernetes 编排最简单的 Spring Boot 2.x,并与 Redis 做了简单交互。可以学习基础的 Deployment、Pod、Service、Ingress、HPA 用法。Ingress 分支包含了滚动更新的 demo。

Awesome Lists containing this project

README

        

[![codecov](https://codecov.io/gh/Lonor/kubernetes-springboot-demo/branch/master/graph/badge.svg?token=VMFJJQWK15)](https://codecov.io/gh/Lonor/kubernetes-springboot-demo)
[![Maven Test](https://github.com/Lonor/kubernetes-springboot-demo/actions/workflows/ci.yaml/badge.svg)](https://github.com/Lonor/kubernetes-springboot-demo/actions/workflows/ci.yaml)

# 基于 Kubernetes 编排的 Spring Boot (Redis) 应用

## 环境准备
- Docker 19
- Kubernetes 1.19

## 本地可选步骤

如果要在本地编译并构建 Spring Boot Docker 镜像,需要环境:
- Maven 3
- JDK 8

```shell script
mvn clean package
mvn dockerfile:build
docker tag kubernetes-springboot-demo:0.0.2 registry.cn-shanghai.aliyuncs.com/dockerhub2019/spring:0.0.2
```

上述步骤可直接跳过。

## 直接部署

创建 Redis 服务的 Deployment。 若本地无镜像则自动从仓库在线拉取:
```shell script
kubectl apply -f redis-deployment.yaml
```

查看 Pod 状态:
```shell script
kubectl get pods
```

创建 Service,仅在集群内部暴露 Redis 服务:
```shell script
kubectl apply -f redis-service.yaml
```

创建 Spring Boot 的 ConfigMap (application.properties):
```shell
kubectl apply -f spring-config.yaml
```

创建 Spring Boot 服务的 Deployment。 若本地无镜像则自动从仓库在线拉取:
```shell script
kubectl apply -f spring-deployment.yaml
```

创建 Spring Boot 的 Service。且对外暴露 HTTP 服务:
```shell script
kubectl apply -f spring-service.yaml
```

查看 Service 状态:
```shell script
kubectl get svc
```

伸缩 Spring Boot 副本数量(手动),Service 会自动反向代理以实现负载均衡:
```shell script
kubectl scale deployments/spring-boot --replicas=3
```

## 水平自动弹性伸缩

首先确保 Kubernetes 集群中部署了 Metrics Server 来获取 CPU 指标等度量。
你可以使用 `kubectl top pod` 来验证成功与否。

Kubernetes 根据 Deployment 定义的 Resource Limit 来发起 Auto Scale, 执行:
```shell script
kubectl autoscale deployment spring-boot --cpu-percent=50 --min=1 --max=5
```

或者
```
kubectl apply -f hpa.yaml
```

观察此时 Pod 的数量变化。