Kubernetes 在minikube上ArangoDB init容器失败

Kubernetes 在minikube上ArangoDB init容器失败,kubernetes,arangodb,minikube,Kubernetes,Arangodb,Minikube,我正在开发一个NodeJS服务,它使用ArangoDB作为数据存储,并部署在minikube上。我在kubernetes部署清单中使用initContainer指令,以确保在应用程序尝试连接之前,数据库已准备好接收连接。kubernetes YAML的相关部分如下所示: apiVersion:apps/v1 种类:部署 元数据: 姓名:carservice 模板: 规格: 初始化容器: -名称:init carservice 图片:arangodb/arangodb:3.5.1 命令:['sh'

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

apiVersion:apps/v1 种类:部署 元数据: 姓名:carservice 模板: 规格: 初始化容器: -名称:init carservice 图片:arangodb/arangodb:3.5.1 命令:['sh','c','arangosh--server.endpoint=“https://${CARSERVICE\u CARSERVICEDB\u SERVICE\u HOST}:${CARSERVICE\u CARSERVICEDB\u SERVICE\u PORT}”--server.password=“”;do echo等待数据库启动;睡眠2;完成;'] 容器: -姓名:carservice 图片:carservice imagePullPolicy:如果不存在 挑战在于有时initContainer能够等待数据库连接成功建立。其他大多数情况下,它会随机失败,并出现以下错误:

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

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

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

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

我必须补充的是,实际的数据库(https://${CARSERVICE\u CARSERVICEDB\u SERVICE\u HOST}:${CARSERVICE\u CARSERVICEDB\u SERVICE\u PORT})已使用kube arangodb成功部署到minikube,并可通过web UI访问,因此位已排序

我想知道的是:

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

  • 是什么导致了我的错误?我是不是错过了一些基本的东西


  • 非常乐意提供帮助。

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

    kubernetes部署YAML的相应部分如下所示:

    apiVersion:apps/v1 种类:部署 元数据: 姓名:carservice 模板: 规格: 初始化容器: -名称:初始化数据库服务 图片:busybox:1.28 命令:['sh','-c',until nslookup carservice carservicedb;do echo等待数据库的kubernetes服务资源;sleep 2;done;'] -名称:init carservice 图片:arangodb/arangodb:3.5.1 命令:['sh','c','arangosh--server.endpoint=“https://${CARSERVICE\u CARSERVICEDB\u SERVICE\u HOST}:${CARSERVICE\u CARSERVICEDB\u SERVICE\u PORT}”--server.password=“”;do echo等待数据库启动;睡眠2;完成;'] 容器: -姓名:carservice 图片:carservice imagePullPolicy:如果不存在
    似乎无法读取变量CARSERVICE\u CARSERVICEDB\u SERVICE\u主机和CARSERVICE\u CARSERVICEDB\u SERVICE\u端口,因此您的URL仅为http://。看看环境变量你是对的@Ankidemon。对于init容器成功启动的情况,正确设置了env变量。我不明白为什么会这样。什么会导致不设置环境变量?ArangoDB pod正确设置了环境变量。我认为kubernetes提供的内部DNS在这里很方便。我唯一担心的是,当它最终在initContainer指令的shell命令中被替换时,它将显示为字符串,而不是相应的IP。有什么建议吗?