k8s部署SonarQube

SonarQube介绍

官网:https://docs.sonarsource.com/sonarqube/latest/
githup:https://github.com/SonarSource

SonarQube是一个自我管理的自动代码审查工具,可系统地帮助您交付精益代码。作为我们的核心要素声呐解决方案,SonarQube 集成到您现有的工作流程中,并检测代码中的问题,以帮助您对项目执行持续的代码检查。产品分析30+ 种不同的编程语言并集成到 DevOps 平台的持续集成 (CI) 管道中,以确保您的代码符合高质量标准。

干净的代码是所有代码的标准,从而产生安全、可靠和可维护的软件,因此,编写干净的代码对于维护健康的代码库至关重要,Sonar 的 Clean as You Code 方法消除了在开发过程后期审查代码时产生的许多陷阱。“即码即净”方法使用质量门,在新代码(已添加或更改的代码)中有需要修复或审查的内容时提醒/通知你,使你能够保持高标准并专注于代码质量。

使用 Sonar 进行开发

在这里插入图片描述

组件组成

1.sonarqube server :  他有三个程序分别是 webserver(配置和管理sonar) searchserver(搜索结果返回给sonarUI)  ComplateEngineserver(计算服务 将分析结果入库)。
2.sonarqube db : 数据库 存放配置。
3.sonarqube plugins: 插件增加功能。
4.sonar-scanner : 代码扫描工具 可以有多个。

install

部署PostgreSQL

为啥什么使用pg数据库,而不使用mysql?

PostgreSQL 和 MySQL 都是流行的关系型数据库管理系统,它们各自有不同的优势和适用场景:

  1. 数据类型和完整性

PostgreSQL 在数据类型和完整性方面比 MySQL 更为严格。如果您需要存储复杂数据类型或需要强制执行数据完整性规则,那么 PostgreSQL 是更好的选择。例如,如果您需要存储 JSON 数据类型或使用外键约束等高级功能,那么 PostgreSQL 是更好的选择。

  1. 大型应用和高负载

如果您需要处理大量数据和高并发负载,那么 PostgreSQL 是更好的选择。PostgreSQL 在处理大型数据集和高并发负载方面表现得更好。如果您需要处理非常大的数据集、高并发读写或复杂的查询,那么 PostgreSQL 是更好的选择。

  1. 简单的 Web 应用

如果您的应用程序是一个简单的 Web 应用程序,那么 MySQL 可能是更好的选择。MySQL 是一个更轻量级、更易于使用和安装的数据库管理系统。如果您只需要存储少量数据或需要一个小型数据库作为应用程序的后端,那么 MySQL 是更好的选择。

  1. 事务处理

如果您需要处理复杂的事务处理,那么 PostgreSQL 是更好的选择。PostgreSQL 支持更高级的事务处理功能,例如 SavePoints(保存点)和 Rollback to SavePoint(回滚到保存点),这些功能可以帮助您更好地管理数据一致性和可靠性。

  1. 数据库扩展性

如果您需要一个高度可扩展的数据库管理系统,那么 PostgreSQL 是更好的选择。PostgreSQL 提供了更多的扩展性选项,例如分区表、并行查询和流复制功能,这些功能可以帮助您更好地处理大量的数据和高并发负载。
PostgreSQL 和 MySQL对比
数据库复制和高可用性:PostgreSQL 使用流复制来实现高可用性和数据库复制,而 MySQL 使用复制技术来实现。PostgreSQL 的流复制提供更好的性能和更高的可靠性,但需要更多的配置和管理。MySQL 的复制技术更容易使用和管理,但在大型复制和高可用性方面的性能可能不如 PostgreSQL。
全文搜索:PostgreSQL 有一个内置的全文搜索引擎,可以用于搜索文本数据。MySQL 也提供全文搜索功能,但需要使用插件或扩展来实现。
性能:在某些方面,例如并发读取和写入性能,PostgreSQL 可能比 MySQL 更快。但在其他方面,例如写入性能,MySQL 可能比 PostgreSQL 更快。这取决于您的应用程序的需求和负载模式。
存储引擎:MySQL 支持多个不同的存储引擎,例如 InnoDB、MyISAM 等等。每个存储引擎都有不同的优缺点,可以根据应用程序的需求进行选择。相比之下,PostgreSQL 只使用一种存储引擎,但这意味着它可以提供更一致的性能和可靠性。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-sonar
  namespace: sonarqube
  labels:
    app: postgres-sonar
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-sonar
  template:
    metadata:
      labels:
        app: postgres-sonar
    spec:
      containers:
      - name: postgres-sonar
        image: postgres:11.4
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5432
        env:
        - name: POSTGRES_DB
          value: "sonarDB"  #数据库
        - name: POSTGRES_USER
          value: "sonarUser" #登录数据库的用户
        - name: POSTGRES_PASSWORD 
          value: "123456" #数据库密码
        resources:
          limits:
            cpu: 1000m
            memory: 2048Mi
          requests:
            cpu: 500m
            memory: 1024Mi
        volumeMounts:
          - name: data
            mountPath: /var/lib/postgresql/data
            subPath: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: postgres-data
#配置pvc动态分配pv
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-data 
  namespace: sonarqube
spec:
  accessModes:
    - ReadWriteOnce  #访问模式为RWO
  storageClassName: "rook-ceph-block" #指定使用的存储类,实现动态分配pv
  resources:
    requests:
      storage: 20Gi
#部署servcie
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-sonar
  namespace: sonarqube
  labels:
    app: postgres-sonar
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    app: postgres-sonar
查看pod
[root@k8s-master-01 SonarQube]# kubectl get po -n sonarqube
NAME                              READY   STATUS     RESTARTS   AGE
postgres-sonar-596c68648b-hxkb4   1/1     Running    0          34m

部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sonarqube
  namespace: sonarqube
  labels:
    app: sonarqube
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sonarqube
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      initContainers:
      - name: init-sysctl
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      containers:
      - name: sonarqube
        image: sonarqube:lts
        ports:
        - containerPort: 9000
        env:
        - name: SONARQUBE_JDBC_USERNAME
          value: "sonarUser"
        - name: SONARQUBE_JDBC_PASSWORD
          value: "123456"
        - name: SONARQUBE_JDBC_URL
          value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"
        livenessProbe:
          httpGet:
            path: /sessions/new
            port: 9000
          initialDelaySeconds: 60
          periodSeconds: 30
        readinessProbe:
          httpGet:
            path: /sessions/new
            port: 9000
          initialDelaySeconds: 60
          periodSeconds: 30
          failureThreshold: 6
        resources:
          limits:
            cpu: 2000m
            memory: 2048Mi
          requests:
            cpu: 1000m
            memory: 1024Mi
        volumeMounts:
        - mountPath: /opt/sonarqube/conf
          name: data
          subPath: conf
        - mountPath: /opt/sonarqube/data
          name: data
          subPath: data
        - mountPath: /opt/sonarqube/extensions
          name: data
          subPath: extensions
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: sonarqube-data  

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-data 
  namespace: sonarqube
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: "rook-ceph-block"
  resources:
    requests:
      storage: 20Gi

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: sonarqube
  name: sonarqube
  namespace: sonarqube
spec:
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: sonarqube
      port: 9000
      protocol: TCP
      targetPort: 9000
  selector:
    app: sonarqube
  sessionAffinity: None
  type: NodePort
  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值