Sonarqube in K8s

作者: jaymz明 | 来源:发表于2019-03-29 15:05 被阅读6次

    本文来分享下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 <pod's name> -n <namespace>
      

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

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

    相关文章

      网友评论

        本文标题:Sonarqube in K8s

        本文链接:https://www.haomeiwen.com/subject/ztilbqtx.html