一、虛擬化
虛擬化是一種資源管理技術,是將計算機的各種實體資源(CPU、網絡、內存、磁盤等)予以抽象和轉換后呈現出來,打破實體間不可切割的障礙。在實際的生產環境中,虛擬化主要解決高性能的物理硬件產能過剩和老舊物理硬件產能過低的重組重用兩個問題。
常用的虛擬化技術:
Docker:
Docker是容器技術,其是基於進程級別的隔離,是在操作系統內部進程與進程間的隔離。
Docker可以用來做服務應用開發(測試、部署、發版實現可持續發布)和pass、sass等雲計算領域
KVM:
KVM是集成在Linux內核中的虛擬化技術,可以使用Linux基於硬件的方式進行隔離,這種隔離方式是直接隔離的硬件,因此隔離的更徹底。
KVM可以用來做公有雲、私有雲和混合雲等虛擬化技術,同時由於KVM隔離的更徹底,因此要構建安全級別更高的私有雲,就必須使用KVM。
OpenStack:
OpenStack技術是虛擬機雲計算基礎設置層管理平台,例如網絡、磁盤、CPU、內存等
VMware:
虛擬機的PC端管理平台
二、雲原生
(一)雲原生
雲原生是一種軟件架構開發思想,其作用(目的)就是為了讓開發的所有程序都運行在容器中。
雲原生有容器化、微服務、devops、ci/cd四個特點:
容器化:這也是雲原生的目的,就是開發的所有程序都運行在容器中,使各個項目進行隔離。
微服務:實現雲原生,最好采用微服務架構(CNCF-雲原生計算基金會:微服務 + 容器化 + service mesh)
devops:開發+運維,開發和運維的合體,devops是一種敏捷開發的思想,一種組織形式,可以實現項目的可持續交付、部署。
ci/cd:可持續集成、可持續部署
雲架構擴容思維:
雲計算的三個層次模型分別為Iaas、Paas、Saas。
iaas:基礎設施級服務,例如物理機,kvm
paas:平台級服務,雲平台,例如常見的阿里雲
saas:軟件級服務,在paas的基礎上增減軟件,例如阿里雲的mysql數據庫
除了這三個層次模型外,還有Caas、Faas、Service mesh、serviceless等
Caas:容器級服務,所有的服務都運行在容器內
Faas:函數級服務,即微服務架構
Service Mesh:服務網絡架構,主要是來做服務治理的,例如鏈路追蹤、服務限流、服務降級、服務監控等
serverless:無服務器開發,開發時開發者只需要關注應用即可,不需要關注服務器。
本地應用部署和雲原生對比
對比 | 本地部署 | 雲原生 |
代碼更新 | 停機更新 | 不需要停機即可更新,始終會保持最新狀態,支持頻繁的更新 |
擴容 | 不支持動態擴容 | 可以動態伸縮進行擴容 |
環境要求 | 對物理硬件、網絡、端口等強依賴 | 對物理硬件、網絡、端口等不依賴,其物理資源是隔離的,可以實現服務器無縫遷移 |
運維 | 需要人工運維 | 實現了自動化運維 |
對於雲原生的微服務架構,主要使用Spring Cloud,同時利用K8s將服務部署到雲端。
(二)服務部署的演變
服務部署的演變分為三個階段:物理機部署模式、虛擬機部署模式、容器化部署模式。但是隨着服務越來越多,容器化部署並不能解決擴容、宕機恢復、容器監控、服務調度、數據安全等問題,因此服務編排工具就應運而生。
目前對於容器進行管理的三大主流平台為Swarm、Mesos、K8s
Swarm:其特點是直接調度Docker容器,並且提供和標准Docker API一致的API。每台服務器上都裝有Docker並且開啟了基於HTTP的DockerAPI。這個集群中有一個SwarmManager的管理者,用來管理集群中的容器資源,管理者管理的對象不是服務器層面,而是集群層面的,也就是說通過Manager只能籠統的向集群發出指令而不能具體到服務器要干什么。粒度比較粗,對於比較復雜的場景無法支持,例如對同一個服務部署一千個實例,仍然需要手動部署。
Mesos:Mesos針對不同的運行框架采取獨立的調度系統,其框架提供了Docker容器的原生支持。Mesos並不負責調度而是負責委派授權,因為很多框架都自己實現了復雜的調度。
K8s:K8s采用了pod和Lable這樣的概念把容器組合成一個個互相存在依賴關系的邏輯單元,相關容器被組成pod后會被一起調度和部署,這是K8S和Swarm、Mesos最大的區別,使用K8S可以:
自動化容器的部署和復制
隨時擴展和收縮容器規模
將容器組織成組,並且提供容器間的負載均衡
很容易的升級應用程序容器的新版本
提供彈性的容器等