ArangoDB初始化容器在minikube上失败

问题描述 投票:0回答:1

我正在使用NodeJS服务,该服务使用ArangoDB作为数据存储,并部署在minikube上。我在kubernetes部署清单中使用了initContainer指令,以确保在应用程序尝试连接之前,数据库已准备好接收连接。 kubernetes YAML的相关部分如下所示:

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: carservice
  template:
    spec:
      initContainers:
        - name: init-carservice
          image: arangodb/arangodb:3.5.1
          command: ['sh', 'c', 'arangosh --server.endpoint="https://${CARSERVICE_CARSERVICEDB_SERVICE_HOST}:${CARSERVICE_CARSERVICEDB_SERVICE_PORT}" --server.password=""; do echo waiting for database to be up; sleep 2; done;']
      containers:
        - name: carservice
          image: carservice
          imagePullPolicy: IfNotPresent

挑战在于,有时initContainer能够等待数据库连接成功建立。其他大多数时间,它随机失败并显示以下错误:

错误捕获到异常:无效的端点规范:https://

出于绝望,我将方案更改为http,但失败并出现相应的错误:

错误捕获到异常:无效的端点规范:http://

我对这些错误的理解是,在这些实例中数据库无法识别https和http,这很奇怪。几次initContainer位成功运行后,我在kubernetes规范的相关命令中使用了https。

我必须补充说,实际的数据库(https:// $ {CARSERVICE_CARSERVICEDB_SERVICE_HOST}:$ {CARSERVICE_CARSERVICEDB_SERVICE_PORT})已使用kube-arangodb成功部署到minikube,并且可以通过网络进行访问UI,以便对该位进行排序。

我想知道的事情:

  1. 这是建议使用initContainer指令等待ArangoDB连接的方法,还是我必须使用完全不同的方法?

  2. 可能是什么导致我收到错误?我在这里缺少基本的东西吗?

很高兴获得任何帮助。

kubernetes arangodb minikube
1个回答
0
投票

问题是,在那些初始化容器无法连接到ArangoDB的情况下,env变量未正确设置。因此,在此之前,我添加了另一个init容器(因为init容器是按顺序执行的),它将等待ArangoDB部署中相应的kubernetes“服务”资源出现。这样,当第二个初始化容器运行时,env变量将可用。

kubernetes部署YAML的对应部分显示为:

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: carservice
  template:
    spec:
      initContainers:
        - name:init-db-service
          image: busybox:1.28
          command: ['sh', '-c', 'until nslookup carservice-carservicedb; do echo waiting for kubernetes service resource for db; sleep 2; done;']

        - name: init-carservice
          image: arangodb/arangodb:3.5.1
          command: ['sh', 'c', 'arangosh --server.endpoint="https://${CARSERVICE_CARSERVICEDB_SERVICE_HOST}:${CARSERVICE_CARSERVICEDB_SERVICE_PORT}" --server.password=""; do echo waiting for database to be up; sleep 2; done;']
      containers:
        - name: carservice
          image: carservice
          imagePullPolicy: IfNotPresent
© www.soinside.com 2019 - 2024. All rights reserved.