付辉 译 分布式实验室 

三种主流的Kubernetes部署方式_Java

当您转向云原生开发和部署时,让我们来看看Kubernetes所扮演的角色,以及如何从编排中获得更丰富的功能。


容器提供了将应用程序及其依赖关系与操作系统分离的功能。通过一种有别于虚拟机镜像打包操作系统的方式,容器可以节省大量的系统资源:计算,内存和磁盘空间。容器下载,更新,部署和迭代的速度也更快。因此,在技术世界中,容器已经引起了微型革命,并被Google,微软和亚马逊等公司所采纳。


容器微型革命也带来了激烈的竞争,竞争满足了容器编排和管理的需要。作为Google的开源容器编排引擎,Kubernetes已经成为领先的解决方案(包括Amazon ECS和Docker Swarm等),主要原因有三:


  • 云原生设计:支持下一代应用程序的部署和运行

  • 开源的本质:快速创新,避免供应商锁定

  • 高可移植性:无论是在云、本地还是虚拟机环境中都可以部署


下图展示了Kubernetes在您的云原生部署中可以扮演的角色:


三种主流的Kubernetes部署方式_Java_02

Kubernetes容器编排


如您所见,Kubernetes可以部署和管理您的容器化应用程序,包括NGINX,MySQL,Apache等。它可以为容器提供调度,伸缩,复制,监控和其他功能。


一旦您选择了容器编排平台,下一步就是部署Kubernetes。如前所述,Kubernetes是一种轻量级解决方案。因为Kubernetes使用相同的镜像和配置,它在您的笔记本电脑、云端或本地的工作方式完全相同。


Kubernetes-as-a-Service

三种主流的Kubernetes部署方式_Java_03

这些解决方案提供了在各种基础设施(公有云或内部部署)中部署Kubernetes的能力。Kubernetes集群选择这种方式的优点包括:


  1. 通过KaaS提供商进行升级、监控和获取支持;

  2. 混合云或多云环境的轻松扩展

  3. 多个集群的统一视图

  4. 高度可用的多master Kubernetes集群,根据工作负载自动扩容缩容

  5. 通用企业集成,如SSO/隔离命名空间;以及通过Helm charts部署应用程序的能力

  6. 集群联邦,可在多个云或数据中心之间提供真正无缝的混合环境


三种主流的Kubernetes部署方式_Java_04

Kubernetes-as-a-Service


Kubernetes-as-a-Service解决方案的示例包括Platform9和StackPoint.io。


托管的基础设施

三种主流的Kubernetes部署方式_Java_03


Google Cloud Platform和Microsoft Azure分别通过Google容器引擎(GKE)和Azure Container Service(ACS)提供了Kubernetes。将容器放在公共云中可以快速启动,但是您的数据现在将驻留在网络外围和防火墙之外。


Google的GKE引领其他公共云供应商。Google通过名叫Borg的集群管理工具,广泛地在内部的项目中使用容器,并拥有超过十年的经验(来源:TheNextPlatform)。相比之下,微软的ACS是一个更年轻的产品,而Kubernetes的支持仅在2017年2月才推出。然而,ACS提供了灵活性:用户可以选择容器编排平台(Kubernetes,Docker Swarm,DCOS),还可以选择除了Linux之外的Windows上部署容器化应用程序。如下图所示,GKE和ACS完全基于公有云,Kubernetes服务和基础设施由托管供应商部署和管理。


三种主流的Kubernetes部署方式_Java_06

托管基础设施的Kubernetes


本地部署

三种主流的Kubernetes部署方式_Java_03


Minikube是在本地部署Kubernetes的最流行的方式。它支持各种虚拟机管理程序,包括VirtualBox,VMware Fusion,KVM和xhyve以及OS,包括OSX,Windows和Linux。下图展示了Minikube的部署:


三种主流的Kubernetes部署方式_Java_08

mini Kubernetes


如上所示,用户使用Minikube CLI和Kubectl(Kubernetes的本机CLI)与此笔记本电脑部署进行交互。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部署方式_Java_03

Kubernetes-as-a-service,Kubernetes托管基础设施,Minikube只是部署Kubernetes的三种方式。有关各种部署模型,注意事项,优缺点和逐项比较的详细分析,请参阅以下部署指南(https://platform9.com/resources/kubernetes-deployment-models/)。


原文链接:https://dzone.com/articles/deploy-kubernetes-anywhere