一文帶你了解什麼是CNCF&雲原生

大數據老司機 發佈 2022-07-08T14:13:41.997815+00:00

一、CNCF簡介CNCF:全稱Cloud Native Computing Foundation(雲原生計算基金會),成立於2015年12月11日,是一個開源軟體基金會,它致力於雲原生(Cloud Native)技術的普及和可持續發展。

一、CNCF簡介

CNCF:全稱Cloud Native Computing Foundation(雲原生計算基金會),成立於2015年12月11日,是一個開源軟體基金會,它致力於雲原生(Cloud Native)技術的普及和可持續發展。

成立CNCF這個組織的初衷或者願景,簡單說:

  • 推動雲原生計算可持續發展;
  • 幫助雲原生技術開發人員快速地構建出色的產品;

CNCF Landscape路線圖

CNCF Landscape最重要的產出包括一個路線圖和一個全景圖。路線圖(Trail Map)是CNCF對雲原生用戶使用開源項目以及雲原生技術的推薦過程。在路線圖的每個步驟中,用戶都可以選擇供應商支持的產品或自己動手使用開源項目。

整個路線圖分成了十個步驟,每個步驟都是用戶或平台開發者將雲原生技術在實際環境中落地時,需要循序漸進思考和處理的問題:

  1. 容器化。目前最流行的容器化技術是docker,你可以將任意大小的應用程式和依賴項,甚至在模擬器上運行的一些程序,都進行容器化。隨著時間的推移,你還可以對應用程式進行分割,並將未來的功能編寫為微服務。
  2. CI/CD(持續集成和持續發布)。創建CI/CD環境,從而使原始碼上的任意修改,都能夠自動通過容器進行編譯、測試,並被部署到預生產甚至生產環境中。
  3. 應用編排(Kubernetes)。Kubernetes是目前市場上應用編排領域被最廣泛應用的工具,Helm Charts可以用來幫助應用開發和發布者用於升級Kubernetes上運行的應用。
  4. 監控和分析。在這一步中,用戶需要為平台選擇監控、日誌以及跟蹤的相關工具,例如將Prometheus用於監控、Fluentd用於日誌、Jaeger用於整個應用調用鏈的跟蹤。
  5. 服務代理、發現和治理。CoreDNS、Envoy和LInkerd可以分別用於服務發現和服務治理,提供服務的健康檢查、請求路由、和負載均衡等功能。
  6. 網絡。Calico、Flannel以及Weave Net等軟體用於提供更靈活的網絡功能。
  7. 分布式資料庫和存儲。分布式資料庫可以提供更好的彈性和伸縮性能,但同時需要專業的容器存儲予以支持。
  8. 流和消息處理。當應用需要比JSON-REST這個模式更高的性能時,可以考慮使用gRPC或者NATS。gRPC是一個通用的RPC(遠程調用)框架(類似各種框架中的RPC調用),NATS是一個發布/訂閱和負載均衡的消息隊列系統。
  9. 容器鏡像庫和運行環境。Harbor是目前最受歡迎的容器鏡像庫,同時,你也可以選擇使用不同的容器運行環境用於運行容器程序。
  10. 軟體發布。最後可以藉助Notary等軟體用於軟體的安全發布。

CNCF全景圖(Landscape)

CNCF Landscape路線圖從實踐步驟上幫助用戶梳理了整個雲原生應用的最佳流程。然而整個實踐過程中的每個環節,用戶都需要了解有哪些具體的軟體和產品選擇,這就是CNCF Landscape全景圖發揮作用的地方了(https://landscape.cncf.io/)。


這張全景圖試圖從雲原生的層次結構,以及不同的功能組成上,讓用戶了解雲原生體系的全貌,並幫助用戶在不同組件層次去選擇恰當的軟體和工具進行支持。

二、雲原生簡介

雲原生(cloud native)是一種基於雲的基礎之上的軟體架構思想,以及基於分布部署和統一運管的分布式雲,以容器、微服務、DevOps等技術為基礎建立的一套雲技術產品體系。

  • 雲原生從字面意思上來看可以分成雲和原生兩個部分。
  • 雲是和本地相對的,傳統的應用必須跑在本地伺服器上,現在流行的應用都跑在雲端,雲包含了IaaS,、PaaS和SaaS。
  • 原生就是土生土長的意思,我們在開始設計應用的時候就考慮到應用將來是運行雲環境裡面的,要充分利用雲資源的優點,比如️雲服務的彈性和分布式優勢。

如何開發出適合於在雲環境裡面部署的程序呢?其實主要是需要遵循幾個開發原則:

1)容器化(docker+k8s)

容器化的好處在於運維的時候不需要再關心每個服務所使用的技術棧了,每個服務都被無差別地封裝在容器里,可以被無差別地管理和維護,現在比較流行的工具是docker和k8s。

2)微服務

微服務解決的是我們軟體開發中一直追求的低耦合+高內聚,與微服務對應的是我們傳統的單體應用。微服務還建議使用RESTful API通信。

3)無服務(Serverless)

無伺服器架構並不是說,未來不再需要伺服器,而是不再著重關注底層的基礎架構,更多的注意力可以放在和業務更相關的一些邏輯實現上。例如一些函數的代碼片段,平台自動根據負載按需部署和啟動,以及自動伸縮代碼邏輯來滿足業務處理的需求。

4)DevOps

DevOps(Development和Operations的組合詞)即開發、運維一體化。涉及軟體在整個開發生命周期中的持續開發,持續測試,持續集成,持續部署和持續監控。

  • 維基百科對DevOps的定義比較拗口。其實往簡化里講DevOps是提倡開發和IT運維之間的高度協同,從而在完成高頻率部署的同時,提高生產環境的可靠性、穩定性、彈性和安全性
  • 從另外一個維度,廣義上來說,DevOps不僅需要打通開發運維之間的部門牆,我們認為DevOps更多的需要從應用的全生命周期考慮,實現全生命周期的工具全鏈路打通與自動化、跨團隊的線上協作能力

5)Service Mesh(服務網格)

Service Mesh是近年興起的一個話題,在容器微服務的基礎上,通過Service Mesh可以讓用戶更精細、更智能的去管理服務之間的通訊。ServiceMesh社區的旗艦項目Istio,當前的熱度正在迅速的飆升。

6)雲(Cloud)

雲是雲原生的基礎,沒有雲也就沒有雲原生。沒有對雲正確地理解,也不可能對雲原生有正確的打開方式。對於非技術人員來說,至少要理解雲的多種不同的服務模型,比方IaaS、PaaS、SaaS以及各種服務模型的應用場景和價值。

【總結】

因此我們也可以簡單地把雲原生理解為:雲原生 = 容器化(docker+k8s) + 微服務(Microservices)+ 無服務(Serverless) + DevOps + Service Mesh(服務網格) + 雲(Cloud)

三、總結

  • 我們不難發現,雲原生是一個很寬泛的概念,想要開發一個支持雲原生的應用並不難,可能就是簡單的實現可基於容器部署、使用Kubernetes進行編排與調度,集成CI/CD工具以及Prometheus監控工具等
  • 但是,想要構建一個真正雲原生的系統,要求我們考慮到系統的方方面面,我們不僅要掌握簡單的開發技能,還要在SDN、SDS、分布式調度甚至計算機基礎架構等諸多領域有所了解,要能夠根據場景制定出最合適的架構方案。各方面的綜合能力的提升才能在雲原生時代構建出雲原生就緒的應用或系統
關鍵字: