docker 安装sonarqube

本文其实是接着postgresql 安装的。因为近期想把代码质量用起来,所以想用k8s集群搭建一个sonarqube,后续还会个gitlab集成做ci/cd。因为最近一直在使用k8s,发现容器在生产环境使用过程中,只要数据挂载不丢失,镜像不损坏,不论是迁移还是故障恢复,真的是非常方便。所以下面还是使用k8s来安装sonarqube。

创建pv

和postgreSql类似,先创建一个PV,用来存储数据。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sonar-pv
spec:
  capacity:
    storage: 100Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /home/sonar
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - k8s-node2

创建pvc

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sonar-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  storageClassName: local-storage
  volumeName: sonar-pv

同样的这里采用的都是本地存储做持久化挂载。

创建Deployment


apiVersion: apps/v1
kind: Deployment
metadata:
  name: sonarqube
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sonarqube
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      containers:
        - name: sonarqube
          image: sonarqube
          imagePullPolicy: Always
          ports:
            - name: port-9000
              containerPort: 9000
          volumeMounts:
            - name: sonar-pv
              mountPath: /opt/sonarqube/data
              subPath: data
              readOnly: false
            - name: sonar-pv
              mountPath: /opt/sonarqube/extensions
              subPath: extensions
              readOnly: false
          env:
            - name: JAVA_OPTS
              value: "-Duser.timezone=Asia/Shanghai -DsessionTimeout=10080 -Dpermissive-script-security.enabled=true"
            - name: SONARQUBE_JDBC_USERNAME
              value: "sonar"
            - name: SONARQUBE_JDBC_PASSWORD
              value: "sonar"
            - name: SONARQUBE_JDBC_URL
              value: "jdbc:postgresql://postgresql:5432/sonar"
      volumes:
        - name: sonar-pv
          persistentVolumeClaim:
            claimName: sonar-pvc

注意我这里的挂载使用到了subPath。这样可以将同一个pv挂载到多个容器目录中。注意这种方式将覆盖容器原来的文件,比如extension原本sonarqube会默认安装一些插件,但是这里被覆盖了,所以默认安装的插件都没有安装。

小提示: 这里默认安装的插件可以从官网中下载解压找到对应的插件包,其实都是一些jar包。上传到k8s对应的宿主机上。
image.png

创建service

apiVersion: v1
kind: Service
metadata:
  name: sonarqube
spec:
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000
      nodePort: 31000
  type: NodePort
  selector:
    app: sonarqube  # 容器标签选择器

最后同样的提供一个完整的yaml文件,直接执行即可。sonar.yaml

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×