sonarqube部署安装

axing
2025-06-05 / 0 评论 / 5 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年06月07日,已超过30天没有更新,若内容或图片失效,请留言反馈。

一、部署
1、下载

下载地址:https://github.com/SonarSource/helm-chart-sonarqube/releases/download/sonarqube-2025.3.0-sonarqube-dce-2025.3.0/sonarqube-2025.3.0.tgz

解压:tar zxav sonarqube-2025.3.0.tgz

把模板输出:
helm template my-sonarqube . > test.yaml

2、yaml文件

---
# Source: sonarqube/charts/postgresql/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-sonarqube-postgresql
  labels:
    app.kubernetes.io/name: postgresql
    helm.sh/chart: postgresql-10.15.0
    app.kubernetes.io/instance: my-sonarqube
    app.kubernetes.io/managed-by: Helm
  namespace: default
type: Opaque
data:
  postgresql-postgres-password: "Tlp4MmJXa3hKbA=="
  postgresql-password: "c29uYXJQYXNz"
---
# Source: sonarqube/templates/secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: my-sonarqube-sonarqube-monitoring-passcode
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
type: Opaque
data:
  SONAR_WEB_SYSTEMPASSCODE: "MzMwNzA1OTVBYmNA"
---
# Source: sonarqube/templates/secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: my-sonarqube-sonarqube-http-proxies
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
type: Opaque
stringData:
  PLUGINS-HTTP-PROXY: ""
  PLUGINS-HTTPS-PROXY: ""
  PLUGINS-NO-PROXY: ""
  PROMETHEUS-EXPORTER-HTTP-PROXY: ""
  PROMETHEUS-EXPORTER-HTTPS-PROXY: ""
  PROMETHEUS-EXPORTER-NO-PROXY: ""
---
# Source: sonarqube/templates/config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-config
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  sonar.properties: |
---
# Source: sonarqube/templates/init-fs.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-init-fs
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  init_fs.sh: |-
    chown -R 1000:0 /opt/sonarqube/data
    chown -R 1000:0 /opt/sonarqube/temp
    chown -R 1000:0 /opt/sonarqube/logs
---
# Source: sonarqube/templates/init-sysctl.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-init-sysctl
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  init_sysctl.sh: |-
    set -o errexit
    set -o xtrace
    vmMaxMapCount=524288
    if [[ "$(sysctl -n vm.max_map_count)" -lt $vmMaxMapCount ]]; then
      sysctl -w vm.max_map_count=$vmMaxMapCount
      if [[ "$(sysctl -n vm.max_map_count)" -lt $vmMaxMapCount ]]; then
        echo "Failed to set initSysctl.vmMaxMapCount"; exit 1
      fi
    fi
    fsFileMax=131072
    if [[ "$(sysctl -n fs.file-max)" -lt $fsFileMax ]]; then
      sysctl -w fs.file-max=$fsFileMax
      if [[ "$(sysctl -n fs.file-max)" -lt $fsFileMax ]]; then
        echo "Failed to set initSysctl.fsFileMax"; exit 1
      fi
    fi
    nofile=131072
    if [[ "$(ulimit -n)" != "unlimited" ]]; then
      if [[ "$(ulimit -n)" -lt $nofile ]]; then
        ulimit -n $nofile
        if [[ "$(ulimit -n)" -lt $nofile ]]; then
          echo "Failed to set initSysctl.nofile"; exit 1
        fi
      fi
    fi
    nproc=8192
    if [[ "$(ulimit -u)" != "unlimited" ]]; then
      if [[ "$(ulimit -u)" -lt $nproc ]]; then
        ulimit -u $nproc
        if [[ "$(ulimit -u)" -lt $nproc ]]; then
          echo "Failed to set initSysctl.nproc"; exit 1
        fi
      fi
    fi
