本文主要介绍容器服务Swarm集群与Kubernetes集群主要概念的比对。

应用

容器服务Swarm集群

容器服务Swarm中,应用类似于项目,一个应用下面可以有多个服务。服务是具体提供应用功能的实例。服务可以水平扩展。

容器服务Kubernetes集群

容器服务Kubernetes中,应用是指部署(deployment),能够提供应用对外暴露的功能。部署中会有Pod和container,但Kubernetes中最小的调度单位是一个pod,其中Pod可包含多个container。一个Pod可以认为是应用的一个实例,多实例(多Pod)可以调度到不同的节点上,也就是说Pod可以水平扩展。

说明 虽然上图中一个Pod中有多个container,但是在实际使用时,建议一个Pod对应一个container,这里对应多个container是为了说明Pod的能力。

服务

容器服务Swarm集群

容器服务Swarm中的服务即提供应用功能的具体实例。当在Swarm集群中创建一个应用的时候,服务的访问方式会直接暴露给外部。

容器服务Kubernetes集群

容器服务Kubernetes中的服务是一个抽象概念,通过服务(Service)可以将应用(Deployment)的访问方式暴露给外部。

应用访问

容器服务Swarm集群

容器服务Swarm在部署应用的时候,可以选择三种应用访问方式,无论哪一种方式都可以直接暴露应用访问,不需要额外的操作:
  • <HostIP>:<port>
  • 简单路由
  • 负载均衡

容器服务Kubernetes集群

容器服务Kubernetes在创建应用(即部署deployment)后,不能直接暴露应用的访问方式,需要通过创建服务(Service)进行应用访问的暴露。在容器服务Kubernetes集群内部应用之间可以通过服务名(Service Name)进行访问,服务名也只能用于集群内部访问。若要在集群外部访问应用,需要创建NodePort类型和LoadBalancer类型的服务进行对外暴露:
  • ClusterIP(集群内部访问使用,也可以使用服务名)
  • NodePort(类似于Swarm集群的<HostIP>:<port>)
  • LoadBalancer(类似于Swarm集群的负载均衡)
  • 域名,通过创建路由(ingress)来实现(类似于Swarm集群的简单路由)