kubernetes - 有没有办法将两个具有相同应用程序的容器连接到Kubernetes上的同一数据库?

标签 kubernetes distributed-system

我需要运行一个应用程序的两个“实例”,但是它们应该访问同一个数据库,并且我需要在我的Kubernetes集群上运行它,以便为用户提供多可用区访问。

在Kubernetes上可以实现吗?我需要StatefulSet吗?而且,更重要的是,是否可以使用Kubernetes管理DB Pod?

最佳答案

I need to run two "instances" of an application, but they should access the same DB, and I need it to be run on my Kubernetes cluster, so I can provide multi-AZ access to users.



这实际上取决于实例的含义。推荐的方法是使用replicas: 2创建部署,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: my_app
  name: my_app
spec:
  replicas: 2
  selector:
    matchLabels:
      run: my_app
  template:
    metadata:
      labels:
        run: my_app
    spec:
      containers:
      - image: my_app:version
        name: my_app

这将确保您具有该应用程序的2个“实例”。

如果需要使用不同的配置运行2个“实例”,则可以选择进行两个不同的部署,并更改它们的名称和标签:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: my_app_1
  name: my_app_1
spec:
  replicas: 1
  selector:
    matchLabels:
      run: my_app_1
  template:
    metadata:
      labels:
        run: my_app_1
    spec:
      containers:
      - image: my_app:version
        name: my_app_1

将这两个实例连接到数据库非常容易,您只需将数据库连接字符串作为配置选项传递给数据库。它可以驻留在群集内部或外部。

Do I need StatefulSets?



仅当您的应用需要具有可预测的名称并以某种方式存储状态时,才需要有状态集。

And, more important, is it possible to manage the DB pod with Kubernetes?



完全有可能在集群内部运行数据库。这样做是否好取决于您。

传统上,数据库并不擅长于意外中断。使用Kubernetes,有可能随时移动数据库容器,这可能会导致您的应用程序或数据库出现问题。

您将需要使用persistent volume配置某种可重新连接的存储,但是即使如此,也无法保证您的数据库能够抵抗Kubernetes重启它并重启数据库。

有些数据库旨在在Kubernetes中更成功地运行,例如Vitess可能会解决您的问题。

关于kubernetes - 有没有办法将两个具有相同应用程序的容器连接到Kubernetes上的同一数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51500313/

相关文章:

microservices - 为什么两阶段提交不适合微服务架构?

java - 了解八卦协议(protocol)

authentication - 如何在 Elixir 中的进程之间建立经过身份验证的链接?

docker - Kubectl 在通过 minikube 创建部署时抛出 ImagePullBackOff 错误

docker - Kubernetes - 如何向所有小兵发送请求?

postgresql - Pgbouncer:如何在 kubernetes 集群中正确运行

kubernetes - 避免在服务中保留不必要的 NodePort

kubernetes - 命令以退出代码 7 终止

distributed-system - aerospike 读数的强一致性 - 为什么它们需要政权编号?

c++ - 分发应用程序服务器