本文档描述了如何在 Kubernetes 集群中部署 Solo 博客系统。Solo 是一个基于 Java 的博客系统,使用 MySQL 作为数据库。部署包括以下组件:
kubectl
命令行工具。nginx-ingress-controller
。solo.jiufog.space
),并配置好 DNS 解析。确保 MySQL 数据库已创建,并准备好以下信息:
solo
root
<your_password>
(替换为实际密码)<your_db_endpoints>
如果 dev
命名空间不存在,请先创建:
kubectl create namespace dev
将以下内容保存为 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
将以下内容保存为 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
将以下内容保存为 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
kubectl get pods -n dev
确保 solo
Pod 状态为 Running
。
kubectl get svc -n dev
确保 solo-service
已创建。
kubectl get ingress -n dev
确保 solo-ingress
已创建,并检查其 ADDRESS
字段是否已分配。
http://solo.jiufog.space
,确保页面正常加载。solo-deployment.yaml
中正确填写 JDBC_PASSWORD
。solo.jiufog.space
已正确解析到 Kubernetes 集群的 Ingress 控制器 IP。kubectl logs <pod-name> -n dev
kubectl logs -n ingress-nginx <ingress-nginx-pod-name>
如果需要删除部署,可以运行以下命令:
kubectl delete -f solo-deployment.yaml
kubectl delete -f solo-service.yaml
kubectl delete -f solo-ingress.yaml