'分享陌陌基於K8s和Docker容器管理平臺的架構'

"

容器集群管理系統與容器雲平臺的選擇非常重要,因為容器管理系統是否先進智能、容器雲管理平臺是否靈活易用且高效,直接影響企業開發運維的效率與速度、資源利用率的高低。在這個競爭激烈,風雲突變的時代,應用的開發效率、穩定性、擴展性和安全性,決定了企業的競爭力與市值。

當下,K8s憑藉在擴展性、管理、大數據分析、網絡場景、兼容性、負載均衡、灰度升級、失敗冗餘、容災恢復、 DevOps 等方面的優勢,受到部分企業的青睞。今天跟大家一起分享陌陌在K8s容器方面的一些應用實踐。

為什麼選擇使用K8s?

在使用k8s之前,陌陌在應用發佈和運行環境方面遇到的具體問題,如下:

  • 應用發佈時間很長,主要是因為發佈過程中需要做隔離、恢復等動作,還需要登錄查看實際狀態、日誌。
  • 當遇到晚高峰情況這樣的突發狀況,需要緊急擴容。這時業務方會申請機器,可新機需要進行環境初始化、相關配置,這樣導致效率非常低。
  • 應用運行環境的軟件版本不一致,配置複雜,維護成本比較高。
  • 硬件資源利用率不足,總體成本比較高。

針對以上遇到的問題,我們決定對架構進行改造,同時制定了一系列架構改進目標,如下:

  • 提高服務可用性,可管理性。可用性是當某一臺機器出現宕機,會自動切換到其他機器。可管理性是在應用需要擴容時,自動化去部署運行環境、相關配置。開發不需要再去考慮服務器的問題。
  • 提高資源隔離性,實現服務混合部署。
  • 應用級別的監控,當機器需要擴容時,自動排查是哪個應用所致。
  • 服務平滑遷移。

綜合這些問題和目標,陌陌選擇使用 Kubernetes來管理 Docker 集群,當 Kubernetes 滿足不了需求時,可在部署平臺開發相應的功能來滿足開發查看日誌、監控和報警等需求,儘量避免登錄主機和容器。

陌陌容器管理平臺的架構演進

陌陌從2015年下半年開始對Docker進行調研和實踐,2016年初開始調研k8s,嘗試架構方面的改進工作,基於自研發布系統及K8s、OVS和Docker構建容器管理平臺。實現了基於Docker集群的部署系統,便於開發者便捷地部署自己的應用程序。最終達到部署環境乾淨一致,可重複部署、迅速擴容和回滾。

如下圖,是容器管理平臺的架構圖


"

容器集群管理系統與容器雲平臺的選擇非常重要,因為容器管理系統是否先進智能、容器雲管理平臺是否靈活易用且高效,直接影響企業開發運維的效率與速度、資源利用率的高低。在這個競爭激烈,風雲突變的時代,應用的開發效率、穩定性、擴展性和安全性,決定了企業的競爭力與市值。

當下,K8s憑藉在擴展性、管理、大數據分析、網絡場景、兼容性、負載均衡、灰度升級、失敗冗餘、容災恢復、 DevOps 等方面的優勢,受到部分企業的青睞。今天跟大家一起分享陌陌在K8s容器方面的一些應用實踐。

為什麼選擇使用K8s?

在使用k8s之前,陌陌在應用發佈和運行環境方面遇到的具體問題,如下:

  • 應用發佈時間很長,主要是因為發佈過程中需要做隔離、恢復等動作,還需要登錄查看實際狀態、日誌。
  • 當遇到晚高峰情況這樣的突發狀況,需要緊急擴容。這時業務方會申請機器,可新機需要進行環境初始化、相關配置,這樣導致效率非常低。
  • 應用運行環境的軟件版本不一致,配置複雜,維護成本比較高。
  • 硬件資源利用率不足,總體成本比較高。

針對以上遇到的問題,我們決定對架構進行改造,同時制定了一系列架構改進目標,如下:

  • 提高服務可用性,可管理性。可用性是當某一臺機器出現宕機,會自動切換到其他機器。可管理性是在應用需要擴容時,自動化去部署運行環境、相關配置。開發不需要再去考慮服務器的問題。
  • 提高資源隔離性,實現服務混合部署。
  • 應用級別的監控,當機器需要擴容時,自動排查是哪個應用所致。
  • 服務平滑遷移。

