100 個容器技術相關技能棧

運維之美發表於2019-03-02
大規模的容器技術運用從來不是一項獨立工程,而是一個彙集虛擬化技術、容器編排、任務排程、作業系統、容器倉庫、跨節點網路、分散式儲存、動態擴縮、負載均衡、日誌監控、故障自恢復等系統性難題的複雜有機體。隨著 Docker 的誕生和 Google 等網際網路公司的推波助瀾,這個領域出現了一大批優秀的開源專案,它們在簡化容器技術使用成本的同時,也經常使得剛剛接觸容器時間不太長的開發者和企業使用者感到不知所措。

將知識分類是梳理零散資訊的一種有效方式。對於容器技術的生態圈來說,其中涉及領域眾多,有的專案橫跨多個細分領域,有的專案則是針對特定場景需求定製的,難以對其功能型別做精確定義。不過,若僅考慮通用領域裡的相關產品和工具,大致來說可以劃分成 14 種主要類別。

100 個容器技術相關技能棧


以下將圍繞容器生態,分別舉例介紹這些類別中的典型開源專案,以及部分雖未開源但比較常用的 100 個周邊產品。

1. 容器引擎

容器引擎是容器叢集生態圈的核心部分,它是與核心 Namespace 和 CGroup 等功能直接互動,並提供相應 API 使得外部能夠與之整合的工具或服務。Docker 無疑是目前為止最成功、廣泛最使用的容器引擎之一。實際上從 1.12 版本以後,Docker 的容器化功能已經由獨立的專案 RunC 來實現,但 Docker 仍作為一個開源產品為使用者提供完整的容器化解決方案。此外,社群中還有許多容器引擎專案,例如:

001. Docker:https://www.docker.com
002. Rkt:https://coreos.com/rkt
003. Systemd-nspawn:https://www.freedesktop.org/wiki/Software/systemd
004. Hyper:https://hyper.sh
005. Garden:https://github.com/cloudfoundry/garden
006. LXC:https://linuxcontainers.org
007. Photon:https://github.com/vmware/photon
008. Vagga:https://github.com/tailhook/vagga
009. gVisor:https://github.com/google/gvisor
010. Pouch:https://github.com/alibaba/pouch

