8

我有一个运行应用程序的 pod/服务,该应用程序使用 etcd 作为同步系统和数据存储。我想在 pod 中运行 etcd,以便所有副本形成一个连贯的集群。换句话说,副本#1 中的应用程序可以将“foo”写入localhost:4001/v2/keys/my_key,然后副本#2 可以读取localhost:4001/v2/keys/my_key并获得“foo”作为结果。

目前尚不清楚如何做到这一点,因为 pod 副本不可单独寻址。理论上我可以创建一个暴露集群端口的“etcd”服务,但是任何请求都会循环到所有副本,因此各个 etcd 节点将无法找到彼此。

我是否以正确的方式解决这个问题?

4

3 回答 3

3

extensions/v1beta1您可以使用 Operator(来自)和镜像在 kubernetes 上部署 etcd quay.io/coreos/etcd-operator

集群大小为 3 的示例部署如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: etcd-operator
spec:
  replicas: 1
  template:
    metadata:
      name: etcd-operator
      labels:
        app: etcd
        component: operator
    spec:
      containers:
      - name: etcd-operator
        image: quay.io/coreos/etcd-operator:v0.3.0
        env:
        - name: MY_POD_NAMESPACE
          valueFrom: { fieldRef: { fieldPath: metadata.namespace } }
        - name: MY_POD_NAME
          valueFrom: { fieldRef: { fieldPath: metadata.name } }

---

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: etcd-cluster
  labels:
    app: etcd
    component: cluster
spec:
  size: 3
  version: "3.1.8"

请注意此项目的beta 状态。然而,据维护人员称,运营商现在很稳定。我已经成功部署了上面的配置,但我没有在生产中运行任何这些。

操作员代码可在 github 上找到。您可以在那里找到其他文档。

于 2017-06-08T09:28:28.617 回答
1

这里有一个非常好的三节点 etcd 集群示例:https ://github.com/coreos/etcd/tree/master/hack/kubernetes-deploy

他们为每个副本使用单独的 rc 和服务作为解决方法,直到添加了名义服务。

于 2016-02-18T01:58:26.113 回答
0

我将您的问题添加到kubernetes/kubernetes#5017

如果有人知道答案,他们希望将其发布在那里。

我认为它可能需要尚未实现的“名义服务”功能(kubernetes/kubernetes#260),但我不确定。

于 2015-10-04T00:27:27.240 回答