大家好現在四處介紹庫克特項的一個完全特大社區的這個項目它現在是頭版在Kipas這個項目我來自Dockhouse的莊生的這首歌大家好 我是來自同學的梁豪而且是庫克特項的一個特色角質我先給大家介紹一下什麼是庫克庫克的話是一組自己的縮寫是Kipas Result庫克特項它的主要的項目目的其實就是名字它就是一個K8技術影像庫克特項得取得的為什麼要取得呢就是因為有生蠻可能是資源不太夠或者是直接提到其他項點只關注控制面我們並不能吸食這個濾情的情況所以說我們這時候就想取得Kipas用一組更新的方式提帶庫克特的一個LOG螢幕的後座布袋給大家介紹一下什麼基礎功能簡單介紹一下庫克的兩個組成部分第一部分是庫克的一個控制器第二部分是庫克的一個力量工具我們首先介紹一下庫克的一個控制器的部分我們都知道在一個普通的Kipas技術裡面通常不需要一系列的控制面的組件還有一系列的節點來組成那麼我們完成一個節點的組成我們往往都去需要去準備一個真實的設備簡單在這個設備上面就啟動對應的庫克特項的進程來完成一個節點的組成而我們想要去添加一個節點我們就去需要去準備一台真實的設備然後去啟動對應的庫克特項進程完成一個新節點資源的一個貼架我們想要添加多個節點的也是一樣的流程就是對應的去需要去準備多台真實設備很多破裂的進程來完成多個節點資源的一個組成而在我們今天市面上的使用場地下我們在想要去對控制面進行測試的這樣的場地下我們往往是不需要去關注底層的勇氣具體運行的一個情況我們可能更加關注的是或者說創建到調度的整個領先而且什麼情況下我們其實是沒有足夠的節點去真正的去一個多節點的一個做事去啟動對應的庫克特項因此呢霍克特項就能夠滿足這樣的一個需求它是實際上是通過一系列的控制器去模擬庫克特項的一些行為來實現了底層裡面的Node獲得資源生命中期的一個管理同時呢它不需要真正的去運行實際的庫克特項進程不會啟動真實的庫克特項的遊戲通過一個簡單的庫克特項進程它就能夠去管理集群裡面的Node獲得的這樣的一個資源簡單介紹一下庫克特項的一個實現首先它是通過庫克特項Node利是這樣的一些control去實現了對庫克特項Node的資源生命中期的一個管理這樣的一個控制器呢它就能夠不僅僅能夠去模擬庫克特項Node的資源放棄它調度到三處的整一個過程而且它能夠讓我們用戶需透過下地去自定義持定庫克特Node的資源處理活動持定的一個狀態有了這樣的功能的話我們其實是很方便的能夠對集群的一些故障進行一些管理活動庫克特項第二大功能的其實是針對庫克特項的一個服務端的一個活動我們知道庫克特項作為一個服務端它其實會有一些譬如說Matches提供一些監控的指標我們提供了ES-EC的LOG和Touch-Port Forward等等這樣一些容器的一些功能庫克特項都能夠今天庫克特項的這些功能進行一個管理總的來說庫克特項是盡可能去模擬庫克特項的這樣的一個行為而且它不需要太多的資源開銷就能夠去實現大規模Node庫克特項的資源生命中期的一個管理特別適用於我們正面央測這樣的一個場景以上就是庫克的一個基本的一個介紹先介紹一下用了庫克Controller這個基礎的工具之後自然而然給大家直觀的體驗一下這個庫克特項它其實是跟Candle有點的意思大家如果有用過Candle的話C幾個節奏由於節奏都是虛擬可以任何你想要的節奏基礎你可以是任意容量這是其他的任意屬性不管是按摩還是AM這裡我們再往中間再往這個基礎不是一個底部的不算的底部的並且被調度並且被分補所以在這兩個節點上是這個工具最基礎的一個一個庫克特項的項目庫克特項之後自然而然就想到是不是可以把這個庫克特項中間的所有庫克特項的項目跟庫克特項的一起把他們在一起把基礎房間的一起拋起來這樣子是否能達到一種模擬一個機局的效果呢因為是已經成功了所以就有這個工具它可以在一個機器上直接去把我所需的工製面組件的而且製片件直接拉過來然後直接寫不起來也就是說它的一個機區的資源消耗其實是非常小的資源佔用最大的其實是A、S、SW像其他的組件我們可以使用一個剛剛RunTime這個參數去指定它啟動的運行時剛才說的那種直接去下載二斤制的話就是Baner運行時大家如果大家可以直接去指定Baner運行時你可以在Linux的機器上不需要任何容器環境你就可以直接把一個KPA機器給拉起來是一個完全虛擬的除此之外的話這肯定還是支持容器的也就是說除了單純的二斤制之外我們還可以去直接指定容器的鏡像就比如說指定一個Docker如果是指定Docker的話我們會去把Docker的上面的幾個所有的鏡像全部拉過來然後用這些Docker鏡像把它們傳成一個機區除了Docker之外的話像ContentDi的NetCtrl以及Portement這裡也是支持的也就是說你可以使任意的容器環境以後如果有新的容器環境可能也是會支持的有了這個之後的話那就有個問題就是因為我們這是虛擬機區你可能跑不了自己的一些Controller一些自定義的一些組件這時候的話我們只能接住Cand所以說就加了一個Cand這個運行時Cand這個運行時跟之前有一點點不一樣我們會先用Cand去創建一個Cand的機區然後再把在Cand裡面佈置我們的Cock這個Controller就有點不一樣然後的話這就是Cock工具最基礎的一個所有的能力除此之外的話既然是能用任意去組件去起碼我們肯定還要有一些比如說我又想指定一個Schedule的它的Banary的路徑就比如說我們可能自己開發的一個Schedule我們不想用官方標準的你可以直接去指定或者是去指定它的Image如果能指定之後肯定也有同樣的一個我們可能不想要Schedule我們直接在這個虛擬機區你就不啟動Schedule了直接我們直接可以ID啟動一個Schedule連接機群去做一些調適工作這個工具其實主要就是希望能做到把Coke做到更加的易用吧並且的話這個工具是完全跨平台的在Mac、Windows以及Linux上體驗基本上是一致的除此之外的話它還跟MiniCover一樣它集成了CokeControl作為它的一個指名令你可以用CokeControl加CoverControl這樣子一個命令直接去操縱Coke創建了一個機群有了CokeControl之後的話它還有一個ETCDControl也是跟CokeControl有點一樣你可以用CokeControl加上指名令ETCDControl去直接操縱進行中的ETCD然後的話它還集成了Matrix這邊我們Matrix集成的是Promisos你可以在創建機群的時候直接去指定Promisos的端口然後它默認啟動之後會去採集機群裏面所有的控制面組件的一個Matrix然後統一出來到Promisos裏然後你可以對接上自己的Graphon可以直接看到這個虛擬的機群裏面的一些指標然後的話還有我們這邊也集成了TrinseyTrinsey我們集成的是社區的YegoYego的話也是跟PromisosPromisos一樣你也可以直接指定一個參數去指定它啟動的一個端口然後的話它能把Yego的界面展示出來然後由於現在K8的話只有APS Server和Couplet是集成支持Trinsey的但是我們這邊沒有Couplet所以說現在是只支持看到APS Server的Trinsey但是在未來的話像Schedule或者是Ctrl Manager他們應該也是肯定是會支持Trinsey的在未來你可能做一個自願變動你可以非常清楚的直接用這種方式去看到這個自願變動的所有的鍊路最後的話我們這邊還集成了Dashboard這邊也是集成K8官方的一個Dashboard也可以也是在創建齊群的時候去指定一下參數可以在你指定的那個端口上去看到當前Coke集群的一些內置的所有狀態這就是Coke這個工具當前完整的一個功接下來我介紹一下我們在什麼場景下會用到Coke以及我們怎麼去使用這個Coke我們這裡梳理了三大場景首先是我們一個本地開發和問題排查的一個場景還有是說我們在開發過程中進行一個測試和CI Pipeline集成Coke的一個場景最後面就是我們一個性能測試的場景首先介紹一下本地開發以及問題排查我們在生產環境中使用開發案時往往會遇到一些比較棘手非常難以付現的問題如果我們自己在生產環境去操作集群的話其實風險是非常大的而且生產環境的現場一旦被破壞了之後我們其實很難對它進行一個穩定的付現那麼有沒有種辦法我們能夠在本地去把生產環境的整個數據拿到然後直接在本地進行一個問題的排查呢其實Coke Control就提供了這樣的一個支持我們可以通過Coke Control一個Snapshot的一個命令能夠把生產環境的數據整個數據做成一個快照有這樣的快照文件的話我們就能夠直接在本地用Coke Control去快速的搭建一個本地的KBIS集群然後通過Coke ControlSnapshot Restore的命令就能夠把生產環境的快照導入到我們本地的集群裡面這樣子我們本地就能夠擁有和生產環境一模一樣的數據也就能夠去穩定的去付現生產環境的各種各樣的問題那麼接下來我們往往會對某個問題的組件想要進行一個更深入的像代碼之類的一個Debug在Coke的這樣的場景下也是非常方便能夠實現的我們只需要在本地打開我們的ID比方說我們發現在排查過程中發現掉落器的工作不符合預期了我們就可以直接在ID上去把我們的掉落器起起來然後直接連接到我們本地的Coke的集群裡面就能夠實現一個代碼的Debug這樣子的話我們既能夠去在本地能夠穩定的去付現生產環境的各種各樣的問題也能夠去實現在本地直接對生產環境組件的一個排查以上就是Coke在本地開發以及我們生產問題排查的方面的一個支持我給大家介紹一下Coke在測試以及在集成進CI pipeline上的一個情況現在大家都知道像單元測試像集成測試E2E測試它成本和速度分別是從低到高從慢到從快到慢像E2E測試其實成本是非常高的就現在一般的話現在可以把測試E2E測試一般都是使用的CAN的去創建一個機序Coke的話就是做一個CAN的一個可替代向如果你的測試case如果完全不關心容器的運行狀態或者是你完全不關心容器到底沒跑沒跑你只想知道你想你只想要一個容器在跑的一個資源的就只想要一個容器在跑的一個資源這時候就可以直接選Coke社區的另外一個框架E2E的一個測試框架它已經直接集成了Coke作為一個CAN的一個一個可選項這邊是直接可以使用它的這個框架去直接在單元測試裡面直接去創建一個Coke機群創建完機群之後這邊跟CAN的有點不一樣的是我們需要去主動去創建一個Node創建完Node之後我們同樣可能要創建一些自己的Depployment或者一些私家的資源然後就可以寫一些自己的測試然後的話這邊是一個Go的一個測試單元測試右邊的每一個單元測試case都會跑一邊左邊這個TestMan的一個機群的創建和刪除的流程這個流程如果是用Candle的話它其實是有點慢的但是這個如果是替換成Coke的話它的速度就會非常的快這樣做之後我們就可以直接用GoTest直接去用跑單元測試一樣就直接去跑繼承了Coke的這一個E2E測試它是可以使E2E測試變得非常的簡單這邊的話是一個demo演示了一下Coke可以去自定義破的一些行為當前Coke的默認的破的行為的話它是直接把破的從Pending狀態直接變成Rowning狀態這邊的話我們在創建機群的時候指定了另外的配置這個外面的配置的話會給破的增加了一些中間階段的一些變化就比如說這邊的破的它會有一些容器的初始化狀態或者一些容器的完成指狀態之類的這邊我們創建了三個不同類型的我和Load分別是一個破的有初始化的一個是沒初始化的一個是另外一個是一個job它們分別有自己的一些初始化狀態完成狀態就是這個狀態當前是沒有默認是沒有當前默認是直接從Pending到Rowning因為可能各家的一些場景case不一樣這部分的內容是完全可以自己定制的也就是說是非常的通用的然後的話最後一部分就是performance最後一部分是一個機群性能測試的一個使用場景我們平常想要對機型做一個壓力的性能測試的話我們往往可以通過Quick Control去快速的去創建大量的節點和破的然後去觀察一下對我們機群的scheduler或者是Controller Manager以及Operator這樣的一些Controller組件會有怎樣的一個影響而我們想要去壓測APS2或者ETCD這樣的核心KBS組件的時候我們可以去通過部署Controller去模擬大量的Couplet而APS2建聯的這樣的一個場景來壓測APS2ETCD的一個性能以上是一個單機群壓測的場景而我們同時也可以用Quick快速的去創建大量的機群並且在機群上面去分別部署我們的多機群的控制面組件來實現對多機群場景下的一個控制面的一個壓測下面也是一個簡單的demo我們看一下怎樣通過Quick Control快速的去對一個進行一個壓測首先也是用Quick Control去快速的一個機群創建然後通過Scale命令我們就可以很輕鬆的去瞬間在機群裡面創建100個節點然後我們去看一下節點的狀態都已經全部已經ready了接下來我們也是通過Scale命令去創建2000個Pod然後Pod已經創建完成了接下來我們去看一下這個Pod並且運行起來了我們發現Pod只有900多個Pod是已經成功了我們不斷的去查看Pod的一個狀態然後發現逐漸的有Pod被調度成功並且成功運行最終其實它並沒有所有的Pod都完全已經調度成功並且運行起來也是這樣的一個場景下我們發現調度器就出現了一些瓶頸以上就是通過Quick Control去對機群進行快速的這樣的一個demo我們發現使用起來是非常方便的而在社區其實是會有非常多的Quick進行一個性能測試的各種各樣的使用案例更加豐富的案例其實在今年的10月份北美的Quick Control會有社區的其他的同學會有兩個主要的議題會做詳細的介紹我們這裡就不過的追溯了大家如果感興趣的話可以關注一下最後我給大家介紹一下Quick之後的一些以及一些怎麼參與Quick社區像Quick Control那個Quick 核心的那個組件的話其實它基本功能已經基本上完善了現在主要的roadmap是圍繞著Quick Control這個簡易化使用的工具去搭建的後面的話基本上就這三個我可能想到的還可以做的一個方向就是一個Quick的話計劃是在後續會支持CPU和Memory的使用率的模擬這個部分的功能其實是已經實現了但是在Matrix Server那一邊的話它可能有一點點去改動之前我是已經提了然後等那個改動發佈之後大概會在0.7在Matrix 0.7發佈之後Quick會發佈對應的版本到時候你可以直接選Quick去模擬Matrix然後的話就可以直接模擬CPU和Memory的使用率到時候就可以直接在Quick模擬HPA或者是一些基於HPA的調度基於CPU和Memory使用率的調度都是可以直接在Quick模擬可以重複的無限次的做模擬不需要任何資源直接在你的筆記本上第二種的話就是GPU的使用率模擬GPU的話它現在跟CPU和Memory它有一點點不一樣因為它現在還沒有被標準化所以說CPU的使用率在Metrix裡面去也就是說這部分的話可能支持會比較有點麻煩這裡的話計劃或許也是會支持的我也想社區提到一個新項目這個新項目可能是單純做Metrix和ExternalMetrix的一個模擬的新項目如果這個項目能通過的話到時候可能Quick會集成這個新項目去支持直接在機器裡去模擬這個GPU使用率除此之外的話是第三個第三個的話就是Quick和其他Quick Control這個組件和其他的一些可能自己開發的組件集成更加容易就比如說可能我們自己開發的一個Web的一個K8的Dashboard但是可能可能這Dashboard非常簡單但是我們可能是需要先創建個CAN然後在裡面部署Dashboard的所有功能並不能完全地展示可能你只能創建一兩個節點然後你簡單展示一下就介面展示只能翻一下列表簡單翻一下聊聊幾個列表如果可以跟QuickControl去集成的話你可以發現你的Dashboard你可以非常方便的可以在Dashboard裡創大量的節點大量的集尋大量的資源你可以完全的把集尋的所有功能都體驗出來包括你Dashboard你都是能被使用的就比如說MATCHX的一些使用率你可以自己訂一些MATCHX使用率的一些曲線後續的話這是會支持的也就是你可以單純一個演示的平台你就可以做到一些非常動態的一些圖表的變化或者是大量的資源大概是這個意思最後的話如果大家有使用Quick的話我非常建議大家可以加到Quick的Adapter這個列表裡面也讓我知道下有誰在使用它最後的話這是Quick的一個項目的倉庫地址和它的文檔地址如果大家有需要的話可以掃碼加入一下最後的話這裡是Quick的Slack的左邊是Quick SlackSlack的地址它是在K8的倉庫下然後是一個Quick單獨的一個Channel右邊的話是我剛建的一個Quick的微信群是一個空的如果大家有興趣有後續有一些其他問題的話也可以加這個群裡然後問我今天我們的內容就這麼做大家有什麼問題嗎你好我有三個問題我作為Cavernal MantenerCavernal是一個所以就其中一部分的Performance Testing就不需要關注POD自己本身運行的情況我只需要知道Admission它的這個決定就可以了所以我的第一個問題是在Road Map裡有沒有計畫把Work變成一個GitHub Action的一個工具就是可以直接安裝使用其實是有計畫的甚至這個我其實是直接想想直接把它做一個內置工具你就不需要Action我其實是想往那邊提的而不是但你還要用個Action對因為後面Cavernal做Performance Testing可能要集成在GitHub Action所以如果有的話就非常方便第二個問題就是WorkController自己是支持HA的嗎High AvailabilityHA的話它是可以把自己的組件去支持的可可這邊並沒有做HA但是我集成了可以把自身的控制面組件那假如說我要在安裝的時候把Work安裝成HA是只需要安裝多個Instance就可以嗎還是怎麼樣配置你說是HPA是吧對HPA不需要做任何操作不需要做任何默認的只要版本默認就啟動了好的然後我第三個問題是我在實際使用中的一個問題就是比如說我現在創建了100個Cock的Node然後它其中有一些Node是Unknown或者是Fail了我不知道Woke是不是會自動Recover或者是我需要人為的介入變成Unknown就是有一些Node給我顯示不是Reddit的Status那可能是上一個版本有點對我用的是老的版本還沒有用最新的就是這種情況就是Cock沒有來得及去維護Node的新票導致的後續的話這個問題應該是應該已經修復了然後後續應該不會在這種發生了OK所以在最新的版本裡面它會自動恢復是吧就不需要這個主要還是看配置的因為我這邊的話是Cock的Port的行為和Node的行為其實都是可以自己定制的我這邊只是內置了兩份默認的配置行為這兩份默認配置行為是在大多數情況下它都是能用的但是可能會有些定制的情況或者有些例外的情況我也不能預料到好的感謝好謝謝還有是有問題嗎沒有問題那就今天的分享就這麼多謝謝大家謝謝