k8s的主要组件以及重要概念

        K8S(Kubernetes)是一个用于自动部署、扩展和管理容器化应用程序的开源系统。它采用主从设备模型(Master-Slave 架构),其中Master节点负责集群的调度、管理和运维,Slave节点(也被称为Worker Node节点)负责执行工作负载。

Kubernetes(K8s)主要由以下几个核心组件组成:

一、Master 节点组件

  1. API Server

    • 原理:作为 Kubernetes 系统的前端控制层,提供 HTTP/HTTPS RESTful API,以供客户端(如 kubectl 工具、其他管理平台等)和内部组件之间进行通信。它将接收到的请求转换为对后端存储(通常是 etcd)的操作,并将结果返回给请求者。
    • 功能
      • 资源操作的入口,支持对 Pod、Service、Deployment 等各种 Kubernetes 资源对象的增删改查操作。
      • 提供认证、授权和准入控制机制,确保只有经过授权的用户可以执行特定的操作。
      • 作为集群状态的存储和查询接口,其他组件可以通过 API Server 来获取集群的当前状态信息。
    • 作用:是用户和其他组件与 Kubernetes 集群交互的桥梁,负责接收和处理各种请求,维护集群的状态一致性。
  2. Scheduler

    • 原理:Scheduler 持续监视新创建的未被调度到节点上的 Pod,并根据一系列的调度策略和可用资源信息,为 Pod 选择一个最合适的 Node 节点进行部署。
    • 功能
      • 分析 Pod 的资源需求(如 CPU、内存等)和各种约束条件(如节点标签、亲和性和反亲和性等)。
      • 评估各个 Node 节点的可用资源和负载情况,选择一个最适合的节点来运行 Pod。
    • 作用:确保 Pod 能够被合理地分配到集群中的各个节点上,实现资源的高效利用和负载均衡。
  3. Controller Manager

    • 原理:Controller Manager 由多个控制器组成,每个控制器都是一个独立的控制循环。这些控制器通过持续监控集群的状态,并与期望状态进行比较,然后采取相应的行动来使实际状态趋向于期望状态。
    • 功能
      • ReplicaSet 控制器:确保指定数量的 Pod 副本始终在运行。如果有 Pod 故障,它会创建新的 Pod 来维持副本数量。
      • Node 控制器:负责管理 Node 节点的状态,例如当节点不可达时,将该节点上的 Pod 重新调度到其他节点上。
      • Deployment 控制器:管理 Deployment 对象,实现应用的滚动更新、回滚等操作。
    • 作用:维护 Kubernetes 集群的稳定性和可靠性,确保各种资源对象按照预期的状态运行。
  4. etcd
    • 原理
      • 采用k/v(键值对)方式存储数据,确保数据的一致性和高可用性
    • 作用
      • 作为K8S的后端数据库,存储集群的所有状态信息。

二、Node 节点组件

  1. Kubelet

    • 原理:Kubelet 是在每个 Node 节点上运行的主要代理程序。它通过 API Server 注册自身所在的节点信息,并持续监控节点上的容器和 Pod 的状态。当有新的 Pod 被调度到该节点时,Kubelet 负责启动容器并确保其正常运行。
    • 功能
      • 管理节点上的容器生命周期,包括启动、停止、重启容器等操作。
      • 定期向 API Server 报告节点的状态信息,包括资源使用情况、容器状态等。
      • 实现容器的健康检查,确保容器处于正常运行状态。
    • 作用:是 Node 节点上的实际执行者,负责管理和维护节点上的容器和 Pod,确保它们按照预期运行。
  2. Container Runtime

    • 原理:负责实际运行容器的软件层,它与操作系统内核交互,为容器提供隔离的运行环境。常见的容器运行时有 Docker、Containerd 等。
    • 功能
      • 创建、启动、停止和删除容器。
      • 管理容器的镜像存储和加载。
      • 提供容器的资源隔离和限制功能,如 CPU、内存、磁盘等资源的限制。
    • 作用:为容器化应用提供底层的运行环境支持。
  3. Kube Proxy

    • 原理:Kube Proxy 通过在节点上设置 iptables 规则或 IPVS(IP Virtual Server)规则,实现对服务的访问代理和负载均衡。它持续监听 API Server 上 Service 和 Endpoint 对象的变化,并根据这些变化动态更新本地的网络规则。
    • 功能
      • 将对 Service 的访问请求转发到后端的 Pod 上。
      • 实现服务的负载均衡,根据一定的策略将请求分发到不同的 Pod 上。
    • 作用:提供了 Kubernetes 集群中服务的发现和负载均衡功能,使得客户端可以通过稳定的服务地址访问到一组 Pod。

三、K8S架构的其他组件

  1. kubectl
    • K8S的命令行工具集,用于通过命令行与API server进行交互,对K8S进行操作。
  2. kube-dns
    • 可选组件,记录启动的Pod和服务地址,提供域名到地址的转换映射。
  3. 监控和日志组件
    • 如Fluentd等,用于收集和转发集群的日志信息,便于问题排查和性能监控。

四、关键概念

  1. Pod:是 Kubernetes 中最小的可部署单元,一个 Pod 可以包含一个或多个容器。这些容器共享网络命名空间、存储卷等资源,并且被一起调度到同一个 Node 上。
  2. Deployment:用于管理 Pod 的副本数量、更新策略等。它可以确保指定数量的 Pod 始终在运行,并在需要时进行滚动更新。
  3. Service:提供了一种抽象方式,将一组 Pod 暴露为一个稳定的网络服务。Service 通过标签选择器来确定哪些 Pod 属于该服务,并提供负载均衡和服务发现功能。
  4. Namespace:用于对资源进行逻辑分组,不同的 Namespace 可以有不同的用户、权限和资源配额。
  5. Label 和 Selector:标签(Label)是附加到 Kubernetes 对象上的键值对,用于标识和选择对象。选择器(Selector)用于根据标签来筛选对象,例如选择特定的 Pod 或 Service。
  6. Volume:用于为容器提供持久化存储或共享存储。Kubernetes 支持多种类型的存储卷,如本地存储、网络存储等。

五、工作流程

  1. 用户通过 kubectl 命令行工具或其他客户端向 Kubernetes API Server 提交创建 Pod、Deployment、Service 等资源的请求。
  2. API Server 验证请求并将资源对象存储在 etcd(一个高可用的分布式键值存储)中。
  3. Scheduler 监听到新的 Pod 创建请求后,根据资源需求和节点的可用性,选择一个合适的 Node 节点来调度该 Pod。
  4. Kubelet 在被选中的 Node 上启动 Pod,并与容器运行时交互来创建和管理容器。
  5. Kube Proxy 在 Node 上设置网络规则,以便将对 Service 的请求转发到相应的 Pod 上。
  6. 如果需要对应用进行更新,用户可以通过修改 Deployment 等资源对象来触发滚动更新等操作。Controller Manager 会监控资源的变化,并确保系统的状态与期望的状态一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值