這些專案只是眾多支援不同平臺和具有不同特性的容器引擎的冰山一角。例如 Google 曾經主導的 lmctfy(http://lmctfy.io/)專案也是個十分優秀的容器引擎,然而該專案自 2015 年以後就不再被維護了。而最近 Google 剛剛開源的 gVisor 則是該領域中的新秀。另外值得一說的是,Hyper 採用虛擬機器的方式對環境進行隔離,並不是一種基於容器的隔離方案,但它能很好地與 Docker 或 Kubernetes 等容器叢集技術相結合,取代其環境隔離的功能,因此也歸屬此列。

2. 監控和資料收集

由於容器基於核心的特殊隔離方式,對容器效能和狀態的監控與虛擬機器存在一些差別。傳統的虛擬機器監控工具,例如 Nagios 和 Zabbix 等,對容器監控的原生支援並不十分易用。而一些新起的開源專案對這種場景具有更友好的體驗,例如:

011. cAdvisor:https://github.com/google/cadvisor
012. Sysdig:http://sysdig.org
013. Prometheus:https://prometheus.io
014. TICK-Stack:https://influxdata.com
015. Docker-Alertd:https://github.com/deltaskelta/docker-alertd
016. Grafana:https://grafana.com

其中的 TICK-Stack 指的是 Influxdata 推出的 Telegraf、InfluxDB、Chronograf、Kapacitor 四款開源工具,不過從 1.0 以後,這些工具在開源版基礎上提供了企業版本,後者提供了例如高可用、雲端儲存等企業級功能。

3. 容器管理和介面工具

視覺化是使用者友好性十分重要的一部分,Shipyard 和 Decking 是 Docker 早期時十分受歡迎的視覺化工具,之後 Docker 也收購了 Kitematic 作為官方的容器管理 UI。但隨著容器應用叢集化,早期的 UI 工具不再流行,一些針對特定叢集平臺定製的新型管理 UI 開始出現。例如 Kubernetes 官方推出了 Dashboard 專案用於視覺化的管理叢集,Cockpit 則是紅帽公司推出的 Kubernetes 叢集管理介面。以下是其中一些開源的容器管理 UI 專案:

017. Kitematic:https://kitematic.com
018. DockerUI:https://github.com/crosbymichael/dockerui
019. Panamax:http://panamax.io
020. Rapid Dashboard:https://github.com/ozlerhakan/rapid
021. Cockpit:http://cockpit-project.org
022. Portainer:https://www.portainer.io
023. Shipyard:http://shipyard-project.com
024. Seagull:https://github.com/tobegit3hub/seagull
025. Dockeron:https://github.com/dockeron/dockeron
026. DockStation:https://dockstation.io

4. 基礎設施整合

容器叢集的實施是需要以硬體基礎設施作為依託的,有些輔助工具能夠簡化這個過程。這些專案往往與具體的底層平臺相關,例如:

027. Nova-docker:https://github.com/stackforge/nova-docker
028. Magnum:https://github.com/openstack/magnum
029. Machine:https://docs.docker.com/machine
030. Boot2Docker:https://github.com/boot2docker/boot2docker
031. Clocker:https://github.com/brooklyncentral/clocker
032. MaestroNG:https://github.com/signalfuse/maestro-ng

Nova-docker 和 Magnum 都是在 OpenStack 整合容器叢集的專案,不過目前 OpenStack 官方正在嘗試通過讓 Kubernetes 直接建立虛擬機器的方式來統一它在 IaaS 層和 CaaS 層的差異,其中的 Nova-docker 已經被廢棄了。 Machine 是 Docker 公司推出的基礎設施管理工具,Boot2Docker 曾經是在Windows 和 Mac 上使用 Docker 的官方方案,但隨著 Docker 1.12 版本釋出了多種作業系統的發行版後,已經不再被推薦使用了。

5. 編排和排程

編排和排程是容器叢集的基本功能,因此選擇編排和排程工具實際上就是在選擇容器叢集的方案。以下是一些開源的容器任務編排排程工具:


033. SwarmKit:https://github.com/docker/swarmkit
034. Kubernetes:http://kubernetes.io
035. Marathon:https://github.com/mesosphere/marathon
036. Rancher:http://www.rancher.io
037. Nomad:https://github.com/hashicorp/nomad
038. OpenShift:https://www.openshift.com
039. Crane:https://github.com/michaelsauter/crane
040. Nebula:https://github.com/nebula-orchestrator
041. GearD:http://openshift.github.io/geard

其中的 OpenShift 主要是指其 3.0 之後的發行版,它是紅帽公司基於 Kubernetes 二次開發的集持續整合和交付於一體的容器叢集方案,具有開源和商業兩個版本。

6. 容器映象倉庫

映象倉庫是基於容器的在軟體釋出流程中必要的組成部分,Docker 開源了其映象倉庫的最小實現,但對於企業級應用來說,它缺少了高可用、許可權控制、管理介面等必要功能。Docker Hub 和國內的許多容器雲平臺都提供了公有云的企業級倉庫服務,社群中也有一些容器倉庫的開源或免費的實現,例如:

042. Repository:https://github.com/docker/distribution
043. Nexus:http://www.sonatype.org/nexus
044. Habor:http://vmware.github.io/harbor
045. Portus:https://github.com/SUSE/Portus
046. Docker Registry UI:https://github.com/atcol/docker-registry-ui
047. Dragonfly:https://github.com/alibaba/Dragonfly

其中的 Nexus 是一種通用的軟體包倉庫解決方案,支援包括 Maven、NPM、PIP、RPM 等許多主流打包格式的分發和管理,它是在 3.0 以後的版本中開始支援作為 Docker 映象倉庫的。VMWare 推出的 Habor 是目前相對常用的企業級開源 Docker 倉庫解決方案。Portus 和 Docker Registry UI 是基於官方 Repository 映象倉庫的介面化管理工具。Dragonfly 是一款 P2P 協議的映象分發工具,並非直接提供映象儲存功能,但也屬於倉庫輔助類的工具。

7. 服務發現和容器域名服務

服務發現和域名服務實際上是微服務架構和容器叢集的排程工具所需的元件,它們在容器叢集中十分常見,也是這個生態圈中舉足輕重的一部分,以下是其中一些在實際工程中被提及較多的工具:

048. Etcd:https://github.com/coreos/etcd
049. Consul:http://www.consul.io
050. ZooKeeper:https://zookeeper.apache.org
051. Eureka:https://github.com/Netflix/eureka
052. Traefik:https://traefik.io
053. Muguet:https://github.com/mattallty/muguet
054. Registrator:https://github.com/gliderlabs/registrator
055. SkyDNS:https://github.com/skynetservices/skydns

8. 容器日誌收集處理

和容器叢集的監控一樣,收集容器中的服務執行日誌與虛擬機器中的方式同樣存在許多差異。目前 Docker 直接通過外掛能夠支援的日誌收集工具包括 Rsyslog、Splunk 和 Fluentd,雖然 FileBeat 不在此列,但由於其小巧便捷的部署機制,也得到了許多使用者青睞。一些過去用於虛擬機器的日誌收集器,比如 LogStash 或 Flume,同樣能夠使用與容器中的服務,但它們都不再是首選的方案。

056. Splunk:https://www.splunk.com
057. Fluentd:https://www.fluentd.org
058. ElasticStack:https://www.elastic.co
059. Flume:https://flume.apache.org
060. Rsyslog:https://www.rsyslog.com/

ElasticStack 是 Beats、Logstash、ElasticSearch 和 Kibana 四款開源專案的統稱,這是一套十分流行的日誌匯聚、處理、儲存和展示的工具組合。其中的 ElasticSearch 和 Kibana 也可以與 Fluentd 配合,形成端到端日誌處理方案。另外值得指出的是,Splunk 並不是開源或免費的,但它在企業級日誌處理方案中的應用十分廣泛。

9. 容器相關的系統發行版

有些 Linux 發行版是為容器執行而優化的,Atomic 和 ClearLinux 系統都屬於此類。另一些 Linux 發行版在設計之初就充分地將容器機制融入了系統的架構理念,例如 CoreOS。有的系統甚至將 Docker 作為系統的核心服務來管理其他使用者程式,例如 RancherOS 和 Hyper 容器引擎所使用的作業系統。類似的專案還有許多,它們都是架設容器叢集時十分稱手的基礎設施,例如:

061. Container Linux:http://coreos.com
062. Project Atomic:http://www.projectatomic.io
063. RancherOS:http://rancher.com/rancher-os
064. ClearLinux:https://clearlinux.org
065. Photon OS:https://vmware.github.io/photon
066. CargoOS:https://cargos.io
067. SmartOS:https://www.joyent.com/smartos

10. 容器平臺

容器平臺是大規模容器運用的產物,它通常會與持續整合、持續交付的工具結合,成為連線上層應用服務和底層基礎設施、幫助使用者快速實現從程式碼提交到產品上線全過程的端到端交付過程。以下是其中一些相關的開源專案:

068. Deis:https://deis.com
069. Flynn:http://flynn.io
070. Dokku:https://github.com/progrium/dokku
071. Fabric8:http://fabric8.io
072. Kel:http://www.kelproject.com
073. Nanobox:https://nanobox.io
074. Tsuru:https://tsuru.io

除了這些開源的容器平臺服務實現之外,網際網路上還有許多線上按量付費的容器即服務平臺,它們也是整個容器叢集生態的一部分。

11. 容器網路

容器技術在解決環境隔離和配額問題的同時,也引入了網路層面的複雜性。由於使用了 Network Namespace,每個容器都可以獲得獨立的 IP 地址,這對於單個主機的情況並無大礙,但對於容器叢集的情況,IP 地址的分配和互聯就成為了新的問題。因此在設計容器叢集時,通常需要專門為網路的連線方式加以考慮。常用的開源方案例如:

075. Libnetwork:https://github.com/docker/libnetwork
076. Flannel:https://github.com/coreos/flannel
077. Calico:http://www.projectcalico.org
078. Weave:https://github.com/zettio/weave
079. Romana:http://romana.io
080. Canal:https://github.com/projectcalico/canal
081. Open vSwitch:http://openvswitch.org
082. Pipework:https://github.com/jpetazzo/pipework

這些網路方案大多采用了七層網路的 Overlay Network 方式,也就是在容器之間通訊的網路包上封裝了用於路由定址的額外包頭,這種方式會導致網路通訊效率的下降,具體影響程度與所封裝的額外資料大小有關。而 Calico 採用修改每個主機節點上的 IPtables 和路由表規則實現容器間資料路由和訪問控制,屬於三層網路的方式,這種方案在節點規模不太大(最多幾百個節點)時的效率優勢十分明顯,是一種比較受推薦的容器網路工具。除了這些較常用的方案外,一些條件允許的企業也會結合 Mac VLAN 等二層網路方案實現容器的互聯,以獲得更好的網路效能。

12. 容器安全

容器安全性問題的根源在於容器和宿主機共用核心,因此受攻擊的面特別大。另外,如果容器裡的應用導致 Linux 核心崩潰,整個宿主機系統都會崩潰,這一點與虛擬機器是不同的。此外,映象的安全性也是容器安全的一部分,如何保障使用者下載的映象是可信的、未被篡改過的,以及如何保證映象中不會意外包含具有大量漏洞的老舊軟體都是需要考慮的問題。目前這些安全課題主要在一些企業級應用中引起較多重視,下面是一些相關的開源工具和專案:

083. Notary:https://github.com/docker/notary
084. Clair:https://github.com/coreos/clair
085. AppArmor:http://wiki.apparmor.net/index.php/Main_Page
086. SELinux:https://selinuxproject.org
087. Twistlock:https://www.twistlock.com
088. OpenSCAP:https://github.com/OpenSCAP/container-compliance

13. 容器資料持久化

容器是一種不可變的基礎設施,容器的資料應該通過 Volume 的方式儲存到外部的介質上,容器持久化儲存本質上就是要解決如何簡便地將外部儲存掛載到容器中使用的問題。Docker 在 1.9 版本後提供了儲存的外掛,這也為許多儲存方案提供了便利,以下列舉幾個例子:

089. Flocker :https://github.com/clusterhq/flocker
090. Convoy:https://github.com/rancher/convoy
091. REX-Ray:https://github.com/codedellemc/rexray
092. Netshare:https://github.com/ContainX/docker-volume-netshare
093. OpenStorage:https://github.com/libopenstorage/openstorage

其中 Ceph 是通用的網路儲存工具,同時提供塊儲存和物件儲存能力,對容器化場景下的應用資料持久化具有良好的支援。

14. 容器相關開發流程工具

容器的映象可以被看作一種新型的應用打包方式,因此容器常常與軟體的開發和持續整合、持續交付流程相結合,提供不同環境一致性部署能力。以下是一些利用容器改善軟體開發和交付的工具或平臺:

094. Drone.io:https://drone.io
095. Shippable:http://shippable.com
096. Cyclone:https://github.com/caicloud/cyclone
097. Screwdriver:http://screwdriver.cd
098. WatchTower:https://github.com/v2tec/watchtower
099. Wercker:http://wercker.com
100. Totem:http://totem.github.io

  • 來源:阿里雲效平臺

  • 原文:http://t.cn/RB1G4Wf

  • 題圖:來自谷歌圖片搜尋

  • 版權:本文版權歸原作者所有


100 個容器技術相關技能棧

100 個容器技術相關技能棧

100 個容器技術相關技能棧


相關文章