使用k8s安装Sonarqube

1. 相应的yaml

devops-test-ns.yaml

yaml 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: devops-test

sonarqube.yaml

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-data
  namespace: devops-test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: "local-path"
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sonarqube
  namespace: devops-test
  labels:
    app: sonarqube
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sonarqube
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: node-role.kubernetes.io/master
                    operator: In
                    values: [ "true" ]
      tolerations: # 允许调度到master节点
        - key: node-role.kubernetes.io/control-plane # 控制平面节点
          effect: NoSchedule # 容忍该污点的影响NoSchedule
          operator: Exists # 该标签存在
      initContainers:
        - name: init-sysctl
          image: busybox:1.28.4
          imagePullPolicy: IfNotPresent
          command:
            - sysctl
            - -w
            - vm.max_map_count=262144
          securityContext:
            privileged: true
      containers:
        - name: sonarqube
          image: sonarqube
          imagePullPolicy: IfNotPresent
          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: 30
            periodSeconds: 30
          readinessProbe:
            httpGet:
              path: /sessions/new
              port: 9000
            initialDelaySeconds: 60
            periodSeconds: 30
            failureThreshold: 6
          volumeMounts:
            - mountPath: /opt/sonarqube/conf
              name: data
            - mountPath: /opt/sonarqube/data
              name: data
            - mountPath: /opt/sonarqube/extensions
              name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: sonarqube-data
---
apiVersion: v1
kind: Service
metadata:
  name: sonarqube
  namespace: devops-test
  labels:
    app: sonarqube
spec:
  type: NodePort
  ports:
    - name: sonarqube
      port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    app: sonarqube

pgsql.yaml

yaml 复制代码
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-data
  namespace: devops-test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: "local-path"
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-sonar
  namespace: devops-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-sonar
  template:
    metadata:
      labels:
        app: postgres-sonar
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: node-role.kubernetes.io/master
                    operator: In
                    values: [ "true" ]
      tolerations: # 允许调度到master节点
        - key: node-role.kubernetes.io/control-plane # 控制平面节点
          effect: NoSchedule # 容忍该污点的影响NoSchedule
          operator: Exists # 该标签存在
      #      imagePullSecrets:
      #        - name: harbor-secret
      containers:
        - name: postgres-sonar
          image: postgres:14.2
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_DB
              value: "sonarDB"
            - name: POSTGRES_USER
              value: "sonarUser"
            - name: POSTGRES_PASSWORD
              value: "123456"
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: postgres-data
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-sonar
  namespace: devops-test
  labels:
    app: postgres-sonar
spec:
  type: NodePort
  ports:
    - name: postgres-sonar
      port: 5432
      targetPort: 5432
      protocol: TCP
  selector:
    app: postgres-sonar

2. 安装

bash 复制代码
#创建资源
kubectl create -f devops-test-ns.yaml -f pgsql.yaml -f sonarqube.yaml
#查看资源
kubectl get deploy,po,svc -n devops-test

3. 访问Sonarqube

bash 复制代码
kubectl get service/sonarqube -n devops-test

获取到sonarqube对应的svc的端口为32700

因此,访问链接为http://{master-host}:32700/, 此处的host为k8s任意一个master节点的ip

默认的用户名密码为admin/admin,第一次登录之后会要求修改密码,此处修改密码为Reset_password1

复制代码
http://{host}:32700/
admin/Reset_password1

4. 配置

登录到 sonarqube 后台 http://{master-host}/{sonarqube-svc-nodeport} admin/Reset_password1

  1. 生成token
    点击头像 > MyAccount > Security > Generate Tokens > Type选择User Token > generate 生成 token 并复制
  2. 创建webhook服务
    点击菜单栏Administration >Configuration > Webhooks > Create >
    Name: jenkins
    URL: http://{master-host}:{jenkins-svc-nodeport}/sonarqube-webhook/
    Secret: 空置
相关推荐
康娜喵5 分钟前
在Ubuntu26上使用Docker部署Gitea
docker·容器·gitea
东宇科技15 分钟前
我用docker创建了一个springboot4项目
阿里云·docker·容器
运维老郭34 分钟前
【K8s Pod生命周期】CrashLoopBackOff 避坑指南:7 条命令定位 Pod 反复重启根因
云原生
@insist12311 小时前
系统集成项目管理工程师-安全架构与云原生架构
云原生·架构·软考·安全架构·系统集成项目管理工程师·软考中项·软件水平考试
阿里云云原生14 小时前
一张告警卡片到一键 RCA:塔斯汀万店连锁的智能运维闭环实践
云原生
坐吃山猪15 小时前
Docker07-MySQL
mysql·docker·容器
Kismet_nvi16 小时前
《Kubernetes Service 进阶、kube-proxy 与 Ingress 实战精要》
云原生·容器·kubernetes
Crazy________17 小时前
Redis03:持久化存储,大key分析,主从复制及哨兵模式
数据库·redis·容器
Zhu75818 小时前
使用helm在k8s集群部署MySQL单实例,支持当前所有主版本的最新子版本
mysql·adb·kubernetes