首页 文章

如何在pod副本中运行etcd集群?

提问于
浏览
7

我有一个运行应用程序的pod / service,它将etcd作为同步系统和数据存储区使用 . 我想在pod中运行etcd,这样所有的副本就形成了一个连贯的集群 . 换句话说,副本#1中的应用程序可以将"foo"写入 localhost:4001/v2/keys/my_key ,然后副本#2可以读取 localhost:4001/v2/keys/my_key 并获得"foo" .

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

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

3 回答

  • 0

    您可以使用运算符(来自 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"
    

    请注意该项目的 beta status . 但是根据维护者的说法,运营商是 now stable . 我已成功部署了上面的配置,但我没有在 生产环境 中运行任何此类配置 .

    操作员代码可用on github . 您可以在那里找到其他文档 .

  • 1

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

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

  • 2

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

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

    我认为它可能需要"nominal services"功能(kubernetes/kubernetes#260)尚未实现,但我不确定 .

相关问题