容器雲平臺和Kubernetes之間不得不說的那些事

前言
我們知道,傳統的應用部署方式是將應用直接部署於單獨的物理機或虛擬機中。但是在企業數字化轉型的浪潮下,如何滿足日益豐滿的業務需求,如何高效踐行敏捷研發,如何更好的將應用落地實施於客戶現場,保障穩定高可用並利於維護,是傳統企業不得不面對並解決的問題。

  用友雲技術中臺爲助力企業數字化轉型提供了大量利器,比如本文將着重提及的容器雲平臺,就是其中之一。

  容器雲平臺,是基於容器的運行時引擎,利用Kubernetes等容器調度方案,用以解決開發、測試、運行環境統一,服務快速部署,運行期服務管理、調度等問題而建設的平臺。

  那麼,容器雲平臺到底是如何建設的呢?利用了容器技術的哪些優勢呢?又是如何利用Kubernetes實現對外提供服務的呢?最後,容器雲平臺到底有什麼能力,爲企業提供了哪些價值呢?

  本文將就這這些疑問,爲您一一解答。相信您讀過之後,一定會瞭解到關於容器雲和Kubernetes之前更多的祕密。

一、容器雲平臺的技術選型

容器化技術——Docker

  Docker 是使用 Go 語言進行開發,基於 Linux 內核的 cgroup、Namespace 等技術,對應用的進程進行封裝隔離,最終在操作系統層面實現的虛擬化技術。Docker無疑是目前最受歡迎的開源容器引擎,它採用了集裝箱搬運的思想,可以將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器,爲應用提供了一個基於容器的標準化運輸系統。使用Docker技術,可以徹底釋放計算虛擬化的威力,提高應用的可維護性,降低雲計算應用開發的成本。可以說Docker技術的出現,讓應用的部署、測試和分發都變得前所未有的高效和輕鬆。

容器雲平臺和Kubernetes之間不得不說的那些事

  具體來說,使用Docker容器技術,可以爲容器雲平臺帶來以下技術優勢:

  1) 支持跨平臺適配

  容器帶來的最大好處之一就是其適配性,越來越多的雲平臺都支持容器,用戶再也無需擔心應平臺的捆綁,同時也能讓應用多平臺混合部署成爲可能。目前支持容器的IaaS平臺包括但不限於亞馬遜平臺(AWS)、Google雲平臺(GCP)、微軟雲平臺(Azure)、OpenStack等,還包括如Chef、Puppet、Ansible等配置管理工具。

  2) 優化持續部署與測試過程

  容器消除了線上線下的環境差異,保證了應用生命週期內環境的一致性和標準化。開發人員使用鏡像實現標準開發環境的構建,開發完成後通過封裝着完整環境和應用的鏡像進行遷移操作。由此,測試和運維人員可以直接部署應用鏡像來進行測試和發佈,大大簡化了持續集成、測試和發佈的過程。

  3) 環境標準化和版本控制

  基於容器提供的環境一致性和標準化,你可以使用Git等工具對容器鏡像進行版本控制。相比於代碼的版本控制來說,你甚至能夠對整個應用運行環境實現版本控制,一旦出現故障可以執行快速回滾操作。相比以前的虛擬機鏡像,容器壓縮和備份速度更快,鏡像啓動也像啓動一個普通應用一樣快速。

  4) 高資源利用率與隔離

  容器沒有管理程序的額外開銷,與底層共享操作系統,因此其性能更加優良,系統負載更低,在同等條件下可以更充分地利用系統資源。同時,容器擁有不錯的資源隔離與限制能力,可以精確地對應用分配CPU和內存等資源,防止應用間相互影響。

  5) 具備容器跨平性

  Linux容器雖然早在Linux 2.6版本內核已經存在,但是缺少容器的跨平臺性,難以推廣。容器在原有Linux容器的基礎上大膽革新,爲容器設定了一整套標準化的配置方法,將應用依賴的運行環境打包成鏡像,真正實現了“構建一次,到處運行”的理念,大大提高了容器的跨平臺性。

  6) 應用鏡像倉庫

  Docker官方構建了一個鏡像倉庫,組織和管理形式類似於GitHub,其上已累積了成千上萬的鏡像。因爲Docker具有跨平臺適配性,它爲用戶提供了一個非常有用的應用商店,所有人都可以自由地從其中下載鏡像做爲服務組件。這爲開發者提供了巨大便利。