---
# Source: sonarqube/templates/install-plugins.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-install-plugins
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  install_plugins.sh: |-
---
# Source: sonarqube/templates/jdbc-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-jdbc-config
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  SONAR_JDBC_USERNAME: "sonarUser"
  SONAR_JDBC_URL: "jdbc:postgresql://my-sonarqube-postgresql:5432/sonarDB"
---
# Source: sonarqube/templates/prometheus-ce-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-prometheus-ce-config
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  prometheus-ce-config.yaml: |-
    rules:
    - pattern: .*
---
# Source: sonarqube/templates/prometheus-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-sonarqube-sonarqube-prometheus-config
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
data:
  prometheus-config.yaml: |-
    rules:
    - pattern: .*
---
# Source: sonarqube/templates/pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-sonarqube-sonarqube
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "5Gi"
  storageClassName: "ceph-cephfs"
---
# Source: sonarqube/charts/postgresql/templates/svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-sonarqube-postgresql-headless
  labels:
    app.kubernetes.io/name: postgresql
    helm.sh/chart: postgresql-10.15.0
    app.kubernetes.io/instance: my-sonarqube
    app.kubernetes.io/managed-by: Helm
    # Use this annotation in addition to the actual publishNotReadyAddresses
    # field below because the annotation will stop being respected soon but the
    # field is broken in some versions of Kubernetes:
    # https://github.com/kubernetes/kubernetes/issues/58662
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
  namespace: default
spec:
  type: ClusterIP
  clusterIP: None
  # We want all pods in the StatefulSet to have their addresses published for
  # the sake of the other Postgresql pods even before they're ready, since they
  # have to be able to talk to each other in order to become ready.
  publishNotReadyAddresses: true
  ports:
    - name: tcp-postgresql
      port: 5432
      targetPort: tcp-postgresql
  selector:
    app.kubernetes.io/name: postgresql
    app.kubernetes.io/instance: my-sonarqube
---
# Source: sonarqube/charts/postgresql/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-sonarqube-postgresql
  labels:
    app.kubernetes.io/name: postgresql
    helm.sh/chart: postgresql-10.15.0
    app.kubernetes.io/instance: my-sonarqube
    app.kubernetes.io/managed-by: Helm
  annotations:
  namespace: default
spec:
  type: ClusterIP
  ports:
    - name: tcp-postgresql
      port: 5432
      targetPort: tcp-postgresql
  selector:
    app.kubernetes.io/name: postgresql
    app.kubernetes.io/instance: my-sonarqube
    role: primary
---
# Source: sonarqube/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-sonarqube-sonarqube
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
spec:
  type: ClusterIP
  ports:
    - port: 9000
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app: sonarqube
    release: my-sonarqube
---
# Source: sonarqube/charts/postgresql/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-sonarqube-postgresql
  labels:
    app.kubernetes.io/name: postgresql
    helm.sh/chart: postgresql-10.15.0
    app.kubernetes.io/instance: my-sonarqube
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: primary
  annotations:
  namespace: default
