2015-09-21 22 views
7

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

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

我以正确的方式接近这个问题吗?

回答

2

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

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

运营商代码可用on github。你可以在那里找到更多的文档。

+1

您正在使用'apiVersion:etcd.coreos.com/v1beta1'和'kind:Cluster',而etcd-operator示例使用'apiVersion:etcd.database.coreos.com/v1beta2'和'kind:EtcdCluster'。有什么区别? https://github.com/coreos/etcd-operator/blob/master/example/example-etcd-cluster.yaml – akauppi

相关问题