我有一个运行应用程序的pod / service,它将etcd用作同步系统和数据存储区。我想在pod中运行etcd,这样所有的副本就形成了一个连贯的集群。换句话说,副本#1中的应用程序可以写入" foo"到localhost:4001/v2/keys/my_key
,然后副本#2可以读localhost:4001/v2/keys/my_key
并获得" foo"结果。
目前尚不清楚如何做到这一点,因为pod复制品不能单独寻址。理论上我可以创建一个" etcd"服务公开群集端口,但任何请求都会循环到所有副本,因此各个etcd节点将无法找到彼此。
我是否以正确的方式解决了这个问题?
答案 0 :(得分: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 :(得分:1)
这里有一个三节点etcd集群的一个很好的例子:https://github.com/coreos/etcd/tree/master/hack/kubernetes-deploy
他们为每个副本使用单独的rc和服务作为解决方法,直到添加名义服务为止。
答案 2 :(得分:0)
我将您的问题添加到kubernetes/kubernetes#5017
如果有人知道答案,他们希望将其发布在那里。
我认为它可能需要“名义服务”功能(kubernetes/kubernetes#260)尚未实现,但我不确定。