綜合這些問題和目標,陌陌選擇使用 Kubernetes來管理 Docker 集群,當 Kubernetes 滿足不了需求時,可在部署平臺開發相應的功能來滿足開發查看日誌、監控和報警等需求,儘量避免登錄主機和容器。

陌陌容器管理平臺的架構演進

陌陌從2015年下半年開始對Docker進行調研和實踐,2016年初開始調研k8s,嘗試架構方面的改進工作,基於自研發布系統及K8s、OVS和Docker構建容器管理平臺。實現了基於Docker集群的部署系統,便於開發者便捷地部署自己的應用程序。最終達到部署環境乾淨一致,可重複部署、迅速擴容和回滾。

如下圖,是容器管理平臺的架構圖


分享陌陌基於K8s和Docker容器管理平臺的架構


容器管理平臺主要功能有集群管理和狀態展示、灰度發佈和代碼回退、組件模板、應用管理、鏡像倉庫和權限管理等。它採用前後端分離的架構,前端使用 JS 渲染,後端使用 Python 提供 API。這樣開發者可以快速的進行發佈和回退操作。

容器管理平臺在應用發佈流程,集群調度策略,k8s節點網絡架構,阿里雲支持,基礎監控指標等方面進行了優化改進。

應用發佈流程

陌陌之前老版本發佈系統是串行的,需要單臺進行替換。如下圖,是新架構下應用的發佈流程:


"

容器集群管理系統與容器雲平臺的選擇非常重要,因為容器管理系統是否先進智能、容器雲管理平臺是否靈活易用且高效,直接影響企業開發運維的效率與速度、資源利用率的高低。在這個競爭激烈,風雲突變的時代,應用的開發效率、穩定性、擴展性和安全性,決定了企業的競爭力與市值。

當下,K8s憑藉在擴展性、管理、大數據分析、網絡場景、兼容性、負載均衡、灰度升級、失敗冗餘、容災恢復、 DevOps 等方面的優勢,受到部分企業的青睞。今天跟大家一起分享陌陌在K8s容器方面的一些應用實踐。

為什麼選擇使用K8s?

在使用k8s之前,陌陌在應用發佈和運行環境方面遇到的具體問題,如下:

  • 應用發佈時間很長,主要是因為發佈過程中需要做隔離、恢復等動作,還需要登錄查看實際狀態、日誌。
  • 當遇到晚高峰情況這樣的突發狀況,需要緊急擴容。這時業務方會申請機器,可新機需要進行環境初始化、相關配置,這樣導致效率非常低。
  • 應用運行環境的軟件版本不一致,配置複雜,維護成本比較高。
  • 硬件資源利用率不足,總體成本比較高。

針對以上遇到的問題,我們決定對架構進行改造,同時制定了一系列架構改進目標,如下:

  • 提高服務可用性,可管理性。可用性是當某一臺機器出現宕機,會自動切換到其他機器。可管理性是在應用需要擴容時,自動化去部署運行環境、相關配置。開發不需要再去考慮服務器的問題。
  • 提高資源隔離性,實現服務混合部署。
  • 應用級別的監控,當機器需要擴容時,自動排查是哪個應用所致。
  • 服務平滑遷移。

綜合這些問題和目標,陌陌選擇使用 Kubernetes來管理 Docker 集群,當 Kubernetes 滿足不了需求時,可在部署平臺開發相應的功能來滿足開發查看日誌、監控和報警等需求,儘量避免登錄主機和容器。

陌陌容器管理平臺的架構演進

陌陌從2015年下半年開始對Docker進行調研和實踐,2016年初開始調研k8s,嘗試架構方面的改進工作,基於自研發布系統及K8s、OVS和Docker構建容器管理平臺。實現了基於Docker集群的部署系統,便於開發者便捷地部署自己的應用程序。最終達到部署環境乾淨一致,可重複部署、迅速擴容和回滾。

如下圖,是容器管理平臺的架構圖


分享陌陌基於K8s和Docker容器管理平臺的架構


容器管理平臺主要功能有集群管理和狀態展示、灰度發佈和代碼回退、組件模板、應用管理、鏡像倉庫和權限管理等。它採用前後端分離的架構,前端使用 JS 渲染,後端使用 Python 提供 API。這樣開發者可以快速的進行發佈和回退操作。

容器管理平臺在應用發佈流程,集群調度策略,k8s節點網絡架構,阿里雲支持,基礎監控指標等方面進行了優化改進。

應用發佈流程

