容器生态系统
本文首發(fā)于我的公眾號 Linux云計(jì)算網(wǎng)絡(luò)(id: cloud_dev),專注于干貨分享,號內(nèi)有 10T 書籍和視頻資源,后臺回復(fù)「1024」即可領(lǐng)取,歡迎大家關(guān)注,二維碼文末可以掃。
說起生態(tài),不禁讓人想起賈躍亭的樂視,想當(dāng)初我多次被它的生態(tài)布局給震撼到,一度相信它將要超越百度,坐擁互聯(lián)網(wǎng)三大江山的寶座,但沒過時(shí)日,各種勁爆的新聞就把它推到了風(fēng)口浪尖上,現(xiàn)在想想也是讓人唏噓,但不管怎么說,愿它好吧,畢竟這種敢想敢做的精神還是值得敬佩的。
回到技術(shù)這個(gè)領(lǐng)域,不得不說,技術(shù)更新迭代的速度快得讓人應(yīng)接不暇,就容器技術(shù)這個(gè)領(lǐng)域來說,從 Docker 面世短短的 2-3 年時(shí)間里,就衍生出多種與之相關(guān)的技術(shù)框架,由此形成了一個(gè)小小的生態(tài)系統(tǒng)。
一談到容器,大家都會想到 Docker,本文也主要從 Docker 角度來講容器生態(tài)系統(tǒng)。
容器基礎(chǔ)技術(shù)
Docker 的本質(zhì)是利用 Linux 內(nèi)核的 namespace 和 cgroups 機(jī)制,構(gòu)建出一個(gè)隔離的進(jìn)程(容器進(jìn)程)。所以,容器的基礎(chǔ)技術(shù)主要涉及到 Linux 內(nèi)核的 namespace 和 cgroups 技術(shù)。
容器核心技術(shù)
容器核心技術(shù)保證容器能夠在主機(jī)上運(yùn)行起來,包括容器規(guī)范、容器 runtime、容器管理工具、容器定義工具、Registry 和容器 OS。
容器規(guī)范旨在將多種容器(如 OpenVZ,rkt,Docker 等)融合在一起,解決各種兼容問題,為此還專門成立了一個(gè)叫 OCI(Open Container Initiative)的組織來專門制定相關(guān)的容器規(guī)范。
容器 runtime 是容器真正運(yùn)行的地方,一般需要依賴內(nèi)核,也有運(yùn)行在專門制定的容器 OS 上,關(guān)于容器 OS,下面會做介紹。lxc 、runc 和 rkt 是目前三種主流的 runtime。
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作為 runtime。runc 是 Docker 自己開發(fā)的容器 runtime,符合 oci 規(guī)范,也是現(xiàn)在 Docker 的默認(rèn) runtime。rkt 是 CoreOS 開發(fā)的容器 runtime,符合 oci 規(guī)范,因而能夠運(yùn)行 Docker 的容器。
容器管理工具是對外提供給用戶的 CLI 接口,方便用戶管理容器,對內(nèi)與 runtime 交互。對應(yīng)于不同的 runtime,分別有三種不同的管理工具:lxd、docker engine 和 rkt cli。
容器定義工具允許用戶定義容器的內(nèi)容和屬性,如容器需要什么鏡像,裝載什么應(yīng)用等。常用有三種工具:docker image、Dockerfile 和 ACL(App Container Image)。
docker image 是容器鏡像,runtime 依據(jù) docker image 創(chuàng)建容器。dockerfile 是包含若干命令的文本文件,可以通過這些命令創(chuàng)建出 docker image。ACI 與 docker image 類似,只不過它是由 CoreOS 開發(fā)的 rkt 容器的 image 格式。
Registry 是存放容器鏡像的倉庫,包括 Docker Registry、Docker Hub 和 Quay.io,以及國內(nèi)的 DaoCloud.io。企業(yè)可以用 Docker Registry 構(gòu)建私有的 Registry。
容器 OS 不同于 runtime,是專門制定出來運(yùn)行容器的操作系統(tǒng),與常規(guī) OS 相比,容器 OS 通常體積更小,啟動更快。因?yàn)槭菫槿萜鞫ㄖ频?OS,通常它們運(yùn)行容器的效率會更高。目前已經(jīng)存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。
容器平臺技術(shù)
隨著容器部署的增多,容器也逐步過渡到容器云,容器平臺技術(shù)就是讓容器作為集群在分布式的環(huán)境中運(yùn)行,包括了容器編排引擎、容器管理平臺和基于容器的 PaaS。
容器編排引擎就是管理、調(diào)度容器在集群中運(yùn)行,以保障資源的合理利用。有名的三大編排引擎為 docker swarm、kubernetes 和 mesos。其中,kubernetes 這兩年脫穎而出,成為其中的佼佼者。
容器管理平臺是在編排引擎之上更為通用的一個(gè)平臺,它抽象了編排引擎的底層實(shí)現(xiàn)細(xì)節(jié),能夠支持多種編排引擎,提供友好的接口給用戶,極大方便了管理。Rancher 和 ContainerShip 是容器管理平臺的典型代表。
基于容器的 PaaS 基于容器的 PaaS 為微服務(wù)應(yīng)用開發(fā)人員和公司提供了開發(fā)、部署和管理應(yīng)用的平臺,使用戶不必關(guān)心底層基礎(chǔ)設(shè)施而專注于應(yīng)用的開發(fā)。Deis、Flynn 和 Dokku 都是開源容器 PaaS 的代表。
容器支持技術(shù)
容器的出現(xiàn)又重新讓一些古老的技術(shù)煥發(fā)第二春,如監(jiān)控、網(wǎng)絡(luò)、數(shù)據(jù)管理、日志等技術(shù),由于容器技術(shù)的不同,需要制定相應(yīng)的符合容器規(guī)范的技術(shù)框架,由此有了容器支持技術(shù),用于支持容器提供更豐富能力的基礎(chǔ)設(shè)施。
其中包括容器網(wǎng)絡(luò)、服務(wù)發(fā)現(xiàn)、監(jiān)控、數(shù)據(jù)管理、日志管理和安全性。
容器網(wǎng)絡(luò)主要用于解決容器與容器之間,容器與其他實(shí)體之間的連通性和隔離性。包括 Docker 原生的網(wǎng)絡(luò)解決方案 docker network,以及第三方的網(wǎng)絡(luò)解決方案,如 flannel、weave 和 calico。
服務(wù)發(fā)現(xiàn)保證容器使用過程中資源動態(tài)變化的感知性,如當(dāng)負(fù)載增加時(shí),集群會自動創(chuàng)建新的容器;負(fù)載減小,多余的容器會被銷毀。容器也會根據(jù) host 的資源使用情況在不同 host 中遷移,容器的 IP 和端口也會隨之發(fā)生變化。在這種動態(tài)環(huán)境下,就需要有一種機(jī)制來感知這種變化,服務(wù)發(fā)現(xiàn)就是做這樣的工作。etcd、consul 和 zookeeper 是服務(wù)發(fā)現(xiàn)的典型解決方案。
監(jiān)控室保證容器健康運(yùn)行,且讓用戶實(shí)時(shí)了解應(yīng)用運(yùn)行狀態(tài)的工具,除了 Docker 原生的監(jiān)控工具 docker ps/top/stats 之外,也有第三方的監(jiān)控方案,如 sysdig、cAdvisor/Heapster 和 Weave Scope 。
數(shù)據(jù)管理保證容器在不同的 host 之間遷移時(shí)數(shù)據(jù)的動態(tài)遷移。有名的方案是 Flocker。
日志管理為問題排查和事件管理提供了重要依據(jù)。docker logs 是 Docker 原生的日志工具。而 logspout 對日志提供了路由功能,它可以收集不同容器的日志并轉(zhuǎn)發(fā)給其他工具進(jìn)行后處理。
容器安全性保證容器的安全,不被攻擊,OpenSCAP 能夠?qū)θ萜麋R像進(jìn)行掃描,發(fā)現(xiàn)潛在的漏洞。
PS:本文借鑒了知名云計(jì)算博主 CloudMan 的博文:
http://www.cnblogs.com/CloudMan6/p/6706546.html,感謝 CloudMan 呈現(xiàn)這么好的內(nèi)容。
我的公眾號 「Linux云計(jì)算網(wǎng)絡(luò)」(id: cloud_dev) ,號內(nèi)有 10T 書籍和視頻資源,后臺回復(fù) 「1024」 即可領(lǐng)取,分享的內(nèi)容包括但不限于 Linux、網(wǎng)絡(luò)、云計(jì)算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術(shù)等內(nèi)容,歡迎大家關(guān)注。
轉(zhuǎn)載于:https://www.cnblogs.com/bakari/p/8970553.html
總結(jié)
- 上一篇: hadoop集群配置文件与功能对应解析
- 下一篇: [SQL] 外卖系统数据库设计