容器服務編排技術——Kubernetes

 Kubernetes(k8s)是一個基於容器技術的分佈式架構解決方案。它是用於自動部署,擴展和管理容器化應用程序的開源系統。它在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能。同時,Kubernetes還提供了完善的管理工具,涵蓋了包括開發、部署測試、運維監控在內的各個環節。可以說利用Kubernetes,可以提高大規模容器集羣管理的便捷性。

容器雲平臺和Kubernetes之間不得不說的那些事

  將Kubernetes容器編排系統作爲容器雲平臺的底層技術支撐,可以帶來如下特性:

  1) 自動包裝

  根據資源需求和其他約束自動放置容器,同時不會犧牲可用性,混合關鍵和最大努力的工作負載,以提高資源利用率並節省更多資源。

  2) 自我修復

  重新啓動失敗的容器,在節點不可用時,替換和重新調度節點上的容器,對用戶定義的健康檢查不響應的容器會被中止,並且在容器準備好服務之前不會把其向客戶端廣播。

  3) 橫向縮放

  使用簡單的命令或 UI,或者根據 CPU 的使用情況自動調整應用程序副本數。

  4) 服務發現和負載均衡

  不需要修改應用程序來使用不熟悉的服務發現機制,爲容器提供自己的 IP 地址和一組容器的單個 DNS 名稱,並可以在它們之間進行負載均衡。

  5) 自動部署和回滾

  支持灰度、滾動式部署應用程序,並支持對其配置進行更改。同時監控應用程序運行狀況,以確保它不會同時終止所有實例。當出現問題,自動觸發服務自愈功能恢復應用。

  6) 密鑰安全性保證

  部署和更新密鑰和應用程序配置,不會重新編譯您的鏡像,不會在堆棧配置中暴露密鑰(secrets)。

  7) 批處理

  可以批量管理資源池節點機,可以根據需要自動替換出現故障的容器。

應運而生的容器雲平臺

  傳統企業在轉型過程中遇到的種種問題,不斷地推進着系統架構的演變。傳統的物理機及虛擬機部署方式已經不能滿足企業現代化系統建設的需求。而隨之到來的,是向以容器爲核心的基礎設施的轉變。但是,這個轉變並不是一次溫和的改革,而是涵蓋了對網絡、存儲、調度、操作系統、分佈式原理等各個方面的容器化理解和改造。企業級應用開發更是需要基於容器技術,實現支持多人協作的CI/CD平臺。

  因此,企業迫切需要一套具有完備功能的容器雲平臺,以使原有的基於虛擬機的部署方案,徹底轉變爲更加靈活和輕量的“容器+編排調度”應用落地方案。

  用友雲技術中臺的容器雲平臺,經過嚴謹的技術選型,天生繼承了選用技術的優良基因。在經過技術過硬的研發團隊集成、適配、打磨、優化、擴展後,推出了功能強大的完美適配企業轉型需求的容器雲產品。
容器雲平臺和Kubernetes之間不得不說的那些事

二、利用容器部署應用,對外提供服務過程詳解
  在之前的技術文章中我們提到,Kubernetes中的Pod是部署應用的最小單位。一個Pod封裝一個應用容器,存儲資源、一個獨立的網絡IP以及管理控制容器運行方式的策略選項。業務涉及到的所有應用均運行在容器雲平臺所管理的一個個的Pod當中。

  當應用的Pod創建好之後,就要考慮建立完整的訪問鏈路系統,最終實現對外提供服務的能力。建立網絡訪問的第一步,是實現各個Pod在所依賴宿主機——利用Kubernetes搭建的集羣間內部的聯通和訪問。

集羣內部Pod訪問邏輯

  實現集羣內部訪問有兩種方案,分別如下:

  1) 直接使用docker分配的IP地址

  在Pod運行時,docker會爲其分配一個獨立的IP地址。拼接這個IP地址和服務的端口號,即可直接訪問此Pod中的服務。但是這種方式有一個巨大的問題,即Pod在重啓或銷燬重建後,將會分配新的IP地址。

  2) 通過ClusterIP方式訪問

  Pod的IP 地址實際存在於某個物理網卡或虛擬網卡上 ,而ClusterIP是創建Service的時候,由系統內部分配的一個全局唯一的虛擬IP.這個虛擬IP在網絡中是無法尋址到的,它沒有綁定到任何網卡設備上。這增加了它的訪問的靈活性。我們可以通過服務的ClusterIP加應用容器的服務端口號來進行訪問。