陌陌之前老版本發佈系統是串行的,需要單臺進行替換。如下圖,是新架構下應用的發佈流程:


分享陌陌基於K8s和Docker容器管理平臺的架構


新的發佈系統是用戶提交代碼後,在發佈系統選擇要部署的commit,點擊構建以後,系統會自動編譯,打包成鏡像,推送鏡像倉庫。如果構建成功,用戶點擊發布新版本的實例,灰度沒有問題,全量,下線老版本的實例。回退時代碼不需要構建,直接發佈老版本實例。在某段時間內,新老版本是同時存在的。

集群調度策略

陌陌的集群調度策略是為應用配置默認的location(集群標籤),如果是線上應用,應用需要申請location,部署到正式的集群(機房要求,資源充足)。這裡應用都不能獨佔集群,均採用的是混合部署的方式。同一個集群下,分成不同組並組定義標籤,應用支持獨佔機器,同一個組之間的應用實例可以隨意漂移。

IDC網絡節點

在IDC網絡節點構建部分,陌陌使用的是全局IP地址,容器與容器之間、容器與主機之間都是互通的。這樣一來,通信可以不使用任何封裝等技術,相對來說比較高效且對現有網絡變動影響小(僅需封裝trunk,無其他協議,mtu等變化)。

如下圖,是IDC網絡節點架構圖:


"

容器集群管理系統與容器雲平臺的選擇非常重要,因為容器管理系統是否先進智能、容器雲管理平臺是否靈活易用且高效,直接影響企業開發運維的效率與速度、資源利用率的高低。在這個競爭激烈,風雲突變的時代,應用的開發效率、穩定性、擴展性和安全性,決定了企業的競爭力與市值。

當下,K8s憑藉在擴展性、管理、大數據分析、網絡場景、兼容性、負載均衡、灰度升級、失敗冗餘、容災恢復、 DevOps 等方面的優勢,受到部分企業的青睞。今天跟大家一起分享陌陌在K8s容器方面的一些應用實踐。

為什麼選擇使用K8s?

在使用k8s之前,陌陌在應用發佈和運行環境方面遇到的具體問題,如下:

  • 應用發佈時間很長,主要是因為發佈過程中需要做隔離、恢復等動作,還需要登錄查看實際狀態、日誌。
  • 當遇到晚高峰情況這樣的突發狀況,需要緊急擴容。這時業務方會申請機器,可新機需要進行環境初始化、相關配置,這樣導致效率非常低。
  • 應用運行環境的軟件版本不一致,配置複雜,維護成本比較高。
  • 硬件資源利用率不足,總體成本比較高。

針對以上遇到的問題,我們決定對架構進行改造,同時制定了一系列架構改進目標,如下:

  • 提高服務可用性,可管理性。可用性是當某一臺機器出現宕機,會自動切換到其他機器。可管理性是在應用需要擴容時,自動化去部署運行環境、相關配置。開發不需要再去考慮服務器的問題。
  • 提高資源隔離性,實現服務混合部署。
  • 應用級別的監控,當機器需要擴容時,自動排查是哪個應用所致。
  • 服務平滑遷移。

綜合這些問題和目標,陌陌選擇使用 Kubernetes來管理 Docker 集群,當 Kubernetes 滿足不了需求時,可在部署平臺開發相應的功能來滿足開發查看日誌、監控和報警等需求,儘量避免登錄主機和容器。

陌陌容器管理平臺的架構演進

陌陌從2015年下半年開始對Docker進行調研和實踐,2016年初開始調研k8s,嘗試架構方面的改進工作,基於自研發布系統及K8s、OVS和Docker構建容器管理平臺。實現了基於Docker集群的部署系統,便於開發者便捷地部署自己的應用程序。最終達到部署環境乾淨一致,可重複部署、迅速擴容和回滾。

如下圖,是容器管理平臺的架構圖


分享陌陌基於K8s和Docker容器管理平臺的架構


容器管理平臺主要功能有集群管理和狀態展示、灰度發佈和代碼回退、組件模板、應用管理、鏡像倉庫和權限管理等。它採用前後端分離的架構,前端使用 JS 渲染,後端使用 Python 提供 API。這樣開發者可以快速的進行發佈和回退操作。

容器管理平臺在應用發佈流程,集群調度策略,k8s節點網絡架構,阿里雲支持,基礎監控指標等方面進行了優化改進。

應用發佈流程

