在vCenter上运行Kubernetes

8
因为Kubernetes认为默认的Docker网络存在缺陷,所以它具有相当新颖的网络模型。虽然我仍在努力理解:(1)它认为实际缺陷是什么,以及(2)Kubernetes的一般解决方案是什么,但现在我已经到了想要实施解决方案并可能会更好地理解的地步。
尽管Kubernetes的其余文档非常成熟和写得很好,但配置网络的说明很少,基本上不连贯,并且涉及许多不同的文章,而不是位于一个特定的位置。
我希望之前(从头开始)设置过Kubernetes集群的人可以帮助我了解基本程序。我对在GCE或AWS上运行不感兴趣,目前也不想使用任何覆盖网络,如flannel。
我的基本理解是:
1. 为所有pod划分一个/16子网。这将限制您最多可拥有65K个pod,这应该对大多数正常应用程序来说足够了。此子网中的所有IP地址都必须是“公共”的,而不是在传统私有(类别)范围内。 2. 在某个地方创建一个cbr0桥并确保其持久(但在哪台机器上?) 3. 删除/禁用Docker安装的MASQUERADE规则。 4. 以某种方式配置iptables路由(同样,在哪里?),以便Kubernetes创建的每个pod都接收其中一个公共IP地址。 5. 需要进行其他设置,以利用负载平衡服务和动态DNS。 6. 为1个主节点和4个从节点提供5个VM 7. 在所有5个VM上安装/配置Docker 8. 在主节点上安装/配置kubectl、controller-manager、apiserver和etcd,并将它们作为服务/守护程序运行 9. 在每个从节点上安装/配置kubelet和kube-proxy,并将它们作为服务/守护程序运行
这是我在两天的研究中收集到的最好的信息,但它们很可能是错误的(或误导的),顺序不正确,并且完全不完整。
我可以自由访问在本地vCenter集群中创建VM。如果需要更改VLAN/Switches等,则可以涉及基础设施。
对于一个中小型集群,我应该设置多少个VM,并为什么?我需要对上面模糊的指令做出哪些确切的更正,以使网络完全配置?
我擅长安装/配置所有二进制文件。只是对设置的网络部分完全无从下手。
2个回答

3
对于kubernetes网络的一般介绍,我觉得这个网址很有帮助:http://www.slideshare.net/enakai/architecture-overview-kubernetes-with-red-hat-enterprise-linux-71
对于你提到的第一点和第二点:我认为它们在https://github.com/kubernetes/kubernetes/blob/master/docs/admin/networking.md#docker-model 中描述得非常好。从我的经验来看:Docker NAT模式的方法有什么问题?有时您需要在软件中配置所有节点的所有端点(172.168.10.1:8080、172.168.10.2:8080等),而在kubernetes中,您可以简单地将pod的IP配置到彼此的pod中。Docker使用NAT间接使其变得更加复杂。请参见为Kubernetes设置网络以获取一个不错的答案。
关于你提到的其他要点: 1. 所有子网中的所有IP必须是“公共”IP,而不是某些传统私有(类别化)范围内的IP。
kubernetes的“内部网络”通常使用私有IP,参见上面的幻灯片,以10.x.x.x为例。我想混淆可能来自于一些kubernetes文本将“公共”指为“节点外可见”,但它们并不意味着“互联网公共IP地址范围”。

感谢@Stefan Vailant (+1),我很感激您提供的链接和解释。然而,我认为您忽略了我问题的主要焦点,即上面加粗的句子:“*我应该为Kubernetes设置多少个VM...*”。问题(和奖励!)的主要焦点是为在vCenter上设置Kubernetes编写一组具体步骤。有什么想法吗? - smeeb
嗨,smeeb,我同意你的评论。抱歉,我没有什么想法,我主要是想开始讨论,因为你的问题已经两天没有得到回答了。 - Stefan Vaillant

0

对于任何对此感兴趣的人,这是我的当前计划。

我找到了kube-up.sh脚本,它会在您的AWS帐户上安装一个类似生产环境的Kubernetes集群。基本上它会创建1个Kubernetes主节点EC2实例和4个从节点实例。

在主节点上安装etcd、apiserver、controller manager和调度程序。在从节点上安装kubelet和kube-proxy。它还为从节点创建了自动缩放组(很好),并为您在AWS上创建了一系列安全和网络相关的东西。如果运行脚本时无法创建AWS S3存储桶,请手动创建完全相同名称的存储桶,然后重新运行脚本。

当脚本完成时,您将拥有已准备好进行近乎生产级别使用的Kubernetes集群(我一直说“近乎”和“类生产环境”,因为我对Kubernetes太新,不知道实际构成真正生产化集群的标准是什么)。您需要安装并配置具有对AWS帐户具有完全管理员访问权限的用户的AWS CLI(它会创建IAM角色等)。

我的计划是:

  1. 熟悉在AWS上使用Kubernetes
  2. 不断在Slack上追问Kubernetes团队,以帮助我了解Kubernetes的内部工作原理
  3. 反向工程kube-up.sh脚本,以便我可以在本地(vCenter)上运行Kubernetes
  4. 写一篇关于这个过程的博客
  5. 更新此答案并附上博客链接。

给我一些时间,我会跟进的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接