У меня база данных OrientDB настроена в распределенном режиме с Kubernetes. Я определил PersistentVolumeClaims в StatefulSet таким образом:
volumeClaimTemplates:
- metadata:
name: orientdb-databases
labels:
service: orientdb
type: pv-claim
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 40Gi
- metadata:
name: orientdb-backup
labels:
service: orientdb
type: pv-claim
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 20Gi
Когда я не определяю PersistentVolumes, они создаются с общим именем, и кластер работает как ожидалось. Однако, когда я определяю свои собственные модули PersistentVolumes, происходит сбой, и я получаю такие ошибки:
[org.xml.sax.SAXParseException; systemId: file:/orientdb/config/orientdb-server-config.xml; lineNumber: 89; columnNumber: 22; The processing instruction target matching "[xX][mM][lL]" is not allowed.]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<network>
<protocols>
<protocol implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" name="binary"/>
</protocols>
<listeners>
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="127.0.0.1"/>
</listeners>
</network>
<storages/>
<security>
<users/>
<resources/>
</security>
<isAfterFirstTime>false</isAfterFirstTime>
</orient-server>
Я проверил свой файл orient-server-config.xml и вижу причину такого поведения. Я создаю этот файл конфигурации с помощью скрипта bash:
</network>
<storages>
</storages>
<users>
</users>
<properties>
<entry value=\"1\" name=\"db.pool.min\"/>
<entry value=\"50\" name=\"db.pool.max\"/>
<entry value=\"true\" name=\"profiler.enabled\"/>
</properties>
</orient-server>
И вот как это выглядит на стручке:
<storages/>
<users>
<user resources="*" password="{password}" name="root"/>
<user resources="connect,server.listDatabases,server.dblist" password="{password}" name="guest"/>
</users>
<properties>
<entry value="1" name="db.pool.min"/>
<entry value="50" name="db.pool.max"/>
<entry value="true" name="profiler.enabled"/>
</properties>
<isAfterFirstTime>true</isAfterFirstTime>
</orient-server>
Как я могу исправить эту ошибку?
Вот как я определил PersistentVolumes. Поскольку у меня есть 3 узла и 2 тома для каждого из них, имя тома и имя каталога пути к хосту изменяется только на число (от 1 до 6):
apiVersion: v1
kind: PersistentVolume
metadata:
name: "pv-db-1"
labels:
service: orientdb
type: local
spec:
storageClassName: standard
capacity:
storage: "40Gi"
accessModes:
- "ReadWriteOnce"
hostPath:
path: /orientdb-volumes/databases-1
persistentVolumeReclaimPolicy: Delete
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: "pv-backup-1"
labels:
service: orientdb
type: local
spec:
storageClassName: standard
capacity:
storage: "20Gi"
accessModes:
- "ReadWriteOnce"
hostPath:
path: /orientdb-volumes/databases-2
persistentVolumeReclaimPolicy: Delete