• Kubernetes组件和架构


    架构图

    核心组件

    组件名称 说明
    apiserver               提供了资源操作的唯一入口,并提供了认证、授权、访问控制、API注册和发现等机制

    cAdvisor

    • 已集成到kubectl。
    • 对Node主机上的资源及容器进行实时监控和性能数据采集。包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况等(可以通过浏览器访问)。
    • 当kubelet启动时会自动启动cAdvisor。
    • 在kubelet的配置文件中,增加-cadvisor-port=4194,表示对外暴露4194端口访问cAdvisor。
    container runtime 容器运行时。默认为Docker
    controller manager 负责维护集群的状态。比如故障检测、自动弹性伸缩、滚动更新等
    etcd 保存了整个集群的信息(状态)
    kube-proxy 负责为Service提供集群内部的服务发现和负载均衡
    kubectl 管理k8s的命令行工具。负责维护容器的生命周期,同时也负责Volume和网络的管理
    Scheduler 负责资源的调度。按照预定的调度策略将Pod调度到相应的机器上

    附加组件

    名称 说明
    Dashboard 是Kubernetes集群通用的Web管理界面。通过调用api-server中的rest接口
    DNS 创建一个DNS服务器,用于Service的VIP域名解析(不然每次启动Service,都会重新生成一个新的VIP,这样又得改RC或者Deployment的配置文件)。
    Heapster 提供资源监控,包括内存、CPU等使用情况。数据来源是cAdvisor,一般是配合Dashboard使用
    PersistentVolume(PV) 持久卷。由管理员添加的一个存储的描述,是一个全局资源(不受Namespace限制),包含存储类型、存储大小和访问模式等。它的生命周期独立于pod(pod销毁时对PV没有影响)
    PersistentVolumeClaim(PVC) 表达的是用户对存储(请求信息包含存储大小、访问模式等)的请求。它类似于pod,pod消耗节点资源:PVC消耗PV资源。PVC会绑定到大于等于且最接近自己存储请求的PV上
    Service(SVC)
    • 提供一个VIP的功能,通过VIP可以找到下面的pod
    • 还提供了负载均衡(默认轮询),slb到下面不同的pod
    • 只提供了4层负载均衡能力,如果要使用7层,需要添加ingress 

    资源控制器

    名称 说明
    Replication Controller(RC)
    • 保证pod集群的高可用。确保任何时间Kubernetes中都有指定数量的pod在运行。
    • RC还提供了一些高级特性:扩缩容、滚动升级、升级回滚等。
    Deployment(推荐)
    • Deployment创建后,会生成一个ReplicaSet用来管理pod。
    • 拥有RC的所有功能,同时解决了RC滚动升级带来的一些问题(比如VIP为空)
    Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
    CronJob 周期性的执行任务
    Horizontal Pod Autoscaler(HPA)
    • 弹性伸缩。根据一定的性能指标(CPU、磁盘、网络等)自动检测,自动增加或减少Pod的数量,使其满足预定条件。
    • 目前是使用Heapster来检测资源的使用情况,检测周期是默认30s

     集群调度

    调度过程

    调度分为一下几步:

    1. 首先过滤掉不满足条件的节点,这个过程是 predicate。在 predicate 过程中没有合适的节点,Pod 会一直在 pending 状态,不断重试调度,直到有节点满足条件
    2. 然后对通过的节点按照优先级排序,这个过程是 priority
    3. 最后从中选择优先级最高的节点

    如果中间任务一步有错误,就直接返回错误。

    predicate有一系列的算法:

    • PodFitsResources:节点上剩余的资源是否大于 Pod 请求的资源
    • PodFitsHost:如果 Pod 指定了NodeName,检查节点名称是否和 NodeName 匹配。
    • PodFitsHostPorts:节点上已经使用的 port 是否和 Pod 申请的 port 冲突
    • PodSelectorMatched:过滤掉和 Pod 指定的 label 不匹配的节点
    • NoDiskConflict:已经 mount 的 volume 和 Pod 指定的 volume 不冲突,除非他们都是只读

    调度策略

    名称 说明
    亲和性 Node亲和性、Pod亲和性。尽量分配到自己想去的那个 Node 或者 Pod
    污点/容忍

    避免 Pod 被分配到不合适的节点。每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod,是不会

    被该节点接受的。如果能容忍,则表示这些 Pod 可以被调度到这些污点上

    固定节点 将 Pod 直接调度到指定的节点上

     其它

    名称 说明
    Pod pod容器 + 若干普通的业务容器
    健康检查(探测器)
    • livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器
    • readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从Service中剔除
    Namespace
    • 命名空间。用于实现多租户的资源隔离
    • 例如:同一个命名空间下,不能有名称相同的两个Service
    知识改变世界
  • 相关阅读:
    [转贴]彻底解决 CrystalReports 登录失败问题。
    [资源]《就说》——《大学自习室》作者郝雨又一力作,继续那种搞笑的说唱
    [推荐]一个用来给控件做提示的JS脚本,鼠标移到控件上时出现提示,离开时消失!
    [原创]一个公告栏的源码(利用marquee作的)
    [转帖]DataGrid显示双层表头,即可实现合并单元格问题
    [转贴]15句让女生爱你一生的情话
    [疑问]您没有调试该服务器的权限。验证您是服务器上"Debuger Users"组的成员。
    [转帖]九个不可不占的便宜
    [转贴]秘芨(男孩子为了终身幸福,最好背下来哦)
    [转贴]也许放弃也是一种爱!++++++++觉得这篇文章写得不错
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/15469091.html
Copyright © 2020-2023  润新知