Kubernetes自从1.6起便号称能够承载5000个以上的节点,可是从数十到5000的路上,不免会遇到问题。node
本片文章即分享Open API在kubernetes 5000之路上的经验,包括遇到的问题、尝试解决问题以及找到真正的问题。git
问题:github
kubectl 有时会出现 timeout(p.s. kubectl -v=6
能够显示全部API细节指令)docker
尝试解决:json
缘由:api
问题:服务器
尝试解决:网络
缘由:多线程
--etcd-servers-overrides
能够将Kubernetes Event的资料写入做为切割,分不一样机器处理,以下所示--etcd-servers-overrides=/events#https://0.example.com:2381;https://1.example.com:2381;https://2.example.com:2381
问题:架构
尝试解决:
解決方法:
--quota-backend-bytes
通常来讲,咱们的架构是一个kube-master(主要的 Kubernetes 服务提供组件,上面有kube-apiserver、kube-scheduler 和kube-control-manager)加上多個slave。可是要达到高可用,要参考一下方式实现:
--apiserver-count
重启而且设定{ "kind" : "Policy", "apiVersion" : "v1", "predicates" : [ {"name" : "GeneralPredicates"}, {"name" : "MatchInterPodAffinity"}, {"name" : "NoDiskConflict"}, {"name" : "NoVolumeZoneConflict"}, {"name" : "PodToleratesNodeTaints"} ], "priorities" : [ {"name" : "MostRequestedPriority", "weight" : 1}, {"name" : "InterPodAffinityPriority", "weight" : 2} ] }
以上为调整kubernetes scheduler范例,经过调高InterPodAffinityPriority的权重,达到咱们的目的。更多示范参考范例.
须要注意的是,目前Kubernetes Scheduler Policy并不支持动态切换,须要重启kube-apiserver(issue: 41600)
OpenAI使用了KubeDNS ,但不久后发现——
问题:
尝试解决:
解决方法:
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - weight: 100 labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname
问题:
尝试解决:
解决方法:
--serialize-image-pulls=false
来启动image pulling,让其余服务能够更早地pull(参考:kubelet启动选项)补充:source trace
// serializeImagePulls when enabled, tells the Kubelet to pull images one // at a time. We recommend *not* changing the default value on nodes that // run docker daemon with version < 1.9 or an Aufs storage backend. // Issue #10959 has more details. SerializeImagePulls *bool `json:"serializeImagePulls"`
此外,还能够经过如下方式来提升pull的速度
kubelet参数--image-pull-progress-deadline
要提升到30mins docker daemon参数max-concurrent-download
调整到10才能多线程下载
Flannel性能限制
OpenAI节点间的网络流量,能够达到10-15GBit/s,可是因为Flannel因此致使流量会降到 ~2GBit/s
解决方式是拿掉Flannel,使用实际的网络
这里还有一些注意事项须要详细阅读
想要简单易用、生产就绪的Kubernetes?试试好雨Rainbond——以应用的方式包装Kubernetes,理解和使用更简单,各类管理流程开箱即用!
好雨Rainbond(云帮)是一款以应用为中心的开源PaaS,深度整合基于Kubernetes的容器管理、Service Mesh微服务架构最佳实践、多类型CI/CD应用构建与交付、多数据中心资源管理等技术,为用户提供云原生应用全生命周期解决方案,构建应用与基础设施、应用与应用、基础设施与基础设施之间互联互通的生态体系,知足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。