Kubernetes 集群中部署 Solo 博客系统

概述

本文档描述了如何在 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

image.png

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10068 回帖 • 496 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...