spec:
  serviceName: my-sonarqube-postgresql-headless
  replicas: 1
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: postgresql
      app.kubernetes.io/instance: my-sonarqube
      role: primary
  template:
    metadata:
      name: my-sonarqube-postgresql
      labels:
        app.kubernetes.io/name: postgresql
        helm.sh/chart: postgresql-10.15.0
        app.kubernetes.io/instance: my-sonarqube
        app.kubernetes.io/managed-by: Helm
        role: primary
        app.kubernetes.io/component: primary
    spec:      
      affinity:
        podAffinity:
          
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchLabels:
                    app.kubernetes.io/name: postgresql
                    app.kubernetes.io/instance: my-sonarqube
                    app.kubernetes.io/component: primary
                namespaces:
                  - "default"
                topologyKey: kubernetes.io/hostname
              weight: 1
        nodeAffinity:
          
      securityContext:
        fsGroup: 1001
      automountServiceAccountToken: false
      containers:
        - name: my-sonarqube-postgresql
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/bitnami-postgresql:11.14.0-debian-10-r22
          imagePullPolicy: "IfNotPresent"
          resources:
            limits:
              cpu: 2
              memory: 2Gi
            requests:
              cpu: 100m
              memory: 200Mi
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            runAsNonRoot: true
            runAsUser: 1001
            seccompProfile:
              type: RuntimeDefault
          env:
            - name: BITNAMI_DEBUG
              value: "false"
            - name: POSTGRESQL_PORT_NUMBER
              value: "5432"
            - name: POSTGRESQL_VOLUME_DIR
              value: "/bitnami/postgresql"
            - name: PGDATA
              value: "/bitnami/postgresql/data"
            - name: POSTGRES_POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-postgresql
                  key: postgresql-postgres-password
            - name: POSTGRES_USER
              value: "sonarUser"
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-postgresql
                  key: postgresql-password
            - name: POSTGRES_DB
              value: "sonarDB"
            - name: POSTGRESQL_ENABLE_LDAP
              value: "no"
            - name: POSTGRESQL_ENABLE_TLS
              value: "no"
            - name: POSTGRESQL_LOG_HOSTNAME
              value: "false"
            - name: POSTGRESQL_LOG_CONNECTIONS
              value: "false"
            - name: POSTGRESQL_LOG_DISCONNECTIONS
              value: "false"
            - name: POSTGRESQL_PGAUDIT_LOG_CATALOG
              value: "off"
            - name: POSTGRESQL_CLIENT_MIN_MESSAGES
              value: "error"
            - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES
              value: "pgaudit"
          ports:
            - name: tcp-postgresql
              containerPort: 5432
          livenessProbe:
            exec:
              command:
                - /bin/sh
                - -c
                - exec pg_isready -U "sonarUser" -d "dbname=sonarDB" -h 127.0.0.1 -p 5432
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 6
          readinessProbe:
            exec:
              command:
                - /bin/sh
                - -c
                - -e
                - |
                  exec pg_isready -U "sonarUser" -d "dbname=sonarDB" -h 127.0.0.1 -p 5432
                  [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ]
            initialDelaySeconds: 5
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 6
          volumeMounts:
            - name: dshm
              mountPath: /dev/shm
            - name: data
              mountPath: /bitnami/postgresql
              subPath: 
      volumes:
        - name: dshm
          emptyDir:
            medium: Memory
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes:
          - "ReadWriteOnce"
        resources:
          requests:
            storage: "2Gi"
        storageClassName: ceph-cephfs
---
# Source: sonarqube/templates/sonarqube-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-sonarqube-sonarqube
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
    app.kubernetes.io/name: my-sonarqube
    app.kubernetes.io/instance: my-sonarqube
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: sonarqube
    app.kubernetes.io/component: my-sonarqube-sonarqube
    app.kubernetes.io/version: "25.5.0.107428-community"
