首页 > 其他分享 >12月16日总结

12月16日总结

时间:2023-12-16 14:34:03浏览次数:27  
标签:总结 12 16 apiserver 组件 client go informer kube

在看 kube-scheduler 组件的过程中遇到了 kube-scheduler 对于 client-go 的调用,泛泛的理解调用过程总有种隔靴搔痒的感觉,于是调转头先把 client-go 理清楚在回来看 kube-scheduler。

为什么要看 client-go,并且要深入到原理,源码层面去看。很简单,因为它很重要。重要在两方面:

kubernetes 组件通过 client-go 和 kube-apiserver 交互。
client-go 简单,易用,大部分基于 Kubernetes 做二次开发的应用,在和 kube-apiserver 交互时会使用 client-go。

当然,不仅在于使用,理解层面,对于我们学习代码开发,架构等也有帮助。

  1. client-go 客户端对象

client-go 支持四种客户端对象,分别是 RESTClient,ClientSet,DynamicClient 和 DiscoveryClient:

image

组件或者二次开发的应用可以通过这四种客户端对象和 kube-apiserver 交互。其中,RESTClient 是最基础的客户端对象,它封装了 HTTP Request,实现了 RESTful 风格的 API。ClientSet 基于 RESTClient,封装了对于 Resource 和 Version 的请求方法。DynamicClient 相比于 ClientSet 提供了全资源,包括自定义资源的请求方法。DiscoveryClient 用于发现 kube-apiserver 支持的资源组,资源版本和资源信息。

每种客户端适用的场景不同,主要是对 HTTP Request 做了层层封装,具体的代码实现可参考 client-go 客户端对象。
2. informer 机制

仅仅封装 HTTP Request 是不够的,组件通过 client-go 和 kube-apiserver 交互,必然对实时性,可靠性等有很高要求。试想,如果 ETCD 中存储的数据和组件通过 client-go 从 ETCD 获取的数据不匹配的话,那将会是一个非常严重的问题。

如何实现 client-go 的实时性,可靠性?client-go 给出的答案是:informer 机制。

image

client-go informer 流程图

informer 机制的核心组件包括:

Reflector: 主要负责两类任务:
    通过 client-go 客户端对象 list kube-apiserver 资源,并且 watch kube-apiserver 资源变更。
    作为生产者,将获取的资源放入 Delta FIFO 队列。
Informer: 主要负责三类任务:
    作为消费者,将 Reflector 放入队列的资源拿出来。
    将资源交给 indexer 组件。
    交给 indexer 组件之后触发回调函数,处理回调事件。
Indexer: indexer 组件负责将资源信息存入到本地内存数据库(实际是 map 对象),该数据库作为缓存存在,其资源信息和 ETCD 中的资源信息完全一致(得益于 watch 机制)。因此,client-go 可以从本地 indexer 中读取相应的资源,而不用每次都从 kube-apiserver 中获取资源信息。这也实现了 client-go 对于实时性的要求。

接下来从源码角度看各个组件的处理流程,力图做到知其然,知其所以然。
2 informer 源码分析

直接阅读 informer 源码是非常晦涩难懂的,这里通过 informer 的代码示例开始学习:

package main

import (
"log"
"time"

标签:总结,12,16,apiserver,组件,client,go,informer,kube
From: https://www.cnblogs.com/lmyy/p/17904807.html

相关文章

  • 【笔记】2023.12.16 动态规划
    笔记2023.12.16:动态规划今天题目很多,可能有些题不口胡了。LOJ6089小Y的背包计数问题前\(\sqrtn\)个物品直接做单调队列优化是\(O(n\sqrtn)\)。大于\(\sqrtn\)的是完全背包。考虑到完全背包\(v\)的OGF为\(\dfrac{1}{1-x^{v}}\)。这不行。你考虑到对于一个物......
  • P1416 攻击火星
    思路:需要构造出一种最优解情况这样就最多能删去2个#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ intn; cin>>n; intans=max(0,n-2); cout<<ans;}intmain(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); intt=1; //cin>>t; for(i......
  • 2023-2024-1 20232408《网络空间安全导论第六周学习总结》
    2023-2024-120232408《网络空间安全导论第六周学习总结》教材内容总结这一章主要聚焦于应用安全,具体分为身份认证与信任管理、隐私保护、云计算及其安全、区块链与安全、人工智能及其安全等多个方面,从用户端、服务端等不同视角描述了我们应该如何保障应用安全。本章内容结合了......
  • 2023-12-16 闲话 中午没睡着
    这半年受这个b回答的影响,发奋图强,现在实力如下:通过考前突击进行刷绩点,绩点寄了。通过每天复健卷竞赛,杭州吃屎了。所有区域赛第45顺位进入ecfinal,金牌堪忧。通过每天知乎b站强训neuronnetwork/robotics,现在水平是等着寒假再学一遍通过boss直聘找实习,找了半个月一个实习机会......
  • 【杂题乱写】12 月北京省选 DP 专题训练
    有一部分题目是模板题,就不放了。D.Luogu-P5336THUSC2016成绩单考虑区间DP,由于操作的特殊性,我们需要设计含有区间最值的状态,设\(f_{l,r,i,j}\)表示区间\([l,r]\)中的所有数只保留值域\([i,j]\)中的最小代价,\(g_{l,r}\)为将区间\([l,r]\)的所有数都删去的最小代价。......
  • 1280. 学生们参加各科测试的次数
    1.题目介绍学生表:\(Students\)+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主键为student_id(学生ID)。该表内的每一行都记录有学......
  • 2023-2024-1 20231424《计算机基础与程序设计》第12周学习总结
    2023-2024-120231424《计算机基础与程序设计》第12周学习总结作业信息作业属于的课程<班级链接>(2022-2023-1-计算机基础与程序设计)作业要求<作业要求>(2022-2023-1计算机基础与程序设计第一周作业)作业目标《C语言程序设计》第11章作业正文https://www.cnblo......
  • 【杂题乱写】12 月北京省选 DP 专题训练
    有一部分题目是模板题,就不放了。D.Luogu-P5336THUSC2016成绩单考虑区间DP,由于操作的特殊性,我们需要设计含有区间最值的状态,设\(f_{l,r,i,j}\)表示区间\([l,r]\)中的所有数只保留值域\([i,j]\)中的最小代价,\(g_{l,r}\)为将区间\([l,r]\)的所有数都删去的最小代价。......
  • 网络空间安全第六周学习总结 20232323郭旗
    教材学习内容 基于AI的学习   ......
  • 【杂题乱写】12 月北京省选 DP 专题训练
    有一部分题目是模板题,就不放了。D.Luogu-P5336THUSC2016成绩单考虑区间DP,由于操作的特殊性,我们需要设计含有区间最值的状态,设\(f_{l,r,i,j}\)表示区间\([l,r]\)中的所有数只保留值域\([i,j]\)中的最小代价,\(g_{l,r}\)为将区间\([l,r]\)的所有数都删去的最小代价。......