当kubernetes集群结节超多时,如何有效管理?

本文探讨了在Kubernetes集群规模扩大至2500个节点时遇到的问题及解决方案,包括kubectl操作超时、etcd高延迟、Docker镜像拉取效率低下、网络吞吐量限制以及ARP缓存等问题。

这是看到一个INFOQ上的文章《如何用Kubernetes管理超过2500个节点的集群》,所作的摘要:


原网址:https://blog.openai.com/scaling-kubernetes-to-2500-nodes/?utm_source=digg


 

1ï¼Â  在集群中超过500个节点的时候,kubectl操作集群出现超时的情况。

开始,通过增加kube master节点(API Server)的情况来临时解决。

然后,发现etcd使用串行I/O,改用SSD磁盘,写延迟可降低到200微秒。

2ï¼Â  当集群中超过1000个节点时,etcd出现了很高的延迟。

现象在于apiserver从etcd读取数据的速度超过了500MB/s。(搭建了prometheus监控kube-apiservers,设置了—audit-log-path和—audit-log-maxbackup),是因为很多慢查询和大量对Events的List API的请求。这是由于部份程序频繁的去apiserver查询各种信息所导致的(Fluentd, Datadog….)。解决办法有两个:

一是修改这些程序的设置,让它们去apiserver的查询频率降低。

二是将kubernetes Events存储在一个单独的ectd集群里。

在节点超过1000节点时,还会触发etcd的硬盘存储上限(2G)。

这时,就需要通过—quota-backend-bytes增加存储大小。同时,如果有autoscaler配置的话,要让autoscaler支持基础(sanity)检查。在发现要终止集群里超过50%的workers时,放弃这个操作。

我们在同一台机器上安装了 kube-apiserverkube-controller-manager kube-scheduler processes。为了高可用,我们一直有至少两个 masters,并将 --apiserver-count 设置为我们正在运行的 apiservers 数量(否则 Prometheus 可能会混淆这些实例)。

在更改 Kubernetes 的调度系统策略(policy)之后,也要防止kubeDNS成为服务热点而成为性能瓶颈,此时也要注意调度DNS节点分布。这两个配置参考如下:





affinity:
 podAntiAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   - weight: 100
     labelSelector:
       matchExpressions:
       - key: k8s-app
         operator: In
         values:
         - kube-dns
     topologyKey: kubernetes.io/hostname


3,  Docker拉取镜像问题

当新节点和新镜像很多很大时(超过10G),很多pod都处于pending状态。

解决办法是将kubelet的—serialize-image-pulls设置为false,并且使用overlay2文件系统(不可为AUFS!!!),将docker的根存储目录最好也要迁移到SSD本地盘上。

然后将kubelet的—image-pull-progress-deadline设置为30分钟,将docker的max-concurrent-downloads为10。

对于不能实时通过外网下载的镜像,如gcr.io,可以先下载下来进行预加载。

4,  网络问题

当网络中的机器数据越来越多时,机器之间的吞吐量大约在 10-15Gbit/s 但是我们基于 Flannel Pods 之间的最大吞吐量仅仅只有 2Gbit/s

解决这个问题的办法是使用两个不同的设置来让pods绕过flannel网络。hostNetwork设置为true,dnsPolicy设置为ClusterFirstWithHostNet(作之前先看警告,获知后果)

5,  ARP缓存

当机器节点增多时,内核的ARP栈也可能爆掉(用完了缓存空间)。这时,需要更改/etc/sysctl.conf的设置(这种修改在HPC集群中常见)


net.ipv4.neigh.default.gc_thresh1 = 80000
net.ipv4.neigh.default.gc_thresh2 = 90000
net.ipv4.neigh.default.gc_thresh3 = 100000


kubernetes的版本升级到1.8.4后,官方已支持5,000个节点的集群! 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值