spec:
  replicas: 1
  revisionHistoryLimit: 10
  serviceName: my-sonarqube-sonarqube
  selector:
    matchLabels:
      app: sonarqube
      release: my-sonarqube
  template:
    metadata:
      annotations:
        checksum/config: 514ba5726581aabed2df14f0c3d95431e4f1150f3ee3c9790dae426c0b0effd3
        checksum/init-fs: 2da6aac9b4e90ad2a2853245bcc71bf2b9a53bdf6db658a594551108671976e7
        checksum/init-sysctl: a03f942e6089eda338af09ad886a4380f621c295548e9917a0e6113248ebb1aa
        checksum/plugins: 6b6fe750b5fb43bd030dbbe4e3ece53e5f37f595a480d504dd7e960bd5b9832a
        checksum/secret: 38377e36e39acacccf767e5fc68414a302d1868b7b9a99cb72e38f229023ca39
        checksum/prometheus-config: c831c80bb8be92b75164340491b49ab104f5b865f53618ebcffe35fd03c4c034
        checksum/prometheus-ce-config: a481713e44ccc5524e48597df39ba6f9a561fecd8b48fce7f6062602d8229613
      labels:
        app: sonarqube
        release: my-sonarqube
    spec:
      automountServiceAccountToken: false
      securityContext:
        fsGroup: 0
      initContainers:
        - name: "wait-for-db"
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            readOnlyRootFilesystem: true
            runAsGroup: 0
            runAsNonRoot: true
            runAsUser: 1000
            seccompProfile:
              type: RuntimeDefault
          command: ["/bin/bash", "-c"]
          args: ['set -o pipefail;for i in {1..200};do (echo > /dev/tcp/my-sonarqube-postgresql/5432) && exit 0; sleep 2;done; exit 1']
        - name: init-sysctl
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: true
            readOnlyRootFilesystem: true
            runAsUser: 0
          command: ["/bin/bash", "-e", "/tmp/scripts/init_sysctl.sh"]
          volumeMounts:
            - name: init-sysctl
              mountPath: /tmp/scripts/
          env:
            - name: SONAR_WEB_CONTEXT
              value: /
            - name: SONAR_WEB_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8000:/opt/sonarqube/conf/prometheus-config.yaml
            - name: SONAR_CE_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8001:/opt/sonarqube/conf/prometheus-ce-config.yaml
        - name: inject-prometheus-exporter
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            readOnlyRootFilesystem: true
            runAsGroup: 0
            runAsNonRoot: true
            runAsUser: 1000
            seccompProfile:
              type: RuntimeDefault
          command: ["/bin/sh", "-c"]
          args: ["curl -s 'https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar'  --output /data/jmx_prometheus_javaagent.jar -v"]
          volumeMounts:
            - mountPath: /data
              name: sonarqube
              subPath: data
          env:
            - name: http_proxy
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-sonarqube-http-proxies
                  key: PROMETHEUS-EXPORTER-HTTP-PROXY
            - name: https_proxy
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-sonarqube-http-proxies
                  key: PROMETHEUS-EXPORTER-HTTPS-PROXY
            - name: no_proxy
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-sonarqube-http-proxies
                  key: PROMETHEUS-EXPORTER-NO-PROXY
            - name: SONAR_WEB_CONTEXT
              value: /
            - name: SONAR_WEB_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8000:/opt/sonarqube/conf/prometheus-config.yaml
            - name: SONAR_CE_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8001:/opt/sonarqube/conf/prometheus-ce-config.yaml
        - name: init-fs
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community
          imagePullPolicy: IfNotPresent
          securityContext:
            capabilities:
              add:
              - CHOWN
              drop:
              - ALL
            privileged: false
            readOnlyRootFilesystem: true
            runAsGroup: 0
            runAsNonRoot: false
            runAsUser: 0
            seccompProfile:
              type: RuntimeDefault
          command: ["sh", "-e", "/tmp/scripts/init_fs.sh"]
          volumeMounts:
            - name: init-fs
              mountPath: /tmp/scripts/
            - mountPath: /opt/sonarqube/data
              name: sonarqube
              subPath: data
            - mountPath: /opt/sonarqube/temp
              name: sonarqube
              subPath: temp
            - mountPath: /opt/sonarqube/logs
              name: sonarqube
              subPath: logs
            - mountPath: /tmp
              name: tmp-dir
            - mountPath: /opt/sonarqube/extensions
              name: sonarqube
              subPath: extensions
      containers:
        - name: sonarqube
          image: registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 9000
              protocol: TCP
            - name: monitoring-web
              containerPort: 8000
              protocol: TCP
            - name: monitoring-ce
              containerPort: 8001
              protocol: TCP
          resources:
            limits:
              cpu: 800m
              ephemeral-storage: 512000M
              memory: 6144M
            requests:
              cpu: 400m
              ephemeral-storage: 1536M
              memory: 2048M
          env:
            - name: SONAR_HELM_CHART_VERSION
              value: 2025.3.0
            - name: SONAR_JDBC_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-postgresql
                  key: postgresql-password
            - name: SONAR_WEB_SYSTEMPASSCODE
              valueFrom:
                secretKeyRef:
                  name: my-sonarqube-sonarqube-monitoring-passcode
                  key: SONAR_WEB_SYSTEMPASSCODE
            - name: SONAR_WEB_CONTEXT
              value: /
            - name: SONAR_WEB_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8000:/opt/sonarqube/conf/prometheus-config.yaml
            - name: SONAR_CE_JAVAOPTS
              value: -javaagent:/opt/sonarqube/data/jmx_prometheus_javaagent.jar=8001:/opt/sonarqube/conf/prometheus-ce-config.yaml
          envFrom:
            - configMapRef:
                name: my-sonarqube-sonarqube-jdbc-config
          livenessProbe:
            exec:
              command:
              - sh
              - -c
              - |
                wget --no-proxy --quiet -O /dev/null --timeout=1 --header="X-Sonar-Passcode: $SONAR_WEB_SYSTEMPASSCODE" "http://localhost:9000/api/system/liveness"
            failureThreshold: 6
            initialDelaySeconds: 60
            periodSeconds: 30
            timeoutSeconds: 1
          readinessProbe:
            exec:
              command:
              - sh
              - -c
              - |
                #!/bin/bash
                # A Sonarqube container is considered ready if the status is UP, DB_MIGRATION_NEEDED or DB_MIGRATION_RUNNING
                # status about migration are added to prevent the node to be kill while SonarQube is upgrading the database.
                if wget --no-proxy -qO- http://localhost:9000/api/system/status | grep -q -e '"status":"UP"' -e '"status":"DB_MIGRATION_NEEDED"' -e '"status":"DB_MIGRATION_RUNNING"'; then
                  exit 0
                fi
                exit 1
            failureThreshold: 6
            initialDelaySeconds: 60
            periodSeconds: 30
            timeoutSeconds: 1
          startupProbe:
            httpGet:
              scheme: HTTP
              path: /api/system/status
              port: http
            initialDelaySeconds: 30
            periodSeconds: 10
            failureThreshold: 24
            timeoutSeconds: 1
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            runAsGroup: 0
            runAsNonRoot: true
            runAsUser: 1000
            seccompProfile:
              type: RuntimeDefault
          volumeMounts:
            - mountPath: /opt/sonarqube/data
              name: sonarqube
              subPath: data
            - mountPath: /opt/sonarqube/temp
              name: sonarqube
              subPath: temp
            - mountPath: /opt/sonarqube/logs
              name: sonarqube
              subPath: logs
            - mountPath: /tmp
              name: tmp-dir
            - mountPath: /opt/sonarqube/extensions
              name: sonarqube
              subPath: extensions
            - mountPath: /opt/sonarqube/conf/prometheus-config.yaml
              subPath: prometheus-config.yaml
              name: prometheus-config
            - mountPath: /opt/sonarqube/conf/prometheus-ce-config.yaml
              subPath: prometheus-ce-config.yaml
              name: prometheus-ce-config
      serviceAccountName: default
      volumes:
        
        - name: init-sysctl
          configMap:
            name: my-sonarqube-sonarqube-init-sysctl
            items:
              - key: init_sysctl.sh
                path: init_sysctl.sh
        - name: init-fs
          configMap:
            name: my-sonarqube-sonarqube-init-fs
            items:
              - key: init_fs.sh
                path: init_fs.sh
        - name: prometheus-config
          configMap:
            name: my-sonarqube-sonarqube-prometheus-config
            items:
              - key: prometheus-config.yaml
                path: prometheus-config.yaml
        - name: prometheus-ce-config
          configMap:
            name: my-sonarqube-sonarqube-prometheus-ce-config
            items:
              - key: prometheus-ce-config.yaml
                path: prometheus-ce-config.yaml
        - name: sonarqube
          persistentVolumeClaim:
            claimName: my-sonarqube-sonarqube
        - name : tmp-dir
          emptyDir:
            {}
