kubernetes - 我们如何使用 Kubernetes 创建服务依赖项
问题描述
我有 2 项服务。一个包含 2 个用于 Web 应用程序的 pod 副本,该应用程序依赖于另一个具有 MySQL 容器的 pod(2 个副本)的后端服务。
Web 应用程序使用后端数据库服务设置的环境变量。我在同一个目录中拥有所有的 json。
有什么方法可以表达依赖关系,以便 kubectl 在启动 Web 应用程序服务之前始终创建(并运行)后端 pod 和服务?我使用 kubedeam 创建集群。
解决方案
我可以提出两种解决方案:
首先,将一个 init 容器附加到等待 MySQL 启动并运行的 Web 服务器。部署将是这样的:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
replicas: 2
template:
metadata:
labels:
app: web
spec:
initContainers:
- name: init-wait
image: alpine
command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]
containers:
- name: web
image: web-server
ports:
- containerPort: 80
protocol: TCP
它使用 netcat 每 3 秒尝试在端口 3306 上启动与 mysql 服务的 TCP 连接。一旦实现连接,init-container 结束,web 服务器正常启动。
第二个选项是使用Mirantis AppController。它允许您根据需要在服务器和数据库部署之间创建依赖对象。检查他们的 repo 以获得完整的文档。
推荐阅读
- c# - 我们可以从构造函数中调用异步方法吗?
- c# - 为什么我不能将 dateSentBefore 和 datesentAfter 参数的值作为 c# 中的变量传递?
- docker - VSCode:无法使用远程开发扩展连接到 Docker 容器
- excel - 查找函数返回错误的单元格值
- php - Webgility Unify Order API 错误 - 尝试取消引用空对象引用
- c# - 使用 moq 模拟对 IQueryable 的调用
- csv - Coldfusion CSV 到电子表格
- dotnet-httpclient - 是否可以使用 Audit.Net 和 httpClient 来捕获外部请求
- node.js - chrome 中的 ES6 模块:ERR_ABORTED 404(未找到)
- php - 如何在 PHP 中使用 Mongo 查询?