容器技术所提供的解耦能力,让应用程序及其依赖程序不用再和操作系统耦合在一起。和处理虚拟机镜像方式不同,容器技术并不会将操作系统同应用程序打包在一起,这给我们节约了相当多的硬件资源,不管是cpu、内存,还是磁盘空间。同时,容器的下载,更新,部署和迭代的速度,也远比虚拟机镜像要快。因此,容器技术已经在技术圈中引起不小的变革。类似谷歌、微软和亚马逊这样子的公司都已经开始使用这项技术。
容器技术在带来变革的同时,也给容器的编排和管理等需求的实现,带来了相当激烈的竞争。作为谷歌的开源容器编排系统,Kubernetes已经成为了该领域中领先的解决方案。而它之所以能够在这种竞争中领先于Amazon的 ECS 和 Docker Swarm,主要是因为如下三个主要原因。
下图表明了Kubernetes在 云原生部署 中扮演的角色:
我们看到,Kubernetes可以部署、管理包括NGINX,MySQL,Apache等等在内的诸多容器化应用程序。同时它也提供了对容器的布局,缩放,复制,监视等能力。
一旦我们选定想要使用的容器编排平台,就可以开始部署Kubernetes了。正如前面提到的,Kubernetes拥有很好的可移植性。这主要是因为同一个Kubernetes镜像和配置,不管是在笔记本电脑,云端或本地端,都能正常工作。
以下是部署Kubernetes的三种方案。
Platform9和StackPoint.io 都属于KaaS这种方案。
KaaS,使我们在能够在各种不同的基础设施中都部署Kubernetes:不管是在公共云中,或者仅仅只是本地的部署。选择这种方法作为Kubernetes集群方案的好处如下:
Google Cloud Platform和Microsoft Azure分别通过Google容器引擎(GKE)和Azure容器服务(ACS)来提供Kubernetes 相关的服务。将容器放置在公共云中可以让我们快速启动,但是我们的数据也将因此保存在外网,不受本地防火墙保护。
在诸多云供应商提供的方案中,Google的GKE处于领先地位。谷歌在容器技术的使用上已经有超过十年的经验(来源:TheNextPlatform)。通过其内部的一集群管理系统Borg,谷歌大量的内部项目都用到了容器技术。Microsoft的ACS在这方面和GKE比起来,就要稚嫩得多。而且ACS对于Kubernetes的支持也仅仅是从2017年二月才开始的。尽管如此,ACS也有它自己的优点:它的灵活性要更好。用户可以自助选择想要的容器编排平台(Kubernetes,Docker Swarm,DCOS)
;而且除了Linux之外,ACS也让用户可以在Windows上来部署容器化的应用程序。如下图所示,GKE和ACS完全基于公有云,Kubernetes服务和提供该服务的基础云设施都是由云服务提供商部署和管理的。
如下所示,GKE和ACS完全基于公有云,Kubernetes服务和基础架构由托管提供商部署和管理。
托管Kubernetes的基础设施
如果要在本地部署Kubernetes,Minikube是首选方案。它支持包括VirtualBox,VMware Fusion,KVM和xhyve
在内的各种虚拟层,也支持包括OSX,Windows和Linux在内的各种操作系统。下面的插图进一步描述了基于Minikube部署Kubernetes的方式:
如上所示,用户可以使用Minikube的命令行程序或者Kubernetes的原生命令行来与用于部署的笔记本电脑进行交互。Minikube命令行程序可用于在虚拟机上启动,停止,删除,获取状态以及执行其他操作。一旦Minikube虚拟机启动,Kubectl 命令行程序将在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即服务(KaaS)、Kubernetes托管的基础云平台和Minikube,是仅有的三种部署Kubernetes的方式。请参考以下部署指南,来了解各种不同部署模型,注意事项,优缺点以及对比等更详细的信息。