K8s解析<1>--核心组件、设计架构、控制器

核心组件

  • Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
    在这里插入图片描述
  • 核心组件
    • etcd:保存了整个集群的状态
    • apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
    • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
    • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
    • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
    • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
    • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
  • 除了核心组件,还有一些推荐的Add-ons
    • kube-dns:负责为整个集群提供DNS服务
    • Ingress Controller:为服务提供外网入口
    • Heapster:提供资源监控
    • Dashboard:提供GUI
    • Federation:提供跨可用区的集群
    • Fluentd-elasticsearch:提供集群日志采集、存储与查询

关于kubectl、kubeadm、kubelet

  • kubeadm是kubernetes集群快速构建工具
  • kubelet运行在所有节点上,负责启动POD和容器,以系统服务形式出现
  • kubectl是kubenetes命令行工具,提供指令

kubernetes设计架构

  • Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
    在这里插入图片描述
  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦
  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
    • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
    • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

图例1:
在这里插入图片描述

图例2:
在这里插入图片描述

控制器

概述

  • Kubernetes 如何能够实现最大单个集群能够达到5000个节点,15 万个 Pod 的完全自动化管理,更多归功于声明式API编程与控制器模式的协作。在 Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes 集群内部的管理控制中心或者说是”中心大脑”。例如,ReplicaSet 控制器负责维护集群中运行的 Pod 数量;Node控制器负责监控节点的状态,并在节点出现故障时,执行自动化修复流程,确保集群始终处于预期的工作状态。

控制器类型

  • Replication Controller和ReplicaSet
  • Deployment
  • DaemonSet
  • StatefulSet
  • Job
  • CronJob
  • HPA,全称Horizontal Pod Autoscaler

详细介绍

  1. Replication Controller和ReplicaSet
    • ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
    • ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。
    • ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。
    • 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。
  2. Deployment
    • Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
    • 典型的应用场景:
      • 用来创建Pod和ReplicaSet
      • 滚动更新和回滚
      • 扩容和缩容
      • 暂停与恢复
  3. DaemonSet
    • DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
    • DaemonSet 的典型用法:
      • 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
      • 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。
      • 在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等
    • 一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。
    • 一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。
  4. StatefulSet
    • StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
    • StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证
    • StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
      • 稳定的、唯一的网络标识符。
      • 稳定的、持久的存储。
      • 有序的、优雅的部署和缩放。
      • 有序的、自动的滚动更新。
  5. Job
    • 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。
  6. CronJob
    • Cron Job 创建基于时间调度的 Jobs。
    • 一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。
  7. HPA
    • 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

原理

链接:https://mp.weixin.qq.com/s/UN3Mp9x1qmQyZjLWKSunWg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值