Service的業務入口訪問機制

  當Pod的訪問有優選方案之後,我們接下來面臨了下一個問題:Pod的IP和ClusterIP都是在每次創建後隨之變化的,如何在應用的Pod重啓後,保證服務的可訪問性呢?此時,k8s中的Service可以解決此問題,它爲應用的訪問提供了一套業務的入口機制。

  Service爲k8s系統提供了容器集羣負載均衡功能,並開放式地支持了用戶所需要的各種負載均衡方案和使用場景。邏輯層面上,Service被認爲是真實應用的一個抽象,每一個service關聯着一系列的Pod,根據LabelSeletor來刷選Pod進行關聯,對外表現爲一個單一的入口,依託於Proxy轉發到Pod內部。實際上來說,k8s在Service和Pod之間是通過Endpoints銜接的,這個Endpoint由根據關聯到Pod 的IP信息組合而成。

  簡單來說,Service就是一個把所有Pod都池化爲一個組,然後對外統一固定成一個IP.Pod可以通過Deployment中所選擇的Label來進行設置,最終可以按照對應的配置訪問。

集羣外訪問邏輯

  一般來說,服務對外訪問有這幾種常見的模式:HostNetwork-true、Nodeport、ingress、Loadbalancer等幾種。

  1) HostNetwork-true模式

  這種方式顧名思義,就是將業務中的端口直接暴露在宿主機上。業務中監聽的端口在宿主機中通過netstat命令就可以直接看到。宿主機所在的局域網上所有網絡接口都可以訪問到該應用程序。

  2) Loadblancer模式

  在這種方式下,kubernetes可以請求底層雲平臺創建一個負載均衡器,將每個Node作爲後端,進行服務分發。

  3) Nodeport模式

  在此模式下,系統會在每一個節點機上開放一個特定端口,任何發送到該端口的流量都被轉發到對應服務。這種模式下啓動的Pod會生成一個名爲nodePort的附加端口,用於指定在節點上打開端口。如果不指定,這個端口將隨機生成。我們一般建議將端口設定在一定的範圍內,如30000-32767.這種訪問方式可以在Service指定好Nodeport的Type之後,通過何一臺Node的IP+nodePort就可以對業務發起訪問。但是,NodePort這種方式有個弊端,它會在集羣中的任何一臺機器上起動一個端口進行監聽,即便工作負載從未在這個節點上部署過。這勢必造成一些端口的浪費。

容器雲平臺和Kubernetes之間不得不說的那些事

  4) ingress模式

  隨着後期的發展,理想的方式是通過一個外部的負載均衡器,綁定固定的端口,比如80,然後根據域名或者服務名向後面的Service ip轉發請求。Ingress模式就是實現這種方案的模式。

  Ingress包含了兩大主件Ingress Controller和Ingress.k8s的 Ingress 對象提供了另一種服務暴露的方法,它只佔用一臺主機的 HTTP 端口,通過虛擬主機或者虛擬目錄的方式爲K8S上的所有HTTP服務提供暴露服務,還能實現 HTTPS、負載均衡、狀態統計等功能。

容器雲平臺的技術落地方式

  在之前的介紹中可以看到,ingress模式是最理想的實現方案。因此,容器雲平臺採用以Ingress爲主的入口方式。

  在 Kubernetes 集羣中,Ingress 是入站連接到達集羣服務的規則集合,可提供七層負載均衡能力,用戶可以通過 Ingress 配置提供外部可訪問的 URL、負載均衡、SSL、基於名稱的虛擬主機等。在實際的項目中,應用容器數可能是幾十個容器,有的已經達到幾百個規模。這其中,有的是部署的業務應用數目少,但是容器副本多;有的則是部署的業務就達到百個。面對不同的實際業務場景,我們要對鏈路進行更好的規劃,使其穩定性得到保障。在給客戶制定部署方案的時,需要將泛域名解析這一容器雲平臺中已有的鏈路環節拆分出來。在訪問應用的時候,通過Nginx入口後,跳過統一泛域名解析跳轉這一環節,直接將Nginx的請求轉發到Ingress當中,這樣能夠減少鏈路層的數據傳遞,使系統更加穩定高效。

