Kubernetes 如何使用init容器检查MySQL是否已准备好连接?

Kubernetes 如何使用init容器检查MySQL是否已准备好连接?,kubernetes,sh,Kubernetes,Sh,朋友们,我在这里学习并尝试实现一个init容器,它检查MySQL是否准备好连接。我有一个运行MySQL的豆荚,另一个豆荚上有一个应用程序,当MySQL豆荚准备好时,它将连接到MySQL豆荚 到目前为止没有成功。我得到的错误如下:sh:mysql:notfound。我就是这样尝试的: initContainers: - name: {{ .Values.initContainers.name }} image: {{ .Values.initContainers.image }} comm

朋友们,我在这里学习并尝试实现一个init容器,它检查MySQL是否准备好连接。我有一个运行MySQL的豆荚,另一个豆荚上有一个应用程序,当MySQL豆荚准备好时,它将连接到MySQL豆荚

到目前为止没有成功。我得到的错误如下:
sh:mysql:notfound
。我就是这样尝试的:

initContainers:
- name: {{ .Values.initContainers.name }}
  image: {{ .Values.initContainers.image }}
  command:
  - "sh"
  - "-c"
  - "until mysql --host=mysql.default.svc.cluster.local --user={MYSQL_USER} 
  --password={MYSQL_PASSWORD} --execute=\"SELECT 1;\"; do echo waiting for mysql; sleep 2; done;" 

你知道我该怎么做吗?

确保你已经在init容器中安装了mysql。似乎您还没有在init容器中安装mysql。当您尝试从另一个容器(而不是mysql)作为客户端进行连接时。您还需要在init容器中安装mysql。在构建init容器的docker文件时,可以使用mysql映像,也可以只在容器中安装mysql。

确保在init容器中安装了mysql。似乎您还没有在init容器中安装mysql。当您尝试从另一个容器(而不是mysql)作为客户端进行连接时。您还需要在init容器中安装mysql。当您构建init容器的docker文件时,您可以使用mysql映像,也可以只在容器中安装mysql;甚至删除您现在拥有的
initContainers:

假设您的应用程序在数据库准备就绪之前启动。它尝试连接、失败并退出。Kubernetes注意到了这一点,因此它将尝试再次启动应用程序;如果重复失败,它将开始在重试之间逐渐等待更长的时间(您将看到CrashLoopBackOff状态)。最终,集群将等待足够长的时间,以便数据库准备就绪,下一次重试将成功


请注意,如果数据库在应用程序已经运行后重新启动,则可能会发生同样的情况;“启动时”不需要是特例。

绝对不做任何事情;甚至删除您现在拥有的
initContainers:

假设您的应用程序在数据库准备就绪之前启动。它尝试连接、失败并退出。Kubernetes注意到了这一点,因此它将尝试再次启动应用程序;如果重复失败,它将开始在重试之间逐渐等待更长的时间(您将看到CrashLoopBackOff状态)。最终,集群将等待足够长的时间,以便数据库准备就绪,下一次重试将成功


请注意,如果数据库在应用程序已经运行后重新启动,则可能会发生同样的情况;“启动时”不需要是特例。

您在init容器中使用的是哪个映像?您在init容器中使用的是哪个映像?MySQL在另一个pod中。我希望init容器检查另一个pod中的数据库是否准备就绪,因为将在与此init容器相同的pod中创建的容器需要它。你能分享你的init容器的docker文件吗?MySQL在另一个pod中。我希望init容器检查另一个pod中的数据库是否准备就绪,因为将在与此init容器相同的pod中创建的容器需要它。这就是我的想法。你能分享你的init容器的docker文件吗?我不同意,init容器对于更快的调试非常有用,因为它会很早就失败,并且错误信息容易理解。并非所有应用程序都是通过检查数据库的状态启动的。OP发布的命令并不能很好地检查这个答案是否解决了这个问题。我不同意,init container对于更快的调试非常有用,因为它会很早失败,并且带有易于理解的错误消息。并非所有应用程序都是通过检查数据库的状态启动的。OP发布的命令不能很好地检查ThoughtThis答案是否没有解决问题。