本文来分享下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
- 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。
-
编写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
-
编写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
-
编写svc。
apiVersion: v1 kind: Service metadata: name: sonar namespace: default spec: type: NodePort ports: - name: sonar-http port: 9000 nodePort: 9000 selector: app: sonarqube
-
启动服务。
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>
网友评论