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應用構建與交付、多數據中心資源管理等技術,爲用戶提供雲原生應用全生命週期解決方案,構建應用與基礎設施、應用與應用、基礎設施與基礎設施之間互聯互通的生態體系,知足支撐業務高速發展所需的敏捷開發、高效運維和精益管理需求。