將GitLab.com折騰到Kubernetes的一年中,我們踩到了什麼坑?
大約一年以來,基礎架構部門一直致力於將在GitLab.com上執行的所有服務遷移到Kubernetes。不僅在將服務轉移到Kubernetes方面而且在過渡期間管理混合部署方面,這項工作並非沒有挑戰。我們將在本文中探討的過程中吸取了很多教訓。
跨可用區流量增加了計費
Google將其網路劃分為多個區域,並將各個區域劃分為可用區(AZ)。由於Git託管需要大量頻寬,因此瞭解網路出口非常重要。對於內部網路流量,僅當出口保持在單個可用區中時,它才是免費的。
區域GKE群集提供了跨越多個可用區以實現冗餘的便利。我們正在考慮將區域GKE群集拆分為單個區域群集,以使用大量頻寬的服務來避免網路出口費用,同時在群集級別上保持冗餘。
資源限制,請求和擴充套件
我們的遷移故事始於2019年8月,當時我們將GitLab容器登錄檔遷移到Kubernetes,這是第一個遷移的服務。儘管這是一項關鍵且高流量的服務,但它是第一次遷移的不錯選擇,因為它是一個無狀態應用程式,只有很少的外部依賴項。我們遇到的第一個挑戰是由於節點上的記憶體限制而導致大量Pod被驅逐消失。
這要求對請求和限制進行多次更改。我們發現,隨著應用程式隨著時間的推移增加其記憶體利用率,低請求(為每個Pod保留記憶體)和對利用率的慷慨硬性限制是導致節點飽和和驅逐率高的秘訣。
為了對此進行調整,我們最終決定使用更高的請求和更低的限制這樣可以減輕節點的壓力,並在不對節點施加太大壓力的情況下回收豆莢。經歷了一次之後,我們開始以接近相同值的大量請求和限制進行遷移,然後根據需要進行調整。
指標和記錄
在過去的一年中,基礎架構部門的主要變化之一是改進了我們監控和管理SLO的方式。SLO使我們能夠為遷移過程中受到密切監視的單個服務設定目標。
將流量轉移到新叢集
我們遷移的第一個服務從內部限制流量開始,我們將繼續使用此方法來確保在將所有流量提交給群集之前滿足我們的SLO。對於遷移而言,這意味著將內部專案的請求首先路由到Kubernetes,然後使用HAProxy後端加權將其他流量緩慢移至群集。在從VM遷移到Kubernetes的過程中,我們瞭解到,對我們而言,以一種簡便的方法在新舊基礎架構之間移動流量,並使舊基礎架構在遷移後的頭幾天保持可回滾狀態非常有益。
預留的Pod容量和利用率
我們較早發現的一個問題是,雖然我們註冊服務的pod啟動時間很短,但Sidekiq的啟動時間卻長達兩分鐘。當我們開始為需要快速處理工作和快速擴充套件的工作人員將工作負載轉移到Kubernetes時,漫長的Sidekiq啟動時間帶來了挑戰。此處的教訓是,在Kubernetes中,水平pod自動縮放器(HPA)在適應不斷增加的流量方面效果很好,同時評估工作負載特性和設定預留的pod容量(尤其是對於不均衡的需求)也很重要。
在我們的案例中,我們看到作業突然激增,這導致了一個大型擴充套件事件,在我們可以擴充套件節點池之前,該事件使CPU飽和。儘管試圖儘可能地將其擠出叢集,但在遇到一些初始效能問題後,我們現在首先從設定大量的pod開始,然後在以後縮小規模,同時密切關注SLO。
相關文章
- “少踩坑”,拿到offer後,我們可以做什麼?
- [譯] 從 Cron 到 Airflow 的遷移中我們學到了什麼AI
- 那些年我們一起踩過的Dubbo坑
- 程式設計我們學到了什麼?程式設計
- 遊戲將帶我們到什麼樣的未來?遊戲
- 我們被一個 kong 的效能 bug 折騰了一個通宵
- 踩坑無數,我們好像找到了企業數字化轉型最佳方案
- 當我們聊kubernetes operator時,我們在聊些什麼
- 應用實戰:從Redis到Aerospike,我們踩了這些坑RedisROS
- 關於kubernetes我們還有什麼可做的?
- 《從 0 到 1:搭建一個完整的 Kubernetes 叢集》實踐踩坑
- 在騰訊實習的兩個多月,我學到了什麼?
- 一個遊戲已經設計了三年,如今我們到底折騰出個什麼名堂來?遊戲
- 我從小程式學到了什麼(一)
- 騰訊 iOS 三面-這是我踩過的坑!iOS
- Kubernetes探針踩坑記
- 即將推出的 chrome 95 新特性❗ 從中我們能學到什麼❓Chrome
- 從哈夫曼編碼中我們學到了什麼?
- 下一代遊戲主機即將到來,我們可以期待什麼?遊戲
- 我們常聽到的WAL到底是什麼
- 我們從爬取1000億個網頁中學到了什麼?網頁
- 折騰ChatGLM的幾個避坑小技巧
- 我們們碼農可以從曾國藩身上學到點什麼呢(一)
- 踩著我親aj是什麼意思 踩著我親aj是什麼梗?
- 為什麼我們從Yarn切換到pnpmYarnNPM
- 我的學習(踩坑)記錄
- 你的留言,我們都收到了
- 我們從《暗黑破壞神:不朽》的閉門演示中看到了什麼?
- 我從HTML的meta中學到了什麼HTML
- 說到遊戲的文化適配,我們在聊什麼?遊戲
- 為什麼我們從RabbitMQ切換到apache kafka?MQApacheKafka
- 為什麼我們從Webpack切換到Vite - ReplitWebVite
- 將manjaro作為主力開發系統,我遇到了哪些坑。JAR
- 等等!這兩個 Spring-RabbitMQ 的坑我們已經替你踩了SpringMQ
- 貫穿90年代的“女孩遊戲運動”,讓我們學到了什麼?遊戲
- 我們的口號是什麼?
- 《後來的我們》,為什麼我們會錯過彼此?
- 為什麼我從 Mac 換到了 LinuxMacLinux