我想在kubernetes上部署kafka。
因为我将以高带宽从Internet到kafka进行流传输,所以我想使用主机端口并将主机“dnsName:hostPort”通告给zookeeper,以便所有流量都直接流向kafka代理(而不是使用nodeport和loadbalancer流量到达某个随机节点,该节点将其重定向,从而造成不必要的流量)。
我已经在亚马逊上设置了我的kubernetes集群。使用kubectl describe node ${nodeId}
,我可以获取节点的internalIp,externalIp,内部和外部Dns名称。
我想将externalDns名称传递给kafka代理,以便它可以将其用作播发主机。
如何将这些信息传递到容器?理想情况下,我可以从部署yaml中做到这一点,但我也欢迎其他解决方案。
最佳答案
How can I pass that information to the container? Ideally I could do this from the deployment yaml but I'm also open to other solutions.
我要尝试的第一件事是
envFrom: fieldRef:
,看看它是否会让您进入PodSpec
的status:
字段来获取nodeName
。我深深地了解这不是您询问的ExternalDnsName
,但是如果fieldRef
有效,它的键入可能会少很多,因此是一个不错的折衷。但是,请牢记“我也愿意接受其他解决方案”:不要忘记-除非另有说明-每个Pod都可以与kubernetes API交互,并且具有正确的RBAC权限,它可以请求您正在寻找的信息。您可以将其作为
command:
替代,在启动kafka代理之前进行设置工作,也可以在init container中进行设置,将外部地址写入文件系统的共享位(使用volume: emptyDir: {}
或类似文件),然后再进行其他操作胶水代码,将值(value)渗入您的kafka经纪人。我100%确信我前面提到的
envFrom: fieldRef:
构造可以获取Pod的metadata.name
和metadata.namespace
,这时Pod可以向kubernetes API索取自己的PodSpec
,从上述nodeName
字段中提取status:
,然后询问用于Node信息的kubernetes API,您将拥有kubernetes知道的有关该Node的所有信息。
关于amazon-web-services - kubernetes将主机dns名称获取到容器中以进行kafka通告主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404015/