容器提供了将应用程序及其依赖关系与操作系统解耦的能力。通过与虚拟机镜像相同的不打包操作系统的方式,容器可以节省大量的系统资源:计算,内存和磁盘空间。容器的下载,更新,部署和迭代也更快。因此,在技术领域,容器已经引起了一场小规模的革命,并被谷歌,微软和亚马逊等公司所采用。
容器引发的小型化革命也给满足容器业务和管理的需要带来了激烈的竞争。谷歌的开源容器管理应用Kubernetes已经成为领先的解决方案(通Amazon ECS和Docker Swarm等同类产品竞争),主要有三个原因:
下图显示了Kubernetes在原生云部署中的作用:
正如上图所示,Kubernetes可以部署和管理您的容器化应用程序,其中包括NGINX,MySQL,Apache等等。它可以为容器提供布局,伸缩,复制,监视和其他功能。
一旦选择了容器管理平台,下一步就是部署Kubernetes。如前所述,Kubernetes是一个可移植解决方案。由于Kubernetes使用相同的镜像和配置,因此它在笔记本电脑,云端或本地端上的工作方式完全相同。
这些解决方案提供了在各种基础架构中部署Kubernetes的能力:无论是公共云部署或者本地部署。选择Kubernetes集群优势包括:
Kubernetes-as-a-Service解决方案的例子包括Platform9和StackPoint.io。
Google Cloud Platform和Microsoft Azure分别通过Google容器引擎(GKE)和Azure容器服务(ACS)提供Kubernetes 。将容器放置在公共云中可以使你快速上手,但你的数据因此将驻留在网络边界和防火墙之外。
Google的GKE在公共云供应商之间保持着领先地位。谷歌一直在通过一个名为Borg的集群管理器广泛地使用容器来进行内部项目,并且已有十年以上的经验(来源:TheNextPlatform)。相比之下,微软的ACS更年轻,Kubernetes支持在2017年2月才被引入。然而,ACS提供更多了灵活性:用户可以选择容器管理平台(Kubernetes,Docker Swarm,DCOS),以及除了Linux之外,还可选择在Windows上部署容器化的应用程序。如下所示,GKE和ACS完全基于公有云,Kubernetes服务和基础架构由服务提供商部署和管理。
Minikube是在本地部署Kubernetes最流行的方式。它支持各种虚拟机服务商,包括VirtualBox,VMware Fusion,KVM和xhyve,在操作系统方面也有广泛的支持,包括OSX,Windows和Linux。下图进一步描述了Minikube的部署:
部署Minikube
如上所示,用户使用Minikube CLI和Kubernetes的本机CLI Kubectl与用户的笔记本交互。Minikube CLI可用于在虚拟机上启动,停止,删除,获取状态以及执行其他操作。一旦Minikube虚拟机启动,Kubectl CLI将在Kubernetes集群上执行操作。以下命令启动现有的Minikube虚拟机并创建NGINX Kubernetes部署:
# minikube start
# cat > example.yaml<<EOF
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF
# kubectl create -f example.yaml
Kubernetes即服务,Kubernetes公共云部署,以及Minikube是仅有的三种部署Kubernetes的方式。请参考部署指南,详细分析各种部署模型,注意事项,优缺点以及对比。