自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

伸縮Kubernetes到2500個節(jié)點中遇到的問題和解決方法

云計算
Kubernetes自從1.6起便號稱可以承載5000個以上的節(jié)點,但是從數(shù)十到5000的路上,難免會遇到問題。本片文章即分享Open API在kubernetes 5000之路上的經(jīng)驗,包括遇到的問題、嘗試解決問題以及找到真正的問題。

Kubernetes自從1.6起便號稱可以承載5000個以上的節(jié)點,但是從數(shù)十到5000的路上,難免會遇到問題。

本片文章即分享Open API在kubernetes 5000之路上的經(jīng)驗,包括遇到的問題、嘗試解決問題以及找到真正的問題。

[[227083]]

遇到的問題以及如何解決

問題一:1 ~ 500個節(jié)點之后

問題:

kubectl 有時會出現(xiàn) timeout(p.s. kubectl -v=6 可以顯示所有API細節(jié)指令)

嘗試解決:

  • 一開始以為是kube-apiserver服務器負載的問題,嘗試增加proxy做replica協(xié)助進行負載均衡
  • 但是超過10個備份master的時候,發(fā)現(xiàn)問題不是因為kube-apiserver無法承受負載,GKE通過一臺32-core VM就可以承載500個節(jié)點

原因:

排除以上原因,開始排查master上剩下的幾個服務(etcd、kube-proxy)

  • 開始嘗試調(diào)整etcd
  • 通過使用datadog查看etcd吞吐量,發(fā)現(xiàn)有異常延遲(latency spiking ~100 ms)
  • 通過Fio工具做性能評估,發(fā)現(xiàn)只用到10%的IOPS(Input/Output Per Second),由于寫入延遲(write latency 2ms)降低了性能
  • 嘗試把SSD從網(wǎng)絡硬盤變?yōu)槊颗_機器有個local temp drive(SSD)
  • 結果從~100ms —> 200us

問題二:~1000個節(jié)點的時候

問題:

發(fā)現(xiàn)kube-apiserver每秒從etcd上讀取500mb

嘗試解決:

  • 通過Prometheus查看container之間的網(wǎng)絡流量

原因:

  • 發(fā)現(xiàn)Fluentd和Datadog抓取每個節(jié)點上資料過于頻繁
  • 調(diào)低兩個服務的抓取頻率,網(wǎng)絡性能從500mb/s降低到幾乎沒有

etcd小技巧:通過--etcd-servers-overrides可以將Kubernetes Event的資料寫入作為切割,分不同機器處理,如下所示

  1. --etcd-servers-overrides=/events#https://0.example.com:2381;https://1.example.com:2381;https://2.example.com:2381 

問題三:1000 ~ 2000個節(jié)點

問題:

無法再寫入數(shù)據(jù),報錯cascading failure

kubernetes-ec2-autoscaler在全部的etcd都停掉以后才回傳問題,并且關閉所有的etcd

嘗試解決:

  • 猜測是etcd硬盤滿了,但是檢查SSD依舊有很多空間
  • 檢查是否有預設的空間限制,發(fā)現(xiàn)有2GB大小限制

解決方法:

  • 在etcd啟動參數(shù)中加入--quota-backend-bytes
  • 修改kubernetes-ec2-autoscaler邏輯——如果超過50%出現(xiàn)問題,關閉集群

各種服務的優(yōu)化

Kube masters 的高可用

