無錫廣電新媒體基于 KubeSphere與Kubekey的容器化實踐
單位簡介
無錫廣播電視集團成立于 1999 年,為全國首家廣電集團。2007 年底組建成立無錫廣播電視臺(與無錫廣播電視集團兩塊牌子、一套班子)。集團作為主流 媒體 和市屬文化國企,承擔宣傳與經營雙重職能:一方面為市委市政府中心工作和全市改革發展穩定大局提供輿論服務,一方面通過保持提升經營效益,為宣傳工作提供支撐,為全市文化產業發展貢獻力量。集團目前擁有 6 個廣播頻率、7 個電視頻道(其中 1 個公交、地鐵移動電視頻道)、“無錫博報”領銜的 新媒體 矩陣。
背景介紹
作為國內最早提出媒體融合發展理念,并付諸實踐和不斷創新的城市廣電媒體之一,無錫廣電早在 2012 年就開始布局移動端戰略并不斷創新,在 2021 年將旗下兩大客戶端升級迭代全新的“無錫博報”客戶端,并形成系列化的“博報” 微信 公眾號、微博和視頻號,組成傳播力和影響力更強的新媒體矩陣。近期榮獲國家廣電總局 2022 年度“全國廣播電視媒體融合先導單位”和“新時代 新品牌 新影響”等榮譽。
在長期的實踐中,無錫廣電逐步摸索出適合城市廣電的媒體融合發展思路和經驗。以傳播力建設為引領,對外積極打造新型傳播體系,堅持“移動優先”戰略,做大做強移動端平臺,占領新興傳播陣地。以全網傳播和本地運營需求為導向,持續推動內部組織架構、體制機制、業務流程、技術平臺的再造和優化。推動“主力軍全面挺進主戰場”,將傳統廣播電視的團隊和產能向新媒體端轉移,打造具有城市媒體特色輿論主陣地。
這就要求無錫廣電必須快速適應不斷變化的運營和市場需求,用高效、敏捷的應用部署和運維對各類成幾何式增長業務提供有力支撐。
在進行容器化改造前,無錫廣電主要是采用基于虛擬化技術的基礎設施環境,每個業務應用根據各自的需求采用獨立虛機部署,隨著時間的積累虛機規模變得越來越龐大、復雜。架構不足日益凸顯,具體如下:
在達到一定規模下虛機操作系統本身需要占用的計算資源和存儲資源較為浪費。
長期積累的老舊操作系統需要跟進維護升級,如:現存大量的 CentOS 系統在官方停止維護后需要新的發行版本替代。
每個應用都需要獨立維護和管理,使得部署和運維成本變得越來越高。
彈性伸縮的能力較差,部署時間長。
缺少測試環境,并且開發環境和生產環境不統一,應用更新依賴手工。
缺少業務與資源利用率的監控,無法提前發現潛在的問題。
這些問題導致運維效率相對較低,無法滿足業務快速迭代的需求。因此,無錫廣電新媒體運維團隊決定進行容器化改造,以提升系統的彈性、靈活性和可維護性,實現如下功能:
更高效的資源利用率:容器化技術可以實現共享操作系統內核,從而減少每個應用所需的計算資源和存儲資源。
更好的可維護性:通過使用容器編排工具,可更好地管理和維護容器,提高部署和運維效率,降低成本。
更高的彈性:容器化技術可以實現快速部署和啟動,實現快速伸縮,從而更好地滿足業務的變化需求。
更高的一致性:容器化技術可以保證開發環境、測試環境和生產環境的一致性,從而降低應用更新的風險。
更好的可觀測性:通過分布式追蹤、可視化的流量拓撲和監控,可以實現對節點到容器到業務資源監控和告警,及時發現、定位和解決問題。
更好的應用生命周期管理:通過集成應用商店和 DevOps 系統及微服務治理等技術,可以使應用的發布管理更加敏捷、彈性和可擴展。
為此,擁抱云原生已經成為整個行業的趨勢,可以幫助降低成本、提高效率、增強競爭力。
選型規劃
通過前期初步使用容器化及 Kubernetes 的積累上,在決定全面轉型容器化前我們對未來整個 Kubernetes 的管理平臺規劃上面建立了結合自身的一些需求:
能夠納管多個 Kubernetes 集群,我們會根據業務適配情況拆分多個集群,并且可在現有集群上安裝。
能夠從 Kubernetes 集群的部署、升級維護、管理的一體化集成,涵蓋集群和應用的生命周期管理。
有 API 接口便于和自有 CI/CD 工具上的對接。
非 CentOS 系統的兼容性(選型期間正推進去 CentOS 化)。
便于今后的集群升級,在集群部署上能完美適配 containerd 容器運行時。
部署后的集群接近原生安裝,以便于后期脫離工具自行維護集群。
有國內安裝鏡像,支持純離線部署。
在選型期間我們正好在規劃部署自研業務的集群,在 CNCF 認證的 Kubernetes 部署工具中發現了 KubeSphere 和 Kubekey 這個解決方案,并在集群部署和生命周期管理方面進行了深度的測試,主要圍繞下面一些維度:
通過測試,發現 KubeSphere+Kubekey 在各個方面都更加契合當初對管理平臺的需求,為此采用 KubeSphere+Kubekey 來搭建了自研業務(運營類為主)的一套 Kubernetes 集群以及管理平臺。
實踐過程
部署架構
基礎設施以自己的機房虛擬化集群為基礎,并使用虛擬機來構建 Kubernetes 集群。在集群規劃方面,分為兩個生產集群,分別用于內容生產業務和運營業務。對于內容生產業務集群,更注重穩定性,因此采用了 1.21 版本。而對于運營業務集群,在追求相對穩定的基礎上,還跟進了一些新版本特性,采用了 1.23 版本。同時在運營業務集群會先行實踐一些新版本的特性積累經驗,以便為將來升級內容生產業務集群打好基礎。當然,無論是哪個集群,每次進行相應的升級和維護之前,都會創建一個臨時的測試集群,以進行相關操作的測試和驗證。
對外業務暴露
為了實現 K8s 集群對外業務的訪問,使用了兩臺 OpenResty 服務器,并通過反向代理模式將流量分發到 K8s 集群中的各個工作節點的 Ingress NodePort 端口。為了保證高可用性對 OpenResty 服務器進行了雙活部署。同時使用 OpenResty 實現了配置的熱更新、限流和安全防護功能。此外,還在 OpenResty 上統一了全局的 SSL 證書管理,以簡化在 K8s 集群中分散部署 SSL 證書帶來的管理復雜度。通過這些措施,能夠更加高效地管理 Kubernetes 集群對外的業務訪問。
為了實現 K8s 集群管理的高可用性,使用 Keepalived 和 HAProxy 部署了 1 個高可用負載均衡服務,用來實現后端 3 臺 master 節點 API server 的對外統一暴露。此外,也搭建了一套 dnsmasq 用于提供各個節點的 DNS 解析服務,以便于解析一些內部服務的域名。這樣,可以確保 Kubernetes 集群的 API server 能夠持續提供服務,并且內部服務的域名能夠得到正確的解析。
存儲實現方案
根據業務需求,需將較多傳統的虛機業務遷移到容器化環境下,因此對 K8s 集群的存儲方案進行了深入了解。目標是充分利用現有的硬件基礎,同時盡可能簡化架構并降低運維成本。因此,在底層存儲方面,使用現有專業的硬件 NAS 存儲和基于 vSphere 的 Cloud Native Storage(CNS),以應對不同的數據持久化場景。
為了解決多個 Deployment 同時讀寫的應用的存儲問題,采用了基于 nfs-subdir-external-provisioner 的 storageclass 存儲類,或直接在 Pod 內掛載 nfs volumes 的形式。然而,我們也意識到 NFS 存儲在某些應用場景下可能不兼容并存在性能問題。因此,針對只需要 ReadWriteOnce 訪問類型且對性能要求較高的數據持久化場景,例如數據庫和緩存,采用了虛擬化環境自帶的 vSphere 的 CNS 來實現 storageclass 存儲類。這極大地簡化了存儲解決方案的復雜度。
可觀測性方案
作為廣電宣傳應用對整個平臺穩定性的要求較高,在日常的運維中對可觀測性關注度較高,最初采用了 Prometheus-operator 套件和 Grafana 進行集群資源監控,同時使用 Netdata 進行配合。對于應用日志方面,則采用了 Loki、Promtail 和 Grafana 進行處理。但在應用中發現,這個方案在集群內應用管理方面的結合性不夠強,存在一些使用上的割裂。在體驗了 KubeSphere 提供的整體監控和日志方案后,果斷決定切換到 KubeSphere 上。這樣做解決了之前各個系統之間的割裂問題,實現了集群+應用的管理、監控和日志的一體化。
DevOps 方案
在 DevOps 方面,采用了 GitLab CI/CD 的方案。研發只需要提交代碼并打上 tag,GitLab 會自動生成相應的 jobs。然后,通過 GitLab Runner 運行相應的腳本,實現打包、鏡像推送等操作,并通過特定的 tag 名稱觸發 API 修改線上應用的鏡像 tag,從而實現自動部署。
應用效果
相較于以前的 Kubernetes 集群管理方式,使用 KubeSphere 后我們實現了:
Kubernetes 集群部署和升級的方便快捷性
在應用 KubeSphere 后,不再需要手動安裝和配置 Kubernetes 集群,因為 KubeSphere 提供了 KubeKey 工具實現了一鍵式的部署和升級功能,這使得可以快速創建和管理集群。此外,KubeSphere 還提供了基于 Helm 和 Operator 的應用管理,可以更加方便地部署和管理應用。
對多個 Kubernetes 集群的統一管理
在實際應用業務中,需要同時管理多個 Kubernetes 集群。在應用 KubeSphere 后,可以將多個 Kubernetes 集群統一管理,從而更加方便地進行操作和監控。此外,KubeSphere 還提供了集群間的應用鏡像復制和調度,使得可以在多個集群之間靈活地部署應用。
實現租戶形式的企業空間訪問控制管理和資源分配
在業務中需要對不同的用戶和團隊進行訪問控制管理和資源分配。在應用 KubeSphere 后,可以通過創建租戶來實現對企業空間的訪問控制和資源分配,從而更加靈活地管理業務。
集群和應用的日志、監控平臺的統一
在之前,需要分別使用不同的日志和監控工具后臺來管理集群和應用。在應用 KubeSphere 后,我們可以使用 KubeSphere 提供的統一日志和監控平臺來管理集群和應用,可以更加方便地查看和分析數據。
簡化了在應用治理方面的使用門檻
在我們的業務中,應用治理是非常重要的一部分。在應用 KubeSphere 后,可以使用 KubeSphere 提供的應用治理組件,例如灰度發布和流量管理,來更加方便地管理應用。這樣,可以降低應用治理的使用成本,提高效率。