---
# Source: sonarqube/templates/tests/sonarqube-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: "my-sonarqube-ui-test"
  annotations:
    "helm.sh/hook": test-success
  labels:
    app: sonarqube
    chart: sonarqube-2025.3.0
    release: my-sonarqube
    heritage: Helm
spec:
  automountServiceAccountToken: false
  containers:
    - name: my-sonarqube-ui-test
      image: "registry.cn-guangzhou.aliyuncs.com/xingcangku/sonarqube-community:25.5.0.107428-community"
      imagePullPolicy: IfNotPresent
      command: ['wget']
      args: [
        '--retry-connrefused',
        '--waitretry=1',
        '--timeout=5',
        '-t',
        '12',
        '-qO-',
        'my-sonarqube-sonarqube:9000/api/system/status'
        ]
      resources:
        limits:
          cpu: 500m
          ephemeral-storage: 1000M
          memory: 200M
        requests:
          cpu: 500m
          ephemeral-storage: 100M
          memory: 200M
  restartPolicy: Never

3、安装

kubectl apply -f test.yaml

4、svc

apiVersion: v1
kind: Service
metadata:
  name: sonarqube-nodeport
spec:
  type: NodePort
  ports:
  - port: 9000
    targetPort: 9000
    nodePort: 32309
  selector:
    app: sonarqube
    release: my-sonarqube

