乾貨分享:容器 PaaS 新技術架構下的運維實踐

時速雲001發表於2018-11-22

2018年11月16-17日,由 InfoQ 主辦的運維&容器技術盛會 CNUTCon 全球運維技術大會在上海·光大會展中心成功舉辦,時速雲聯合創始人兼 CTO 王磊受邀參加此次大會,並發表主題演講。


王磊此次演講的題目為《容器PaaS 新技術架構下的運維實踐》,詳細為大家講解了在基於 Docker +Kubernetes 構建容器 PaaS 的過程中,如何以應用為中心,透過新的技術、工具對服務、節點、叢集、平臺等多個方面進行管理運維,提高系統的自動化運維能力。同時結合基於容器PaaS 構建 DevOps、微服務產品的實踐經驗,分享如何在簡化DevOps 工具和微服務框架本身的同時,提高其可用性和簡化運維管理的成本。


王磊認為,隨著容器技術的普及落地,容器 PaaS 平臺成為了企業雲端計算戰略或雲平臺建設中不可或缺的部分;同時,容器技術也推動了DevOps 和微服務的逐步標準化和深入發展,容器 PaaS已經成為這些新理念、新技術、新框架的理想支撐平臺。但在容器 PaaS 新技術架構落地過程中,企業和運維人員還面臨著如下挑戰:


  • 新技術、新理念帶來的學習成本

  • 技術生態的飛速發展帶來的複雜性以及如何保證其穩定性

  • 管理高密度、快速變化的執行時環境的複雜性

  • 如何在新技術架構下提高自由度和創新能力

  • 如何進行跨中心的開發協作 – DevOps

  • 微服務架構下的平臺支撐及運維


我們先來看一下基於 Kubernetes 的容器 PaaS 平臺有哪些運維的主要方式,這裡從使用者服務、節點、叢集、平臺自身運維幾個角度分別介紹。


使用者服務運維的手段,主要包含以下幾點:


  • 所在節點故障,自動遷移 - 設定合適的驅趕時間

  • 設定探針,防止容器中服務無響應時帶來的故障

  • 合理設定探針各項引數,滾動升級時保障服務不中斷

  • 使用PodDisruptionBudget服務可用性、PodSecurityPolicy安全性、定義 PriorityClass優先順序

  • 透過服務分佈及各項資源使用情況,打散熱點進行重新排程

  • 根據服務的狀態、重啟次數等資料及持續時間告警

  • 根據服務日誌匹配策略、頻率告警

  • 結合 ConfigMap與 gitlab的配置版本控制

  • 把除錯工具交給使用者

  • 服務操作審計、事件統一管理


同時對於資料中介軟體的支撐,可以透過 CRD 和自定義 operator 的方式來對不同的中介軟體叢集進行部署運維等操作。包括叢集的建立維護,資料的備份恢復,儲存的擴容等,都可以透過不同的 CRD 及 controller 的方式進行實現,既要保證服務的可用性,又要保證資料的安全性。


叢集節點的運維,可以從以下幾點考慮並靈活運用:


  • 主要資源指標監控、告警

  • Node affinity /taint

  • 映象、容器gc 策略

  • 擴充套件節點裝置型別- ListAndWatch / Allocate

  • 節點維護狀態

  • 時間同步

  • 節點故障、自定義 agent 上報異常情況

  • 節點資源不足時的處理

    -驅趕策略

    -節點 OOM 行為

     -最佳實踐(預留資源、服務QoS、DaemonSet)


對於 Kubernetes 叢集的運維,主要從叢集高可用、聯邦叢集、資源管理、配額管理,叢集的運維工具、清理工具等方面進行了介紹。同時,在不同的底層 IaaS 平臺基礎上,還可以充分發揮 IaaS 的一些能力來簡化或者改善容器 PaaS 的運維工作。隨著 Kubernetes 自身的快速迭代,升級也就成了不得不考慮的一方面,目前我們提供兩種升級路徑,in-place或者 data migration,分別適合小版本升級和跨度較大的版本升級。



