2015-09-21 49 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

相關問題