概述
本文档描述了如何在 Kubernetes 集群中部署 Solo 博客系统。Solo 是一个基于 Java 的博客系统,使用 MySQL 作为数据库。部署包括以下组件:
- Deployment:运行 Solo 应用的 Pod。
- Service:为 Solo 应用提供内部访问。
- Ingress:为 Solo 应用提供外部访问。
前提条件
- 已安装并配置好 Kubernetes 集群。
- 已安装并配置好
kubectl
命令行工具。 - 已安装并配置好
nginx-ingress-controller
。 - 已准备好 MySQL 数据库,并确保数据库可访问。
- 已准备好域名(如
solo.jiufog.space
),并配置好 DNS 解析。
部署步骤
1. 准备 MySQL 数据库
确保 MySQL 数据库已创建,并准备好以下信息:
- 数据库名称:
solo
- 数据库用户名:
root
- 数据库密码:
<your_password>
(替换为实际密码) - 数据库连接地址:
<your_db_endpoints>
2. 创建 Kubernetes 命名空间
如果 dev
命名空间不存在,请先创建:
kubectl create namespace dev
3. 部署 Solo 应用
将以下内容保存为 solo-deployment.yaml
文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: solo
namespace: dev
spec:
replicas: 1
selector:
matchLabels:
app: solo
template:
metadata:
labels:
app: solo
spec:
containers:
- name: solo
image: b3log/solo
env:
- name: RUNTIME_DB
value: "MYSQL"
- name: JDBC_USERNAME
value: "root"
- name: JDBC_PASSWORD
value: "" # 替换为 root 的密码
- name: JDBC_DRIVER
value: "com.mysql.cj.jdbc.Driver"
- name: JDBC_URL
value: "jdbc:mysql://10.244.3.48:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"
args: [
"--listen_port=8080",
"--server_scheme=http",
"--server_host=solo.jiufog.space", # 替换为你的域名
"--server_port="
]
ports:
- containerPort: 8080
使用 kubectl
部署:
kubectl apply -f solo-deployment.yaml
4. 创建 Service
将以下内容保存为 solo-service.yaml
文件:
apiVersion: v1
kind: Service
metadata:
name: solo-service
namespace: dev
spec:
selector:
app: solo
ports:
- protocol: TCP
port: 80
targetPort: 8080
使用 kubectl
部署:
kubectl apply -f solo-service.yaml
5. 创建 Ingress
将以下内容保存为 solo-ingress.yaml
文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: solo-ingress
namespace: dev
spec:
ingressClassName: nginx
rules:
- host: solo.jiufog.space # 替换为你的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: solo-service
port:
number: 80
使用 kubectl
部署:
kubectl apply -f solo-ingress.yaml
验证部署
- 检查 Pod 状态:
kubectl get pods -n dev
确保 solo
Pod 状态为 Running
。
- 检查 Service 状态:
kubectl get svc -n dev
确保 solo-service
已创建。
- 检查 Ingress 状态:
kubectl get ingress -n dev
确保 solo-ingress
已创建,并检查其 ADDRESS
字段是否已分配。
- 访问 Solo 博客:
在浏览器中访问http://solo.jiufog.space
,确保页面正常加载。
注意事项
- 数据库密码:请确保在
solo-deployment.yaml
中正确填写JDBC_PASSWORD
。 - 域名解析:确保域名
solo.jiufog.space
已正确解析到 Kubernetes 集群的 Ingress 控制器 IP。 - HTTPS:如果需要启用 HTTPS,请在 Ingress 中配置 TLS 证书。
故障排查
- Pod 无法启动:
- 检查日志:
kubectl logs <pod-name> -n dev
- 确保数据库连接信息正确。
- 无法访问服务:
- 检查 Ingress 控制器日志:
kubectl logs -n ingress-nginx <ingress-nginx-pod-name>
- 确保 DNS 解析正确。
清理资源
如果需要删除部署,可以运行以下命令:
kubectl delete -f solo-deployment.yaml
kubectl delete -f solo-service.yaml
kubectl delete -f solo-ingress.yaml