Cloud Native Computing Foundation,云原生計(jì)算基金會(huì)(以下簡(jiǎn)稱CNCF)是一個(gè)開源軟件基金會(huì),它致力于云原生(Cloud Native)技術(shù)的普及和可持續(xù)發(fā)展。云原生技術(shù)是通過一系列的軟件、規(guī)范和標(biāo)準(zhǔn)幫助企業(yè)和組織,在現(xiàn)代的動(dòng)態(tài)環(huán)境(如公共云、私有云和混合云)中構(gòu)建和運(yùn)行敏捷的、可擴(kuò)展的應(yīng)用程序。容器、微服務(wù)、微服務(wù)治理、聲明式API等都是代表性的云原生技術(shù)。這些技術(shù)使松散耦合的系統(tǒng)具有更好的彈性、可管理性,同時(shí)更容易被監(jiān)控和觀察。這些技術(shù)通過與強(qiáng)大的自動(dòng)化工具相結(jié)合,允許工程師頻繁地、可預(yù)見地對(duì)系統(tǒng)進(jìn)行任意的更改,并盡可能減少由此帶來的工作量(在這些云原生技術(shù)和框架被采用之前,相信大家都有過針對(duì)系統(tǒng)任何一個(gè)小改動(dòng),都需要整個(gè)開發(fā)、測(cè)試、運(yùn)維團(tuán)隊(duì)投入大量工作的痛苦經(jīng)歷),而這就是云原生技術(shù)最希望為技術(shù)團(tuán)隊(duì)以及業(yè)務(wù)帶來的價(jià)值。
在每年的CNCF年度報(bào)告中都會(huì)提及CNCF Landscape,CNCF Landscape是CNCF中的一個(gè)重要項(xiàng)目,它始于2016年11月,旨在為云原生應(yīng)用者提供一個(gè)資源地圖,幫助企業(yè)和開發(fā)人員快速了解云原生體系的全貌。CNCF Landscape項(xiàng)目在Github上已經(jīng)獲得超過5000顆星,表明廣大開發(fā)者和使用者對(duì)該項(xiàng)目的關(guān)注和重視。CNCF Landscape通過對(duì)云原生技術(shù)中的大多數(shù)項(xiàng)目和產(chǎn)品進(jìn)行分類,來追蹤整個(gè)生態(tài)中的大量應(yīng)用。
CNCF Landscape路線圖
CNCF Landscape最重要的產(chǎn)出包括一個(gè)路線圖和一個(gè)全景圖。路線圖(Trail Map)是CNCF對(duì)云原生用戶使用開源項(xiàng)目以及云原生技術(shù)的推薦過程。在路線圖的每個(gè)步驟中,用戶都可以選擇供應(yīng)商支持的產(chǎn)品或自己動(dòng)手使用開源項(xiàng)目。
CNCF Landscape路線圖
整個(gè)路線圖分成了十個(gè)步驟,每個(gè)步驟都是用戶或平臺(tái)開發(fā)者將云原生技術(shù)在實(shí)際環(huán)境中落地時(shí),需要循序漸進(jìn)思考和處理的問題:
1. 容器化。目前最流行的容器化技術(shù)是Docker,你可以將任意大小的應(yīng)用程序和依賴項(xiàng),甚至在模擬器上運(yùn)行的一些程序,都進(jìn)行容器化。隨著時(shí)間的推移,你還可以對(duì)應(yīng)用程序進(jìn)行分割,并將未來的功能編寫為微服務(wù)。
2. CI/CD(持續(xù)集成和持續(xù)發(fā)布)。創(chuàng)建CI/CD環(huán)境,從而使源代碼上的任意修改,都能夠自動(dòng)通過容器進(jìn)行編譯、測(cè)試,并被部署到預(yù)生產(chǎn)甚至生產(chǎn)環(huán)境中。
3. 應(yīng)用編排。Kubernetes是目前市場(chǎng)上應(yīng)用編排領(lǐng)域被最廣泛應(yīng)用的工具,Helm Charts可以用來幫助應(yīng)用開發(fā)和發(fā)布者用于升級(jí)Kubernetes上運(yùn)行的應(yīng)用。
4. 監(jiān)控和分析。在這一步中,用戶需要為平臺(tái)選擇監(jiān)控、日志以及跟蹤的相關(guān)工具,例如將Prometheus用于監(jiān)控、Fluentd用于日志、Jaeger用于整個(gè)應(yīng)用調(diào)用鏈的跟蹤。
5. 服務(wù)代理、發(fā)現(xiàn)和治理。CoreDNS、Envoy和LInkerd可以分別用于服務(wù)發(fā)現(xiàn)和服務(wù)治理,提供服務(wù)的健康檢查、請(qǐng)求路由、和負(fù)載均衡等功能。
6. 網(wǎng)絡(luò)。Calico、Flannel以及Weave Net等軟件用于提供更靈活的網(wǎng)絡(luò)功能。
7. 分布式數(shù)據(jù)庫和存儲(chǔ)。分布式數(shù)據(jù)庫可以提供更好的彈性和伸縮性能,但同時(shí)需要專業(yè)的容器存儲(chǔ)予以支持。
8. 流和消息處理。當(dāng)應(yīng)用需要比JSON-REST這個(gè)模式更高的性能時(shí),可以考慮使用gRPC或者NATS。gRPC是一個(gè)通用的RPC(遠(yuǎn)程調(diào)用)框架(類似各種框架中的RPC調(diào)用),NATS是一個(gè)發(fā)布/訂閱和負(fù)載均衡的消息隊(duì)列系統(tǒng)。
9. 容器鏡像庫和運(yùn)行環(huán)境。Harbor是目前最受歡迎的容器鏡像庫,同時(shí),你也可以選擇使用不同的容器運(yùn)行環(huán)境用于運(yùn)行容器程序。
10. 軟件發(fā)布。最后可以借助Notary等軟件用于軟件的安全發(fā)布。
CNCF Landscape全景圖
CNCF Landscape路線圖從實(shí)踐步驟上幫助用戶梳理了整個(gè)云原生應(yīng)用的最佳流程。然而整個(gè)實(shí)踐過程中的每個(gè)環(huán)節(jié),用戶都需要了解有哪些具體的軟件和產(chǎn)品選擇,這就是CNCF Landscape全景圖發(fā)揮作用的地方了。
CNCF Landscape全景圖
這張全景圖試圖從云原生的層次結(jié)構(gòu),以及不同的功能組成上,讓用戶了解云原生體系的全貌,并幫助用戶在不同組件層次去選擇恰當(dāng)?shù)能浖凸ぞ哌M(jìn)行支持。從總體來看,它將云原生生態(tài)分為以下幾層:
Cloud
圖中最底層是Cloud(公有云,包括AWS、Google、Azure、Ali、Baidu、Tencent等)以及Kubernetes認(rèn)證的服務(wù)提供商(主要是私有云,包括諧云、靈雀云、博云、才云、DaoCloud、Rancher等提供商)。
Provisioning
有了物理機(jī)或虛擬機(jī)后,在運(yùn)行容器化服務(wù)之前,需要為容器準(zhǔn)備標(biāo)準(zhǔn)化的基礎(chǔ)環(huán)境,這就是Provisioning這一層的作用。在Provisioning這一層中,分為以下幾個(gè)功能組成模塊:
l Automation & Configuration:用于自動(dòng)化部署和配置容器運(yùn)行平臺(tái)和環(huán)境,代表工具和廠商包括Ansible、Chef、Puppet、VMware、OpenStack。
l 容器鏡像庫:容器鏡像庫是整個(gè)CNCF云原生中的核心部件之一,因?yàn)榛谌萜鞯倪\(yùn)行環(huán)境中,所有的應(yīng)用都需要借助容器鏡像庫來進(jìn)行安裝和部署。容器鏡像庫又分為公有和私有,公有的容器鏡像庫包括docker官方的registry,AWS的Elastic Container Registry,Google的Container Registry等。在私有鏡像庫中,VMware中國(guó)團(tuán)隊(duì)主導(dǎo)的Harbor得到了廣泛的應(yīng)用,大量的容器平臺(tái)目前都基于Harbor構(gòu)建其鏡像倉(cāng)庫。
l Key Management:主要用于在整個(gè)容器平臺(tái)中進(jìn)行秘鑰管理。
Runtime:
Runtime這一層可以理解為容器的整個(gè)運(yùn)行環(huán)境,是云原生中最核心的部分,它包括了計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)三大塊:
l Container Runtime:Docker是最廣為人知的容器運(yùn)行環(huán)境,但生產(chǎn)環(huán)境下也有一些其他的容器環(huán)境在運(yùn)行。Containerd是滿足OCI規(guī)范的核心容器運(yùn)行時(shí),從設(shè)計(jì)上就是為了嵌入大型系統(tǒng)的。它由Docker Inc公司啟動(dòng),并且在2017年3月份捐贈(zèng)給了CNCF。此外,CoreOS的RKT是一個(gè)用于在Linux上運(yùn)行應(yīng)用程序容器的CLI,也可以作為安全、可組合和基于標(biāo)準(zhǔn)的容器虛擬化運(yùn)行環(huán)境。
l Cloud-Native Storage:起初,容器為無狀態(tài)的運(yùn)行單元,容器最上一層文件系統(tǒng)無法保存其在運(yùn)行時(shí)寫入的文件或數(shù)據(jù),容器重建或重啟后,這些寫入的數(shù)據(jù)將丟失。但隨著數(shù)據(jù)庫、消息隊(duì)列等中間件逐步在容器環(huán)境中得到應(yīng)用,如今用戶對(duì)容器持久化存儲(chǔ)的理解和需求也更加深入和迫切。本文稍后還將對(duì)容器存儲(chǔ)做更深入的分析。
l Cloud-Native Network:網(wǎng)絡(luò)歷來是虛擬化技術(shù)中最靈活多變的部分,目前,大多數(shù)客戶使用的主要包括Calico、Flannel、Open vSwitch等方案。
Orchestration Management:
這一層主要負(fù)責(zé)容器平臺(tái)的編排和調(diào)度,包括服務(wù)的發(fā)現(xiàn)和治理,遠(yuǎn)程調(diào)用,服務(wù)代理,微服務(wù)治理等組件,包括:
l Scheduling & Orchestration:在這個(gè)領(lǐng)域,Kubernetes是當(dāng)仁不讓的頭號(hào)玩家,目前基于Kubernetes的容器生態(tài)得到了迅速發(fā)展。其它的編排工具包括Mesos、Docker Swarm等。
l Coordination & Service Discovery:分布式計(jì)算中很重要的一點(diǎn)就是各個(gè)服務(wù)之間的協(xié)同以及服務(wù)發(fā)現(xiàn)(或節(jié)點(diǎn)發(fā)現(xiàn)的問題),從老牌的Zookeeper到近年來在很多互聯(lián)網(wǎng)廠商和應(yīng)用中流行的Consul(Docker Swarm默認(rèn)使用),都可以用于分布式服務(wù)的發(fā)現(xiàn)和配置,Kubernetes默認(rèn)使用的則是CoreOS旗下的Etcd。
l Remote Procedure Call:微服務(wù)間進(jìn)行通信,通常有兩種方式,其一為HTTP REST-JSON的方式,另一種為RPC 方式,相比起來RPC方式效率更高。常用的包括 Google 開源的 GRPC 、apache 旗下的 thrift 框架、Netflix 開源的自帶負(fù)載均衡的 ribbon 和 avra 數(shù)據(jù)序列化框架。
l Service Proxy、API網(wǎng)關(guān)以及微服務(wù)治理:這幾個(gè)部分都用于對(duì)容器平臺(tái)中運(yùn)行的諸多API服務(wù)進(jìn)行管理、路由、監(jiān)控以及彈性伸縮的功能。
App Definition and Development
這一層就是容器平臺(tái)上運(yùn)行的具體應(yīng)用和工具了,可以理解為容器平臺(tái)的應(yīng)用商店。根據(jù)應(yīng)用的不同作用的使用場(chǎng)景,可以大致分為以下幾種類型:數(shù)據(jù)庫(例如MySQL、MariaDB、mongoDB、PostgreSQL、Cassandra、TiDB等)、流處理和消息隊(duì)列(例如Spark、Storm、RocketMQ、Kafka、RabbitMQ等)、應(yīng)用和鏡像制作(用于將應(yīng)用封裝成標(biāo)準(zhǔn)鏡像,使應(yīng)用能在標(biāo)準(zhǔn)的容器平臺(tái)上運(yùn)行,例如Helm、Docker Composer、Packer等)、CI/CD(最常見的Jenkins、Atlassian公司開發(fā)的Bamboo等)。
Platform
從橫向上看,整個(gè)云原生還包括眾多的經(jīng)過認(rèn)證的平臺(tái)供應(yīng)商。
Observability and Analysis
這個(gè)部分包含了大量用于對(duì)平臺(tái)進(jìn)行監(jiān)控(Prometheus、Nagios、Grafana、Zabbix等)、日志(Fluentd、ElasticSearch、Logstash)、以及追蹤(Jaeger)的工具。
因此,CNCF Landscape全景圖中包含了CNCF社區(qū)成熟或使用范圍較廣、具有最佳實(shí)踐的產(chǎn)品和方案供用戶在實(shí)際應(yīng)用中選擇。
在容器存儲(chǔ)(Cloud-Native Storage)部分,焱融云的YRCloudFile是國(guó)內(nèi)唯一被列入到CNCF Landscape的容器存儲(chǔ)產(chǎn)品。
與CNCF Landscape Cloud-Native Storage部分其它產(chǎn)品和開源方案相比,YRCloudFile具有大量獨(dú)特的重要特性:
l 支持有狀態(tài)容器在節(jié)點(diǎn)故障時(shí),跨節(jié)點(diǎn)秒級(jí)重建,幫助有狀態(tài)Pod有效應(yīng)對(duì)節(jié)點(diǎn)故障。
l 提供細(xì)粒度的(PV級(jí)別)的多數(shù)據(jù)中心容災(zāi)能力,可根據(jù)服務(wù)SLA要求創(chuàng)建和使用不同保護(hù)級(jí)別的PV,并通過優(yōu)先本地讀技術(shù),極大縮小數(shù)據(jù)訪問延遲。
l 支持PV Quota、QoS等企業(yè)級(jí)特性,確保PV間不發(fā)生存儲(chǔ)資源的搶占。
l 支持RWX、RWO、ROX等讀寫訪問模式。
l 提供CSI、FlexVolume接口,并完成與靈雀云、諧云、Rancher、思科等多個(gè)容器平臺(tái)供應(yīng)商的對(duì)接。
l 通過PV Hot Spot功能,為上層業(yè)務(wù)快速定位數(shù)據(jù)訪問熱點(diǎn),消除系統(tǒng)訪問瓶頸。
l PV Insight功能,洞察PV內(nèi)部數(shù)據(jù)分布及溫度,為PV內(nèi)部數(shù)據(jù)治理提供決策依據(jù)。
l 提供Prometheus exporter,并與Grafana進(jìn)行集成,完成監(jiān)控體系的融合和統(tǒng)一。
l 全界面化呈現(xiàn)Kubernetes平臺(tái)中Pod、PV、PVC之間的關(guān)聯(lián)關(guān)系。
l PV性能的實(shí)時(shí)監(jiān)控、歷史監(jiān)控記錄和告警。
l PV動(dòng)態(tài)Resize。
l 支持RDMA,提供極致性能。
通過以上的介紹,相信我們已經(jīng)為眾多即將在云原生應(yīng)用,尤其是容器存儲(chǔ)領(lǐng)域付諸實(shí)踐的工程師團(tuán)隊(duì)、CIO們提供了明確的建設(shè)思路和選型標(biāo)準(zhǔn),我們也將會(huì)把云原生建設(shè)中所收獲的經(jīng)驗(yàn)和教訓(xùn)分享給大家,幫助客戶更順暢地完成業(yè)務(wù)向云原生的轉(zhuǎn)型。