Я начал создавать экземпляр MongoDB, работающий в кластере Kubernetes. Для этого я создал класс хранилища, утверждение тома постоянства и том постоянства и создал службу для подключения других модулей к этой базе данных.
Это yaml-файл, который я использую для развертывания:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: mongo-env
name: mongo-env
data:
MONGODB_DBNAME: mymongodb
MONGODB_PASSWORD: password
MONGODB_ROLE: readWrite
MONGODB_ROOT_PASSWORD: password
MONGODB_ROOT_ROLE: root
MONGODB_ROOT_USERNAME: dbadmin
MONGODB_USERNAME: webrole
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /tmp/data/db
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-storage
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: mongo
name: mongo
spec:
serviceName: mongo
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- image: mongo
name: mongo
ports:
- containerPort: 27017
command:
- mongod
- "--auth"
resources: {}
volumeMounts:
- name: mongo-volume
mountPath: /data/db
env:
- name: MONGODB_DBNAME
valueFrom:
configMapKeyRef:
key: MONGODB_DBNAME
name: mongo-env
- name: MONGODB_PASSWORD
valueFrom:
configMapKeyRef:
key: MONGODB_PASSWORD
name: mongo-env
- name: MONGODB_ROLE
valueFrom:
configMapKeyRef:
key: MONGODB_ROLE
name: mongo-env
- name: MONGODB_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
key: MONGODB_ROOT_PASSWORD
name: mongo-env
- name: MONGODB_ROOT_ROLE
valueFrom:
configMapKeyRef:
key: MONGODB_ROOT_ROLE
name: mongo-env
- name: MONGODB_ROOT_USERNAME
valueFrom:
configMapKeyRef:
key: MONGODB_ROOT_USERNAME
name: mongo-env
- name: MONGODB_USERNAME
valueFrom:
configMapKeyRef:
key: MONGODB_USERNAME
name: mongo-env
volumes:
- name: mongo-volume
persistentVolumeClaim:
claimName: mongo-pvc
Эта база данных позже доступна из модуля, в котором работает приложение java. Итак, приложение java (основанное на фреймворке Quarkus) также работает в модуле и должно подключаться к модулю, в котором работает база данных.
Я следил за этим руководством: https://github.com/DanWahlin/DockerAndKubernetesCourseCode/tree/master/samples/volumes/pv-pvc-sc-cm и изменил мою строку подключения, как описано здесь: # https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/
Я использую строку подключения:
mongodb://mongo-0.mongo:27017/mymongodb\_?
, как описано здесь : https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/
Доступны следующие услуги:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20d
mongo ClusterIP 10.107.252.254 <none> 27017/TCP 28m
quarkus-demo LoadBalancer 10.97.81.214 localhost 85:31571/TCP 22m
mon go - это сервис для подключения к базе данных.
Модули, которые работают в моем кластере (это docker кластер кубернетов рабочего стола):
NAME READY STATUS RESTARTS AGE
mongo-0 1/1 Running 0 30m
quarkus-demo-d94546556-cn4kk 0/1 CrashLoopBackOff 11 23m
quarkus-demo-d94546556-j84sr 0/1 CrashLoopBackOff 11 23m
Модули приложения вылетают из-за неправильного подключения к базе данных:
2020-06-17 12:44:25,027 INFO [org.mon.dri.cluster] (vert.x-worker-thread-1) Cluster created with settings {hosts=[mongo-0.mongo:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2020-06-17 12:44:25,054 INFO [org.mon.dri.cluster] (cluster-ClusterId{value='5eea1029077d6a3e0f6934f7', description='null'}-mongo-0.mongo:27017) Exception in monitor thread while connecting to server mongo-0.mongo:27017: com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70)
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
Я уже пробовал несколько возможностей, но ни одна из них не сработала. Буду признателен за любую помощь в этом. Спасибо!