主頁 >  其他 > K8s 集群節點在線率達到 99.9% 以上,擴容效率提升 50%,我們做了這 3 個深度改造

K8s 集群節點在線率達到 99.9% 以上,擴容效率提升 50%,我們做了這 3 個深度改造

2020-09-16 01:41:36 其他

作者 | 張振(守辰)阿里云云原生應用平臺高級技術專家

導讀:2019 年阿里巴巴核心系統 100% 以云原生方式上云,完美地支撐了 雙11 大促,這次上云的姿勢很不一般,不僅是擁抱了 Kubernetes,而且還以擁抱 Kubernetes 為貧訓進行了一系列對運維體系的深度改造,

Kubernetes 作為云原生的最佳實踐,已經成為了事實上的容器編排引擎標準,Kubernetes 在阿里巴巴集團落地主要經歷了四個階段:

  • 研發和探索:2017 年下半年阿里巴巴集團開始嘗試使用 Kubernetes api 來改造內部自研平臺,并開始了對應用交付鏈路的改造,以適配 Kubernetes;
  • 初步灰度: 2018 年下半年阿里巴巴集團和螞蟻金服共同投入 Kubernetes 技術生態的研發,力求通過 Kubernetes 替換內部自研平臺,實作了小規模的驗證,支撐了當年部分 雙11 的流量;
  • 云化灰度: 2019 年初阿里巴巴經濟體開始進行全面上云改造,阿里巴巴集團通過重新設計 Kubernetes 落地方案,適配云化環境,改造落后運維習慣,在 618 前完成了云化機房的小規模驗證;
  • 規模化落地:2019 年 618 之后,阿里巴巴集團內部開始全面推動 Kubernetes 落地,在大促之前完成了全部核心應用運行在 Kubernetes 的目標,并完美支撐了 雙11 大考,

在這幾年的實踐中,一個問題始終縈繞在各個架構師的頭腦中: 在阿里巴巴這么大體量、這么復雜的業務下, 遺留了大量傳統的運維習慣以及支撐這些習慣的運維體系,落地 Kubernetes 到底要堅持什么?要妥協什么?要改變什么?

本文將分享阿里巴巴這幾年對于這些問題的思考,答案很明顯:擁抱 Kubernetes 本身并不是目的,而是通過擁抱 Kubernetes 撬動業務的云原生改造,通過 Kubernetes 的能力,治理傳統運維體系下的沉疴頑疾,釋放云彈性的能力,為業務的應用交付解綁提速,

在阿里巴巴的 Kubernetes 落地實踐中,關注了下面幾個關鍵的云原生改造:

面向終態改造

在阿里巴巴傳統的運維體系下,應用的變更都是 PaaS 通過創建操作工單,發起作業流,繼而對容器平臺發起一個個的變更來完成的,

當應用發布時, PaaS 會從資料庫中查到應用所有相關的容器,并針對每個容器,向容器平臺發起修改容器鏡像的變更,每一個變更實際上也是一個作業流,涉及到鏡像的拉取、舊容器的停止和新容器的創建,作業流中一旦發生錯誤或者超時,都需要 PaaS 進行重試,一般而言,為了保證工單及時的完成,重試僅會執行幾次,幾次重試失敗后,只能依靠人工處理,

當應用縮容時,PaaS 會根據運維人員的輸入,指定容器串列進行洗掉,一旦其中有容器因為宿主機例外的情況下洗掉失敗或者超時,PaaS 只能反復重試,為了保證工單的結束,在重試一定次數后只能認為容器洗掉成功,如果宿主機后續恢復正常,被“洗掉”的容器很有可能依然運行著,

傳統的面向程序的容器變更一直存在如下問題無法解決:

  • 單個變更失敗無法保證最終成功

例如,一旦容器鏡像變更失敗,PaaS 無法保證容器鏡像的最終一致;一旦洗掉容器失敗,
也無法保證容器最后真的被洗掉干凈,兩個例子都需要通過巡檢來處理不一致的容器,而巡檢任務因為執行較少,其正確性和及時性都很難保證;

  • 多個變更會發生沖突

例如應用的發布和應用的擴容程序需要加鎖,否則會出現新擴的容器鏡像未更新的情況,而一旦對變更進行加鎖,變更的效率又會大幅下降,

Kubernetes 的能力提供了解決這個問題的機會,Kubernetes 的 workload 提供了宣告式的 API 來修改應用的實體數和版本,workload 的控制器可以監聽 pod 的實際情況,保證應用 pod 的實體數量和版本符合終態,避免了并發擴容和發布的沖突問題,Kubernetes 的 kubelet 會依據 pod 的 spec,反復嘗試啟動 pod,直到 pod 符合 spec 描述的終態,重試由容器平臺內部實作,不再和應用的工單狀態系結,

