当前位置: 首页 > news >正文

Kubernetes集群中部署SonarQube服务

以下是在Kubernetes集群中部署SonarQube服务的分步指南,包含持久化存储、数据库配置和高可用性建议:


1. 前置条件

  • 已部署Kubernetes集群(版本≥1.19)
  • 安装kubectlhelm工具
  • 配置StorageClass(如NFS、Ceph、EBS等)

2. 部署PostgreSQL数据库

创建PersistentVolumeClaim(PVC)
# postgres-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  storageClassName: "standard"  # 替换为实际StorageClass
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
部署PostgreSQL
# postgres-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:13
        env:
        - name: POSTGRES_USER
          value: sonar
        - name: POSTGRES_PASSWORD
          value: sonar-secret
        - name: POSTGRES_DB
          value: sonarqube
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-data
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-data
        persistentVolumeClaim:
          claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

执行命令:

kubectl apply -f postgres-pvc.yaml
kubectl apply -f postgres-deployment.yaml

3. 部署SonarQube

创建SonarQube PVC
# sonarqube-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-pvc
spec:
  storageClassName: "standard"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
部署SonarQube
# sonarqube-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sonarqube
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sonarqube
  strategy:
    type: Recreate  # 确保单副本时数据一致性
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      containers:
      - name: sonarqube
        image: sonarqube:9.9.1-community
        env:
        - name: SONAR_JDBC_URL
          value: jdbc:postgresql://postgres:5432/sonarqube
        - name: SONAR_JDBC_USERNAME
          value: sonar
        - name: SONAR_JDBC_PASSWORD
          value: sonar-secret
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: sonarqube-data
          mountPath: /opt/sonarqube/data
        - name: sonarqube-extensions
          mountPath: /opt/sonarqube/extensions
      volumes:
      - name: sonarqube-data
        persistentVolumeClaim:
          claimName: sonarqube-pvc
      - name: sonarqube-extensions
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: sonarqube
spec:
  type: NodePort  # 生产环境建议使用Ingress
  selector:
    app: sonarqube
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000
      nodePort: 31000

执行命令:

kubectl apply -f sonarqube-pvc.yaml
kubectl apply -f sonarqube-deployment.yaml

4. 验证部署

# 检查Pod状态
kubectl get pods -l app=sonarqube

# 查看日志
kubectl logs -f deployment/sonarqube

# 获取访问地址
kubectl get svc sonarqube

访问地址:http://<NodeIP>:31000
默认账号:admin/admin(首次登录需修改)


5. 进阶配置

(a) 使用Ingress暴露服务
# sonarqube-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sonarqube
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
  rules:
  - host: sonarqube.demonlg.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: sonarqube
            port:
              number: 9000
(b) 高可用配置(企业版)
# 需要SonarQube企业版支持集群模式
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
  containers:
    - name: sonarqube
      env:
      - name: SONAR_CLUSTER_ENABLED
        value: "true"
      - name: SONAR_CLUSTER_SEARCH_HOSTS
        value: "sonarqube-0.sonarqube-headless:9000,sonarqube-1.sonarqube-headless:9000"
© 资源限制
resources:
  requests:
    memory: "2Gi"
    cpu: "1000m"
  limits:
    memory: "4Gi"
    cpu: "2000m"

6. 备份与维护

数据库备份
# 手动备份PostgreSQL数据
kubectl exec postgres-pod -- pg_dump -U sonar sonarqube > sonarqube-backup.sql
升级SonarQube
  1. 停止当前Deployment
  2. 备份数据库和存储卷
  3. 修改镜像版本(如sonarqube:10.0.0-community
  4. 逐步滚动更新

7. 故障排查

  • Pod启动失败
    • 检查数据库连接配置(SONAR_JDBC_URL
    • 确认PVC是否正确挂载(kubectl describe pod sonarqube-pod
  • 性能问题
    • 增加JVM堆内存:-Dsonar.ce.javaOpts=-Xmx4g -Dsonar.web.javaOpts=-Xmx4g

通过以上步骤,您可以在Kubernetes集群中部署一个生产可用的SonarQube服务,实现代码质量的持续分析。

相关文章:

  • Gitee上库常用git命令
  • Babel 从入门到精通(四):@babel/template的应用实例与最佳实践
  • 【JavaEE】springMVC返回Http响应
  • 【负载均衡系列】Nginx
  • 【例6.5】活动选择(信息学奥赛一本通-1323)
  • 如何拆解模糊需求管理
  • 【C语言】自定义数据类型:联合体和枚举
  • Java Collection API增强功能系列之二 List.of、Set.of、Map.of
  • 《Python全栈开发》第12课:RESTful API设计 - 构建现代化接口
  • ArrayList<E>案例//定义一个方法,将价格低于3000的手机信息返回
  • 0324-项目
  • 【蓝桥杯速成】| 11.回溯 之 子集问题
  • SpringBoot星之语明星周边产品销售网站设计与实现
  • 内存管理模块设计与实现
  • 单片机的时钟输出功能-MCO输出(7)
  • Android 13深度定制:揭秘类MIUI全面屏手势返回动效的架构级实现
  • 零知识证明:区块链隐私保护的变革力量
  • python人脸检测、人脸识别、活体检测入门学习教程
  • Java 中调用语言模型(如 OpenAI、阿里云通义千问、Hugging Face 等)API 的详细步骤和示例代码,涵盖常见场景及注意事项
  • pip包py2safe一键加密python项目
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 人民财评:网售“婴儿高跟鞋”?不能让畸形审美侵蚀孩子身心
  • 万玲、胡春平调任江西省鹰潭市副市长
  • 第1现场 | 印巴冲突:印50多年来首次举行大规模民防演习
  • 咖啡戏剧节举办第五年,上生新所“无店不咖啡,空间皆可戏”
  • 酒店取消订单加价卖何以屡禁不绝?专家建议建立黑名单并在商家页面醒目标注