ArangoDB init container 在 minikube 上失败



我正在开发一个使用ArangoDB作为数据存储并部署在minikube上的NodeJS服务。我在 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,并且可以通过Web UI访问,以便对该位进行排序。

我想知道的:

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

  2. 什么可能导致我收到的错误?我在这里错过了一些基本的东西吗?

会很高兴得到任何帮助。

问题是,在初始化容器无法连接到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

最新更新