Kubernetes是什么

Kubernetes概念node

简介

kubernetes是一个Google开源的容器编排系统,用于自动部署,扩展和管理容器化应用程序。docker

  • 随处运行:支持公有云,私有云,混合云,物理机
  • 以集群的方式运行、管理跨机器的容器,解决Docker跨机器容器之间的通信问题。
  • 可拓展:模块化,可插拔,支持钩子,可任意组合
  • 自修复:自动重调度,自动重启,自动复制

k8s frame diagram

主要概念:

  • 容器组(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组,Pod 是能够被建立,调度,是 Kubernetes 管理最小部署单元,同一容器集中的全部容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来,这样,您就能更加轻松地在集群中移动容器。
  • 节点(Node):一个节点是一个运行 Kubernetes 中的主机,虚拟机或物理主机。
  • 管理节点 (Master Node):用于控制 Kubernetes 节点的计算机,全部任务分配都来自于此。
  • 工做节点 (Minion Node):执行请求和分配任务的计算机,由 Kubernetes 主机负责对节点进行控制。
  • 命名空间(Namespace):Namespace 是对一组资源和对象的抽象集合,好比能够用来将系统内部的对象划分为不一样的项目组或用户组。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace 的(默认是 default),而 node, persistentVolumes 等则不属于任何 namespace。
  • 部署(Deployment):Deployment 是新一代用于 Pod 管理的对象,与 Replication Controller 相比,它提供了更加完善的功能,使用起来更加简单方便。
  • Replication Controllers:主要负责指定数量的 pod 在同一时间一块儿运行并保持平衡。解决Pod的线性扩容缩容问题。
  • 服务(services):解决Pod的服务发现问题,服务为一组 Pod 提供单一稳定的名称和地址,服务可将工做定义与容器集分离,Kubernetes 服务代理会自动将服务请求分配到正确的容器集 — 不管这个容器集会移到集群中的哪一个位置,即便它已被替换,也是如此。
  • 标签(labels):逻辑上的标记。用来关联service、replication controller和pod.
  • 卷(Volume):Pod中可以被多个容器访问的共享目录,其生命周期与Pod相同跟容器无关。

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 来访问服务,而不须要了解后端容器的运行。微服务

整体结构

  • Master组件:
    • ApiServer:做为kubernetes系统的入口,封装了核心对象的增删改查操做。
    • Scheduler:插件式的调度器,负责集群的资源调度,为新建的pod分配机器。
    • Controller:负责管理各类控制器。如- - ReplicationController,
    • EndPointController等。
  • Node组件:
    • kubelet:负责管控docker容器,如启动/中止、监控运行状态等。
    • proxy:负责为pod提供代理。它会按期从etcd获取全部的service,并根据service信息建立代理。
  • 公共组件:
    • Etcd
    • flannel

image

参考