本文其实是接着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对应的宿主机上。
创建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