Kubernetes核心概念
  ssGPNGBVZK0u 2023年11月02日 68 0

Kubernetes核心概念

  • container :容器即可以运行服务和程序,容器是独立运行的一个或一组应用。容器可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
  • Pod :
  • 在 Kubernetes 系统中,pod是最小部署单元,一个pod包含一个或者多个紧密相连的业务容器(即一组容器的集合)。
  • Kubernetes为每个Pod都分配了唯一的IP地址,称之为PodIP,一个Pod里的多个容器共享PodIP地址,它负责外部跟容器之间进行通信。
  • Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。
  • Controllers 控制器,Kubernetes 通常不会直接创建 Pod,而是通过 Controller 来管理 Pod 的。所以controller负责维护集群的状态,,比如故障检测、自动扩展、滚动更新等; 目前已经提供了很多控制器来保证Kubernetes的正常运行,一个资源对应一个控制器,而Controller Manager就是负责管理这些控制器的。
  • Replication Controller(RC,副本控制器)管理维护Replication Controller,确保预期的Pod副本数量,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
  • Node Controller(节点控制器)管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
  • Daemon Set Controller:确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。
  • Deployment :无状态应用部署,滚动升级pod。 Deployment 对象并不是直接操控的 Pod 对象,而是操控的 ReplicaSet 对象,而 ReplicaSet 对象就是由副本的数目的定义和Pod 模板组成的。
  • StatefulSet : 有状态应用部署,StatefulSet与Deployment相比,相同点是他们管理相同容器规范的Pod,不同的是,StatefulSet为pod创建一个持久的标识符,他可以在任何编排的时候得到相同的标识符。
    StatefulSet适用于具有以下特点的应用:
  • 具有固定的网络标记(主机名)
  • 具有持久化存储
  • 需要按顺序部署和扩展
  • 需要按顺序终止及删除
  • 需要按顺序滚动更新
  • Services
    实现基于四层的负载均衡功能 Services 是 Kubernetes 最外围的单元,通过虚拟一个访问 IP 及服务端口,可以访问我们定义好的 Pod 资源,是通过 iptables 的 nat 转发来实现,转发的目标端口为Kube_proxy 生成的随机端口。
  • 外部系统访问Service的问题,首先需要弄明白Kubernetes的三种IP这个问题 Node IP:Node节点的IP地址 Pod IP: Pod的IP地址 Cluster IP:Service的IP地址
  • job : 一次性任务,运行完成后Pod销毁,不再重新启动新容器。还可以任务定时运行。
  • Cronjob : 定时任务
  • Labels 标签,标签用于区分对象(比如Pod、Service),Kubernetes中的任意对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key与value由用户自己指定。

总结各组件之间的关系


  • 1、Kubernetes的架构由一个master和多个node组成,master通过api提供服务,接受kubectl的请求来调度管理整个集群。 注:kubectl:是 k8s 平台的一个管理命令。
  • 2、Controller Manager是Kubernetes所有资源对象的自动化控制中心,处理集群中常规后台任务,一个资源对应一个控制器,而Controller Manager就是负责管理这些控制器的。例如Replication controller 定义了有多少个 pod 或者容器需要运行,如果当前集群中运行的 pod 容器达不到配置的数量,replication controller 会调度容器在minion 上运行,保证集群中的 pod 数量。
  • 3、service 则定义对外网提供的服务,一个 service 会对应后端运行的多个 container。没有service访问不到容器。
  • 4、Kubernetes 是个管理平台,node上的 proxy 拥有提供真实服务公网 IP。客户端访问kubernetes 中提供的服务,是直接访问到 kube-proxy 上的。
  • 5、在 Kubernetes 中 pod 是一个基本单元,一个 pod 可以是提供相同功能的多个 container,这些容器会被部署在同一个node上。node是运行 Kubelet 中容器的宿主机。node接受 master的指令创建 pod 或者容器。

创建一个Pod的内部流程


  1. 用户提交创建Pod的请求,可以通过Kubectl命令行工具,支持Json和Yaml两种格式;
  2. API Server 处理用户请求,存储要创建的Pod数据到Etcd数据库;
  3. Schedule(调度器)通过和 API Server的watch(监听)机制,查看到新的pod,尝试为新的Pod绑定Node节点;
  4. 过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机;
  5. 主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;
  6. 选择主机:选择打分最高的主机,进行binding操作,把结果存储到Etcd中;
  7. kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container, docker run启动容器, scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Yoru5qB4TSKM   2023年12月10日   36   0   0 服务器重启IP
  YKMEHzdP8aoh   2023年12月11日   57   0   0 DNSidePod
  48fXx4UfWSFg   2023年12月06日   54   0   0 bcIPbundle
  aYmIB3fiUdn9   2023年12月08日   49   0   0 客户端IPNATlvs