您好,登錄后才能下訂單哦!
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 上繼續自己的努力。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。