Minikube上的ArangoDB初始化容器失败

goucqfw6  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(158)

我正在开发一个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有时候能够等待数据库连接成功建立,而在其他大多数情况下,它会随机失败,并显示以下错误:

ERROR捕获到异常:端点规范无效:网址://

出于无奈,我将方案更改为http,但它失败了,并出现相应的错误:

**ERROR捕获到异常:端点规范无效:网址:

我对这些错误的理解是,数据库无法识别这些示例中的https和http,这很奇怪。在initContainer位成功工作的少数几次中,我在kubernetes规范的相关命令中使用了https。
我必须补充的是,实际的数据库(***https://${CARSERVICE_CARSERVICEDB_SERVICE_HOST}:${CARSERVICE_CARSERVICEDB_SERVICE_PORT}***)已经使用kube-arangodb成功地部署到minikube,并且可以通过Web UI访问,因此该位已经排序。
我想知道的是:
1.这是使用initContainer指令等待ArangoDB连接的推荐方法吗?还是必须使用完全不同的方法?
1.是什么导致了我的错误呢?我是不是遗漏了一些基本的东西?
我很乐意帮忙。

yfwxisqw

yfwxisqw1#

问题是,在init容器连接到ArangoDB失败的时候,env变量没有正确设置。因此,我在此之前添加了另一个init容器(因为init容器是按顺序执行的),它将等待ArangoDB部署的相应kubernetes“服务”资源出现。这样,当第二个init容器运行时,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

相关问题