在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包是一个很好的实践,可以帮助你更好地理解和掌握 Kubernetes 的应用部署流程。以下是详细的步骤,指导你在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包。
1. 准备环境
1.1 安装 Minikube 或 kind
首先,确保你已经安装了 Minikube 或 kind 来本地运行 Kubernetes 集群。这里以 Minikube 为例进行说明。
- 安装 kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
- 安装 Minikube:
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
- 启动 Minikube:
minikube start --driver=docker
2. 准备 RuoYi 框架的 JAR 包
2.1 构建 RuoYi 框架的 JAR 包
假设你已经有一个 RuoYi 框架的项目,需要构建 JAR 包。
- 构建 JAR 包:
cd /path/to/ruoyi-project
mvn clean package -DskipTests
- 找到生成的 JAR 包:
构建完成后,JAR 包通常位于
target
目录下,例如ruoyi.jar
。
3. 创建 Docker 镜像
3.1 编写 Dockerfile
在 RuoYi 项目的根目录下创建一个 Dockerfile
文件,内容如下:
# 使用官方的 OpenJDK 镜像作为基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 将 JAR 包复制到容器中
COPY target/ruoyi.jar /app/
# 暴露应用的端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java", "-jar", "ruoyi.jar"]
3.2 构建 Docker 镜像
在项目根目录下运行以下命令来构建 Docker 镜像:
docker build -t ruoyi:latest .
4. 部署到 Kubernetes
4.1 创建 Kubernetes 配置文件
4.1.1 创建 Deployment 配置文件
创建一个 ruoyi-deployment.yaml
文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: ruoyi
template:
metadata:
labels:
app: ruoyi
spec:
containers:
- name: ruoyi
image: ruoyi:latest
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
value: "jdbc:mysql://<mysql-service-name>:3306/ruoyi?useUnicode=true&characterEncoding=utf8&useSSL=false"
- name: SPRING_DATASOURCE_USERNAME
value: "root"
- name: SPRING_DATASOURCE_PASSWORD
value: "password"
- name: SPRING_REDIS_HOST
value: "<redis-service-name>"
- name: SPRING_REDIS_PORT
value: "6379"
- name: SPRING_REDIS_PASSWORD
value: "password"
4.1.2 创建 Service 配置文件
创建一个 ruoyi-service.yaml
文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: ruoyi
spec:
selector:
app: ruoyi
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort
4.2 部署应用
- 应用 Deployment 和 Service:
kubectl apply -f ruoyi-deployment.yaml
kubectl apply -f ruoyi-service.yaml
- 验证部署:
kubectl get pods
kubectl get services
5. 访问应用
5.1 获取 NodePort
kubectl get service ruoyi
输出类似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ruoyi NodePort 10.109.155.99 <none> 8080:30001/TCP 2m
5.2 访问应用
使用 minikube ip
获取 Minikube 的 IP 地址,然后通过 http://<minikube-ip>:30001
访问应用。
6. 配置数据库和 Redis
6.1 部署 MySQL
创建一个 mysql-deployment.yaml
文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
- name: MYSQL_DATABASE
value: "ruoyi"
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
应用配置:
kubectl apply -f mysql-deployment.yaml
6.2 部署 Redis
创建一个 redis-deployment.yaml
文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:5.0
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: redis
ports:
- protocol: TCP
port: 6379
targetPort: 6379
应用配置:
kubectl apply -f redis-deployment.yaml
7. 更新 RuoYi 配置
确保 RuoYi 的配置文件中使用的数据库和 Redis 服务名称与 Kubernetes 中的服务名称一致。例如:
spring:
datasource:
url: jdbc:mysql://mysql:3306/ruoyi?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: password
redis:
host: redis
port: 6379
password: password
8. 重新部署 RuoYi
重新构建 RuoYi 的 Docker 镜像并重新部署:
docker build -t ruoyi:latest .
kubectl delete deployment ruoyi
kubectl apply -f ruoyi-deployment.yaml
kubectl apply -f ruoyi-service.yaml
总结
通过以上步骤,你可以在本地 Kubernetes 集群中成功部署 RuoYi 框架的 JAR 包。这个过程不仅帮助你理解 Kubernetes 的基本概念和操作,还为你在生产环境中部署复杂应用打下了坚实的基础。