Модуль приложения Sonarqube не подключается к модулю базы данных PostgreSQL при развертывании в Kubernetes
Я пытаюсь настроить SonarQube в кластере Kubernetes. Кластер сделан с помощью KubeADM в облаке AWS. У меня есть следующие файлы для установки.
- Файл развертывания приложения Sonarqube
- Файл секретов приложения Sonarqube
- Файл развертывания Sonarqube-PostgreSQL.
- Постоянный том Sonarqube-PostgreSQL и файл заявки на том
- Файл секретов Sonarqube-PostgreSQL.
Используя эти файлы YAML, я могу запустить приложение. Я использую NodePort в качестве типа службы для приложения SonarQube, и оно работает нормально. Модули приложений и БД работают нормально, и я даже могу войти в пользовательский интерфейс SonarQube, настроить свои проекты/данные и сделать все.
Однако проблема в том, что когда я выключаю серверы и возвращаю их снова через некоторое время или удаляю модуль приложения SonarQube, а когда на его месте появляется новый, все данные как бы теряются.
Я также вижу, что база данных PostgreSQL готова принимать соединения, однако модуль приложения ничего не предоставляет.
Похоже, что данные хранятся в самом модуле приложения, и когда с ним что-то происходит, все данные теряются. Итак, когда я удаляю модуль приложения и пытаюсь получить доступ к пользовательскому интерфейсу еще раз, я получаю вот что.
Буквально все данные сбрасываются.
Ниже приведены файлы YAML, которые я использовал:
sonarqube-app.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube
namespace: sonarqube
labels:
app: sonarqube
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube
template:
metadata:
labels:
app: sonarqube
spec:
containers:
- name: sonarqube
image: sonarqube:latest
imagePullPolicy: Always
ports:
- containerPort: 9000
env:
- name: POSTGRES_SERVICE_HOST
value: "10.107.194.222" # update this to reflect your IP
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-db-credentials
key: user
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-db-credentials
key: password
- name: POSTGRES_NAME
value: 'postgres'
- name: DATABASE_URL
value: jdbc:postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgresql:5432/$(POSTGRES_NAME)
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: sonarqube-secret-key
key: secret_key
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgresql-volume-mount
volumes:
- name: postgresql-volume-mount
persistentVolumeClaim:
claimName: postgres-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: sonarqube-service
namespace: sonarqube
labels:
app: sonarqube
spec:
ports:
- port: 9000
targetPort: 9000
protocol: TCP
nodePort: 31000
type: NodePort
selector:
app: sonarqube
postgres-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: sonarqube
labels:
app: postgres-db
spec:
replicas: 1
selector:
matchLabels:
app: postgres-db
strategy:
type: Recreate
template:
metadata:
labels:
app: postgres-db
tier: postgreSQL
spec:
containers:
- name: postgresql
image: postgres:10.3
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-db-credentials
key: user
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-db-credentials
key: password
- name: POSTGRES_NAME
value: 'postgres'
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgresql-volume-mount
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
volumes:
- name: postgresql-volume-mount
persistentVolumeClaim:
claimName: postgres-pv-claim
tolerations:
- key: "blue"
operator: "Equal"
value: "true"
effect: "NoSchedule"
---
apiVersion: v1
kind: Service
metadata:
name: postgresql
namespace: sonarqube
labels:
app: postgres-db
spec:
clusterIP: 10.107.194.222
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
protocol: TCP
selector:
app: postgres-db
tier: postgreSQL
pv-pvc.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
namespace: sonarqube
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 200M
accessModes:
- ReadWriteOnce
hostPath:
path: "/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: postgres-db
name: postgres-pv-claim
namespace: sonarqube
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100M
storageClassName: manual
Итак, как я могу подключить модуль приложения к модулю БД, а также использовать PVC и PV в качестве средства хранения данных?
Кто-нибудь знает, как это исправить?
1 ответ
Вы неправильно используете контейнер.
Развертывание sonarqube и postgres ссылается на один и тот же PVC, который не может работать. Это нужно только postgres, поскольку контейнер sonarqube поставляется только со встроенной базой данных H2 и должен использовать развертывание postgres.
Добавьте службу в развертывание postgres и используйте DNS-имя кластера в URL-адресе JDBC. Вот ссылка на postgres.
Соблюдайте документацию по запуску SonarQube в контейнере .
Переменные среды для подключения к БД должны быть:
-e SONAR_JDBC_URL=... \
-e SONAR_JDBC_USERNAME=... \
-e SONAR_JDBC_PASSWORD=...
Эти переменные нужны вам только в контейнере, подключающемся к postgres, то есть в контейнере sonarqube.