Neo4j: запуск в Kubernetes

Автор: | 05/08/2020
 

В предыдущем посте – Neo4j: graph database — запуск в Docker и примеры работы с Cypher QL – мы запустили Neo4j в Docker, и познакомлись с его архитекторой и языком запросов CQL.

Следующая задача – запустить сервер баз данных в Kubernetes.

Используем Neo4j Community Edition, запускать будем в виде одного инстанса (т.к. поддержка кластеризации только в Enterprise, за который просят 190.000 долларов/год).

Используем Helm-чарт neo4j-community.

Добавляем helm-репозиторий:

[simterm]

$ helm repo add equinor-charts https://equinor.github.io/helm-charts/charts/
"equinor-charts" has been added to your repositories

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "equinor-charts" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!

[/simterm]

Деплоим в namespace, в данном примере это eks-dev-1-neo4j.

Через --set принимаем лицензию, задаём пароль администратора, указываем StorageClass для PersistentVolume:

[simterm]

$ helm upgrade --install --namespace eks-dev-1-neo4j --create-namespace neo4j-community equinor-charts/neo4j-community --set acceptLicenseAgreement=yes --set neo4jPassword=mySecretPassword --set persistentVolume.storageClass=gp2
Release "neo4j-community" does not exist. Installing it now.
NAME: neo4j-community
LAST DEPLOYED: Fri Jul 31 15:27:38 2020
NAMESPACE: eks-dev-1-neo4j
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
We'll need to wait a few seconds for Neo4j to start.

We need to see this line in our pod log:

> Remote interface available at Remote interface available at http://localhost:7474/

We can see the content of the logs by running the following command:

kubectl logs -l "app=neo4j-community"

[/simterm]

Проверяем поды:

[simterm]

$ kk -n eks-dev-1-neo4j get pod
NAME                                READY   STATUS    RESTARTS   AGE
neo4j-community-neo4j-community-0   1/1     Running   0          29s

[/simterm]

Проверяем его PersistentVolumeClaim:

[simterm]

$ kk -n eks-dev-1-neo4j get pvc
NAME                                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
datadir-neo4j-community-neo4j-community-0   Bound    pvc-29c5d6a0-34b7-4b5c-94d2-778139790a2d   10Gi       RWO            gp2            15m

[/simterm]

Проверям соответствующий PersistentVolume – обратите внимание, что мы создавали PVC динамически, и его Reclaim policy задана в Delete:

[simterm]

$ kk -n eks-dev-1-neo4j get pv pvc-29c5d6a0-34b7-4b5c-94d2-778139790a2d
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                       STORAGECLASS   REASON   AGE
pvc-29c5d6a0-34b7-4b5c-94d2-778139790a2d   10Gi       RWO            Delete           Bound    eks-dev-1-neo4j/datadir-neo4j-community-neo4j-community-0   gp2                     16m

[/simterm]

Включаем переадресацию портов, что бы получить доступ к Neo4j с рабочей машины:

[simterm]

$ kubectl -n eks-dev-1-neo4j port-forward neo4j-community-neo4j-community-0 7474:7474
Forwarding from 127.0.0.1:7474 -> 7474
Forwarding from [::1]:7474 -> 7474

[/simterm]

Проверяем:

[simterm]

$ curl http://localhost:7474/db/data/
{
  "errors" : [ {
    "code" : "Neo.ClientError.Security.Unauthorized",
    "message" : "No authentication header supplied."
  } ]
}

[/simterm]

Сервер готов к работе.

Ссылки по теме