5、启动的时候慢是正常的。

http://192.168.3.200:32309/

mbi9514w.png

6、修改hosts文件

notepad C:\Windows\System32\drivers\etc\hosts 

mbi9zryg.png

mbi8tlif.png

6、给其他业务pod添加

root@k8s01:~/helm/sonarqube# kubectl get svc -n traefik | grep traefik
traefik-crds   LoadBalancer   10.101.202.240   <pending>     80:31080/TCP,443:32480/TCP   87m
root@k8s01:~/helm/sonarqube# kubectl get svc
NAME                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes                         ClusterIP   10.96.0.1        <none>        443/TCP          10d
my-sonarqube-postgresql            ClusterIP   10.102.103.88    <none>        5432/TCP         23h
my-sonarqube-postgresql-headless   ClusterIP   None             <none>        5432/TCP         23h
my-sonarqube-sonarqube             ClusterIP   10.107.136.0     <none>        9000/TCP         23h
sonarqube-nodeport                 NodePort    10.106.168.209   <none>        9000:32309/TCP   22h
test-app                           ClusterIP   10.101.249.224   <none>        80/TCP           6d23h
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: sonarqube-ingress
  namespace: default  # 确保与 SonarQube 服务同命名空间
spec:
  entryPoints:
    - web  # HTTP 入口(如需 HTTPS 使用 websecure)
  routes:
  - match: Host(`sonarqube.local.com`)
    kind: Rule
    services:
    - name: my-sonarqube-sonarqube  # 使用 ClusterIP 服务
      port: 9000
这样可以实验出流量的两个走发
1、直接走业务pod本身的端口
2、先走traefik然后由它来分发给业务pod

mbjlgibz.png
mbjlguhd.png

0

评论 (0)

取消
你说 - 枯木逢春
00:00
  1. 在加纳共和国离婚蓝心羽 / 高睿
  2. 嘉宾路飞文
  3. 你说(demo)枯木逢春
  4. 谜底枯木逢春
  5. 你说枯木逢春
  6. 亦是此间少年(demo)枯木逢春
  7. 这城市风总是很大枯木逢春
  8. 这一生关于你的风景枯木逢春
  9. 我在昨天的梦里又看见了你枯木逢春

无歌词,请欣赏。