Wonderingkaho's Blog.

Kubernetes Concept

字数统计: 1.5k阅读时长: 5 min
2019/04/23 Share

Kubernetes总体架构

Master和Node

图片

Kubernetes主要由以下几个核心组件组成:

  • etcd

    保存了整个集群的状态,用于持久化存储集群中所有的资源对象,如Node、Service、Pod、RC、Namespace等;

  • API Server

    提供了资源操作的唯一入口,操作etcd的封装接口API,并提供认证、授权、访问控制、API注册和发现等机制;

  • Controller Manager

    集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作,比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义;根据Service与Pod的管理关系,完成服务的Endpoints对象的创建和更新;其他诸如Node的发现、管理和状态监控、死亡容器所占磁盘空间及本地缓存的镜像文件的清理等工作也是由Controller Manager完成的;

  • Scheduler

    负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

  • Kubelet

    负责管理本Node节点上的Pod的创建、修改、监控、删除等全生命周期,同时也负责Volume(CVI)和网络(CNI)的管理,定时“上报”本Node的状态信息到API Server里;

  • Container runtime

    负责镜像管理以及Pod和容器的真正运行(CRI);

  • kube-proxy

    负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • Kube-Dns

    负责为整个集群提供DNS服务

  • Ingress

    为服务提供外网入口

  • Metrics Server

    提供资源监控

  • Dashboard

    提供GUI

  • Federation

    提供跨可用区的集群

  • Fluentd-Elasticsearch

    提供集群日志采集、存储与查询

Node

Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。

Node Status包含的信息:

  • 地址(Addresses)

  • 状态(Condition)

  • 容量(Capacity)

  • 信息(Info)

Addresses

  • 主机名: 节点内核报告的主机名。 可以通过kubelet –hostname-override参数覆盖。

  • 外网IP: 通常是可从外部路由的节点的IP地址(可从群集外部获得)。

  • 內网IP: 通常是仅在群集内可路由的节点的IP地址。

Condition

Conditions字段描述了所有正在运行的节点的状态。

Node Condition Description
OutOfDisk True:如果节点上没有足够的可用空间来添加新的pod;否则为:False
Ready True:如果节点是健康的并准备好接收pod;False:如果节点不健康并且不接受pod;Unknown:如果节点控制器在过去40秒内没有收到node的状态报告
MemoryPressure True:如果节点存储器上内存过低; 否则为:False。
PIDPressure True:如果进程存在压力 - 也就是说,如果节点上有太多进程; 否则为假
DiskPressure True:如果磁盘容量存在压力 - 也就是说磁盘容量低;否则为:False。
NetworkUnavailable True:如果未正确配置节点的网络; 否则为False

Capacity

描述节点上可用的资源:CPU,内存以及可以在节点上调度的最大pod数。

Info

有关节点的一般信息,例如内核版本,Kubernetes版本(kubelet和kube-proxy版本),Docker版本(如果使用),操作系统名称。 信息由Kubelet从节点收集。

Pod

图片

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

Kubernetes中的Pod使用可分两种主要方式:

  • Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。

  • Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 - 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

Service

在Kubernetes的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,这就引出一个问题:如果有一组Pod组成一个集群来提供服务,那么如何来访问它呢?Service!

一个Service可以看作一组提供相同服务的Pod的对外访问接口,Service作用于哪些Pod是通过Label Selector来定义的。

  • 拥有一个指定的名字(比如my-mysql-server);

  • 拥有一个虚拟IP(Cluster IP、Service IP或VIP)和端口号,销毁之前不会改变,只能内网访问;

  • 能够提供某种远程服务能力;

  • 被映射到了提供这种服务能力的一组容器应用上;

Volume

Volume是Pod中能够被多个容器访问的共享目录。

Label

Label以key/value的形式附加到各种对象上,如Pod、Service、RC、Node等,以识别这些对象,管理关联关系等,如Service和Pod的关联关系。

Pod和Controller

Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。

包含一个或者多个Pod的Controller示例:

  • Deployment

  • StatefulSet

  • DaemonSet

  • ReplicaSet

  • Jobs - Run to Completion

  • CronJob

CATALOG
  1. 1. Kubernetes总体架构
    1. 1.1. Master和Node
  2. 2. Node
    1. 2.1. Addresses
    2. 2.2. Condition
    3. 2.3. Capacity
    4. 2.4. Info
  3. 3. Pod
  4. 4. Service
  5. 5. Volume
  6. 6. Label
  7. 7. Pod和Controller