[k8s] 八股文

news/2025/2/5 20:41:16/

最近在基于k8s做集群管理系统,心里有一些问题,在这里记录一下。

k8s中的服务发现?

这一点项目中有用到。任务模块通过gprc调用用户模块的服务时,使用了svc-user-v0.shuwd:8002,k8s是怎么将该流量转发到对应的pod上的?

这是k8s中非常基础的问题,可以看看 https://blog.fleeto.us/post/demystifying-kubernetes-service-discovery/

总结来说,服务发现离不开两个重要组件:

  • coreDNS。service创建时,会在coreDNS注册服务,也就是将service名称和cluster ip绑定。这样,service名称可以被coreDNS解析为对应的cluster ip。
  • kubeproxy。监听api server,当监听到srevice,为其配置相应的iptables或者ipvs。iptables的作用是将发往service ip的流量重定向到对应的endpoints(实际上就是可用的pods列表),对每个pod的转发概率其实就是负载均衡的体现。

关于iptables,看看这篇文章 https://yuerblog.cc/2019/12/09/k8s-%E6%89%8B%E6%8A%8A%E6%89%8B%E5%88%86%E6%9E%90service%E7%94%9F%E6%88%90%E7%9A%84iptables%E8%A7%84%E5%88%99/

informer原理

这一点项目中有用到。任务模块通过informer监听pytorchjob,实时修改数据库中的记录。

其实informer很晦涩,很难。informer是client-go中非常重要的工具包,很多k8s组件都有使用。看看这篇文章

  • https://www.jianshu.com/p/cc1444867c70
  • https://zhuanlan.zhihu.com/p/59660536

我来概括一下informer的两点主要功能。

  • informer有一个自己的本地存储,用户get/list资源时是从这个本地存储获取,因此可以减轻api server 和etcd的压力。
  • Informer可以监听api server中的增量事件,
    • 一方面,informer可以通过增量事件对本地存储进行相应修改,从而和etcd中的数据保持一致性。
    • 另一方面,informer可以根据事件类型,触发用户自定义的事件处理函数。

informer如何维护storage和etcd的一致性呢?

依赖于informer的list&watch机制。informer初始化时会使用list获取所有资源存在storage中,之后通过watch增量事件对本地存储进行修改,从而和etcd中的数据保持一致性。

informer中的二级缓存?

增量队列是存储从api server中监听到的增量事件。本地存储用来

informer为什么要定期resync?

resync并不是list,不是和api server交互,而是把storage中的数据放入增量队列(DeltaFIFO)中进行重放。目的是防止有些 handler 处理失败了而缺乏重试的机会。看这篇文章 https://gobomb.github.io/post/whats-resync-in-informer/

informer中的resource version概念?


http://www.ppmy.cn/news/52035.html

相关文章

CI Plus简介

CI Plus简介 CI Plus是数字电视机顶盒(STB)和电视(TV)中常用的一种条件接入机制。它通过智能卡(smart card)对接收机进行认证和授权,使其能接收加密的付费电视节目信号。 CI Plus由法国的数字电视行业协会DVB开发,已成为数字电视 Conditional Access 的标准机制,广泛应用于欧洲…

oracle常用函数

1、查看表结构: DESC employee; 2、删除表: drop table myemp; 3、修改表: RENAME employee TO myemp; 4、增加列 ALTER TABLE myemp ADD(hiredate DATE DEFAULT SYSDATE); 5、删除列 ALTER TABLE myemp DROP(hiredate); 6、修改列 ALTE…

ChatGPT能用来写小说吗-gpt可以续写小说吗

怎么用ChatGPT写网文 ChatGPT是一个语言生成模型,可以用于生成各种文本,包括网文。下面是一些写网文的建议。 确定你的主题和情节。在开始写作之前,你需要确保你有一个明确的主题和情节,这可以帮助你更好地组织你的故事&#xff0…

【具体到每一步】uniapp打包app生成apk包

先配置 云打包 关于证书 备注 弹出来这么个东西是加入你这个应用要发布到商店,需要签署的一些东西,先不用管了 然后等等 这个时间有点长 [HBuilder] 02:28:29.892 打包成功后会自动返回下载链接。 [HBuilder] 02:28:29.892 打包过程查询请点菜单发行-查…

Java内存模型详解

Java内存模型 Java内存模型(Java Memory Model)是Java虚拟机规范定义的,用于屏蔽因不同程序/硬件/操作系统上内存访问的差异,确保程序运行与设计一致,Java内存模型定义了Java虚拟机在计算机内存中的工作方式,确定了在共享内存系统…

vue+uniapp疫苗预约接种系统 微信小程序

统计分析:查看用户,疫苗,订单数量;统计近7日,30日订单趋势 用户管理:查看注册用户信息,及删除(数据库mysql) 疫苗管理:疫苗增删改查以及上下架 接种点管理:接…

HCIP之链路聚合、VRRP

链路聚合 链路聚合 --- 可以将多个物理接口绑定成一个逻辑接口,即将N条物理链路聚合为一条逻辑链路。可以在不升级硬件的条件下,达到增加带宽的效果 我们将逻辑链路,称为聚合链路,在华为设备中称为ETH-TRUNK链路(这个技…

布署到centos7.9时,ModuleNotFoundError: No module named ‘_sqlite3‘

先下载编译sqlite3 wget http://www.sqlite.org/sqlite-3.5.6.tar.gz cd sqlite-3.5.6 ./configure --disable-tcl make && make install 注意add LIBDIR to the ‘LD_LIBRARY_PATH’ environment variable,这是sqlite建议添加环境变量。 所以: echo expor…