自愈能力改造

在阿里巴巴傳統的運維體系下,容器平臺僅生產資源,應用的啟動以及服務發現是在容器啟動后由 PaaS 系統來執行的,這種分層的方法給了 PaaS 系統最大的自由,也在容器化后促進了阿里巴巴第一波容器生態的繁榮,但是這種方式有一個嚴重的問題,即:
容器平臺無法獨立地去觸發容器的擴縮容,需要和一個個 PaaS 來做復雜的聯動,上層 PaaS 也需要做很多重復的作業,這妨礙了容器平臺在宿主機發生故障、重啟、容器中行程發生例外、卡住時的高效自愈修復,也讓彈性擴縮容變得非常復雜,

在 Kubernetes 中通過容器的命令以及生命周期鉤子,可以將 PaaS 啟動應用以及檢查應用啟動狀態的流程內置在了 pod 中;另外,通過創建 service 物件,可以將容器和對應的服務發現機制關聯起來,從而實作容器、應用、服務生命周期的統一,容器平臺不再僅僅生產資源,而是交付可以直接為業務使用的服務,這極大地簡化了上云之后故障自愈以及自動彈性擴縮容能力的建設,
真正地發揮了云的彈性能力,

另外,在宿主機發生故障的情況下,PaaS 傳統上需要先對應用進行擴容,然后才洗掉宿主機上的容器,然而在大規模的集群下,我們發現往往會卡在應用擴容這步,應用資源額度可能不夠,集群內滿足應用調度限制的空閑資源也可能不夠,無法擴容就無法對宿主機上的容器進行驅逐,進而也無法對例外的宿主機進行送修,久而久之,整個集群很容易就陷入故障機器一大堆,想修修不了、想騰騰不動的困境之中,

在 Kubernetes 中對于故障機的處理要“簡單和粗暴”得多,不再要求對應用先擴容,而是直接把故障機上的容器進行洗掉,洗掉后才由負載控制器進行擴容,這種方案乍一聽簡直膽大妄為,落地 Kubernetes 的時候很多 PaaS 的同學都非常排斥這種方法,認為這會嚴重影響業務的穩定性,事實上,絕大多數核心的業務應用都維護著一定的冗余容量,以便全域的流量切換或者應對突發的業務流量,臨時洗掉一定量的容器根本不會造成業務的容量不足,

我們所面臨的關鍵問題是如何確定業務的可用容量,當然這是個更難的問題,但對于自愈的場景完全不需要準確的容量評估,只需要一個可以推動自愈運轉的悲觀估計就可以,在 Kubernetes 中可以通過 PodDisruptionBudget 來定量地描述對應用的可遷移量,例如可以設定對應用進行驅逐的并發數量或者比例,這個值可以參考發布時的每批數量占比來設定,假如應用發布一般分 10 批,那么可以設定 PodDisruptionBudget 中的 maxUnavailable 為 10%(對于比例,如果應用只有 10 個以內的實體,Kubernetes 還是認為可以驅逐 1 個實體),萬一應用真的一個實體都不允許驅逐呢?那么對不起,這樣的應用是需要改造之后才能享受上云的收益的,一般應用可以通過改造自身架構,或者通過 operator 來自動化應用的運維操作,從而允許實體的遷移,<

不可變基礎設施改造

Docker 的出現提供了一種統一的應用交付形式,通過把應用的二進制、配置、依賴統一在構建程序中打到了鏡像中,
通過使用新的鏡像創建容器,并洗掉掉舊容器就完成了應用的變更,Docker 在交付應用時和傳統基于軟體包或者腳本的交付方式有一個重大區別,就是強制了容器的不可變,想要變更容器只能通過新創建容器來完成,而每個新容器都是從應用同一個鏡像創建而來,確保了一致性,從而避免了配置漂移,或者雪花服務器的問題,

Kubernetes 進一步強化了不可變基礎設施的理念,在默認的滾動升級程序中不但不會變更容器,而且還不會變更pod,每次發布,都是通過創建新的 pod,并洗掉舊的 pod 來完成,這不僅保證了應用的鏡像統一,還保證了資料卷、資源規格以及系統引數配置都是和應用模板的 spec 保持一致,

