Sonarqube in K8s

本文来分享下sonarqube怎样部署在k8s里。

首先在dockerhub上搜索sonarqube image-->https://hub.docker.com/_/sonarqube,官网上有简单的介绍sonarqube是干什么,以及如何用docker快速起一个service。

        docker run -d --name sonarqube \
        -p 9000:9000 \
        -e sonar.jdbc.username=sonar \
        -e sonar.jdbc.password=sonar \
        -e sonar.jdbc.url=jdbc:postgresql://localhost/sonar \
        sonarqube

这个命令执行完成之后,直接访问9000端口,就可以看到sonarqube的服务了。从这个命令行可以看出,仅仅绑定了数据库相关的环境变量,并暴露了9000端口。如果高点要求,可以persistent volumes:

        -v /path/to/data:/opt/sonarqube/data

做到这些,还存下不足点在于,一旦container出错,服务会hung住。为了提高服务的relaibility,我们可以把它放在k8s里面,这样一旦出现问题,可以自主恢复。当然还能做到LB。

action

  1. prepare image

首先要准备sonarqube的image,可以从官网上下载。当然也可以通过docker来获取。

        docker pull sonarqube:7.7-community 

等待安装完成之后。需要修改它的tag,并push到自己的registry中。

        docker tag sonarqube:7.7-community localhost:5000/sonarqube:7.7
        docker push localhost:5000/sonarqube:7.7

这样做的好处是每次拉取sonarqube是从私服里拉取image,而不是到公网上,有效地节约获取时间,当然也可以自己定制image。

  1. 编写deployment。

     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: sonarqube
       namespace: default
     spec:
       replicas: 1 // 启动的副本数
       template:
         metadata:
           labels:
             app: sonarqube
         spec:
           containers:
           - name: sonarqube
             image: "localhost:5000/sonarqube:7.7" //image地址
             imagePullPolicy: Always
             ports:
             - name: port-9000
               containerPort: 9000
             volumeMounts:
               - name: sonar-pv
                 mountPath: "/data/sonar" //挂载的目录
                 readOnly: false
             env:
             - name: JAVA_OPTS
               value: "-Duser.timezone=Asia/Shanghai -DsessionTimeout=10080 -Dpermissive-script-security.enabled=true"
             - name: SONARQUBE_JDBC_USERNAME
               value: "***"
             - name: SONARQUBE_JDBC_PASSWORD
               value: "***"
             - name: SONARQUBE_JDBC_URL
               value: "jdbc:postgresql://***/sonar"
           volumes:
           - name: sonar-pv
             persistentVolumeClaim:
               claimName: sonar-pvc
    
  2. 编写pv,pvc。

             apiVersion: v1
             kind: PersistentVolume
             metadata:
               name: sonar-pv
               namespace: default
               labels:
                 pv: sonar-pv
             spec:
               capacity:
                 storage: 50Gi
               accessModes:
                 - ReadWriteOnce
               nfs:
                 path: /data/sonar
                 server: ***
             ---
             apiVersion: v1
             kind: PersistentVolumeClaim
             metadata:
               name: sonar-pvc
               namespace: default
             spec:
               selector:
                 matchLabels:
                   pv: sonar-pv
               accessModes:
                 - ReadWriteOnce
               resources:
                 requests:
                   storage: 50G
    
  3. 编写svc。

         apiVersion: v1
         kind: Service
         metadata:
           name: sonar
           namespace: default
         spec:
           type: NodePort
           ports:
             - name: sonar-http
               port: 9000
               nodePort: 9000
           selector:
             app: sonarqube
    
  4. 启动服务。

         kubectl create -f .
         kubectl get pod  -n 
    

可通过一下命令查看对应的pod是否成功起来,如果出现问题,可以通过查看pod的状态,log信息等进行排查。

PS: 如果你的数据库也在集群里,又碰巧不在同一个namespace里面,那么可以通过serviceName.namespace的方式进行访问。如果在同一个namespace里面直接通过服务名字访问即可。查看该namespace里面的服务方法:kubectl get svc -n

你可能感兴趣的:(Sonarqube in K8s)