Kubernetes中的大部分概念如NodePodReplication ControllerService等都可以看作一种"资源对象",几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的"资源期望状态"与当前环境中的"实际资源状态"的差异来实现自动控制和自动纠错的高级功能。

Master

Kubernetes里的Master指的是集群控制节点,每个Kubernetes集群里需要一个Master节点来负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都是发给它,它来负责具体的执行过程,我们后面所有执行的命令基本上都是在Master节点上运行的。Master节点通常会占据一个独立的服务器或者一个虚拟机。一个主要的原因是他太重要了,它是整个集群的"首脑"。如果它宕机不可用,那么我们所有的控制命令将失效。

Master节点上运行着以下一组关键进程:

  • Kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增,删,改,查等操作的唯一入口,也是集群控制的入口进程
  • Kubernetes Controller Manager(kube-controller-manager), Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的"大总管"
  • Kubernetes Scheduler(kube-scheduler), 负责资源调度(Pod调度)的进程,相当于公交公司的"调度室"

其实Master节点上往往还启动了一个etcd Server进程,因为Kubernetes里的所有资源对象的数据全部保存在etcd中的。

Node

除了Master,Kubernetes集群中的其他机器称为Node节点。与Master一样,Node节点可以是一台物理机,也可以是一台虚拟机。Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。

每个Node节点上都运行着以下一组关键进程:

  • kubelet:负载Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
  • Docker Engine( docker):Docker引擎,负载本机的容器创建和管理工作

Node节点可以在运行期间动态添加到Kubernetes集群中,前提是这个节点上已经正确安装配置和启动了上述关键进程,在默认情况下kubelet会向Master注册自己。一旦Node被纳入集群管理范围,kubelet进程会定时向Master节点汇报自身的情报,例如操作系统版本、Docker版本、机器的CPU和内存情况,以及有哪些Pod在运行等,这样Master可以获知每个Node的资源使用,并实现高效均衡的资源调度策略。而某个Node超过指定时间不上报信息时,会被Master判定为"失联", Node的状态会被标记为不可用(Not Ready), 随后Master会触发"工作负载大转移"的自动流程

Pod

Pod是Kubernetes中最重要也是最基本的概念,每个pod都一个特殊的被称为"根容器"的Pause容器。除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器

为什么Kubernetes会设计出一个Pod的概念并且Pod还有这样的特殊组成结构?

原因之一:在一组容器作为一个单元的情况下,我们难以对"整体"简单的进行判断及有效的进行行动。比如,一个容器死亡了,此时算是整体死亡么?是N/M的死亡率?引入业务无关且不易死亡的Pause容器作为Pod的根容器,以它的整体状态代表整个容器组的状态,就简单、巧妙地解决了整个难题。

原因之二:Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。

Kubernetes为每个Pod都分配了唯一的IP地址,称之为PodIP,一个Pod里面的多个容器共享PodIP地址。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术实现,例如Flannel、Openvswitch等,因此我们需要牢记一点:在Kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信的。

Pod其实有两种类型:普通的Pod以及静态Pod(static Pod),后者比较特殊,它并不存放在etcd存储里,而是存放在某个具体的 Node上的一个具体文件中,并且只再次Node上启动运行。而普通的Pod一旦被创建,就会被放入到etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动起来。在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的Pod重新调度到其他节点上

每个Pod都可以都其能使用的服务器上的计算资源设置限额,当前可以设置限额的计算资源有CPU与Memory两种,其中CPU的资源单位为CPU(Core)数量,是一个绝对值而非相对值。

1-Kubernetes基本概念的更多相关文章

  1. 容器技术研究-Kubernetes基本概念

    最近在研究容器技术,作为入门,基本概念必须搞明白,今天整理一下Kubernetes的基本概念. 一.什么是Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部 ...

  2. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  3. Kubernetes 核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  4. 十分钟带你理解Kubernetes核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  5. Kubernetes核心概念简介

    本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...

  6. Kubernetes基本概念之Name和NameSpace

    在Kubernetes中,所有对象都会被指定一个唯一的Name和UID. 用户还可以指定一些不要求唯一性的数据附加到对象上,例如Label和Annotation. 1. Name Name是创建一个K ...

  7. kubernetes 基本概念和资源对象汇总

    kubernetes 基本概念和知识点脑图 基本概念 kubernetes 中的绝大部分概念都抽象成kubernets管理的资源对象,主要有以下类别: Master : Master节点是kubern ...

  8. 1-2、kubernetes架构概述和kubernetes基础概念

    kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...

  9. Kubernetes 基本概念和术语

    Kubernetes 基本概念和术语 Kubernetes 中大部分概念如 Node.Pod.Replication Controller. Service 等都可以看做一种 "资源对象&q ...

  10. 后端技术杂谈11:十分钟理解Kubernetes核心概念

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...

随机推荐

  1. python学习之路(6)

    使用dict和set Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根 ...

  2. sqli-labs(1)

    0x01字符注入 今天是第一天的学习sqli-labs Lesson1:字符型注入 首先测试一下 ' 发现报错  然后 ''发现 不报错 这种大概率就是字符注入了 接下来我们进行列查询  查询语句 h ...

  3. Spark学习(一)——Spark运行架构

    基本概念 在具体讲解Spark运行架构之前,需要先了解几个重要的概念: RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供 ...

  4. SAP MaxDB Backup and Restore

    Back up the data and redo log entries from the data and log areas of your database to data carriers ...

  5. leetcode 103二叉树的锯齿形层次遍历

    与102相比就增加了flag,用以确定要不要进行reverse操作 reverse:STL公共函数,对于一个有序容器的元素reverse ( s.begin(),s.end() )可以使得容器s的元素 ...

  6. IDEA打开最近打开的项目以及关闭项目

    关闭的是当前项目

  7. loadrunner设置Analysis分析时去掉思考时间

    在进行对loadrunner进行执行脚本的情况下,那么就需要在脚本中进行添加为思考时间,这样才更符合人为的脚本时间,那么在进行执行压力的过程中,思考时间是需要开启的,完成之后为了便于分析那么就需要把思 ...

  8. ArcGIS客户端API中加载大量数据的几种解决办法

    ArcGIS客户端API中加载大量数据的几种解决办法 2011-03-25 18:17 REST风格的一切事物方兴未艾,ArcGIS Server的客户端API(Javascript/Flex/Sil ...

  9. python3.6+RF环境搭建

    现在大家都在用python3了,利用这个机会正好把自己的练习重新整理一遍,本篇记录用python3.6重新搭建关键字驱动环境 目录 1.安装python3.6 2.安装wxPython 3.安装rob ...

  10. ISO/ISO 参考模型 和 TCP/IP模型

    OSI 参考模型 国际化标准组织(International Organization for Standardization,ISO)于1978年提出了一个网络体系结构,成为开放系统互联参考模型(O ...