首页 > 解决方案 > 我们如何使用 Kubernetes 创建服务依赖项

问题描述

我有 2 项服务。一个包含 2 个用于 Web 应用程序的 pod 副本,该应用程序依赖于另一个具有 MySQL 容器的 pod(2 个副本)的后端服务。

Web 应用程序使用后端数据库服务设置的环境变量。我在同一个目录中拥有所有的 json。

有什么方法可以表达依赖关系,以便 kubectl 在启动 Web 应用程序服务之前始终创建(并运行)后端 pod 和服务?我使用 kubedeam 创建集群。

标签: kuberneteskubectlkubernetes-helm

解决方案


我可以提出两种解决方案:

首先,将一个 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 以获得完整的文档。


推荐阅读