Open typhoonzero opened 8 years ago
/etc/network/interfaces
文件里?那么如果DHCP忘记了这个IP曾经分配出去过,接下来分给了一台新机器,是不是就导致机群里有两台机器IP冲突了?@typhoonzero @wangkuiyi DHCP的ip绑定mac是通过dhcp配置实现的 假如使用这种方式的话,那么想实现自动化就需要程序去生成mac对应的ip配置追加到dhcp配置,然后还需要重启dhcp服务才能生效 如果使用@wangkuiyi所说的2方式,那么就没有必要去使用dhcp,直接分配到cc中就可以 假如ip无法固定则当前会有以下问题需要解决:
最终MAC和IP还是需要有绑定的关系的,而且一旦使用DHCP分配好的IP,就需要保留足够长的时间。
这个链接里有提到,可以使用_omshell_完成DHCP的配置而无需重启DHCP服务: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-dhcp-configuring-server.html
现在已经有2处现成的地方可以做这件事:
如果要使用DHCP的go语言客户端,可以参考:https://golanglibs.com/top?q=DHCP
会将IP生成和cert生成(https://github.com/k8sp/auto-install/pull/71 ),解藕,并独立作为两个功能。
IP生成可采用上述方法2 。在cc中定义一个unit(systemd service),使用一个脚本或程序,完成检查SkyDNS中的记录,有责恢复,无则生成。
后续的操作将依赖这个服务即可保持唯一的ip
我有两个问题:
上面的讨论: 假如ip无法固定则当前会有以下问题需要解决:
【pineking】这个对skydns功能理解有点问题, skydns不是这么用的,skydns只在bootstrapper上启动,通过查询etcd里的hostname和IP的存储信息提供dns服务,可以看做是用etcd做信息存储后端的类bind的dns 服务软件,各个节点上并没有skydns,只是用bootstrapper当做nameserver,来获取dns解析
节点启动后,先从SkyDNS的etcd查找对应自己MAC地址的记录,如果有,则分配这个IP;如果没有,就使用DHCP获取IP,并更新etcd
【pineking】 节点上不存在skydns的概念,节点获取IP之前,没法和etcd通讯吧,我觉得还是IP还是来自同一个分发源,多IP来源会有很多不可预料的情况,容易冲突。
需要DHCP有记忆功能?这个怎么实现呢? 【pineking】dhcp的租约是不是你所说的记忆功能,在租约期的一半时间client会主动申请续约
是说node第一次从DHCP拿到了IP之后,就把IP写入自己的/etc/network/interfaces文件里?那么如果DHCP忘记了这个IP曾经分配出去过,接下来分给了一台新机器,是不是就导致机群里有两台机器IP冲突了?
【pineking】IP还是统一由一个地方分配比较好,不要分配和静态并存,多个来源
我觉得skydhcp可以满足我们的要求,像skydns一样,用etcd做dhcp后端存储,不需要自己在dhcp配置里写死IP和mac绑定,https://github.com/skynetservices/skydns/issues/135
为什么需要IP和mac地址绑定?
同意IP需要有一个统一的地方分配。维护数据一致性会非常头疼。
@pineking skydhcp我看看,有点意思。
@typhoonzero 我现在觉得DHCP这种基础服务依赖etcd,有点不靠谱,etcd挂了,DHCP就挂了
好处是skydns和skydhcp都用 etcd,信息共享,节点就不需要set-dns-to-etcd 向etcd汇报自己的hostname了
@pineking 之前的讨论也提到了,集群依赖DHCP服务也有问题,DHCP挂了,这个集群都有问题,尤其是开了coreos自动更新。etcd还好可以配置成集群。
最安全稳定的是host起来之后就分配好静态IP地址。
@typhoonzero 静态IP感觉灵活性不足,后面想调整不容易,通过DHCP,调整在bootstrapper上改dhcp配置就可以了,而且dhcp通过IP和MAC绑定,也能实现静态IP分配的效果
如果使用DHCP我们就需要有一个方案确保DHCP服务是高可用的,避免CoreOS发版导致集群节点都无法正常配置网络
参考链接:如何配置同一个集群的2个DHCP服务,以及如何配置DHCP的高可用 http://serverfault.com/questions/368512/can-i-have-multiple-dhcp-servers-on-one-network
另外,我觉得可以把“静态IP”和“DHCP”作为用户的选项,在cloud-config-server启动的时候传入分别实现不同功能。满足不同场景的需求。
这个图中 http://www.tcpipguide.com/free/t_DHCPLeaseAllocationProcess-2.htm 展示了网络中可以有多个DHCP server。Client会选一个。至于具体怎么选择,还需要再看看。
我在做 通过cloud-config-server 启动参数增加可以设置worker通过cc配置静态网络,不增加此参数则默认都适用DHCP
其中涉及到固定几种网络的方式:
@wangkuiyi @pineking 看下是否还有其他的网络配置需求。
如题,k8s集群的部署环境会基于某些已经存在DHCP服务的集群环境,比如云知声的环境和百分点的环境。所以需要一种方式,能避免k8s集群自动安装后自动分配的IP和现有已存在的环境发生冲突。现有的方案和想法: