• kubernetes 的工作过程 listwatch


    k8s 有两种节点,master 节点和 worker-node 节点。master 节点组件包括 apiserver,scheduler,controller-manager;node 节点组件包括 kubelet,kube-proxy,容器 engine;另外,除了这两个,还有一个 etcd 存储。

    整个 k8s 的工作过程是一个 list-watch 机制。有 3 个 list watch 分别是 controller manager,scheduler,kubelet。

     

    k8s 工作过程:

    • 客户端的请求通过 Kubectl 发送请求给集群的唯一入口 API Server。API Server 先将相关的元信息写入到 etcd 存储中。
    • etcd 写完信息后,会给予反馈给客户端,还会发送 created 事件给 apiserver,apiserver 把 created 事件发送给监听着 apiserver 的 Controller manager。
    • Controller manager 会调用控制器来保证 pod 副本数量,维持集群处于预期状态。然后 Controller Manager 将创建 pod 的相关信息发送给 apiserver ,apiserver 将相关的信息写入到 etcd 中(pod 的模板,如什么镜像,多少实例,健康检查等)。
    • etcd 将信息记录完毕,会将创建 pod 的信息发送给 apiserver。apiserver 再将创建 pod 的信息发送给 scheduler。Scheduler 通过 API Server 在 etcd 存储中读取 node 节点的资源信息(信息由 kubelet 发送到 master),通过预算策略和优选策略,从 node 节点中挑选最优的,并把 pod 调度到这个节点运行。
    • Scheduler 将调度信息反馈给 apiserver,apiserver 再将信息发送给 etcd,写入到 etcd 中进行保存。
    • etcd 记录完毕后,将更新 pod 的信息发送给 apiserver。apiserver 再将更新信息反应给相应 node 节点的 kubelet 上。
    • kubelet 接受到更新 pod 的信息后,根据相关的要求,调用容器引擎,创建 pod ,启动容器。同时 kubelet 还会将容器和 pod 的运行状态反馈给 apiserver,由 apiserver 将这些信息写入到 etcd 中。
    • etcd 写入信息完毕,会把相关的确认信息发送给 apiserver,由 apiserver 发送给相关的 kubelet。
    • kube-proxy 创建网络规则,制定转发规则。创建 service 作为负载均衡的访问入口(有 cluster-ip、nodepode 类型等),把用户的请求通过负载均衡转发到关联的 pod 上,从而发布 pod 里的业务。

     PS:

    预算策略:将所有 node 节点的剩余资源和 pod 所需的资源对比,找出符合 pod 资源需求的 node 节点。
    优选策略:预算策略筛选后的 node 节点被交给优选策略。通过 cpu 负载,内存剩余等因素,找出最合适的 node 节点。把 pod 调度到这个节点运行。

  • 相关阅读:
    数据结构——快速排序
    设计模式——代理模式(静态代理和JDK、CGLib动态代理)
    Java多线程系列——信号量:Semaphore
    Java多线程系列——线程阻塞工具类LockSupport
    Java多线程系列——过期的suspend()挂起、resume()继续执行线程
    Java多线程系列——深入重入锁ReentrantLock
    JVM——深入分析对象的内存布局
    【Git】The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
    【linux】CentOS: Sudo: unable to initialize policy plugin
    【Git】.git/FETCH_HEAD: Permission denied 的解决方法
  • 原文地址:https://www.cnblogs.com/shenyuanhaojie/p/15704547.html
Copyright © 2020-2023  润新知