陌陌之前老版本發佈系統是串行的,需要單臺進行替換。如下圖,是新架構下應用的發佈流程:


分享陌陌基於K8s和Docker容器管理平臺的架構


新的發佈系統是用戶提交代碼後,在發佈系統選擇要部署的commit,點擊構建以後,系統會自動編譯,打包成鏡像,推送鏡像倉庫。如果構建成功,用戶點擊發布新版本的實例,灰度沒有問題,全量,下線老版本的實例。回退時代碼不需要構建,直接發佈老版本實例。在某段時間內,新老版本是同時存在的。

集群調度策略

陌陌的集群調度策略是為應用配置默認的location(集群標籤),如果是線上應用,應用需要申請location,部署到正式的集群(機房要求,資源充足)。這裡應用都不能獨佔集群,均採用的是混合部署的方式。同一個集群下,分成不同組並組定義標籤,應用支持獨佔機器,同一個組之間的應用實例可以隨意漂移。

IDC網絡節點

在IDC網絡節點構建部分,陌陌使用的是全局IP地址,容器與容器之間、容器與主機之間都是互通的。這樣一來,通信可以不使用任何封裝等技術,相對來說比較高效且對現有網絡變動影響小(僅需封裝trunk,無其他協議,mtu等變化)。

如下圖,是IDC網絡節點架構圖:


分享陌陌基於K8s和Docker容器管理平臺的架構


在這樣的架構下,網絡部署和擴展相對簡單,因為每臺機器的IP地址段是預先靜態配置的。這裡值得注意的是,服務器雙鏈路上聯,trunk上聯物理交換機需要合理避免二層環路。這樣的方式存在的不足是,當容器較多時,mac地址數量增多,給物理交換機Mac地址錶帶來壓力,廣播域擴大就是需要嚴謹的規劃vlan 角色相關信息。

阿里雲支持

當前,陌陌K8s master集群下節點包含IDC、阿里雲及兩者混合三種方式,如下圖:


"

容器集群管理系統與容器雲平臺的選擇非常重要,因為容器管理系統是否先進智能、容器雲管理平臺是否靈活易用且高效,直接影響企業開發運維的效率與速度、資源利用率的高低。在這個競爭激烈,風雲突變的時代,應用的開發效率、穩定性、擴展性和安全性,決定了企業的競爭力與市值。

當下,K8s憑藉在擴展性、管理、大數據分析、網絡場景、兼容性、負載均衡、灰度升級、失敗冗餘、容災恢復、 DevOps 等方面的優勢,受到部分企業的青睞。今天跟大家一起分享陌陌在K8s容器方面的一些應用實踐。

為什麼選擇使用K8s?

在使用k8s之前,陌陌在應用發佈和運行環境方面遇到的具體問題,如下:

  • 應用發佈時間很長,主要是因為發佈過程中需要做隔離、恢復等動作,還需要登錄查看實際狀態、日誌。
  • 當遇到晚高峰情況這樣的突發狀況,需要緊急擴容。這時業務方會申請機器,可新機需要進行環境初始化、相關配置,這樣導致效率非常低。
  • 應用運行環境的軟件版本不一致,配置複雜,維護成本比較高。
  • 硬件資源利用率不足,總體成本比較高。

針對以上遇到的問題,我們決定對架構進行改造,同時制定了一系列架構改進目標,如下:

  • 提高服務可用性,可管理性。可用性是當某一臺機器出現宕機,會自動切換到其他機器。可管理性是在應用需要擴容時,自動化去部署運行環境、相關配置。開發不需要再去考慮服務器的問題。
  • 提高資源隔離性,實現服務混合部署。
  • 應用級別的監控,當機器需要擴容時,自動排查是哪個應用所致。
  • 服務平滑遷移。

綜合這些問題和目標,陌陌選擇使用 Kubernetes來管理 Docker 集群,當 Kubernetes 滿足不了需求時,可在部署平臺開發相應的功能來滿足開發查看日誌、監控和報警等需求,儘量避免登錄主機和容器。

陌陌容器管理平臺的架構演進

陌陌從2015年下半年開始對Docker進行調研和實踐,2016年初開始調研k8s,嘗試架構方面的改進工作,基於自研發布系統及K8s、OVS和Docker構建容器管理平臺。實現了基於Docker集群的部署系統,便於開發者便捷地部署自己的應用程序。最終達到部署環境乾淨一致,可重複部署、迅速擴容和回滾。

如下圖,是容器管理平臺的架構圖


