Docker in Docker架构

在开发测试环境,为了能够建立一个完整的 Kubernetes Atlas 集群,使用大量的物理服务器是不经济的。最初我采用 Studio环境KVM和Docker 在一台物理主机上构建多个KVM虚拟机,然后再在虚拟机内部部署Docker来运行Kubernetes。

这种基于虚拟机运行的Kubernetes集群,在云计算厂商中较为流行,不过云计算厂商采用虚拟机的优势主要是:

  • 虚拟机强隔离,弥补了容器隔离不彻底的安全隐患
  • 继承了KVM虚拟机的成熟技术,例如热迁移,以及大量的成熟调度、资源分配技术

不过,对于测试环境以及内部使用的有安全保障的运行环境,嵌套KVM虚拟化和Docker容器带来了性能损耗。特别是个人电脑上模拟Kubernetes技术,大量的虚拟机资源消耗影响过大。

Docker in Docker背景

Docker in Docker 可以在一个Docker系统中运行Docker镜像,实现一个本地化Kubernetes集群。在2017年时,可以通过GitHub项目 Mirantis/kubeadm-dind-cluster 来使用Docker in Docker设置一个Kubernetes集群。当然,你的底层Docker可以是运行在Linux上的Docker,也可以是macOS上的Docker Desktop。

注解

Mirantis/kubeadm-dind-cluster 已停止开发,建议采用 kind集群(Docker in Docker) 来实现这个部署。

注解

minikube 不同的是:minikube是一个单节点kubernetes,没有扩展性,只能做基本的命令操作。Docker in Docker提供了完整的在单个节点上运行多个Docker节点来实现多节点Kubernetes集群。除了没有物理服务器的冗灾,Docker in Docker可以模拟完整的Kubernetes集群,并且 Docker in Docker部署工具kind 可以实现多集群模拟,以便能够测试不同的应用部署架构。

Docker in Docker 主要用于帮助Docker的开发,很多人用Docker in Docker来运行持续集成(CI,例如 Jenkins)。