热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes的基本术语和概念

Kubernetes中的大部分概念如Node、Pod、ReplicationController、Service等都可以看做是一种“资源对象”,几乎所有的资源对象都可

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

  • No.1 Master

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

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

  1.Kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。

  2.Kubernetes Controller Manager(kube-controller-manager),Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

  3.Kubernetes Scheduler(jube-scheduler),负责调度(pod调度)的进程,相当于公交公司的“调度室”。

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

  • No.2 Node

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

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

  1.kubectl:负责pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。

  2.kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。

  3.Docker Engine(docker):Docker引擎,负责机器上的容器创建和管理工作。

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

  我们可以执行命令:kubectl get nodes 来查看集群中有多少Node

  

  然后可以通过 kubectl describe node 来查看node的具体信息

   上述命令展示了Node的如下关键信息。

  1.Node的基本信息:名称、标签、创建时间等。

  

  2.Node当前的运行状态,Node启动后会做一系列的自检工作,比如磁盘是否满了,若果满了 OutOfDisk会被标记为True。  

  3.Node的主机名与主机地址,资源总数、可分配资源量、主机系统信息、当前pod列表、资源使用概要,相关Events信息。

  • No.3 Pod

  Pod是Kubernetes的最重要也是最基本的概念,每个pod都有一个帖数的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。