同時,對於整個平臺的監控、運維,我們開發了一個獨立的、易於部署的監控平臺,用來對開發測試映象倉庫,生產映象倉庫、PaaS 平臺、各類 API 服務、K8s 叢集及其核心元件、各節點元件等進行統一狀態收集,可以監控相關服務的狀態,也可以對歷史狀態和異常情況進行回溯,從整體上考量每個元件的服務質量。


對於平臺的運維,當然也要考慮到對資料的備份和恢復,以便在某些場景下對資料進行回滾操作。我們的容器 PaaS 上也提供了平臺、叢集相關的資料定時備份及恢復管理,可以把平臺的 MySQL 資料及每個叢集的 etcd 資料進行統一管理,也允許接入自定義備份源,實現對資料的統一管理。


接下來,介紹一下我們如何基於 Kubernetes 構建自己的 DevOps 平臺。首先說一下時速雲對自己的 DevOps 平臺的期望:


  • 可以更簡單的同其它 DevOps 或者第三方工具整合

  • 使用者的 DevOps 需求比較多樣,需要有更好的定製能力

  • 更容易安裝、運維、擴充套件和伸縮

  • 減少客戶和公司內部的學習成本

  • 同 PaaS 平臺保持一致的使用者體驗和資料一致性,充分發揮 PaaS 平臺已有的能力

  • 幫助自己的 PaaS 和微服務治理產品實現更好的 DevOps 能力


整體 DevOps 平臺的基本架構如下,透過自定義 CRD 和 operator 來對構建任務進行管理,日誌的收集、監控告警、節點管理、構建資源的伸縮、配額管理、許可權控制都可以同PaaS 層的能力相一致,同時可以利用 PaaS 上的 Pod、Job、CronJob、Volume、ConfigMap、Secret 等諸多資源的能力,在持續整合、持續交付、持續部署等方面進行創新。未來 PaaS 層的新功能、功能改善,都可以直接適用於 DevOps 平臺,大大降低了 DevOps 的開發和運維成本。



接著,我們來看一下如何在 DevOps平臺上實現 CI/CD的一些例子:


  • 實現 docker 映象的構建

  • 如何對構建中的產出物進行管理(war 包、jar 包等)

  • 實現 Gitlab/Jenkins/Sonar 等工具的整合

  • 人工稽核任務

  • 實現 Gitlab/Harbor/Jira 等工具的整合


最後,再分享一下如何在容器 PaaS 的新技術平臺上更好的支撐位服務治理框架。主要包括如何對跨部門、跨中心的微服務協同開發進行支撐,如何減少微服務框架和 PaaS 平臺之間的能力衝突,使彼此更好的融合。


在 Spring Cloud 和 K8s融合方面,可以使用 Spring Cloud開源的依賴專案,使用 K8s自身的服務發現、配置管理等相關能力;同時為了方便管理運維,我們將 Zuul 的路由配置使用資料庫進行持久化,將 Zipkin 的呼叫鏈資料和 Hystrix 的熔斷監控資料分別進行了持久化,以便隨時對歷史資料進行回溯;也可以直接在微服務治理平臺上動態配置熔斷策略或者開啟降級操作。


在 Dubbo 和 K8s 融合方面,我們在 K8s 上進行了擴充套件,並對 Dubbo 的依賴包進行定製,替換了 zookeeper,使用 k8s 作為服務發現和註冊中心,並支援 dubbo consumer 和 provider 之間透過 K8s 的 service 或者 pod ip 進行通訊,使用者可以根據自己的需求選擇使用服務端負載均衡還是 Dubbo 的客戶端負載均衡。


綜上,我們一直致力於打造具備可靠、簡單、自動化、整合擴充套件、協作等特點的容器PaaS、DevOps 和微服務治理平臺,希望可以讓使用者更快捷、安全的進行雲原生應用的實踐與創新,未來我們也會繼續在自動化、智慧化運維以及引入適合於 容器 PaaS 的 ChatOps 上繼續自己的努力。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31538300/viewspace-2221110/,如需轉載,請註明出處,否則將追究法律責任。

相關文章