laas、pass、saas
第一層叫做 IaaS,有時候也叫做 Hardware-as-a-Service,幾年前如果你想在辦公室或者公司的網站上運行一些企業應用,你需要去買服務器,或者別的高昂的硬件來控制本地應用,讓你的業務運行起來。
但是現在有 IaaS,你可以將硬件外包到別的地方去。IaaS 公司會提供場外服務器,存儲和網絡硬件,你可以租用。節省了維護成本和辦公場地,公司可以在任何時候利用這些硬件來運行其應用。
一些大的 IaaS 公司包括 Amazon, Microsoft, VMWare, Rackspace 和 Red Hat. 不過這些公司又都有自己的專長,比如 Amazon 和微軟給你提供的不只是 IaaS,他們還會將其計算能力出租給你來 host 你的網站。
作用通過 IaaS 這種模式,用戶可以從供應商那里獲得他所需要的虛擬機或者存儲等資源來裝載相關的應用,同時這些基礎設施的繁瑣的管理工作將由 IaaS 供應商來處理。IaaS 能通過它上面對虛擬機支持眾多的應用。IaaS 主要的用戶是系統管理員。
主要產品包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud 和 Cisco UCS 等。
IaaS 的七個基本功能:
資源抽象:使用資源抽象的方法 (比如,資源池) 能更好地調度和管理物理資源。
資源監控:通過對資源的監控,能夠保證基礎實施高效率的運行。
負載管理:通過負載管理,不僅能使部署在基礎設施上的應用運能更好地應對突發情況,而且還能更好地利用系統資源。
數據管理:對云計算而言,數據的完整性,可靠性和可管理性是對 IaaS 的基本要求。
資源部署:也就是將整個資源從創建到使用的流程自動化。
安全管理:IaaS 的安全管理的主要目標是保證基礎設施和其提供的資源能被合法地訪問和使用。
計費管理:通過細致的計費管理能使用戶更靈活地使用資源。
第二層就是所謂的 PaaS,某些時候也叫做中間件。你公司所有的開發都可以在這一層進行,節省了時間和資源。
PaaS 公司在網上提供各種開發和分發應用的解決方案,比如虛擬服務器和操作系統。這節省了你在硬件上的費用,也讓分散的工作室之間的合作變得更加容易。網頁應用管理,應用設計,應用虛擬主機,存儲,安全以及應用開發協作工具等。
一些大的 PaaS 提供者有 Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近興起的公司有 AppFog, Mendix 和 Standing Cloud
通過 PaaS 這種模式,用戶可以在一個包括 SDK,文檔和測試環境等在內的開發平臺上非常方便地編寫應用,而且不論是在部署,或者在運行的時候,用戶都無需為服務器,操作系統,網絡和存儲等資源的管理操心,這些繁瑣的工作都由 PaaS 供應商負責處理,而且 PaaS 在整合率上面非常驚人,比如一臺運行 Google App Engine 的服務器能夠支撐成千上萬的應用,也就是說,PaaS 是非常經濟的。PaaS 主要的用戶是開發人員。
主要產品包括:Google App Engine,force.com,heroku 和 Windows Azure Platform 等。
主要有四大功能:友好的開發環境:通過提供 SDK 和 IDE 等工具來讓用戶能在本地方便地進行應用的開發和測試。
豐富的服務:PaaS 平臺會以 API 的形式將各種各樣的服務提供給上層的應用。
自動的資源調度:也就是可伸縮這個特性,它將不僅能優化系統資源,而且能自動調整資源來幫助運行于其上的應用更好地應對突發流量。
精細的管理和監控:通過 PaaS 能夠提供應用層的管理和監控,比如,能夠觀察應用運行的情況和具體數值 (比如,吞吐量和反映時間) 來更好地衡量應用的運行狀態,還有能夠通過精確計量應用使用所消耗的資源來更好地計費。
第三層也就是所謂 SaaS。這一層是和你的生活每天接觸的一層,大多是通過網頁瀏覽器來接入。任何一個遠程服務器上的應用都可以通過網絡來運行,就是 SaaS 了。
你消費的服務完全是從網頁如 Netflix, MOG, Google Apps, Box.net, Dropbox 或者蘋果的 iCloud 那里進入這些分類。盡管這些網頁服務是用作商務和娛樂或者兩者都有,但這也算是云技術的一部分。
一些用作商務的 SaaS 應用包括 Citrix 的 GoToMeeting,Cisco 的 WebEx,Salesforce 的 CRM,
ADP,Workday 和 SuccessFactors。
通過 SaaS 這種模式,用戶只要接上網絡,并通過瀏覽器,就能直接使用在云端上運行的應用,而不需要顧慮類似安裝等瑣事,并且免去初期高昂的軟硬件投入。SaaS 主要面對的是普通的用戶。
主要產品包括:Salesforce Sales Cloud,Google Apps,Zimbra,Zoho 和 IBM Lotus Live 等。
談到 SaaS 的功能,也可以認為是要實現 SaaS 服務,供應商需要完成那些功能? 主要有四個方面:
隨時隨地訪問:在任何時候或者任何地點,只要接上網絡,用戶就能訪問這個 SaaS 服務。
支持公開協議:通過支持公開協議 (比如 HTML4/5),能夠方便用戶使用。
安全保障:SaaS 供應商需要提供一定的安全機制,不僅要使存儲在云端的用戶數據處于絕對安全的境地,而且也要在客戶端實施一定的安全機制 (比如 HTTPS) 來保護用戶。
多住戶 (Multi-Tenant) 機制:通過多住戶機制,不僅能更經濟地支撐龐大的用戶規模,而且能提供一定的可定制性以滿足用戶的特殊需求。
PaaS 的主要作用是將一個開發和運行平臺作為服務提供給用戶,而 IaaS 的主要作用是提供虛擬機或者其他資源作為服務提供給用戶。接下來,將在七個方面對 PaaS 和 IaaS 進行比較:
1) 開發環境:PaaS 基本都會給開發者提供一整套包括 IDE 在內的開發和測試環境,而 IaaS 方面用戶主要還是沿用之前比較熟悉那套開發環境,但是因為之前那套開發環境在和云的整合方面比較欠缺,所以使用起來不是很方便。
2) 支持的應用:因為 IaaS 主要是提供虛擬機,而且普通的虛擬機能支持多種操作系統,所以 IaaS 支持的應用的范圍是非常廣泛的。但如果要讓一個應用能跑在某個 PaaS 平臺不是一件輕松的事,因為不僅需要確保這個應用是基于這個平臺所支持的語言,而且也要確保這個應用只能調用這個平臺所支持的 API,如果這個應用調用了平臺所不支持的 API,那么就需要對這個應用進行修改。
3) 開放標準:雖然很多 IaaS 平臺都存在一定的私有功能,但是由于 OVF 等協議的存在,使得 IaaS 在跨平臺和避免被供應商鎖定這兩面是穩步前進的。而 PaaS 平臺的情況則不容樂觀,因為不論是 Google 的 App Engine,還是 Salesforce 的 Force.com 都存在一定的私有 API。
4) 可伸縮性:PaaS 平臺會自動調整資源來幫助運行于其上的應用更好地應對突發流量。而 IaaS 平臺則需要開發人員手動對資源進行調整才能應對。
5) 整合率和經濟性: PaaS 平臺整合率是非常高,比如 PaaS 的代表 Google App Engine 能在一臺服務器上承載成千上萬的應用,而普通的 IaaS 平臺的整合率最多也不會超過 100,而且普遍在 10 左右,使得 IaaS 的經濟性不如 PaaS。
6) 計費和監管:因為 PaaS 平臺在計費和監管這兩方面不僅達到了 IaaS 平臺所能企及的操作系統層面,比如,CPU 和內存的使用量等,而且還能做到應用層面,比如,應用的反應時間(Response Time)或者應用所消耗的事務多少等,這將提高計費和管理的精確性。
7) 學習難度:因為在 IaaS 上面開發和管理應用和現有的方式比較接近,而 PaaS 上面開發則有可能需要學一門新的語言或者新的框架,所以 IaaS 學習難度更低。
PaaS | IaaS | |
開發環境 | 完善 | 普通 |
支持的應用 | 有限 | 廣 |
通用性 | 欠缺 | 稍好 |
可伸縮性 | 自動伸縮 | 手動伸縮 |
整合率和經濟性 | 高整合率,更經濟 | 低整合率 |
計費和監管 | 精細 | 簡單 |
學習難度 | 略難 | 低 |
未來的 PK
在當今云計算環境當中,IaaS 是非常主流的,無論是 Amazon EC2 還是 Linode 或者 Joyent 等,都占有一席之地,但是隨著 Google 的 App Engine,Salesforce 的 Force.com 還是微軟的 Windows Azure 等 PaaS 平臺的推出,使得 PaaS 也開始嶄露頭角。談到這兩者的未來,特別是這兩者之間的競爭關系,我個人認為,短期而言,因為 IaaS 模式在支持的應用和學習難度這兩方面的優勢,使得 IaaS 將會在短期之內會成為開發者的首選,但是從長期而言,因為 PaaS 模式的高整合率所帶來經濟型使得如果 PaaS 能解決諸如通用性和支持的應用等方面的挑戰,它將會替代 IaaS 成為開發者的 “新寵”。
它們之間的關系主要可以從兩個角度進行分析:其一是用戶體驗角度,從這個角度而言,它們之間關系是獨立的,因為它們面對不同類型的用戶。其二是技術角度,從這個角度而言,它們并不是簡單的繼承關系 (Saa.....
根據現在最常用,也是比較權威的 NIST(National Institute of Standards and Technology,美國國家標準技術研究院) 定義,云計算主要分為三種服務模式,而且這個三層的分法重要是從用戶體驗的角度出發的:
Software as a Service,軟件即服務,簡稱 SaaS,這層的作用是將應用作為服務提供給客戶。
Platform as a Service,平臺即服務,簡稱 PaaS,這層的作用是將一個開發平臺作為服務提供給用戶。
Infrastructure as a Service, 基礎設施即服務,簡稱 IaaS,這層的作用是提供虛擬機或者其他資源作為服務提供給用戶。
三種模式之間的關系
它們之間的關系主要可以從兩個角度進行分析:其一是用戶體驗角度,從這個角度而言,它們之間關系是獨立的,因為它們面對不同類型的用戶。其二是技術角度,從這個角度而言,它們并不是簡單的繼承關系 (SaaS 基于 PaaS,而 PaaS 基于 IaaS),因為首先 SaaS 可以是基于 PaaS 或者直接部署于 IaaS 之上,其次 PaaS 可以構建于 IaaS 之上,也可以直接構建在物理資源之上。
虛擬化:將應用程序和系統內核資源進行解耦,以操作系統級別進行隔離,目的是提高資源利用率
虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化使用軟件的方法重新定義劃分 IT 資源,可以實現 IT 資源的動態分配、靈活調度、跨域共享,提高 IT 資源利用率,使 IT 資源能夠真正成為社會基礎設施,服務于各行各業中靈活多變的應用需求。
虛擬機管理器功能:調用資源
兩大核心組件:QEMU、KVM
QEMU:
①可以理解為隊列,核心目的是 ** 調用資源內核中的資源 **,需要把 KVM 邏輯分割出來的資源運輸給 QEMU,再給虛擬機。
②QEMU 它并不是直接調用,而是用 I/O 方式調用,QEMU 把資源調用來的過程借用 ioctl,QEMU 借助 libvirt 這個工具調用 ioctl,再通過接口,給虛擬機應用程序。
KVM:
①用來邏輯分割物理資源,抽象化為虛擬化資源,根據 VMM 里的配置,會邏輯分割出多少 G,給應用程序,去進行虛擬化。
②只接受來自 QEMU 的請求指令。對于應用程序直接過來的敏感指令會攔截,然后通過接口發給 QEMU,讓 QEMU 判斷是否需要執行,可以的話,再下來,不可以的話,打回去,不執行該敏感指令。
對于 workstation 而言,硬件輔助虛擬化,表現形式在處理器里面有一個虛擬化引擎,可以勾取硬件輔助虛擬化,看到虛擬接口 / dev/kvm,可以加強輔助調用,在應用程序需要頻繁調用的時候,需要開啟。比如 openstack。
1. 全虛擬化:將物理硬件資源全部通過軟件的方式抽象化,最后進行調用
2. 半虛擬化:需要修改操作系統
3. 直通: 直接使用物理硬件資源(需要支持,還不完善)
全虛擬化: kvm——> 產品 vmware—ce(社區版)
半虛擬化:EXSI——>workstation vsphere
① 在一個操作系統內,模擬多個操作系統
② 以軟件的方式模擬物理設備的功能
容器是一種技術,開發人員打包開發完成一個應用(系統)以及所需的開發環境,然后通過容器可以運行在不同的計算機上面,也不需要重新配置相關環境,不同的是每一臺計算機都需要配置運行容器的容器引擎,目前市場上主流就是 Docker 容器引擎,不過 Docker 容器引擎的配置很簡單,比配置應用(系統)運行的環境簡單,方便太多。每臺要運行應用(系統)的計算機上面配置了 Docker 容器引擎之后,都單獨獨立可以運行之前打包完成的應用(系統)
· 靈活:即使是最復雜的應用也可以集裝箱化
· 輕量級:容器利用并共享主機內核
· 可互換:可以即時部署更新和升級
· 便攜式:可以在本地構建,部署到云,并在任何地方運行
· 可擴展:可以增加并自動分發容器副本
· 可堆疊:可以垂直和即時堆疊服務
復雜性增加:隨著容器及應用數量的增加,同時也伴隨著復雜性的增加。在生產環境中管理如此之多的容器是一個極具挑戰性的任務,可以使用 Kubernetes 和 Mesos 等工具管理具有一定規模數量的容器。
原生 Linux 支持:大多數容器技術,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中運行容器,在 Microsoft 環境中運行容器略顯笨拙,并且日常使用也會帶來復雜性。
不成熟:容器技術在市場上是相對新的技術,需要時間來適應市場。開發者中的可用資源是有限的,如果某個開發者陷入某個問題,可能需要花些時間才能解決問題。
Docker 的容器技術可以在一臺下機上輕松為任何應用創建一個輕量級的、可移植的、目給自足的容器。
Docker 的 Logo 設計為藍色鯨魚,拖著許多集裝箱。
鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程序。
Docker 的設計宗旨:Build,Ship and Run Any App,Anywhere,即通過對應用組件的封裝、發布、部署、運行等生命周期的管理,達到應用組件級別的 “一次封裝,到處運行” 的目的。這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的操作系統。
· 是一個開源的應用容器引擎,基于 go 語言開發并遵循了 apache2.0 協議開源
· 是在 Linux 容器里運行應用的開源工具
· 是一種輕量級的 “虛擬機 "
· Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量 級的、可移植的、自給自足的容器。
· Docker 容器
是在 Linux 上本機運行,并與其他容器共享主機的內核,它運行的是一個獨立的進程,不占用其他任何可執行文件的內存,非常輕量
· 虛擬機
運行的是一個完成的操作系統,通過虛擬機管理程序對主機資源進行虛擬訪問,相比之下需要的資源更多
docker 本質就是宿主機的一個進程,docker 是通過 namespace 實現資源隔離,通過 cgroup 實現資源限制,通過寫時復制技術(copy-on-write)實現了高效的文件操作(類似虛擬機的磁盤比如分配 500g 并不是實際占用物理磁盤 500g)
命名空間 | 系統調用參數 | 隔離內容 |
UTS | CLONE_NEWUTS | 主機名與域名 |
IPC | CLONE_NEWWIPC | 信號量、消息隊列和共享內存 |
PID | CLONE_NEWPID | 進程編號 |
NETWORK | CLONE_NEWNET | 網絡設備、網絡棧、端口等 |
MOUNT | CLONE_NEWNS | 掛載點(文件系統) |
UDER | CLONE_NEWUSER | 用戶和組(3.8 以后的內核才支持) |
Linux 上的 Do 側看人引擎還依賴于另一種稱為控制組(Cgroups)的技術,Cgroup 將應用和程序限制為一組特定的資源,控制組允許 Docker Engine 將可用的硬件資源共享給容器,并有選擇地實施限制和約束。Cgroups 主要是用作資源控制——可以用來劃分時間片
六種名稱空間是由 cgroups 管理的
最后一種 centos 的 cgroups 管理版本是 3.8 版本,3.6 和 3.5 用不了
cgroups 管理 linux 內核態中資源管理的模塊
cgroups 管理一些系統資源
不是 docker 原生的
Docker 的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。
通過鏡像啟動一個容器,一個鏡像是一個可執行的包,其中包括運行應用程序所需要的所有內容包含代碼,運行時間,庫、環境變量、和配置文件。
Docker 的容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。
可以把容器看做是要給簡易版的 linux 環境(包括 root 用戶權限、鏡像空間、用戶空間和網絡空間等)和運行在其中的應用程序。
Docker 倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用 push 命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一臺機器上使用這個鏡像時,只需從倉庫獲取。
Docker 的鏡像、容器、日志等內容全部都默認存儲在 /var/lib/docker 目錄下。
目前 Docker 只能支持 64 位系統
Yum 安裝默認安裝最新版本,目前最新版本是 2023 版本,但工作中不會用這么新的版本
1. #關閉防火墻和 selinux
systemctl stop firewalld.service
setenforce 0
2.# 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
-------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是 Linux 內核中支持邏輯卷管理的通用設備映射機制,它為實現用于存儲資源管理的塊設備驅動提供了一個高度模塊化的內核架構。
device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2。
-------------------------------------------------------------------------------------------
1. #設置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. #安裝 Docker
yum install -y docker-ce docker-ce-cli containerd.io
3. #設置為開機自動啟動
systemctl start docker.service
systemctl enable docker.service
1. #查看 docker 版本信息
docker version
2. #查看 docker 信息
docker info
3. #搜索鏡像
格式:docker search 關鍵字
docker search nginx
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
獲取鏡像加速器配置
vim /etc/docker/daemon.json
添加自己的加速器地址,如下圖
#重新加載配置并重啟服務
systemctl daemon-reload
systemctl restart docker
docker info
#查看鏡像信息
鏡像下載后存放在 /var/lib/docker 。
Docker 相關的本地資源存放在 /var/lib/docker/ 目錄下,其中 containers 目錄存放容器信息,image 目錄存放鏡像信息,overlay2 目錄下存放具體的鏡像底層文件。
#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下載到本地的所有鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
· 運行
· 已暫停
· 重新啟動
· 已退出
docker 是一種封裝和運行的開源平臺,他統一了封裝方式,統一了運行方式,開源平臺指的是 docker 引擎,統一的封裝方式指的是鏡像,統一的運行方式指的是容器。
cgroup 資源控制與 namespaces 兩者構成了 docker 底層原理
docker 是一種容器技術,** 把 linux 中的 cgroups(資源管理)和 namespace(名稱空間)等 ** 容器底層技術進行完美封裝,并抽象為用戶創建和管理容器的便捷界面(命令行 cli、api 等),這種 C/S 架構
· Cgroups: 資源控制,管理一些系統資源
· Namespace:資源隔離(名稱空間)
· rootfs:文件系統隔離(使用內核提供的 rootfs)
· 容器引擎(用戶態工具) : 生命周期控制
Docker 客戶端 - Docker
docker 客戶端則扮演著 docker 服務端的遠程控制器,可以用來控制 docker 的服務端進程。
Docker 服務端 - Docker Daemon 資源限制
docker 服務端是一個服務進程,管理著所有的容器。
Docker 鏡像一 Imagefont
Docker 的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。通過鏡像啟動一個容器,一個鏡像是一個可執行的包, 其中包括運行應用程序所需要的所有內容包含代碼。運行時間,庫,環境變量,和配置文件
Docker 容器 - Docker Container
Docker 的容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。
Docker 鏡像倉庫 -- Registryfont
Docker 倉庫是用來集中保存鏡像的地方, 當創建了自己的鏡像之后,可以使用 push 命令將它上傳到公有倉庫 (Public) 或者私有倉庫(Private、常用)。當下次要在另外一臺機器上使用這個鏡像時,只需從倉庫獲取。
Docker 的鏡像、容器、日志等內容全部都默認存儲在 **/var/lib/docker** 目錄下。
docker 把容器化技術做成了標準化平臺,只要安裝了 docker 引擎,就能使用 docker。
使用 docker 有什么意義 (實現了 3 個統一)
docker 引擎統一了基礎設施環境 - docker 環境——>image——> 封裝一一個簡易的操作系統 (3.0+G)
docker 引擎統一了 程序打包 (裝箱 / 封裝 - 類比于集裝箱) 方式 - docker 鏡像——>images
docker 引擎統—了程序部署 (運行) 方式 - docker 容器——>基于鏡像——>運行為容器(可運行的環境)
實現了一次構建,多次、多處使用
檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載;
利用鏡像創建并啟動一個容器;
分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
從宿主主機配置的網橋接口中橋接一個虛擬機接口到容器中;
分配一個地址池中的 IP 地址給容器;
執行用戶指定的應用程序,執行完畢后容器被終止運行。
把這個 docker 干掉,它的資源可能會釋放,然后重新再建一個,因為集對于集群來說它會有高可用的設置,所以干掉一個影響并不大