精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Kubernetes 驚天地泣鬼神之大Bug

云計算
自從三月份生產、非生產全面上線 Kubernetes 后,本以為部署的問題可以舒一口氣了,但是斷斷續續在生產、非生產環境發現一個詭異的問題,這禮拜又調試了三天,在快要放棄的時候居然找到原因了,此缺陷影響目前(2018-5-23)為止所有 Kubernetes 版本(見后面更新,夸大了)。

自從三月份生產、非生產全面上線 Kubernetes 后,本以為部署的問題可以舒一口氣了,但是斷斷續續在生產、非生產環境發現一個詭異的問題,這禮拜又調試了三天,在快要放棄的時候居然找到原因了,此缺陷影響目前(2018-5-23)為止所有 Kubernetes 版本(見后面更新,夸大了),包括 GitHub 當前 master 分支,后果是某種情況觸發下,Kubernetes service 不能提供服務,影響非常惡劣。

問題的現象是,在某種情況下,一個或者多個 Kubernetes service 對應的 Kubernetes endpoints 消失幾分鐘至幾十分鐘,然后重新出現,然后又消失,用 "kubectl get ep --all-namespaces" 不斷查詢,可以觀察到一些 AGE 在分鐘級別的 endpoints 要么忽然消失,要么 AGE 突然變小從一分鐘左右起步。Endpoints 的不穩定,必然導致對應的 Kubernetes service 無法穩定提供服務。有人在 Github 上報告了 issue,但是一直沒得到開發人員注意和解決。

首先解釋下 Kubernetes 大體上的實現機制,有助于理解下面的破案過程。

Kubernetes 的實現原理跟配置管理工具 CFengine、Ansible、Salt 等非常類似:configuration convergence——不斷的比較期望的配置和實際的配置,修訂實際配置以收斂到期望配置。

Kubernetes 的關鍵系統服務有 api-server、scheduler、controller-manager 三個。api-server 一方面作為 Kubernetes 系統的訪問入口點,一方面作為背后 etcd 存儲的代理服務器,Kubernetes 里的所有資源對象,包括 Service、Deployment、ReplicaSet、DaemonSet、Pod、Endpoint、ConfigMap、Secret 等等,都是通過 api-server 檢查格式后,以 protobuf 格式序列化并存入 etcd。這就是一個寫入“期望配置”的過程。

Controller-manager 服務里包含了很多 controller 實例,對應各種資源類型:

 

001.jpg
v1.12.0-alpha.0/cmd/kube-controller-manager/app/controllermanager.go#L317

這些 controller 做的事情就是收斂:它通過 api-server 的 watch API 去間接的 watch etcd,以收取 etcd 里數據的 changelog,對改變(包括ADD、DELETE、UPDATE)的資源(也就是期望的“配置“),逐個與通過 kubelet + Docker 收集到的信息(實際“配置”)做對比并修正差異。

比如 etcd 里增加了一個 Pod 資源,那么 controller 就要請求 scheduler 調度,然后請求 kubelet 創建 Pod,如果etcd里刪除了一個 Service 資源,那么就要刪除其對應的 endpoint 資源,而這個 endpoint 刪除操作會被 kube-proxy 監聽到而觸發實際的 iptables 命令。

注意上面 controller 通過 watch 獲取 changelog 只是一個實現上的優化,它沒有周期性的拿出所有的資源對象然后逐個判斷,在集群規模很大時,這樣的全量收斂是很慢的,后果就是集群的調度、自我修復進行的非常慢。

有了大框架的理解后,endpoints 被誤刪的地方是很容易找到的:

 

002.jpg
v1.12.0-alpha.0/pkg/controller/endpoint/endpoints_controller.go#L396

然后問題來了,什么情況下那個 Services(namespace).Get(name) 會返回錯誤呢?通過注釋,可以看到在 service 刪除時會走到 397 行里去,把無用的 endpoints 刪掉,因為 endpoint 是給 service 服務的,service 不存在時,endpoint 沒有存在的意義。

然后問題來了,通過 "kubectl get svc" 可以看到出問題期間,服務資源一直都在,并沒有重建,也沒有剛剛部署,甚至很多服務資源都是創建了幾個月,為啥它對應的 endpoints 會被誤刪然后重建呢?這個問題困擾了我兩個月,花了很長時間和很多腦細胞,今天在快放棄時突然有了重大發現。

由于我司搭建的 Kubernetes 集群開啟了 X509 認證以及 RBAC 權限控制,為了便于審查,我開啟了 kube-apiserver 的審計日志,在出問題時,審計日志中有個特別的模式:

 

