热门标签 | 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安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文深入探讨了Go语言中的接口型函数,通过实例分析其灵活性和强大功能,帮助开发者更好地理解和运用这一特性。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文提供了多种有效的方法来解决RPC(远程过程调用)服务器不可用的问题,包括通过修改注册表、使用SC命令以及利用故障恢复控制台等技术手段。 ... [详细]
  • 解决Win10 1709版本文件共享安全警告问题
    每当Windows 10发布新版本时,由于兼容性问题往往会出现各种故障。近期,一些用户在升级至1709版本后遇到了无法访问共享文件夹的问题,系统提示‘文件共享不安全,无法连接’。本文将提供多种解决方案,帮助您轻松解决这一难题。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
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社区 版权所有