一般來說,我們的架構是一個kube-master(主要的 Kubernetes 服務提供組件,上面有kube-apiserver、kube-scheduler 和kube-control-manager)加上多個slave。但是要達到高可用,要參考一下方式實現(xiàn):

  • kube-apiserver要設置多個服務,并且通過參數(shù)--apiserver-count重啟并且設定
  • kubernetes-ec2-autoscaler可以幫助我們自動關閉idle的資源,但是這跟Kubernetes scheduler的原則相悖,不過通過這些設定,可以幫助我們盡量集中資源。

 

  1. "kind" : "Policy"
  2. "apiVersion" : "v1"
  3. "predicates" : [ 
  4.   {"name" : "GeneralPredicates"}, 
  5.   {"name" : "MatchInterPodAffinity"}, 
  6.   {"name" : "NoDiskConflict"}, 
  7.   {"name" : "NoVolumeZoneConflict"}, 
  8.   {"name" : "PodToleratesNodeTaints"
  9.   ], 
  10. "priorities" : [ 
  11.   {"name" : "MostRequestedPriority""weight" : 1}, 
  12.   {"name" : "InterPodAffinityPriority""weight" : 2} 
  13.   ] 

以上為調(diào)整kubernetes scheduler范例,通過調(diào)高InterPodAffinityPriority的權重,達到我們的目的。更多示范參考范例.

需要注意的是,目前Kubernetes Scheduler Policy并不支持動態(tài)切換,需要重啟kube-apiserver(issue: 41600)

調(diào)整scheduler policy造成的影響

OpenAI使用了KubeDNS ,但不久后發(fā)現(xiàn)——

問題:

經(jīng)常出現(xiàn)DNS查詢不到的情況(隨機發(fā)生)

超過 ~200QPS domain lookup

嘗試解決:

  • 嘗試查看為何有這種狀態(tài),發(fā)現(xiàn)有些node上跑了超過10個KuberDNS

解決方法:

  • 由于scheduler policy造成了許多POD的集中
  • KubeDNS很輕量,容易被分配到同一節(jié)點上,造成domain lookup的集中
  • 需要修改POD affinity(相關介紹),盡量讓KubeDNS分配到不同的node之上

 

  1. affinity:   
  2.  podAntiAffinity: 
  3.    requiredDuringSchedulingIgnoredDuringExecution: 
  4.    - weight: 100 
  5.      labelSelector: 
  6.        matchExpressions: 
  7.        - key: k8s-app 
  8.          operator: In 
  9.          values
  10.          - kube-dns 
  11.      topologyKey: kubernetes.io/hostname 

新建節(jié)點時Docker image pulls緩慢的問題

問題:

每次新節(jié)點建立起來,docker image pull都要花30分鐘

嘗試解決:

  • 有一個很大的container image Dota,差不多17GB,影響了整個節(jié)點的image pulling
  • 開始檢查kubelet是否有其他image pull選項

解決方法:

  • 在kubelet增加選項--serialize-image-pulls=false來啟動image pulling,讓其他服務可以更早地pull
  • 這個選項需要docker storgae切換到overlay2
  • 并且把docker image存放到SSD,可以讓image pull更快一些

補充:source trace

 

  1. // serializeImagePulls when enabled, tells the Kubelet to pull images one 
  2. // at a time. We recommend *not* changing the default value on nodes that 
  3. // run docker daemon with version  < 1.9 or an Aufs storage backend. 
  4. // Issue #10959 has more details. 
  5. SerializeImagePulls *bool `json:"serializeImagePulls"`   

提高docker image pull的速度

此外,還可以通過以下方式來提高pull的速度

  • kubelet參數(shù)--image-pull-progress-deadline要提高到30mins
  • docker daemon參數(shù)max-concurrent-download調(diào)整到10才能多線程下載

網(wǎng)絡性能提升

Flannel性能限制

OpenAI節(jié)點間的網(wǎng)絡流量,可以達到10-15GBit/s,但是由于Flannel所以導致流量會降到 ~2GBit/s

解決方式是拿掉Flannel,使用實際的網(wǎng)絡

  • hostNetwork: true
  • dnsPolicy: ClusterFirstWithHostNet
責任編輯:未麗燕 來源: 好雨Rainbond
相關推薦

2010-03-08 09:29:09

Linux Debia

2010-06-09 09:39:42

Opensuse雙系統(tǒng)

2019-10-11 19:45:28

SparkSQLHiveHadoop

2010-06-17 11:17:34

裝系統(tǒng)出現(xiàn)Grub

2013-10-23 11:22:47

HadoopHadoop處理大量小

2013-10-23 10:48:30

HadoopHDFS文件處理

2010-12-27 11:00:53

Virtualbox

2019-11-21 16:26:44

Windows電腦瀏覽器

2011-05-16 10:53:45

2022-04-06 10:09:17

云服務云計算

2020-06-27 08:57:55

HTTP403服務器

2009-09-10 09:35:25

Linq語句

2011-05-26 11:38:23

重復頁

2010-08-24 11:34:37

DIV+CSS

2009-08-24 10:37:11

Silverlight

2010-02-23 13:07:07

CentOS gcc

2018-08-28 08:47:09

服務器宕機方法

2017-05-04 14:37:38

Windows故障方法

2009-08-13 10:40:15

C#讀取Excel

2009-06-12 11:06:56

Java heap s
點贊
收藏

51CTO技術棧公眾號