返回 导航

Docker / K8s

hangge.com

K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

作者:hangge | 2019-07-11 08:10
    Kubernetes 是目前发展最快、市场占有率最高的容器编排引擎产品,并且还在快速地开发和迭代之中。我们在学习 Kubernetes 之前,需要理解它的几个重要概念,它们是组成 Kubernetes 集群的基石。

一、Cluster、Master、Node 介绍

1,Cluster


2,Master

  • MasterCluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。
  • Master 运行 Linux 操作系统,可以是物理机或者虚拟机。
  • 为了实现高可用,可以运行多个 Master

3,Node

  • Node 的职责是运行容器应用。
  • NodeMaster 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。
  • Node 运行在 Linux 操作系统,可以是物理机或者是虚拟机。

二、Pod 介绍

1,Pod

  • PodKubernetes 的最小工作单元。
  • 每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。

2,Kubernetes 引入 Pod 的两个目的

(1)可管理性
  • 有些容器天生就是需要紧密联系,一起工作。Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。
  • KubernetesPod 为最小单位进行调度、扩展、共享资源、管理生命周期。

(2)通信和资源共享
  • Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们可以直接用 localhost 通信。
  • 同样的,这些容器可以共享存储,当 Kubernetes 挂载 volumePod,本质上是将 volume 挂载到 Pod 中的每一个容器。

3,Pod 的两种使用方式

(1)运行单一容器
  • one-container-per-Pod Kubernetes 最常见的模型,这种情况下,只是将单个容器简单封装成 Pod
  • 即便是只有一个容器,Kubernetes 管理的也是 Pod 而不是直接管理容器。

(2)运行多个容器
  • 对于那些联系非常紧密,而且需要直接共享资源的容器,应该放在一个 Pod 中。
  • 比如下面这个 Pod 包含两个容器:一个 File Puller,一个是 Web ServerFile Puller 会定期从外部的 Content Manager 中拉取最新的文件,将其存放在共享的 volume 中。Web Servervolume 读取文件,响应 Consumer 的请求。这两个容器是紧密协作的,它们一起为 Consumer 提供最新的数据;同时它们也通过 volume 共享数据。所以放到一个 Pod 是合适的。

三、Controller

1,基本介绍

    Kubernetes 通常不会直接创建 Pod,而是通过 Controller 来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。为了满足不同的业务场景,Kubernetes 提供了多种 Controller,包括 DeploymentReplicaSetDaemonSetStatefuleSetJob 等。

2,各个 Controller 介绍

(1)Deployment
  • Deployment 是最常用的 Controller,比如我们可以通过创建 Deployment 来部署应用的。
  • Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。

(2)ReplicaSet
  • ReplicaSet 实现了 Pod 的多副本管理。
  • 使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet

(3)DaemonSet
  • DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon

(4)StatefuleSet
  • StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,
  • 当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。

(5)Joba
  • Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。

四、Service、Namespace

1,Service

  • Deployment 可以部署多个副本,每个 Pod 都有自己的 IP。而 Pod 很可能会被频繁地销毁和重启,它们的 IP 会发生变化,用 IP 来访问 Deployment 副本不太现实。
  • Service 定义了外界访问一组特定 Pod 的方式。Service 有自己的 IP 和端口,ServicePod 提供了负载均衡。

2,Namespace

(1)Namespace 可以将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的。
(2)Kubernetes 默认创建了两个 Namespace
  • default:创建资源时如果不指定,将被放到这个 Namespace 中。
  • kube-systemKubernetes 自己创建的系统资源将放到这个 Namespace 中。
评论

全部评论(0)

回到顶部