k8s add node calico_学生机搭建多节点K8S集群

作为一名贫苦学生,想要搭建线上的K8S集群就只能通过白嫖各大厂商的学生机。。。而每个厂商的学生机又是每个账号限购一份,所以想要搭建多节点的K8S集群就要跨云供应商。

对于Centos多节点K8S集群的搭建,参考下面这篇博文,按照上面的步骤搭建也是非常顺利。

kubeadm部署kubernetes v1.16.3集群​blog.csdn.net
446ab713dd83fce5871ca0b772920120.png

现在最大的问题就是跨供应商的问题。对于厂商的ECS来说,从本机获取的IP都是默认的内网IP,这样就导致按照上面博文中的步骤,两个供应商之间的节点是不通的,因为这样搭建的K8S使用的是内网IP。所以,在搭建的时候需要更改一些配置。

init时外网IP替换内网IP

使用ifconfig获取本机IP时,我们就可以发现,其实在ECS上能获取到的只有内网IP,个人猜测这也是K8S使用内网IP的原因。

所以在 Master 节点 init 的时候,产生的join命令的IP是内网IP。如果在node节点直接将join命令里的IP换成外网IP,此时会验证的错误。因为虽然访问的目标地址是一样的,但是外网IP的apiserver是没有被认证的,所以使用 --apiserver-cert-extra-sans=extern IP ,把外网IP加进去。

但是之后还会因为这个问题报错。之后Node节点会发送HTTP请求到Master节点获取ConfigMap,而此时外网IP仅仅是被当做额外认证的IP加了进去,但HTTP请求的地址仍是内网IP。这里就需要在Master初始化时指定参数 --control-plane-endpoint="extern IP: port" 。这样,之后的HTTP请求都会发向外网IP的地址。

这里还有一种解法,使用iptables对发现内网IP的请求进行转发,直接转向外网IP。

 iptables -t nat -I OUTPUT -d 内网IP -j DNAT --to 外网IP

IP forward

上面的博文配置的时候,需要开启IP forward,但有时仍会在 kubeadm init 的时候,报如下的错:

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 

参考GitHub上的issue,重启docker即可

https://github.com/kubernetes/kubeadm/issues/1062​github.com
systemctl restart docker

CPU数量限制

目前各大厂商的学生机的配置都是1核2G,而K8S的默认配置要求是至少2核,而这个检查是在pre-flight里做的,所以只需要添加参数忽略对应的报错就可以了。

最终Master节点初始化的命令为

kubeadm init 
    --apiserver-cert-extra-sans=47.103.21.70 
    --image-repository=registry.aliyuncs.com/google_containers 
    --pod-network-cidr=192.168.0.0/16 
    --ignore-preflight-errors=NumCPU 
    --control-plane-endpoint="47.103.21.70:6443"

--image-repository 指定拉取镜像的仓库

--pod-network-cidr 是使用 calico 网络插件所固定的参数

总结

虽然说用学生机搭建的K8S集群性能上肯定有问题,但作为学习K8S和实操的工具也算足够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值