K8S学习笔记-------核心概念

个人笔记,原创,转载注明出处,如有不对欢迎指正

核心概念

  1. 架构设计

    • 整体架构图

      k8s架构图

    • Master

      • 概念

        master负责整个集群的管理控制,用于监控、编排、调度集群中的各个工作节点。可以是多台,一般不作为node使用。master由如下组成构成。

      • API Server

        API Server(kube-apiserver)进程为Kubernetes中各类资源提供了增删改查的HTTP REST接口。对于资源的任何操作,都要经过API Server来处理。除此之外,还提供了一系列认证授权机制。

      • etcd

        etcd用于保存集群中所有的配置和各个对象的状态信息。

        !!只有API Server进程才能直接访问和操作etcd。

      • 调度器

        调度器(kube-scheduler)是pod资源的调度器。用于监听最近创建但是还未分配node的pod资源,它会在综合考量各种因素后为pod分配node。

        调度器执行的各项操作都是基于API Server。

      • 控制器管理器

        Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

    • Node

      • 概念

        node是集群中的各个工作节点,由master管理,提供运行容器所需的各种环境,对容器进行实际的控制,容器提供实际的应用服务。node由以下部分组成。

      • kubelet

        kubelet是运行在node上的代理进程。它以PodSpec为单位来运行任务,PodSpec是描述Pod的YAML或JSON对象。kubelet会运行各种机制提供的PodSpec,并确保PodSpec中描述的容器健康运行。kubelet负责维护由kubernetes创建的容器的生命周期,也负责存储卷等资源的管理。

        kubelet会定期调用API Server进程的REST接口上报自身状态,API Server会将状态信息更新到etcd中。kubelet也通过API Server的Watch接口监听Pod信息,从而对Pod进行管理。

      • kube-proxy

        kube-proxy用于管理Service的访问入口,包括从集群内的其他Pod到Service的访问,以及从集群外访问Service。

      • 容器运行时

        容器运行时是负责容器运行的软件。kubernetes支持任何基于CRI实现的容器运行时。

    • 组件间的交互流程

      • 示例

        以创建pod为例

      • 流程图

        pod流程图

      • 过程分析

        1. kubectl命令转换为对API Server的调用。
        2. API Server验证请求并将其保存到etcd中。
        3. etcd通知API Server。
        4. API Server调用调度器。
        5. 调度器决定在哪个node运行Pod,并将结果返回给API Server。
        6. API Server将对应node保存到etcd中。
        7. etcd通知API Server。
        8. API Server在相应的node中调用kubelet。
        9. kubelet与容器运行时的API发生交互,与容器守护进程通信并创建容器。
        10. kubelet将Pod状态更新到API Server中。
        11. API Server把最新的状态保存到etcd中。
  2. 核心对象

    • Pod

      • 结构图

        pod结构图

      • 概念

        Pod是Kubernetes处理的最小单元。Pod通常表示单个应用程序,由一个或多个关系紧密的容器构成,这些容器拥有相同的生命周期,共享环境、存储卷和IP空间,作为一个整体被编排到node上。

    • 控制器

      • 概念

        用户通过创建控制器来管理Pod。

      • ReplicationController和ReplicaSet控制器

        ReplicationController或ReplicaSet控制器都是基于Pod模板进行创建,能够很好的支持水平伸缩。

        ReplicationController可以保证集群中的Pod数量和配置中的一致,如果有Pod宕机,它可以自动启用新的Pod进行补充。ReplicationController还可以执行滚动更新,将一组Pod逐个切换到最新版本,从而最大限度地减少对应用程序可用性的影响。

        ReplicaSet控制器是ReplicationController的另一个版本,具有副本筛选功能,但是无法滚动更新。

        与Pod一样,这两种控制器都是很少直接使用的对象。

      • Deployment控制器

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyJx5JG4-1634528311928)(…/img/Deployment.png)]

        Deployment控制器是最常用的工作负载对象之一。它以ReplicaSet控制器为基础,是更高级的概念,增加了更灵活的生命周期管理功能。

        Deployment是更高级的对象,只需要简单更改配置文件,Kubernetes会自动调节ReplicaSet控制器,管理应用程序不同版本之间的切换,还可以实现自动维护事件历史记录及自动撤销功能。

      • StatefulSet控制器

        StatefulSet控制器是提供了排序和唯一性保证的特殊Pod控制器。当有与部署顺序、持久数据或固定网络等相关的特殊需求时,可以使用它来进行更细粒度的控制。主要用于有状态的应用。

        StatefulSet控制器为每个Pod创建唯一的、基于数字的名称,从而提供稳定的网络标识符,即时该Pod转移到另一个node,该名称也将持续存在。同样,当需要重新调度时,可以通过Pod转移持久性存储卷,即时删除了Pod,卷也会存在,可以防止数据意外丢失。

        在部署或伸缩调节时,StatefulSet会根据名称中的标识符执行操作,从而可以对执行顺序进行控制。

        Deployment控制器下的Pod提供无差别的服务,但是StatefulSet控制器下的Pod可以提供不同的服务。

      • DaemonSet控制器

        DaemonSet控制器在集群的每个node上运行单一的Pod副本,它非常适合部署那些为node本身提供服务或执行维护的Pod。如日志收集和转发、监控以及运行以增加node本身功能为目的的服务。

      • Job控制器和CronJob控制器

        以上的控制器都是长期运行的,拥有服务级的生命周期。

        Job控制器运行特定任务,运行任务的容器完成工作后,Job控制器会成功退出。

        CronJob控制器在Job控制器的基础上加了事件调度,可以在给定的时间点运行一个任务,也可以周期性地在给定时间点运行一个任务。

    • 服务与存储

      • Service组件和Ingress

        Service将相同功能的Pod在逻辑上组合到一起。

        Pod无法以固定的IP地址和端口号提供服务,通过Service组件可以发布服务,提供稳定断点,可以跟踪路由到所有指定类型的后端容器。另外,Service组件可以根据需求来伸缩或替换后端的工作单元,无论Service路由到哪个Pod,IP地址都保持稳定。

        Ingress用来整合Service组件,充当多个Service组件的统一入口。

      • 存储卷和持久存储卷

        存储卷(volume)允许Pod中所有容器共享数据,并在Pod终止前一直保持可用。但是Pod终止后,存储卷会被销毁。

        持久存储卷(persistent volume)不依赖Pod的生命周期。它允许管理员为集群配置存储资源,用户可以为正在运行的Pod请求和生命存储资源。带有持久卷的Pod终止后,存储卷的回收策略将决定是保留还是删除数据。

    • 资源划分

      • 命名空间

        对集群资源进行逻辑划分。

      • 标签和注解

        标签(label)是一种语义化标记,附加到kubernetes对象上,对它们进行标记或划分。形式是键值对,每个单元可以有多个标签,但是每个键只能有一个值。可以通过标签进行筛选。

        注解(annotation)类似标签。但是相对标签,注解更灵活,可以包含少量的结构化数据。注解一般是用来向对象添加更多元数据,不用来筛选。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值