4、k8s 重要概念

4、k8s 重要概念

​ 在实践以前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石。node

(一)Cluster

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

(二)Master

​ Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master 运行 Linux 操做系统,能够是物理机或者虚拟机。为了实现高可用,能够运行多个 Master。负载均衡

(三)Node

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

​ 在前面交互式教程中咱们建立的 Cluster 只有一个主机 host01, 它既是 Master 也是 Node。spa

$ kubectl get node
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   57m   v1.17.3
$ hostname
minikube
$

(四)Pod

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

Kubernetes 引入 Pod 主要基于下面两个目的:code

  • 可管理性。blog

    有些容器天生就是须要紧密联系,一块儿工做。Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes 以 Pod 为最小单位进行调度、扩展、共享资源、管理生命周期。教程

  • 通讯和资源共享。生命周期

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

Pods 有两种使用方式:

  • 运行单一容器。

    one-container-per-Pod 是 Kubernetes 最多见的模型,这种状况下,只是将单个容器简单封装成 Pod。即使是只有一个容器,Kubernetes 管理的也是 Pod 而不是直接管理容器。

  • 运行多个容器。

    但问题在于:哪些容器应该放到一个 Pod 中? 答案是:这些容器联系必须 很是紧密,并且须要 直接共享资源。

举个例子。

下面这个 Pod 包含两个容器:一个 File Puller,一个是 Web Server。

​ File Puller 会按期从外部的 Content Manager 中拉取最新的文件,将其存放在共享的 volume 中。Web Server 从 volume 读取文件,响应 Consumer 的请求。

​ 这两个容器是紧密协做的,它们一块儿为 Consumer 提供最新的数据;同时它们也经过 volume 共享数据。因此放到一个 Pod 是合适的。

​ 再来看一个反例:是否须要将 Tomcat 和 MySQL 放到一个 Pod 中?

​ Tomcat 从 MySQL 读取数据,它们之间须要协做,但还不至于须要放到一个 Pod 中一块儿部署,一块儿启动,一块儿中止。同时它们是之间经过 JDBC 交换数据,并非直接共享存储,因此放到各自的 Pod 中更合适。

(五)Controller

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

(六)Deployment

​ Deployment 是最经常使用的 Controller,好比前面在线教程中就是经过建立 Deployment 来部署应用的。Deployment 能够管理 Pod 的多个副本,并确保 Pod 按照指望的状态运行。

(七)ReplicaSet

​ ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动建立 ReplicaSet,也就是说 Deployment 是经过 ReplicaSet 来管理 Pod 的多个副本,咱们一般不须要直接使用 ReplicaSet。

(八)DaemonSet

​ DaemonSet 用于每一个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 一般用于运行 daemon。

(九)StatefuleSet

​ StatefuleSet 可以保证 Pod 的每一个副本在整个生命周期中名称是不变的。而其余 Controller 不提供这个功能,当某个 Pod 发生故障须要删除并从新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。

(十)job

​ 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 中。

相关文章
相关标签/搜索