兰陵王,Kubernetes 重要概念,汤晶锦

Cluster

Cluster 是核算、存储和网络资源的调集,Kubernetes 运用这些资源运转各种依据容器的运用。

Master

Master 是 Cluster 的大脑,它的首要责任是调度,即决定将运用放在哪里运转。Master 运转 Linux 操作系统,可所以物理机或许虚拟机。为了完成高可用,能够运转多个 Master。

Node

Node 的责任是运转容器运用。Node 由 Master 办理,Node 担任监控并报告容器的状况,并依据 Master 的要求办理容器的生命周期。Node 运转在 Linux 操作系统,可所以物理机或许是虚拟机。

Pod

Pod 是 Kubernetes 的最小作业单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个全体被 Master 调度到一个 Node 上运转。

Kubernetes 引进 Pod 首要依据下面两个意图:

1. 可办理性。

有些容器天然生成便是需求严密联络,一同作业。Pod 供给了比容器更高层次的笼统,将它们封装到一个布置单元中。Kubernetes 以 Pod 为最小单位进行调度、扩展、同享资源、办理生命周期。

2. 通讯和资源同享。

Pod 中的一切容器运用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们能够直接用 localhost 通讯。相同的,这些容器能够同享存储,当 Kubernetes 挂载 volume 到 Pod,本质上是将 volume 挂载到 Pod 中的每一个容器。

Pods 有两种运用方法:

1. 运转单一容器。

one-container-per-Pod 是 Kubernetes 最常见的模型,这种情况下,仅仅将单个容器简略封装成 Pod。即便是只要一个容器,Kubernetes 办理的也是 Pod 而不是直接办理容器。

2. 运转多个容器。

但问题在于:哪些容器应该放到一个 Pod 中?

答案是:这些容器联络有必要 十分严密,并且需求 直接同享资源。

Controller

Kubernetes 一般不会直接创立 Pod,而是经过 Controller 来办理 Pod 的。Controller 中界说了 Pod 的布置特性,比方有几个副本,在什么样的 Node 上运转等。为了满意不同的事务场景,Kubernetes 供给了多种 Controller,包含 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,咱们逐个评论。

Deployment 是最常用的 Controller,经过创立 Deployment 来布置运用的。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 吗?

要知道 Pod 很可能会被频频地毁掉和重启,它们的 IP 会发作变化,用 IP 来拜访不太实际。

答案是 Service。

Kubernetes Service 界说了外界拜访一组特定 Pod 的方法。Service 有自己的 IP 和端口,Service 为 Pod 供给了负载均衡。

Kubernetes 运转容器(Pod)与拜访容器(Pod)这两项使命分别由 Controller 和 Service 履行。

Namespace

假如有多个用户或项目组运用同一个 Kubernetes Cluster,怎么将他们创立的 Controller、Pod 等资源分隔呢?

答案便是 Namespace。

Namespace 能够将一个物理的 Cluster 逻辑上划分红多个虚拟 Cluster,每个 Cluster 便是一个 Namespace。不同 Namespace 里的资源是彻底阻隔的。

Kubernetes 默许创立了两个 Namespace。

default -- 创立资源时假如不指定,将被放到这个 Namespace 中。

kube-system -- Kubernetes 自己创立的系统资源将放到这个 Namespace 中。