三、容器雲平臺的能力和價值
  開發者中心提供的容器雲平臺,是一個致力於打造以應用爲中心的容器管理平臺。目前,其提供了極具特色的核心競爭力,如完備容器雲服務:提供多數據中心、多租戶、多環境、多資源池能力,可以根據需求隨意定義;如全面支撐微服務應用:從服務定義、服務拆分、服務擴展、服務編排、服務運行形成完整的理論和實踐。

  舉例來說,它提供了以下能力,經過長時間的線上實踐,在客戶的落地使用中爲客戶提供了巨大的價值。

  1) 資源的邏輯管理能力

  主要實現對主機、存儲和網絡的集中管理,對租戶提供資源的統一分配及應用的統一部署,實現與IaaS資源的互動,動態替換和補充資源。

容器雲平臺和Kubernetes之間不得不說的那些事

  2) 彈性伸縮和擴容縮容能力

  能夠快速實現資源動態調度和擴縮容,能夠定義動態彈性伸縮策略,應用容量可根據策略自動進行服務的動態擴展。支持水平和垂直,手工與自動等方式;基於業務運行態動態調整,提供不同場景化產品需求能力

容器雲平臺和Kubernetes之間不得不說的那些事

  3) 支撐微服務治理能力

  一款支撐微服務架構應用全生命週期管理的平臺,爲開發者提供從開發到運維、運營的一系列開發套件和服務,包含RPC框架、配置中心、註冊中心、服務鏈路追蹤、服務限流、服務熔斷、服務統計、服務評價等組件和服務。

容器雲平臺和Kubernetes之間不得不說的那些事

  4) 統一的運營監控能力

  提供可視化、自助式運維工具,實現對所有產品線、產品、租戶、集羣、資源、應用、容器等企業數字化資源進行集中式運維和監控。
容器雲平臺和Kubernetes之間不得不說的那些事

四、容器雲平臺對企業的價值

企業爲什麼需要容器雲平臺

  企業數字化轉型,使得衆多企業不斷創新、順應趨勢、改變思路,開始嘗試或採用容器化技術,根據業務特性選擇適合的業務,通過逐步推進來建設自己的企業級容器雲平臺。

  容器雲以容器爲資源分割和調度的基本單位,封裝整個軟件運行時環境,爲開發者和系統管理員提供用於構建,發佈和運行分佈式應用的平臺。當容器雲專注於資源共享與隔離、容器編排與部署時,它更接近傳統的IaaS(基礎設施即服務);當容器雲***到應用支撐與運行時環境時,它更接近於傳統的PaaS(平臺即服務)。

  容器雲平臺推進了軟件開發、測試、部署、運維和運營模式的創新,承載了企業和IT基礎設施和基礎技術服務,爲企業業務應用的建設和發展提供了強有力的支撐,同時促進了與產業鏈生態環境中上下游系統的高效對接和協同創新。

企業需要什麼樣的容器雲平臺

  用友雲平臺技術中臺——開發者中心是集容器雲平臺、DevOps平臺、微服務治理平臺於一體的綜合性企業級應用託管PaaS平臺。開發者中心是企業IT信息化建設的基礎設施平臺,並對微服務進行集中管控、智能運維和容器雲全生命週期等運營管理。

  在開發者中心的集中管控框架下,可以對主機、網絡、存儲、應用環境、開發、部署、集成、運維等過程進行分析和規劃;以資源的集中管理及應用的統一快速部署、不中斷業務的灰度發佈;方便快捷的操作管控及更智能的運維監控爲核心目標,構建一個高可用、高性能、高擴展的綜合性託管企業級應用的PaaS平臺,併爲企業解決統一規範管理產品。使用開發者中心,還可以提高資源利用率,降低IT成本,解決運維困難成本高,產品更新效率低。微服務實施困難。大數據環境複雜等日常運維中遇到的痛點問題。

  開發者中心還提供了多雲的接入能力,可以對接阿里雲、華爲雲、AWS等多家雲廠商,同時支持VMWare、Openstack、BareMetal等操作系統。在IaaS基礎上提供容器支撐服務和安全機制;在容器支撐服務上提供DevOps能力、AI能力、微服務架構能力、中間件服務能力、大數據分析能力等。平臺支持多種語言運行環境如Java、Node.js、Golang、Python、靜態網站等,或使用Dockerfile構建應用。

  開發者中心以容器云爲基礎設施,不僅提供輕量便捷的公有云產品形態,也提供帶有企業特色的專屬雲形態;不僅提供all-in-one的簡化部署方式,也提供Multi-node的分佈式部署方式,爲企業提供更多選擇,更適合企業建設的PaaS基礎平臺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章