近幾年,Kubernetes 已經成為自有機房、雲上廣泛使用的容器編排方案,最廣泛的使用方式是 Kubernetes+Docker。從 DevOps 人員的角度,一面用 kubctl 命令、k8s API 來操作集群,一面在單機用 Docker 命令來管理鏡像、運行鏡像。
單獨用 Docker 的情況,在一些公司的場景里面也是有的。一種場景是“只分不合”,把一台機器用 Docker 做資源隔離,但是不需要將多容器“編排”。單獨用 Kubernetes,下層不是 Docker 的情況,並不算很多。
Kubernetes 和 Docker 的關系,簡單來說,有互補,也有競爭。在一般的認知中,Kubernetes 和 Docker 是互補關系:
-
Dockers屬於下層——容器引擎;
-
Kubernetes屬於上層——編排調度層。
Docker 源於 Linux Container,可以將一台機器的資源分成 N 份容器,做到資源的隔離,並將可運行的程序定義為標准的 docker image;Kubernetes 則可以把不同機器的每份容器進行編排、調度,組成分布式系統。
Kubernetes 和 Docker 並不完全是“涇渭分明”的互補關系,它之間有重疊部分,也可以說成是競爭,主要在於幾個點:
-
系統三大移植資源是計算、存儲、網絡,從Kubernetes角度Docker屬於“Runtime(運行時)”,也就是計算資源;但是Docker技術體系里面,本身也包括存儲層、網絡層。上下層職責的重疊,也可以看作競爭。
-
Docker原本有個原生的調度引擎——Swarm,幾年前在調度編排領域,還是Kubernetes、Mesos、Swarm三者並存,Kubernetes最終勝出,但Docker仍有“繼續向上做一層的意願”。