另外,不少應用都有比較復雜的結構,一個應用實體可能同時包含多個團隊獨立開發的組件, 比如一個應用可能包括了業務相關的應用程式服務器,也包括了基礎設施團隊開發的日志采集行程,甚至還包括了第三方的中間件組件,這些行程、組件如果想要獨立發布就不能放在一個應用鏡像中,為此 Kubernetes 提供了多容器 pod 的能力,可以在一個 pod 中編排多個容器,想要發布單個組件,只需要修改對應容器的鏡像即可,

不過,阿里巴巴傳統的容器形態是富容器,即應用程式服務器,以及日志采集行程等相關的組件都部署在一個大的系統容器中,這造成了日志采集等組件的資源消耗無法單獨限制,也無法方便地進行獨立升級,因此,在阿里巴巴這次上云中,開始把系統容器中除業務應用外的其他組件都拆分到獨立的 sidecar 容器,我們稱之為輕量化容器改造,改造后,一個 pod 內會包括一個運行業務的主容器、一個運行著各種基礎設施 agent 的運維容器,以及服務網格等的sidecar容器,輕量化容器之后, 業務的主容器就能以比較低的開銷運行業務服務,從而更方便進行 serverless 的相關改造,

不過,Kubernetes 默認的滾動升級程序過于僵硬地執行了不可變基礎設施的理念,導致對多容器 pod 的能力支持有嚴重的缺失,雖然可以在一個 pod 中編排多個容器,但如果要發布 pod 中的一個容器,在實際執行發布時,不僅會重建待發布的容器,還會把整個 pod 都洗掉,而后重調度、再重建,這意味著假如要升級基礎設施的日志采集組件,會導致其他組件,特別是業務的應用服務器被一起洗掉重啟,從而干擾到正常的業務運行,因此,多個組件的變更依然沒有解耦,

對業務而言,假如 pod 中有本地快取的組件,而每次業務的發布都會重啟快取行程,這會導致業務發布期間快取的命中率大幅下降,影響性能甚至用戶的體驗;另外,如果基礎設施、中間件等團隊的組件升級都和業務的組件升級系結在一起,這會給技術的迭代更新帶來巨大的阻礙,假設負責中間件的團隊推出了新的 service mesh 版本, 而為了升級 mesh 還需要央求一個個業務發布才能更新 mesh 組件,那么中間件的技術升級就會大大減速,

因此,相比 pod 層次的不可變,我們認為堅持容器級別的不可變原則,更能發揮 Kubernetes 多容器 pod 的技術優勢,為此,我們建設了支持應用發布時只原地修改 pod 中部分容器的能力,特別地建設了支持容器原地升級的作業負載控制器,并替換 Kubernetes 默認的 deployment 和 statefulset 控制器作為內部的主要作業負載,

另外,還建設了支持跨應用進行 sidecar 容器升級的 sidecarset, 方便進行基礎設施以及中間件組件的升級,此外,通過支持原地升級還帶來了集群分布確定性、加速鏡像下載等的額外優勢,這部分能力,我們已經通過 OpenKruise 專案開源出來,OpenKruise 中的 Kruise 是 cruise的諧音,'K' for Kubernetes, 寓意 Kubernetes 上應用的自動巡航,滿載著阿里巴巴多年應用部署管理經驗和阿里巴巴經濟體云原生化歷程的最佳實踐,目前,OpenKruise 正在計劃發布更多的 Controller 來覆寫更多的場景和功能,比如豐富的發布策略、金絲雀發布、藍綠發布、分批發布等等,

總結

今年我們實作了 Kubernetes 的規模化落地,經受了 雙11 大促真實場景的考驗,像阿里巴巴這樣有著大量存量應用的場景,落地 K8s 并沒有捷徑,我們經受住了快速規模化落地的傭訓,沒有選擇兼容和妥協落后的運維習慣,而是選擇深蹲打好基礎、選擇深挖云原生價值,接下來,我們將繼續推動更多應用的云原生改造,特別是有狀態應用的改造,讓有狀態應用的部署和運維更加高效;另外,還將推動整個應用交付鏈路的云原生改造,讓應用交付更加高效和標準化,

本書亮點

  • 雙11 超大規模 K8s 集群實踐中,遇到的問題及解決方法詳述
  • 云原生化最佳組合:Kubernetes+容器+神龍,實作核心系統 100% 上云的技術細節
  • 雙 11 Service Mesh 超大規模落地解決方案

“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號,”

更多相關資訊,關注“阿里巴巴云原生”,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/51595.html

標籤:其他

上一篇:Spire.Cloud 在線編輯

下一篇:九、Swift物件存盤服務(雙節點搭建)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more