「託管雲物理機歸入UK8S集羣統一管理後,可實現託管雲物理機保障平峯時業務正常運行,高峯時期利用UK8S快速擴容公有云資源的理想應用場景,繼而提高混合雲的可用性。」node
——海豹他趣技術負責人 張嵩安全
混合雲的業務模式服務器
廈門海豹他趣信息技術股份有限公司於2012年4月成立,是一家基於 B2C 模式的綜合性兩性健康電商服務平臺企業。目前採用混合雲(公有云+託管雲)的技術架構模式,在保證存量IT資源合理利用的同時,又可以與公有云產品內網高速安全互通,實現資源的彈性擴展。微信
海豹他趣選擇將部分數據敏感的業務部署在UCloud的託管雲區域,經過租賃UCloud機房機櫃的方式,託管自有設備,並依照自身電商業務特色進行高峯*冗餘部署,但該模式下存在平峯時期物理機資源利用率低的現象。網絡
業務容器化改造的過程當中,海豹他趣已在公有云場景下實現UK8S的資源統一納管,故想進一步提升託管雲的資源利用率,實現託管雲物理機保障平峯時業務正常運行,高峯時期利用UK8S快速擴容公有云資源的應用場景。架構
託管雲中自建K8S集羣的難題負載均衡
起初,海豹他趣嘗試在託管雲中自建K8S集羣,但運行後發現,同時在公有云和託管雲中使用K8S集羣,會存在網絡互通、存儲、負載均衡等方面的問題。與此同時,自行部署K8S集羣需投入一支專業團隊的人力成本,包含開發以及部署K8S網絡、存儲和負載均衡等工做,需自行挑選和部署第三方網絡插件、搭建存儲集羣並適配K8S存儲類型,以及維護一套負載均衡集羣等。此外,集羣搭建後的維護工做也費時費力。權衡之下,海豹他趣更但願將集羣的管理和運維工做交給雲廠商處理,從而自身精力能專一於業務研發之中。運維
託管雲物理機歸入UK8S集羣測試
UCloud已推出的UK8S能自動化實現公有云場景下的K8S集羣部署以及運維工做,有效解決上述自行部署和維護K8S集羣的難題。插件
同時,因爲公有云和託管雲分屬不一樣的環境,在網絡、服務器資源管理、控制等各方面徹底獨立,彼此之間僅有三層網絡打通,要實現二者場景下K8S集羣的統一略爲繁瑣。目前市面上各家雲廠商針對混合雲下的K8S集羣部署,給出的解決方案可能是在公有云和託管雲下分別部署一套K8S集羣,提供支持多集羣管理的服務。
但考慮到該用戶在跨集羣模式下的困擾,UCloud開始策劃將託管雲物理機歸入UK8S現有集羣統一管理的方案,即在混合雲架構下僅需部署管理一套K8S集羣。
解決三大技術問題
前文也說起,部署K8S集羣需解決網絡、存儲以及負載均衡方案,UCloud的UK8S團隊嘗試在三個問題上逐個擊破。
網絡實現
K8S自己並不提供網絡能力,而是將網絡接口開放,由外部插件來實現,其網絡模型須要知足如下條件:
一、 Node與Node節點之間可經過IP直接通訊;
二、 不一樣節點的Pod之間可經過IP直接通訊;
三、Pod與非宿主Node節點之間可經過IP直接通訊。
首先,針對Node節點之間的通訊。UK8S運行在公有云的VPC網絡下,VPC網絡與託管雲雖屬於不一樣的網段,但彼此間已實現三層互通,所以UK8S公有云中的Node節點與託管雲中的物理機之間可經過IP直接通訊,該條件知足。
其次是Pod之間以及Pod與Node節點間的通訊問題,可具體描述爲(1)公有云中的Pod與託管雲中的Pod互通,(2)公有云中的Pod與託管雲中的Node互通,或(3)公有云中的Node與託管雲中的Pod互通。
下圖是UK8S在公有云場景下的網絡模型,採用Underlay方案,Pod與Node網絡處於同一層面,CNI插件會調用UCloud API爲每一個Pod分配一個VPC IP。因爲VPC IP已默認與託管雲中的物理機互通,即表明公有云中的Pod已實現與託管雲中的Node互通,此外公有云中Pod與Node網絡同等,上述待解決問題可簡化爲公有云中的Pod與託管雲中的Pod互通。
爲實現Pod之間的互通,託管雲的網絡模型也一樣採用Underlay模式。以下圖所示,二者場景下全部的Node節點均採用Underlay模式的CNI插件,公有云中的Node已默認安裝CNI-VPC插件,託管雲中的Node可採用二層Bridge或自定義路由的Underlay模式CNI插件。
以自定義路由爲例,託管雲的網段爲172.16.0.0/16,安裝kubelet後,將Bridge插件拷貝至/opt/cni/bin下,再配置插件啓動參數便可。CNI插件會在Node上先建立一個網橋,當Pod啓動時,經過veth pair鏈接該網橋到pause容器的網絡命名空間,便可實現託管雲中的Pod互通。因爲172.16.0.0/16已在網關上配置完成,最後在交換機側配置自定義路由,可最終完成公有云中的Pod與託管雲中的Pod互通。
存儲實現
除去內置的存儲插件,UK8S在公有云中額外集成UDisk、UFS兩種雲儲存產品。目前UCloud託管雲中物理機尚不支持掛載雲存儲產品,所以UK8S中的存儲插件需實現兼容,只支持掛載至公有云中的Node節點上。
實現形式上,給公有云中的Node節點打上相似nodetype: uhost的標籤便可。用戶使用時,若Pod須要掛載單寫模式的存儲卷,在調度Pod時聲明nodeAffinity,就可指定Pod分配至公有云中的Node節點。
負載均衡實現
最後需解決服務如何對外暴露的問題,K8S提供了幾種服務暴露的方案,其中LoadBalancer類型的Service最爲通用,同時因爲在託管雲中維護一個可靠的負載均衡設備成本較高,故使用公有云中的ULB做爲K8S的外部負載均衡器。
業務流量入口由公有云的ULB和Node節點承載,經過在K8S集羣中定義LoadBalancer類型的Service,業務流量可先經過ULB轉發到公有云Node節點上,再經過公有云節點上kube-proxy配置的iptables規則轉發至整個集羣中實際工做的Pod。對於ClusterIP類型的Service,與現有K8S集羣無異,經過kube-proxy在集羣內部通訊。
此外,也可在公有云節點部署Ingress Controller,代理部署在託管雲節點的業務流量。
採用該方案實現的效果
一、提升託管雲物理機的利用率
託管雲物理機歸入UK8S集羣統一管理後,可實現託管雲物理機保障平峯時業務正常運行,高峯時期利用UK8S快速擴容公有云資源的應用場景,無需原先的高峯*冗餘部署,有效解決平峯時期資源利用率低的問題,從而節約資源成本。
二、減小公有云主機資源的冗餘
實際業務中,遇到大型活動或突增的服務請求時, 採用雲主機自動服務擴容的方式處理速度較慢,一般須要五分鐘左右的時間,而利用UK8S能夠賺取雲主機啓動與容器啓動速度的時差,作到資源的快速擴容,繼而減小云主機平常冗餘的數量。
三、無需K8S部署和維護的人力投入
用戶可在UK8S上部署、管理以及擴展容器化應用,而無需關心K8S集羣自身的搭建及維護等運維類工做,可以更加集中於業務實現。
四、加快服務上線速度
一方面,UK8S中經過統一的鏡像,可保證代碼及部分配置在測試環境、預發佈環境、正式環境中的一致性, 避免環境不一致引起的異常情況;另外一方面,UK8S有其完善的CI/CD流程,可簡化服務部署步驟, 有效減小服務上線時的人工干預,實現效率的全面提高。
寫在最後
隨着K8S使用的逐步增多,運行部署K8S的環境也日趨複雜,對於企業IT人員而言,找到一種兼容現有業務環境的K8S配置、管理方式顯得尤其重要,特別是在多雲、IDC與雲並存等環境下如何配置K8S。上述提供的針對UCloud混合雲場景下的K8S部署方案,其思路一樣適用於非UCloud混合雲環境。
歡迎加入UCloud K8S技術交流羣,和咱們共同探討Kubernetes前沿技術。(因爲羣人數已超過100人,請添加羣主微信zhaoqi628543,備註K8S便可邀請入羣。)