Kubernetes概念node
kubernetes是一个Google开源的容器编排系统,用于自动部署,扩展和管理容器化应用程序。docker
Kubernetes 中,全部的容器都运行在 Pod 中,一个 Pod 来容纳一个单独的容器,或者多个合做的容器。在后一种状况,Pod 中的容器被保证放置在同一个机器上,能够共享资源。一个 Pod 也能包含零个或者更多的的 volume,volume 是对一个容器私有的目录或者能够在 Pod 中的容器间共享。对于用户每一个建立的 Pod,系统会找一个健康运转而且有足够的容量的机器,而后开始将相应的容器在那里启动。若是一个容器失败,它会被 Kubernetes 的 node agent 自动重启,这个 node agent 被称做 Kubelet。可是若是 Pod 或者他的机器出故障,它不会被自动转移或者重启,除非用户也定义了一个 Replication Controller。后端
Pod 的副本集合能够共同组成一整个应用,一个微服务,或者在一个多层应用的一层。一旦 Pod 建立好,系统会持续的监控他们的健康状态,和它们运行时所在的机器的健康情况。若是一个 Pod 由于软件问题或者所在机器故障出现问题,Replication 控制器会自动在健康的机器上建立一个新的 Pod。网络
Kubernetes 支持一种独特的网络模型。Kubernetes 鼓励用扁平的地址空间,而且不会动态的分配端口,而是采用让用户能够选择任意合适本身的端口。为了实现这点,它给每个 Pod 分配了一个 IP 地址。负载均衡
Kubernetes 提供了 Service 的抽象,其提供了一稳定的 IP 地址和 DNS 名字,来对应一组动态的 Pod,例如一组构成一个微服务的 Pod。这个 Pod 组是经过 Label 选择器来定义的,由于能够指定任何的 Pod 组。当一个运行在 Kubernetes Pod 里的容器链接到这个地址时,这个链接会被本地的代理转发(称做 kube proxy)。该代理运行在来源机器上,转发的目的地是一个相应的后端容器,确切的后端是经过 round-robin 的策略进行选择,以均衡负载。kube proxy 也会追踪后端的 Pod 组的动态变化,如当 Pod 被位于新机器上的新的 Pod 取代的时候,于是服务的 IP 和 DNS 名字不用改变。框架
每个 Kubernetes 中的资源,如 Pod,都经过一个URI来被识别,而且有一个 UID。URI 中一个总要的组件是,对象的类型(如:Pod),对象的名字,和对象的 namespace(命名空间)。对于一个特定的对象类型,每个名字在其命名空间都是独一无二的,在一个对象的名字没有带着命名空间的形式给出,那就是默认的命名空间,UID 在时间和空间的范围都是惟一的。模块化
关于 Service 的更多说明:Service 是应用服务的抽象,经过 labels 为应用提供负载均衡和服务发现。匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。
每一个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其余容器能够经过该地址或 DNS 来访问服务,而不须要了解后端容器的运行。微服务