云原生及k8s架构
云原生及k8s架構,相關生態介紹
1.云計算簡介
云計算是分布式計算的一種,指通過網絡(云)將巨大的數據計算處理程序分解成無數個小程序,然后,通過多部服務器組成的系統進行處理和分析這些小程序得到結果并返回給用戶。
1.1簡介
云計算早期,就是簡單的分布式計算,解決任務分發,并進行計算結果的合并。
現階段的云服務不單單是一種分布式計算,而是分布式計算,效用計算,負載均衡,并行計算,網絡存儲,熱點備份和虛擬化等計算機技術混合演進并躍升的結果。
1.2云計算特點
云計算的可貴之處在高靈活性,可擴展性和高性比等,與傳統的網絡應用模式相比有以下優勢和特點:
-
虛擬化技術,其中包括應用虛擬和資源虛擬。
-
動態可擴展
-
按需部署,云計算平臺能根據用戶的需求快速配備計算能力及資源。
-
靈活性高
-
可靠性高
-
性價比高
-
可擴展性
1.3云服務服務類型
通常云服務的服務類型分為三類,基礎設施即服務(IaaS)、平臺即服務(PaaS)、軟件及服務(SaaS)。這三種云計算服務有時稱為云計算堆棧,因為他們構建堆棧,他們位于彼此之上。
基礎設施即服務 IaaS
平臺即服務 PaaS
軟件即服務 SaaS
1.4云服務中的關鍵技術
1.體系結構
實現云計算需要創造一定的環境與條件,尤其是體系結構必須具備以下關鍵特征:
- 第一,系統必須智能化,具有自治能力,減少人工作業的前提下實現自動化處理平臺智地響應要求,因此云系統應內嵌有自動化技術。
- 第二,面對變化或需求信號云系統要有敏捷的反應能力,所以對云計算的架構有一定的敏捷要求。與此同時,隨著服務級別和增長速度的快速變化,云計算同樣面臨巨大挑戰,而內嵌的集群化技術與虛擬化技術能夠應付此類變化。
云計算平臺的體系結構由以下組成:
用戶界面。主要用于用戶傳遞信息,是雙方互動的界面。
服務目錄。提供用戶選擇的列表。
管理系統。主要對應用價值較高的資源進行管理。
部署工具。根據用戶請求對資源進行有效地部署與匹配。
監控。主要對云系統上的資源進行管理與控制并指定措施。
服務器集群。服務器集群包括虛擬服務器和物理服務器,隸屬管理系統。
2.資源監控
云系統上的資源數據十分龐大,同時資源信息更新速度快,想要精準、可靠的動態信息需要有效途徑確保信息的快捷性。而云系統能夠為動態信息進行有效部署,同時兼備資源監控功能,有利于對資源的負載、使用情況進行管理。其次,資源監控作為資源管理的“血液”,對整體系統性能起關鍵作用,一旦系統資源監管不到位,信息缺乏可靠性那么其他子系統引用了錯誤的信息,必然對系統資源的分配造成不利影響。因此貫徹落實資源監控工作刻不容緩。資源監控過程中,只要在各個云服務器上部署Agent代理程序便可進行配置與監管活動,比如通過一個監視服務器連接各個云資源服務器,然后以周期為單位將資源的使用情況發送至數據庫,由監視服務器綜合數據庫有效信息對所有資源進行分析,評估資源的可用性,最大限度提高資源信息的有效性。
3.自動化部署
科學進步的發展傾向于半自動化操作,實現了出廠即用或簡易安裝使用。基本上計算資源的可用狀態也發生轉變,逐漸向自動化部署。對云資源進行自動化部署指的是基于腳本調節的基礎上實現不同廠商對于設備工具的自動配置,用以減少人機交互比例、提高應變效率,避免超負荷人工操作等現象的發生,最終推進智能部署進程。自動化部署主要指的是通過自動安裝與部署來實現計算資源由原始狀態變成可用狀態。其于與計算中表現為能夠劃分、部署與安裝虛擬資源池中的資源為能夠給用戶提供各類應用于服務的過程,包括了存儲、網絡、軟件以及硬件等。系統資源的部署步驟較多,自動化部署主要是利用腳本調用來自動配置、部署與配置各個廠商設備管理工具,保證在實際調用環節能夠采取靜默的方式來實現,避免了繁雜的人際交互,讓部署過程不再依賴人工操作。除此之外,數據模型與工作流引擎是自動化部署管理工具的重要部分,不容小覷。一般情況下,對于數據模型的管理就是將具體的軟硬件定義在數據模型當中即可;而工作流引擎指的是觸發、調用工作流,以提高智能化部署為目的,善于將不同的腳本流程在較為集中與重復使用率高的工作流數據庫當中應用,有利于減輕服務器工作量。
2.云原生
2.1什么是云原生?
百度百科定義:云原生是基于分布部署和統一運營的分布式云,以容器、微服務、DevOps等技術為基礎建立的一套云技術產品體系。
=》云原生是一套云技術產品體系
=》云原生是一套產品
**cncf定義:**Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
說人話:云原生技術使組織能夠在現代動態環境(如公共、私有和混合云)中構建和運行可擴展的應用程序。容器、服務網格、微服務、不變的基礎設施和聲明式API這個方法的例子。
總結:云原生是一種新型技術體系,是云計算未來的發展方向。
云原生的特點(即云原生的這些產品的特點):
云原生應用也就是面向“云”而設計的應用,在使用云原生技術后,開發者無需考慮底層的技術實現,可以充分發揮云平臺的彈性和分布式優勢,實現快速部署、按需伸縮、不停機交付等。
2.2云原生生態
到目前為止在CNCF(云原生計算基金會)畢業項目16個、孵化項目22個、沙盒項目59個
畢業項目概覽
孵化項目概覽
**沙盒項目就概覽了(太多),可以通過該鏈接進行概覽:**https://landscape.cncf.io/
2.3云原生生態的劃分
云原生本質是在于彈性地利用云平臺的資源。
云原生計算基金會(CNCF, Cloud Native Computing Foundation)將云原生生態圈劃分為上下五層及共用兩層。
-
定義與開發層
-
編排與治理層
-
運行時層
-
供應保障層
-
云設施層
-
觀察與分析層
-
平臺層
上下五層
-
定義與開發層(包括數據庫與數據分析、流式處理、軟件配置管理、應用定義、持續集成/持續交付等幾個方面)
-
- 數據庫與數據分析
-
-
- 關系型數據庫:Oracle、SQL Server、MySQL、MariaDB、PostgreSQL、DB2等,以ACID事務模型為支撐,關系型數據庫是核心數據存儲選型的首選。
- NoSQL:包括MongoDB、Couchbase、Redis、Cassandra、HBase、Neo4j等。分面向文檔、面向列簇、面向key-value、面向圖等。NoSQL數庫在數據的分布式處理方面表現更加優秀,如redis作為緩存,Neo4j作為關系分析的數據庫,MongoDB作為儲存Schema易變型數據的數據庫。
-
-
-
- NewSQL:TiDB是其中的優秀代表,TiDB采用key-value存儲引擎。
- 大數據處理:包括Hadoop、Spark、Druid(大數據實時處理分布式系統)等
-
-
- 流式處理:
-
-
- 消息中間件:RabbitMQ、Kafka、RocketMQ等
- 流式實時計算框架:storm、Flink,對于實時PV、UV等需求是個不錯的選擇。
-
-
- 軟件配置:軟件配置管理SCM,包括SVN和Git。一般企業使用GitLab來搭建自己的軟件配置管理系統。個人開發者、開源項目可以使GitHub或碼云來管理源代碼。
- 應用定義:如java的Maven等。
-
- 持續集成及持續交付:常見的持續集成及持續交付工具包括Jenkins、Bamboo、CircleCI、Travis等。
-
編排與治理層(包括調度與編排、分布式協調與服務發現、服務管理等。)
-
- 調度與編排:調度是將分布式系統中的空閑資源合理分配給需要的進程并采用容器進行封裝的過程。編排是對系統中的容器進行健康檢查、自動擴縮容、自動重啟、滾動發布等的過程。
Kubernetes、Mesos、Swarm等屬于此范疇。
- 調度與編排:調度是將分布式系統中的空閑資源合理分配給需要的進程并采用容器進行封裝的過程。編排是對系統中的容器進行健康檢查、自動擴縮容、自動重啟、滾動發布等的過程。
-
-
- K8s:出色的容器編排系統,面向云原生paas平臺。
- Mesos:
-
-
- 分布式協調與服務發現:分布式系統一般通過一個高可靠的注冊中心對分布式服務進行協調與發現
- 服務管理:包括遠程通信、反向代理、服務治理等方面。其中遠程通信要依托高性能和跨語言的通信框架,包括gRPC、Thrift、Avro等,集序列化和通信功能于一體。反向代理包括硬件的F5和軟件的HAProxy、Nginx等。服務治理包括負責網關的Zuul,負責客戶端負載均衡的Ribbon,負責熔斷的Hystrix;Scala語言開發的Finagle,國內的Dubbo等;Service Mesh是新興的服務治理概念,是指服務網格,Istio框架是這方面的代表,Kubernetes掌控編排,Istio掌控服務治理是未來的方向。
-
運行時層(包括云原生存儲、容器和云原生網絡,分布對于傳統應用的文件系統、進程和網絡環境)
-
- 云原生存儲:指合適云服務的分布式文件存儲系統,包括HDFS、Ceph、ClusterFS等。廣泛應用于存放日志、圖片、文檔等。
- 容器:docker是使用最廣泛的容器。
-
- 云原生網絡:主要解決為每個容器(或Pod)分配獨立IP地址。軟件定義網絡SDN是最佳方案。CNI是容器網絡接口標準,主要實現有Flannel、Calico、OVS、weave等。
-
供應保障層(主要包括宿主機管理工具、基礎設施自動化工具、容器倉庫、鏡像安全和密鑰管理)
-
- 宿主機管理工具
-
-
- 監控自動化工具:可以對服務器CPU、內存、磁盤IO、網絡IO進行探測監控,包括Nagios、Zabbix。
- 流程自動化工具:對服務器進行維護,實現應用上線部署等日常操作的自動化和標準化,包括Ansible、Puppet、Chef、SaltStack等。
-
-
- 基礎設施自動化工具:包括Docker的包管理工具Infrakit,及簡化Kubernetes部署的Helm工具。通過Helm Charts幫助安裝和更新復雜的Kubernetes應用,支持版本管理和控制。
- 容器倉庫:Harbor可以幫助用戶迅速搭建一個企業級的Docker Registry服務。
-
- 鏡像安全和密鑰管理:Clair、Twistlock等工具可以檢查容器中應用的漏洞。
-
云設施層(主要包括AWS、Azure、阿里云、騰訊云等公有云和OpenStack、VMware等私有云)
共用層
-
觀察與分析層(包括對系統指標的監控,對鏈路調用的追蹤,對分布式日志的收集)
-
- 監控:對物理服務器指標采集和報警工具包括Nagios、Zabbix。對容器指標采集工具有CAdvisor等。存儲海量采集信息的時序數據庫Prometheus、InfluxDB等。Grafana用于監控分析的圖形工具來展示數據。
- 對鏈路調用的追蹤:OpenTracing是調用鏈的標準協議,遵循該協議的開源解決方案有ZipKin、JAEGER,及國產開源項目SkyWalking等。另外未遵循該協議的開源方案有PinPoint、Open-Falcon、CAT等。
-
- 日志收集:用于采集標準輸出并將日志輸入其它流的工具有Fluentd、Flume、FileBeat、Logstash等。然后這些工具將日志通過各種緩沖管道進行處理,寫入日志中心。日志中心的存儲介質可以是Elasticsearch、HBase等。Elastic公司提供的搜索引擎Elasticsearch、日志收集工具Logstash和圖形界面Kibana所組成的一站式開源解決方案(ELK),也有Splunk這樣的一體化商業日志解決方案。
-
平臺層:平臺是指基于云的整合平臺。包括圍繞Mesos打造的DC/OS;以及可以整合Mesos和Kubernetes的Rancher平臺。
2.4云原生路線圖
3.kubernetes
3.1k8s是什么
Kubernetes,也稱為 K8s,是一個開源系統,用于自動化部署、擴展和管理容器化應用程序。
3.2資源管理器的發展經歷
首先云服務的發展是:
IaaS 基礎設施即服務 阿里云
PaaS 平臺即服務 新浪云
SaaS 軟件即服務 Office365,不需要安裝,只需要通過瀏覽器訪問就能進行文檔的創建修改等。
新浪有個叫新浪sae,號稱免運維的云平臺,以前可以免費申請這個平臺來運行代碼項目的功能,包括JAVA,PHP等都可以。
以前的流程大致就是:
后來出現了一些運維工具,運維工具能自動化的進行環境的創建。
雖然有了這些自動化工具,但是離真正的自動化還遠遠不夠。
后來有一家公司開發了一個產品-Docker,該公司主要就是做PaaS平臺。隨著發展Docker成為了下一代,也就是現在PaaS平臺的標準。
但是直接使用Docker容器化的時候會遇到很多問題,例如:在存在許多tomcat容器的時候,每個容器Ip地址映射關系等,會變得十分復雜。
那么容器的集群化有沒有很好的解決方案呢?
有需求就有產品,這個產品就是—資源管理器
資源管理器發展歷程:
1.MESOS,一開始并不是為了容器化而誕生,而是作為一種資源管理平臺而出現。以前被推特選擇。后來改為了k8s。但是MESOS官方表示可以用MESOS來管理k8s,但并未有大型企業選擇。因為采用k8s進行管理已經十分方便了。若增加MESOS又會出現一個可能出現的故障節點。
2.docker SWARM,docker母公司誕生的,用于處理docker管理的解決方案。輕量級的。但是功能太少,例如實現滾動更新,回滾等操作很難,需要手工實現。
3.kubernetes,
MESOS APACHE開源協議 分布式資源管理框架 2019-5 推特=》 k8s
Docker Swarm 2019-7 阿里云宣布Docker Swarm 從選擇資源管理框架中剔除
Kubernetes Goole 10年容器化作為基礎架構 brog 內部管理容器/資源的框架(未開源)
隨著容器化技術的發展,谷歌 使用go語言 對brog系統進行翻寫,并開源給的cncf
3.3k8s的特點
-
輕量級(消耗的資源小) 底層go語言,語言級別支持進程管理等
-
開源
-
彈性伸縮 伸:可平滑的增加節點 縮:主節點通過一條命令就可以將一些節點剝離
-
負載均衡 內部實現了模塊之間的負載均衡
3.4brog架構
brgo架構
-
BorgMaster : 處理請求的分發,整個集群的大腦。實現高可用可對BorgMaster進行備份
-
BorgLet :真正工作的節點,對應的容器要運行是通過borglet提供的
-
scheduler :調度器,負責進入BrogMaster的請求進行分發,將數據寫進Paxos(鍵值對數據庫)
-
訪問方式:
-
- borgcfg 文件讀取
- commoand-line tools 命令行
-
- web browsers 瀏覽器
3.5k8s架構
首先是一個C/S結構,Master和 node
scheduler:調度器,這里會將任務交給api server 再由api server 負責將請求寫入到 etcd。調度器并不會直接和etcd直接進行交互。
replication controller :維護副本的數目,例如:想讓容器運行幾個副本,就是由rc來控制的。
api server :一切服務訪問的入口,aip server會非常繁忙,這時在調度器,rc等會生成一定的緩存,來減少對api server的
etcd :類似于brog中的paxos ,etcd 采用go語言編寫的kv數據庫,用于協助集群的正常運轉(保存整個分布式集群的需要持久化的配置文件,一旦集群死亡可利用etcd中的數據進行恢復)。并且etcd可信賴(天生支持集群化,不用其他組件參與進來,增加故障節點的可能)的kv數據庫。etcdv2將數據寫進內存中,etcdv3,將數據寫進磁盤。
kublet:與CRI(container,runtime,interface)進行交互,維持pod的生命周期,kubelet與docker進行交互操作docker來創建對應的容器。
kube proxy: 實現負載均衡的功能,實現pod與pod之間的訪問和負載均衡需要借助kube proxy ,默認是操作防火墻實現pod的映射,也支持IPVS。
container: 即容器。例如:docker容器
總結:
master服務中的組件:
-
api server:所有服務訪問的統一入口
-
scheduler:負責接收任務,選擇合適的節點分配任務。
-
replication controller:維護副本期望的數量
-
etcd:kv數據庫,存儲k8s中重要的且是持久化的重要信息
node:
- kublet :直接和容器引擎交互,實現容器的生命周期管理
- kub proxy:負責寫入規則到防火墻、IPVS實現服務映射訪問
3.6其他插件
CoreDNS:可以未集群中的svc創建一個域名ip的對應關系解析。
Dashboard:給k8s集群提供一個b/s結構的訪問體系
ingress controller:k8s官方只能實現4層代理,ic可以實現7層代理。根據組件名進行負載均衡。
fedetation:提供一個可以跨集群中心的多k8s統一管理功能
promethus:提供一個k8s集群的監控功能。
ELK:提供k8s集群的日志統一分析介入平臺。
總結
- 上一篇: 元宇宙通证-十、互联网发展史全景图
- 下一篇: cocos2d-x csb特效文件显示