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. 【转】diamond专题(三)—— diamond架构

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  2. 百度echars 插件 横坐标信息倾斜显示

    只需要 在xAxis   中加入 axisLabel:{                                  interval:0,//横轴信息全部显示                  ...

  3. delete trancate drop三者之间的区别

    简而言之: 删除效果及速度:Drop > truncate > delete 原因: delete,逐行删除,且用日志逐行记录用于回滚,会执行删除触发器:       ------> ...

  4. 解决Oracle XE报错ORA-12516(oracle回话数超出限制)

    本地安装的oracleXEUniv—oracle特别版,免费用户可以自由使用,但有连接数量和存储限制. 最近遇到一个问题,当我的SSM项目连接本地数据库oracleXE后,我的navicat再连接时就 ...

  5. hash模块MD5加密

    MD5加密:获取32位加密字符串: 示例(MD5加密'123456')import hashlibhashObject=hashlib.md5(b'123456') #实例化,加密字符串不能直接加密, ...

  6. 再谈 Devstack(Rocky)

    目录 文章目录 目录 前言 网络拓扑 运行环境 要点 步骤 前言 之前写过一篇<Openstack 实现技术分解 (1) 开发环境 - Devstack 部署案例详解>,随着 Devsta ...

  7. 三十四:数据库之SQLAlchemy外建及四种约束

    使用SQLAlchemy创建外建,只需要在子表的字段中指定此字段的外建是哪个表的哪个字段即可,字段类型需和父表下该字段的类型保持一致 使用ondelete指定约束, 外建约束有以下几种:1.RESTR ...

  8. 自己实现一个list比较器 实现Comparator()接口

    一:一个实体类 成员变量有名字,年龄,分数 )))))); List<User> list = new ArrayList<>(); list.add(user1); list ...

  9. WebLogic下Argument(s) "type" can't be null.

    启动项目出现Argument(s) "type" can't be null.异常.异常如下: java.lang.IllegalArgumentException: Argume ...

  10. Python学习之数据库初识

    9 数据库 9.1 数据库的初识 ​ 数据库是可以独立运行的,并且可以对数据的增删改查提供高效便捷方式的工具. 数据库解决的问题: ​ 解决了操作文件的效率和便捷问题 ​ 解决了多个服务同时使用数据时 ...