I want to publish sonarqube with kubernetes. I did successfully with official packages. But i want to use some plugins old version and some custom plugins. In local with docker-compose files, i created a fly-away container that fills the plugins directory(/opt/sonarqube/extensions/plugins) with plugins. And use that volume with sonarqube container. As a conclusion : Sonarqube extensions volume directory is created (or filled) from different container(do the job and die).
I want to use the same path with kubernetes but couldn't do that. My flyaway container didn't fill the path.
My kubernetes deployments files:
1-) sonar-pvc-extensions.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: claim-sonar-extensions
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
2-) sonarqube-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube
spec:
replicas: 1
selector:
matchLabels:
name: sonarqube
template:
metadata:
name: sonarqube
labels:
name: sonarqube
spec:
containers:
- image: sonarqube:7.9.1-community
name: sonarqube
env:
- name: SONARQUBE_JDBC_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-pwd
key: password
- name: SONARQUBE_JDBC_URL
value: jdbc:postgresql://sonar-postgres:5432/sonar
ports:
- containerPort: 9000
name: sonarqube
volumeMounts:
- name: data-sonar-extensions
mountPath: /opt/sonarqube/extensions/plugins
resources:
requests:
memory: 2000Mi
limits:
memory: 2000Mi
volumes:
- name: data-sonar-extensions
persistentVolumeClaim:
claimName: claim-sonar-extensions
initContainers:
- name: sysctl
image: busybox
imagePullPolicy: IfNotPresent
command: ['sysctl', '-w', 'vm.max_map_count=262144']
securityContext:
privileged: true
3-)Sample plugins Dockerfile
FROM alpine:3.4
RUN apk --no-cache add --repository http://dl-cdn.alpinelinux.org/alpine/edge/community wget ca-certificates
ENV PLUGINS_DIR /opt/sonarqube/extensions/plugins
WORKDIR $PLUGINS_DIR
RUN wget https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.1.0-SNAPSHOT/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar
RUN wget https://binaries.sonarsource.com/Distribution/sonar-java-plugin/sonar-java-plugin-6.3.0.21585.jar
RUN wget https://github.com/SonarSource/sonar-php/releases/download/3.4.0.5461/sonar-php-plugin-3.4.0.5461.jar
ENV JAVASCRIPT_VERSION 2.20.0.4207
VOLUME $PLUGINS_DIR
CMD ls -asl $PLUGINS_DIR
I tried that approach with sonar-plugin-deployment.yml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube-plugin
spec:
replicas: 1
selector:
matchLabels:
name: sonarqube-plugin
template:
metadata:
name: sonarqube-plugin
labels:
name: sonarqube-plugin
spec:
containers:
- image: my-kubernetes-registry/plugins
name: sonarqube-plugins
volumeMounts:
# This name must match the volumes.name below.
- name: data-sonar-extensions
mountPath: /opt/sonarqube/extensions/plugins
volumes:
- name: data-sonar-extensions
persistentVolumeClaim:
claimName: claim-sonar-extensions
But didn't successed. And break something. This time my plugins directory became empty:
sonarqube@sonarqube-85b98d9845-l2sql:/opt/sonarqube/extensions/plugins$ ls -al
total 24
drwxr-xr-x 3 root root 4096 May 30 16:19 .
drwxr-xr-x 1 sonarqube sonarqube 4096 May 30 16:39 ..
drwx------ 2 root root 16384 May 30 16:19 lost+found
I am not using persistent volume. PVC is looking to stroge class. So i cant use accessModes as ReadWriteMany.
As a results: I want to change a stroge path with a fly-away container and use that path inside an app.
I am noob to kubernetes if you suggest a different approach i will be apreciated.