在 Kubernetes 集群中部署 Solo 博客系统

发布于:2025-03-05 ⋅ 阅读:(11) ⋅ 点赞:(0)

概述

本文档描述了如何在 Kubernetes 集群中部署 Solo 博客系统。Solo 是一个基于 Java 的博客系统,使用 MySQL 作为数据库。部署包括以下组件:

  1. Deployment:运行 Solo 应用的 Pod。
  2. Service:为 Solo 应用提供内部访问。
  3. Ingress:为 Solo 应用提供外部访问。

前提条件

  1. 已安装并配置好 Kubernetes 集群。
  2. 已安装并配置好 kubectl 命令行工具。
  3. 已安装并配置好 nginx-ingress-controller
  4. 已准备好 MySQL 数据库,并确保数据库可访问。
  5. 已准备好域名(如 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

验证部署

  1. 检查 Pod 状态:
kubectl get pods -n dev

确保 solo Pod 状态为 Running

  1. 检查 Service 状态:
kubectl get svc -n dev

确保 solo-service 已创建。

  1. 检查 Ingress 状态:
kubectl get ingress -n dev

确保 solo-ingress 已创建,并检查其 ADDRESS 字段是否已分配。

  1. 访问 Solo 博客:
    在浏览器中访问 http://solo.jiufog.space,确保页面正常加载。

注意事项

  1. 数据库密码:请确保在 solo-deployment.yaml 中正确填写 JDBC_PASSWORD
  2. 域名解析:确保域名 solo.jiufog.space 已正确解析到 Kubernetes 集群的 Ingress 控制器 IP。
  3. HTTPS:如果需要启用 HTTPS,请在 Ingress 中配置 TLS 证书。

故障排查

  1. Pod 无法启动
    • 检查日志:
kubectl logs <pod-name> -n dev
- 确保数据库连接信息正确。
  1. 无法访问服务
    • 检查 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


网站公告

今日签到

点亮在社区的每一天
去签到