003.jpg
用 jq 命令摘取的審計日志片段

審計日志中,在每個 endpoint delete & create 發生前,都有一個 "/api/v1/services...watch=true" 的 watch 調用,上面講到,controller-manager 要不斷的去爬 etcd 里面資源的 changelog,這里很奇怪的問題是,這個調用的 "resourceVersion=xxx" 的版本值始終不變,難道不應該不斷從 changelog 末尾繼續爬取因為 resourceVersion 不斷遞增么?

通過一番艱苦卓絕的連猜帶蒙,終于找到“爬取changelog”對應的代碼:

 

004.jpg
v1.12.0-alpha.0/staging/src/k8s.io/client-go/tools/cache/reflector.go#L394

上面的代碼對 resourceVersion 的處理邏輯是: 遍歷 event 列表,取當前 event 的 "resourceVersion" 字段作為新的要爬取的“起始resourceVersion",所以很顯然遍歷結束后,"起始resourceVersion" 也就是***一條 event 的 "resourceVersion"。

好了,我們來看看 event 列表漲啥樣,把上面 api-server 的請求照搬就可以看到了:

 

  1. kubectl proxy 
  2. curl -s localhost:8001/api/v1/services?resourceVersion=xxxx&timeoutSeconds=yyy&watch=t 

 

005.jpg
/api/v1/services 的輸出,僅示意,注意跟上面的審計日志不是同一個時間段的

可以很明顯看到,坑爹,resourceVersion 不是遞增的!

這個非遞增的問題其實很容易想明白,resourceVersion 并不是 event 的序列號,它是 Kubernetes 資源自身的版本號,如果把 etcd 看作 Subversion,兩者都有一個全局遞增的版本號,把 Kubernetes 資源看作 Subversion 里保存的文件。 在 svn revision=100 時存入一個文件 A,那么A的版本是 100,然后不斷提交其它文件的修改到 svn,然后在某個版本刪掉 A,此時用 svn log 看到的相關文件的“自身***一次修改版本”并不是遞增的,***一條的“自身***一次修改版本”是 100。

所以真相大白了,reflector.go 那段遍歷 etcd "changelog" 的代碼,誤以為 event 序列的 resourceVersion 是遞增的了,雖然絕大部分時候是這樣的。由于這段代碼是通用的,所有資源都受這個影響,所以是非常嚴重的 bug,之前看到很多人報告(我自己也遇到)controller-manager 報錯 "reflector.go:341] k8s.io/kubernetes/pkg/controller/bootstrap/bootstrapsigner.go:152: watch of *v1.ConfigMap ended with: too old resource version: " 很可能也是這個導致的,因為它失誤從很老的 resourceVersion 開始爬取 etcd "changelog",但 etcd 已經把太老的 changelog 給 “compact” 掉了。

***總結下怎么觸發以及繞過這個 bug:

觸發

陸續創建、刪除、創建 Kubernetes service 對象,然后"kubectl delete svc xxx"刪掉創建時間靠前的 service,也就是往 service event list 末尾插入了一條 resourceVersion 比較小的記錄,這將使得 controller-manager 去從已經爬過的 service event list 位置重新爬取重放,然后就重放了 service 的 ADDED、DELETED event,于是 controller-manager 內存里緩存的 service 對象被刪除,導致 EndpointController 刪除了“不存在的”service 對應的 endpoints。

繞過

用 docker restart 重啟 kube-controller-manager 容器,強迫其從 event list ***位置開始爬取

創建一個 service,其 resourceVersion 會是 etcd 的***全局版本號,這個 ADDED event 會出現在 event list 末尾,從而 controller-manager 從這個***的 resourceVersion 開始爬取

"kubectl edit" 修改某個 service,加點無意義的 label 之類的,保存,這樣其 resourceVersion 也會更新,之后跟上一個 workaround 原理一樣了。

錯誤的繞過方式

  • "kubectl delete pod/xxx":不影響 service event list
  • "kubectl delete deploy/xxxx":不影響 service event list

Kubernetes 里凡是創建后基本不變的資源,比如 service、configmap、secrets 都會受這個影響,它們的版本號都很久,刪一個后都會觸發這個 bug,比如 configmap,可能就會被重復的更新,映射到容器里的 config file 也就不斷更新,對于不支持 config hot reload 的服務沒有影響,對于支持 config hot reload 的服務,會頻繁的重新加載配置文件重新初始化,可能導致意想不到的問題。

Bug 的修復很簡單,在遍歷 event list 選擇 resourceVersion 時,總是取 max(event.resourceVersion, currentResourceVersion) 即可,我提了個 pull request 給 Kubernetes 官方看看,希望我這個粗暴的修正不會帶來新的問題。