分享陌陌基於K8s和Docker容器管理平臺的架構


容器管理平臺主要功能有集群管理和狀態展示、灰度發佈和代碼回退、組件模板、應用管理、鏡像倉庫和權限管理等。它採用前後端分離的架構,前端使用 JS 渲染,後端使用 Python 提供 API。這樣開發者可以快速的進行發佈和回退操作。

容器管理平臺在應用發佈流程,集群調度策略,k8s節點網絡架構,阿里雲支持,基礎監控指標等方面進行了優化改進。

應用發佈流程

陌陌之前老版本發佈系統是串行的,需要單臺進行替換。如下圖,是新架構下應用的發佈流程:


分享陌陌基於K8s和Docker容器管理平臺的架構


新的發佈系統是用戶提交代碼後,在發佈系統選擇要部署的commit,點擊構建以後,系統會自動編譯,打包成鏡像,推送鏡像倉庫。如果構建成功,用戶點擊發布新版本的實例,灰度沒有問題,全量,下線老版本的實例。回退時代碼不需要構建,直接發佈老版本實例。在某段時間內,新老版本是同時存在的。

集群調度策略

陌陌的集群調度策略是為應用配置默認的location(集群標籤),如果是線上應用,應用需要申請location,部署到正式的集群(機房要求,資源充足)。這裡應用都不能獨佔集群,均採用的是混合部署的方式。同一個集群下,分成不同組並組定義標籤,應用支持獨佔機器,同一個組之間的應用實例可以隨意漂移。

IDC網絡節點

在IDC網絡節點構建部分,陌陌使用的是全局IP地址,容器與容器之間、容器與主機之間都是互通的。這樣一來,通信可以不使用任何封裝等技術,相對來說比較高效且對現有網絡變動影響小(僅需封裝trunk,無其他協議,mtu等變化)。

如下圖,是IDC網絡節點架構圖:


分享陌陌基於K8s和Docker容器管理平臺的架構


在這樣的架構下,網絡部署和擴展相對簡單,因為每臺機器的IP地址段是預先靜態配置的。這裡值得注意的是,服務器雙鏈路上聯,trunk上聯物理交換機需要合理避免二層環路。這樣的方式存在的不足是,當容器較多時,mac地址數量增多,給物理交換機Mac地址錶帶來壓力,廣播域擴大就是需要嚴謹的規劃vlan 角色相關信息。

阿里雲支持

當前,陌陌K8s master集群下節點包含IDC、阿里雲及兩者混合三種方式,如下圖:


分享陌陌基於K8s和Docker容器管理平臺的架構


阿里雲採用的網絡模式是Host-gw,陌陌搭建了一條IDC與阿里雲的VPC專線和VPC的虛擬路由進行靜態配置。無論是IDC節點,還是阿里雲節點上的應用都要適應IP動態變化。

基礎監控指標

陌陌的監控方案大多是基於Kublet cadvisor metrics接口去做的數據彙總。最初陌陌採用的方式是利用Python腳本,去調用接口,在取到一些CPU內存、網絡、流量的數據,存入ES,分析之後進行展示。之後的報警系統,是利用Java應用去調取Kublet cadvisor metrics接口,進行數據的收集。

基礎監控指標主要有內存(total,rss,cache)、流量(incoming,outgoing)、網絡packets(drop,error, total)等。

應用遷移

應用遷移方面,陌陌做了很多適配工作,使得應用不需要太多的改動就可以無縫遷移。具體適配細節如下:

  • 應用適應動態ip變化。
  • 自定義構建過程(build.sh)。
  • 應用使用不同的服務發現框架(nginx,rpc)(start.sh)。
  • 應用銷燬過程中做一些額外處理(stop.sh)。

在應用遷移過程中,也遇到了一些問題,如Swap、cpu軟中斷優化、資源利用率、Ip白名單、適用於內網等問題。當前,陌陌的容器業務規模服務器約400臺、線上容器6000、應用700+。應用的類型是java+php+node+python+tomcat。

未來展望

希望運維可以實現對應用請求量,線程數,流量等指標的監控。基準值部分,達到單實例可承載請求量,線程數,流量。伸縮方面,做到最小保留實例數,最大擴容實例數,根據監控反饋和基準值計算需要擴容和縮容的實例數, 按照各個集群資源餘量按比例伸縮。

今日就陌陌關於docker和k8s的架構就簡單分享到這裡,謝謝大家。

"

相關推薦

推薦中...