我有一个包含21个节点的Google容器引擎群集,特别是有一个pod我需要始终在具有静态IP地址的节点上运行(出于出站目的)。
Kubernetes支持DaemonSets
通过为节点提供与DaemonSet中的nodeSelector匹配的标签,可以将pod部署到特定节点(或一组节点)。然后,您可以为标记节点所在的VM实例分配静态IP。但是,GKE似乎不支持DaemonSet类型。
$ kubectl create -f go-daemonset.json
error validating "go-daemonset.json": error validating data: the server could not find the requested resource; if you choose to ignore these errors, turn validation off with --validate=false
$ kubectl create -f go-daemonset.json --validate=false
unable to recognize "go-daemonset.json": no kind named "DaemonSet" is registered in versions ["" "v1"]
何时支持此功能以及解决方法是什么?
答案 0 :(得分:6)
如果您只想在单个节点上运行pod,则实际上并不想使用DaemonSet。 DaemonSet用于在每个节点上运行pod,而不是在单个特定节点上运行。
要在特定节点上运行pod,您可以在pod规范中使用nodeSelector,如Node Selection example in the docs中所述。
编辑:但对于那些想要在GKE中的每个节点上运行某些内容的人来说,我可以说两件事:
首先,将在计划于3月份发布的1.2版本的GKE中启用DaemonSet。在版本1.1的GKE中没有启用它,因为在1.1被删除时它被认为不够稳定。
其次,如果要在1.2出局之前在每个节点上运行某些内容,我们建议创建一个复制控制器,其复制数大于节点数,并在容器规范中要求hostPort
。 hostPort
将确保每个节点只运行一个来自RC的pod。
答案 1 :(得分:0)
DaemonSets仍然是alpha功能,而Google容器引擎仅支持生产Kubernetes功能。解决方法:构建您自己的Kubernetes集群(GCE,AWS,裸机......)并启用alpha / beta功能。