为什么设计一个全新的Pod概念:

      1.在一组容器为一个单元的情况下,难以对整体简单进行判断,引入业务无关切不容易死亡的Pause容器作为Pod根容器,以它状态来代表容器组的状态。

      2.Pod里多个业务容器共享Pause容器的IP、挂接的Volume、简化了密切关联容器通信和文件共享问题。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,通常采用虚拟二层网络技术实现,如Flannel、Openvswitch等 使一个Pod里的容器于其它主机Pod容器能够直接通信

      3.Pod 资源限额  以千分之一个cpu来划分   100~300m  指0.1到0.3个CPU    内存 64Mi   分配64M  

  • No.4 Label

  Label:一个label就是一个key=value的键值对,key和value均可自己指定。Label可以附加到各种资源对象上,一个资源对象可以定义任意数量的Label。 通途 通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作,例如:部署不同的版本到不同的环境中

  Label Selector:当给资源对象打上标签以后,就可以通过label selector查询和筛选这些资源对象。一般有两种label selector表达式,如

    • 基于等式:

      • name=demo 匹配所有具有标签name=demo的资源对象
      • name!=demo 匹配所有不具有name=demo的对象
    • 基于集合:
      • name in (dev, test) 匹配所有具有name=dev或者name=test的资源对象
      • name not in (dev, test) 匹配所有不具备name=dev或者name=test的资源对象

  Label Selector的使用场景:

    • kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,从而实现Pod副本数量始终符合预期设定的全自动控制流程
    • kube-proxy 进程通过service的label selector来选择对应的pod,自动建立起每个service到pod的请求转发路由表,从而实现service的智能均衡负载机制
    • 通过对某些Node定义特定的label,并且在pod定义文件中使用NodeSelector进行定向调度
  • No.5 Replication Controller (RC)

  RC 简单来说定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值。

    RC包括以下几个部分:

      1. replicas  Pod期待的副本数             //如果为了删除所有的Pod,可以将replicas设置为0,然后更新该RC

      2.selector  用于筛选目标Pod的Label Selector

      3.template  当Pod的副本数小于预期数量的时候,用于创建新Pod的Pod模板。

  由于Replication Controller与kubernetes中的模块Replication Controller同名,所以在kubernetes 1.2 ,它升级为Replica Set ,与之前的RC的唯一区别是支持基于集合的Label selector ,而RC只支持基于等式的Label Selector 这使得Replica Set的功能更强。

  总结RC(Replica Set)的一些特性及作用:

    在大多数情况下,我们通过定义一个RC实现Pod的创建过程以及副本数量的自动控制。

    RC里包括完整的Pod定义模板;

    RC通过Label Selector 机制实现对Pod副本的自动控制;

    通过改变RC的Pod副本数量,可以实现Pod的扩容和缩容功能;

    通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级功能。

  • No.6 Deployment

  Deployment为Pod和Replica Set提供声明式更新。目的是为了更好地解决Pod的编排问题。为此,Deployment在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的,它的yaml定义,还是从它的具体命令行操作来看,我们都可以把它看做RC的一次升级,两者相似度超过90%。

  Deployment相对于RC的一个最大升级是我们可以随时知道当前Pod“部署”的进度。实际上由于一个Pod的创建、调度、绑定节点及在目标Node上启动对应的容器这一完整过程需要一定的时间,所以我们期待系统启动N个Pod副本的目标状态,实际上是一个连续变化的“部署过程”导致的最终状态。

  Deployment的典型使用场景如下:

  1. 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
  2. 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
  3. 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
  4. 扩容Deployment以满足更高的负载。
  5. 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
  6. 根据Deployment 的状态判断上线是否hang住了。
  7. 清除旧的不必要的 ReplicaSet。
  • No.7 Horizontal Pod Autoscaler (HPA)

  简称HPA,意思是Pod横向自动扩容,也属于Kubernetes的一种资源对象

  实现原理: 通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数

  HPA有以下两种方式来作为HPA的负载指标

    1.CPUUtilizationPercentage  是指Cpu利用率的平均值(通常是1分钟,目前是通过Heapster扩张组件来得到这个值),用当前CPU的使用量除以它的Pod Request值 ,高于指定值(targetCPUUtilizationPercentage)就会创建新的Pod副本数(最大不超过设置的maxReplication)

    2.应用程序自定义的度量标准,比如服务在每秒内的响应的请求数(TPS或QPS)

  • No.8 Service

  服务,Kubernetes的每个Service就是我们经常提起的微服务架构中的一个微服务

  1.Service与其后端Pod副本集群之间通过label Selector 来实现无缝对接的,Kubernetes通过在每个node节点的kube-proxy实现智能负载均衡,Service不是共用一个负载均衡器的ip,而是每个Service分配了一个全局的唯一的虚拟IP(Cluster IP)

  Cluster IP:

    1.Cluster IP仅仅作用于Kubernetes Service这个对象,并由kubernetes管理和分配IP池

    2.Cluster IP无法被ping,因为没有一个实体网络对象来相应

    3.Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP 不具备TCP/IP通信的基础,并且它们只属于Kubernetes集群这样一个封闭的空间,集群之外的节点要访问这个通信端口,则要做一些额外的工作

    4.在Kubernetes集群之内,Node IP网、Pod IP网与Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊的路由规则,与我们熟知的IP路由有很大的不同。

  外部网络访问service是通过Nodeport来访问的。

  • No.9 Volume

  存储卷(Volume)是Pod中能够被多个容器访问的共享目录。与Pod的生命周期相同,支持多种类型的volume,例如GlusterFS,Ceph等。

  Volume类型:

    1.emptyDir pod分配到Node时创建的。 用途:临时空间、长时间任务的中断过程CheckPoint的临时保存目录、多容器共享目录

    2.hostPath pod挂在宿主机上的文件和目录

    3.gcePersistentDisk 

    4.NFS

  • No.10 Persisten Volume 

  kubernetes集群中某个网络存储中对应的一块存储,它与Volume很类似,区别如下:

    PV只能是网络存储,不属于任何node,但可以在每个node上访问

    不是定义在Pod上的

    目前只有几种类型 GCE Persistent Disks 、NFS、RBD、iSCSCI、GlusterFS等。

  • No.11 Namespace 

  用于实现多租户的资源隔离,Namespace通过将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目、小组和用户组

  默认分配到名为default的NameSpace中,一旦创建了namespace就可以指定哪些资源属于哪个namespace

  还可以结合Kubernetes的资源配额管理,限定不同租户能占用的资源。

 

以上即为Kubernetes的核心组件,他们共同组成了Kubernetes的系统的框架和计算模型,通过对他们进行灵活组合,用户可快速方便的对容器集群进行配置、创建、和管理。

转:https://www.cnblogs.com/cooper-73/p/9755991.html



推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
author-avatar
dtssv90623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有