責任編輯:未麗燕 來源: 知乎專欄
相關推薦

2012-12-28 11:03:02

2024-07-03 12:01:36

2025-06-10 04:11:00

2017-07-18 10:05:58

2009-11-24 09:44:59

WIN7chrome谷歌

2016-01-11 10:10:53

2019-01-22 10:10:07

2025-10-31 08:20:30

2023-11-17 22:56:47

ChatGPTAI

2023-05-10 09:42:39

代碼開源

2023-03-31 11:36:52

阿里中臺架構

2019-07-29 10:46:14

HTTPHTTP 3HTTP 2

2021-09-13 15:54:01

程序員技能開發者

2013-11-26 15:44:25

Android設計模式

2013-12-13 09:31:43

2010-05-21 17:19:15

2012-04-26 22:41:13

2012-07-26 15:15:03

微軟Office2013蘋果

2012-07-19 13:50:11

Power7+IBM

2015-08-27 16:55:09

點贊
收藏

51CTO技術棧公眾號

欧美大片在线观看一区二区| 国产无人区一区二区三区| 不卡av在线播放| 久久久老熟女一区二区三区91| 蜜臀av国内免费精品久久久夜夜| av一区二区三区在线| 国产成人精品av| 中文字幕另类日韩欧美亚洲嫩草| 久久黄色影视| 欧美日韩视频在线第一区| 久久www视频| 国产裸舞福利在线视频合集| 国产精品自拍网站| 国产成人精品视频| 久艹视频在线观看| 精品久久成人| 亚洲а∨天堂久久精品9966| 性chinese极品按摩| 黑人精品视频| 综合激情成人伊人| 日本一区二区三不卡| 精品毛片一区二区三区| 日韩高清中文字幕一区| 欧美激情综合亚洲一二区| 免费网站在线高清观看| 精品人人人人| 日韩丝袜美女视频| 日本a√在线观看| 超碰99在线| 一二三区精品视频| 中文字幕99| 国产一二三在线观看| 成人18精品视频| 91在线国产电影| 中文字幕在线2019| 视频一区欧美精品| 欧美一区二区影院| 日操夜操天天操| 国模 一区 二区 三区| 中文国产成人精品| 免费网站在线高清观看| 国产伦精品一区二区三区千人斩 | 日韩一区日韩二区| 欧美日韩在线观看一区| 神马一区二区三区| 成人毛片视频在线观看| 97久久夜色精品国产九色| 国产精品久久久久久久成人午夜| 蜜臀av性久久久久av蜜臀妖精| 日本国产一区二区三区| 国内精品福利视频| 久久av一区| 国产成人精品视| 日韩黄色一级视频| 日本aⅴ亚洲精品中文乱码| 青青草99啪国产免费| 亚洲天堂一区在线观看| 美女网站久久| 国产精品入口免费视频一| 欧美人一级淫片a免费播放| 久久久久久网| 国产精品视频久久| 在线观看日批视频| 国产资源精品在线观看| 亚洲一区二区三区777| 国产a级免费视频| 岛国av在线一区| 久久综合精品一区| 成人影视在线播放| **网站欧美大片在线观看| 中文字幕色呦呦| 国产在线xxx| 色综合视频一区二区三区高清| 97在线免费公开视频| 国产经典一区| 在线91免费看| 精品少妇人妻av一区二区三区| 女仆av观看一区| 国产亚洲aⅴaaaaaa毛片| 日本综合在线观看| 欧美日韩蜜桃| 日本在线观看天堂男亚洲| 亚洲怡红院av| 不卡的av电影在线观看| 欧美在线一区二区三区四区| 欧美日韩在线看片| 亚洲成人免费看| 亚洲 欧美 日韩系列| www一区二区三区| 亚洲国产精品美女| 日本免费网站视频| 亚洲经典在线| 91精品久久久久久久久不口人| www.精品视频| 欧美激情在线一区二区三区| 日韩欧美一级在线| 一区二区三区四区日本视频| 欧美一区二区三区四区五区| 欧洲一级黄色片| 亚洲91视频| 26uuu亚洲伊人春色| 国产精品视频a| k8久久久一区二区三区| 亚洲第一综合| 狠狠操一区二区三区| 91麻豆精品国产91| 西西444www无码大胆| 欧美午夜在线视频| 国产日韩视频在线观看| 亚洲三级黄色片| 亚洲黄色录像片| 九九热在线免费| 日韩精选在线| 欧美激情成人在线视频| 在线免费av片| 久久亚洲精精品中文字幕早川悠里 | 欧洲成人一区二区三区| 国产精品蜜臀av| 日韩av资源在线| 国内精品麻豆美女在线播放视频 | 久久精品国产色蜜蜜麻豆| 久久99精品国产一区二区三区| 黄色动漫在线| 欧美色国产精品| 日韩乱码人妻无码中文字幕久久| 国产精品大片免费观看| 成人午夜一级二级三级| yw在线观看| 色狠狠色狠狠综合| 国产麻豆天美果冻无码视频| 欧美区亚洲区| 91免费观看| 高清免费电影在线观看| 欧美人伦禁忌dvd放荡欲情| 亚洲精品午夜视频| 久久夜色精品| 欧美一区1区三区3区公司| 国产美女精品写真福利视频| 精品久久人人做人人爽| 久久久无码精品亚洲国产| 国产精品2024| 国产精品一区在线免费观看| 日本成人一区二区| 日韩在线视频免费观看| 怡春院在线视频| 国产精品狼人久久影院观看方式| 国产精品视频黄色| av在线不卡顿| 国产精品一区二区电影| av在线收看| 欧美猛男男办公室激情| 九九热视频在线免费观看| 激情偷乱视频一区二区三区| 制服国产精品| 欧美日韩午夜电影网| 精品少妇v888av| 刘亦菲久久免费一区二区| 亚洲最新视频在线观看| 玖玖爱在线精品视频| 99视频精品| 欧洲精品亚洲精品| 欧美aaaaaaaa| 久久中文字幕在线视频| 亚洲黄色精品视频| 午夜精品福利一区二区三区蜜桃| 欧美熟妇精品黑人巨大一二三区| 久久中文精品| 一区二区视频在线观看| 日韩中文字幕一区二区高清99| 欧美黑人国产人伦爽爽爽| 无码国产精品高潮久久99| 色婷婷激情一区二区三区| 91麻豆制片厂| 国产成人av电影在线播放| 国产人妻777人伦精品hd| 九色精品91| 成人精品一区二区三区电影黑人| 性欧美video高清bbw| 日韩精品高清在线观看| 国产美女www爽爽爽| 少妇一级淫片免费看| 国产v综合v亚洲欧| 国产成人无码精品久久久性色| 精品国产中文字幕第一页 | 最新中文字幕在线观看视频| 中文字幕一区三区| 在线中文字日产幕| 日本中文字幕一区二区视频 | gogo高清午夜人体在线| 亚洲精选一区二区| 91亚洲国产成人久久精品麻豆 | 日本人体一区二区| 国产欧美日韩精品一区二区三区| 成人午夜在线影院| 在线免费日韩片| 久久综合色影院| 免费动漫网站在线观看| 日韩限制级电影在线观看| 日本免费在线观看视频| 一区二区三区中文免费| 国产三级av在线播放| 国产福利精品一区| av丝袜天堂网| 999在线观看精品免费不卡网站| 亚洲狠狠婷婷综合久久久| 精品少妇3p| 91九色蝌蚪嫩草| 美女视频一区| 欧洲成人免费视频| 国语对白在线刺激| 久久久www成人免费精品| 欧美精品少妇| 亚洲国产欧美在线成人app| 国产精品女人久久久| 91国产成人在线| 国产精品国产三级国产专区52| 亚洲欧美日韩电影| 青青青视频在线播放| 久久综合九色综合欧美就去吻| 无码人妻丰满熟妇区毛片蜜桃精品 | 人成免费电影一二三区在线观看| 日韩一级成人av| 夜夜爽8888| 欧美影视一区在线| 精品国产xxx| 精品国产乱码久久久久久天美 | 亚洲视频tv| 亚洲天堂色网站| 亚洲 欧美 激情 小说 另类| 精品国产乱码久久久久久老虎| 国产精品欧美综合亚洲| 9191精品国产综合久久久久久| 亚洲中文无码av在线| 成人影视亚洲图片在线| 欧美精品一区二区三区蜜桃视频| 自拍偷拍校园春色| 欧美午夜激情视频| 国产成人精品一区二三区| 亚洲亚洲精品在线观看| 国产精品成人免费观看| 1024国产精品| 老女人性淫交视频| 亚洲欧美日韩精品久久久久| 黄色录像一级片| 国产精品国产三级国产aⅴ入口| 日本美女xxx| 欧美激情综合五月色丁香| 无码少妇精品一区二区免费动态| 91麻豆国产自产在线观看| 一级性生活大片| 337p粉嫩大胆噜噜噜噜噜91av| 97精品人妻一区二区三区蜜桃| 成人av在线影院| v天堂中文在线| 91麻豆产精品久久久久久| av直播在线观看| 国产亚洲欧美色| 极品人妻videosss人妻| 欧美激情一区二区三区| 国产午夜精品久久久久久久久| 国产精品白丝在线| 成人在线观看高清| 一区二区三区在线免费播放| 久久精品www| 高跟丝袜欧美一区| 亚洲天堂男人av| 欧美日韩久久一区二区| 国产又粗又长又大视频| 欧美日本精品一区二区三区| 99久久精品无免国产免费| 精品久久久久99| 日韩一区av| 深夜福利亚洲导航| 色老板免费视频| 中文字幕一区二区在线播放| 91插插插插插插| 亚洲成人在线观看视频| 最近免费中文字幕大全免费版视频| 在线观看亚洲精品| 国产美女www爽爽爽视频| 亚洲精品在线电影| 日本1级在线| 久久在线精品视频| 国产中文在线播放| 国产日韩欧美视频| 亚洲一二av| 人偷久久久久久久偷女厕| 香港欧美日韩三级黄色一级电影网站| 久久久国内精品| 日韩精品乱码av一区二区| www.久久com| www国产精品av| 内射一区二区三区| 欧美性感美女h网站在线观看免费| 在线观看国产精品视频| 精品久久一二三区| av成人手机在线| 91国偷自产一区二区三区的观看方式| 影音成人av| 国产一区二区三区高清| 国产精品久久久久无码av| 欧美一区二区中文字幕| 久久99国产乱子伦精品免费| 99久久人妻无码中文字幕系列| 中文字幕色av一区二区三区| 中文字幕视频网站| 日韩三级电影网址| 天堂中文8资源在线8| 97视频免费看| 视频精品一区| 视频在线99| 亚欧成人精品| 日本精品一二三区| 亚洲人成人一区二区在线观看| 国产精品免费精品一区| 精品少妇一区二区三区视频免付费 | 国产伊人久久| 久久综合伊人77777麻豆| 欧美全黄视频| 亚洲av毛片在线观看| 久久久国产精品麻豆| 欧美福利视频一区二区| 日韩三级在线免费观看| 成人午夜在线影视| 国产美女91呻吟求| 成人同人动漫免费观看 | 亚洲精品久久久久| 激情网站在线| 97国产超碰| 久久久久午夜电影| 天堂在线中文在线| 欧美国产日韩亚洲一区| 欧产日产国产69| 日韩精品视频在线免费观看| 草草在线观看| 国内精品久久国产| 欧美午夜一区| 4438x全国最大成人| 亚洲精品日韩综合观看成人91| 91好色先生tv| 久久综合久久八八| 国产一区二区三区免费在线| 中文字幕剧情在线观看一区| 卡一卡二国产精品 | 国产a√精品区二区三区四区| 亚洲人成精品久久久久久| 国产免费高清视频| 操91在线视频| 亚洲一二三区视频| 99热这里只有精品免费| 粉嫩aⅴ一区二区三区四区| 不卡的免费av| 日韩高清欧美高清| 亚洲同志男男gay1069网站| 久久久久天天天天| 久久青草久久| 国产一二三av| 欧美一区二区三区免费| 国产深夜视频在线观看| 国产在线播放一区二区| 久久一本综合频道| 摸摸摸bbb毛毛毛片| 91精品国产全国免费观看| 在线网址91| 久久99九九| 日本成人在线一区| 国产传媒免费在线观看| 日韩一区二区高清| 国产ktv在线视频| 日韩精品一区二区三区四区五区| 日韩avvvv在线播放| 日韩在线观看视频一区二区| 精品久久久三级丝袜| 在线毛片观看| 在线国产精品网| 风间由美一区二区三区在线观看| 日韩欧美亚洲视频| 国产亚洲精品va在线观看| 在线视频成人| 欧美日韩精品在线一区二区 | 国产伦精品一区二区三区视频金莲| 欧美日韩国产高清视频| 精品一区二区三区视频| 日本熟妇乱子伦xxxx| 一区二区欧美在线| 国产一区二区三区国产精品| 国内外成人激情视频| 国产精品国产a| 无码精品人妻一区二区三区影院| 国产成人精品久久久| 中文字幕乱码亚洲无线精品一区 | 精品欧美一区二区精品少妇| 欧美一级片久久久久久久| 99久久婷婷国产综合精品电影√| 老司机免费视频| 欧美日韩国产色站一区二区三区| av岛国在线| 欧美一级黄色录像片| 国产亚洲欧美日韩日本| 黑人精品一区二区三区|