[k8s] 八股文

最近在基于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组件都有使用。看看这篇文章

我来概括一下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概念?

pod健康检查

看看这篇文章:https://www.cnblogs.com/fengjian2016/p/17078670.html

主要使用探针probe。

leaderElection

看看这篇文章:https://blog.csdn.net/weixin_39961559/article/details/81877056

自定义CRD

这篇文章不错:https://hliangzhao.cn/articles/000001640262318a67c149f524b43a6b2796c4ae753cf2b000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值