Kubernetes 的几个重要概念

Cluster

Cluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各类基于容器的应用。前端

Master

Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master 运行 Linux 操做系统,能够是物理机或虚拟机。为了实现高可用,能够运行多个 Master。Master 运行着以下 Daemon 服务:kube-apiserver、kube-scheduler、kube-controller-manager、etcd 和 Pod 网络(例如 flannel)。node

  • API Server(kube-apiserver) API Server 提供 HTTP/HTTPS RESTful API,即 Kubernetes API。API Server 是 Kubernetes Cluster 的前端接口,各类客户端工具(CLI 或 UI)以及 Kubernetes 其余组件能够经过它管理 Cluster 的各类资源。
  • Scheduler(kube-scheduler) Scheduler 负责决定将 Pod 放在哪一个 Node 上运行。Scheduler 在调度时会充分考虑 Cluster 的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
  • Controller Manager(kube-controller-manager) Controller Manager 负责管理 Controller ,保证 Controller 能正常运行;而 Controller 负责管理 Cluster 各类资源,保证资源处于预期的状态。Controller 有不一样的种类 ,包括 replication controller、endpoints controller、namespace controller、serviceaccounts controller 等。不一样的 controller 管理不一样的资源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命周期,namespace controller 管理 Namespace 资源。
  • etcd etcd 负责保存 Kubernetes Cluster 的配置信息和各类资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。
  • Pod 网络 Pod 要可以相互通讯,Kubernetes Cluster 必须部署 Pod 网络,flannel 是其中一个可选方案。

Node

Node 的职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 运行在 Linux 操做系统,能够是物理机或者是虚拟机。后端

Node 是 Pod 运行的地方,运行的 Kubernetes 组件有 kubelet、kube-proxy 和 Pod 网络(例如 flannel)api

  • kubelet kubelet 是 Node 的 agent,当 Scheduler 肯定在某个 Node 上运行 Pod 后,会将 Pod 的具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据这些信息建立和运行容器,并向 Master 报告运行状态。
  • kube-proxy service 在逻辑上表明了后端的多个 Pod,外界经过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工做。每一个 Node 都会运行 kube-proxy 服务,它负责将访问 service 的 TCP/UDP 数据流转发到后端的容器。若是有多个副本,kube-proxy 会实现负载均衡。
  • Pod 网络 Pod 要可以相互通讯,Kubernetes Cluster 必须部署 Pod 网络,flannel 是其中一个可选方案。 master and nodes

Pod

Pod 是 Kubernetes 的最小工做单元。每一个 Pod 包含一个或多个容器。Pod 中的容器会做为一个总体被 Master 调度到一个 Node 上运行。网络

Controller

Kubernetes 一般不会直接建立 Pod,而是经过 Controller 来管理 Pod。Controller 中定义了 Pod 的部署特性,好比有几个副本,在什么样的 Node 上运行等。为了知足不一样的业务场景,Kubernetes 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等。负载均衡

  • Deployment :是最经常使用的 Controller,Deployment 能够管理 Pod 的多个副本,并确保 Pod 按照指望的状态运行。
  • ReplicaSet :实现了 Pod 的多副本管理。使用 Deployment 时会自动建立 ReplicaSet,也就是说 Deployment 是经过 ReplicaSet 来管理 Pod 的多个副本,咱们一般不须要直接使用 ReplicaSet。
  • DaemonSet :用于每一个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 一般用于运行 daemon。
  • StatefuleSet: 可以保证 Pod 的每一个副本在整个生命周期中名称是不变的。而其余 Controller 不提供这个功能,当某个 Pod 发生故障须要删除并从新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或删除。
  • Job :用于运行一结束就删除的应用。而其余 Controller 中的 Pod 一般是长期持续运行。

Service

Deployment 能够部署多个副本,每一个 Pod 都有本身的 IP,Pod 极可能会被频繁地销毁和重启,它们的 IP 会发生变化,用 IP 来访问不太现实。工具

这时候就须要使用 Service。Kubernetes Service 定义了外界访问一组特定 Pod 的方式。Service 有本身的 IP 和端口,Service 为 Pod 提供了负载均衡。性能

Kubernetes 运行容器(Pod)与访问容器(Pod)这两项任务分别由 Controller 和 Service 执行。spa

Namespace

Namespace 能够将一个物理的 Cluster 逻辑上划分红多个虚拟 Cluster,每一个 Cluster 就是一个 Namespace。不一样 Namespace 里的资源是彻底隔离的。操作系统

Kubernetes 默认建立了两个 Namespace。

default: 建立资源时若是不指定,将被放到这个 Namespace 中。

kube-system: Kubernetes 本身建立的系统资源将放到这个 Namespace 中。

相关文章
相关标签/搜索