繁体   English   中英

Kubernetes 中副本集的单个工作 pod

[英]Single working pod from replica set in Kubernetes

我们有一项定期查询数据库记录的服务。 对于 HA,我们希望拥有副本。 但是对于所有副本,所有这些都会查询数据库记录。

以下Deployment清单用于部署。 但在此配置中,一个 pod 正在接收流量。 但是它们都查询数据库并执行操作。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db-queries 
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: db-queries 
  template:
    metadata:
      labels:
        app: db-queries
        version: v1 
    spec:
      serviceAccountName: leader-election-test
      containers:
      - name: db-queries
        image: our-registry:5000/db-queries
        imagePullPolicy: Always
        ports:
        - containerPort: 8090
        volumeMounts:
          - readOnly: true
            mountPath: /path/to/config
            name: config-files
      - name: mako
        image: gcr.io/google_containers/leader-elector:0.4
        imagePullPolicy: Always
        args:
        -  --election=sample

此处mako容器显示只有一个 pod 担任持有锁的领导者。 我们只需要一个 pod 来查询数据库记录,而另外两个保持理想状态。

可用性

在 Kubernetes 中可以实现不同级别的可用性,这完全取决于您的要求。

您的用例似乎是当时只有一个副本应该在数据库中处于活动状态。

单副本

即使您在 Kubernetes 部署或 StatefulSet 中使用单个副本,它也会定期使用您声明的 LivenessProbe 和 ReadinessProbe 进行探测。

如果您的应用在 LivenessProbe 上没有响应,则会立即创建一个新的 pod。

使用Leader选举的多个副本

由于一次只有一个副本应该与您的数据库建立活动连接,因此领导者选举解决方案是可行的。

当前没有锁的被动副本应该定期尝试获取锁 - 以便它们在旧的活动 pod 死亡的情况下变得活跃。 如何做到这一点取决于实现和配置。

如果您希望只有多重副本解决方案中的活动 Pod 应该查询数据库,应用程序必须首先检查它是否有锁(例如是活动实例)。

结论

单副本部署和使用领导选举多副本部署没有太大区别。 故障转移所需的时间可能存在细微差别。

对于单副本解决方案,您可能会考虑使用 StatefulSet 而不是 Deployment,因为当节点变得无法访问时会出现不同的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM