如何在Pod副本中运行一个etcd集群?

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

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

我以正确的方式处理这个问题吗?


您可以使用运算符(来自extensions/v1beta1 )和quay.io/coreos/etcd-operator映像在kubernetes上部署etcd。

一个集群大小为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"

请注意这个项目的测试版状态 。 但是,根据维护人员,操作员现在已经很稳定 。 我已经成功部署了上面的配置,但是我没有在生产环境中运行这些配置。

操作员代码在github上可用。 你可以在那里找到更多的文档。


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

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


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

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

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

链接地址: http://www.djcxy.com/p/29247.html

上一篇: How to run an etcd cluster among pod replicas?

下一篇: Debugging gf3/sandbox module