Kubernetes (通常称为 K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统,是 Google 内部工具 Borg 的“开源版”。
Kubernetes 目前是公认的最先进的容器集群管理工具,在 1.0 版本发布后,Kubernetes 的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos、rancher 等,诸多提供公有云服务的厂商在提供容器服务时也都基于 Kubernetes 做二次开发来提供基础设施层的支撑,比如华为。可以说 Kubernetes 也是 Docker 进军容器集群管理和服务编排领域最为强劲的竞争对手(Docker Swarm)。
Kubernetes 定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成 Kubernetes 的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由 Kubernetes API 提供——它被作为扩展的内部组件以及 Kubernetes 上运行的容器等使用。
因为 Kubernetes 是由很多组件构成的一个系统,所以对于 Kubernetes 的安装部署来说,还是有些困难的,并且 Kubernetes 是 Google 开发的,有很多内部的依赖包都是需要穿墙访问的。
当然,也有快速安装的工具,比如 kubeadm,kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,伴随 Kubernetes 每个版本的发布都会同步更新,当然,目前的 kubeadm 是不能用于生产环境的。
Kubernetes 特点:
通俗来说:
Kubernetes 术语:
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 的更多说明:
Kubernetes 组件:
master 节点包含组件:
docker etcd kube-apiserver kube-controller-manager kubelet kube-scheduler
minion 节点包含组件:
docker kubelet kube-proxy