CentOS 7

CentOS7下的各种应用


第2章 重要概念

<p>目录: 1.Cluster 2.Master 3.Node 4.Pod kubernetes引入Pod主要基于两个目的: (1)可管理性 (2)通信和资源共享 Pods有两种使用方式: (1)运行单一容器 (2)运行多个容器 5.Controller (1)Deployment (2)ReplicaSet (3)DaemonSet (4)StatefuleSet (5)Job 6.Service 7.Namespace</p> <hr /> <p>kubernetes的几个重要概念,它们是组成kubernetes集群的基石。</p> <h3>1.Cluster</h3> <p>Cluster是计算、存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用。</p> <h3>2.Master</h3> <p>Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master运行在Linux操作系统上,可以是物理机或者是虚拟机。为了实现高可用,可以运行多个Master。</p> <h3>3.Node</h3> <p>Node的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期。Node运行在Linux操作系统上,可以是物理机或者是虚拟机。</p> <h3>4.Pod</h3> <p>Pod是kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行。 kubernetes引入Pod主要基于两个目的:</p> <h4>(1)可管理性</h4> <p>kubernetes以Pod为最小单位进行调度、扩展、共享资源、管理生命周期。</p> <h4>(2)通信和资源共享</h4> <p>Pod中所有容器使用同一个网络命名空间(network namespace),即相同的IP和Port空间。它们可以直接使用localhost通信。同样的,这些容器可以共享存储,当kubernetes挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器。</p> <p>Pods有两种使用方式:</p> <h4>(1)运行单一容器</h4> <p><strong>one-container-per-Pod</strong> 是kubernetes最常见的模型,这种情况下,只是将单个容器简单封装成Pod。即便是只有一个容器,kubernetes管理的也是Pod而不是直接管理容器。</p> <h4>(2)运行多个容器</h4> <p>问题在于:哪些容器应该放到一个Pod中? 答案是:这些容器联系必须非常紧密,而且需要直接共享资源。</p> <h3>5.Controller</h3> <p>kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod的。Controller中定义了Pod的部署特征,比如有几个副本、在什么样的Node上运行等。为了满足不同的业务场景,kubernetes提供了多种Controller,包括Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等。我们逐一讨论。</p> <h4>(1)Deployment</h4> <p>Deployment是最常用的Controller,通过创建deployment来部署应用的。deployment可以管理多个Pod的多个副本,并确保Pod按照期望的状态运行。</p> <h4>(2)ReplicaSet</h4> <p>ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet。</p> <h4>(3)DaemonSet</h4> <p>DaemonSet用于每个Node最多只运行一个Pod副本的场景。DeamonSet通常用于运行daemon。</p> <h4>(4)StatefuleSet</h4> <p>StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的,而其他Controller不提供这个功能。当某个Pod发生故障需要删除并重新启动时,Pod的名称会发生变化,同时StatefuleSet会保证副本按照固定的顺序启动、更新或删除。</p> <h4>(5)Job</h4> <p>Job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行。</p> <h3>6.Service</h3> <p>Deployment可以部署多个副本,每个Pod都有自己的IP,外界如何访问这些副本呢? 通过Pod的ip吗? 要知道Pod很可能会被频繁地销毁和重启,它们的IP会发生变化,用IP来访问不太现实。 答案是:Service kubernetes Service定义了外界访问一组特定的Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。 kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别由Controller和Service执行。</p> <h3>7.Namespace</h3> <p>如果有多个用户或项目组使用同一个kubernetes Cluster,如何将他们创建的Controller、Pod等资源分开呢? 答案就是Namespace. Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。</p>

页面列表

ITEM_HTML