![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
云原生
文章平均质量分 92
随风奔跑尿飞扬
在梦想的道路上越摔越疼~
有提供工作机会老板请发邮件到 1403539044@qq.com
展开
-
Istio中的全局限流方案
在k8s网格(istio)环境中, 可以通过创建的方式来配置限流。在istio本地限流的细节这里不再赘述, 主要讲解全局限流的配置方式。原创 2024-05-10 20:03:23 · 781 阅读 · 0 评论 -
以无侵方式实现Deployment原地升级
本文将展示如何以无侵、原生的方式实现Deployment原地升级。在文章末尾会提供shell脚本供大家参考。本文的原地升级仅指镜像更新本篇kubernetes版本为v1.27.3。原地升级的概念以及OpenKruisekubernetes项目地址:controller命令main入口: cmd/kube-controller-manager/controller-manager.gocontroller相关代码目录: pkg/controller。原创 2024-05-10 20:00:50 · 977 阅读 · 0 评论 -
如何实现一个CSI?源码解析csi-nfs
/ 对于块设备的挂载与卸载// 文件系统的挂载与卸载// 状态获取// 扩容// 容量获取// 基本信息// grpc服务会调用此具体实现// 挂载指定路径,不可包含敏感项// 与mount一致, 但是可以包含敏感项(如密码)并不会被记录// 与MountSensitive一致,但禁用systemd// 与MountSensitiveWithoutSystemd一致, 但包含附加选项// 卸载// 返回挂载点列表。原创 2024-02-28 11:53:38 · 1124 阅读 · 0 评论 -
从源码解析Kruise(K8S)原地升级原理
原地升级的原理比较简单, 主要还是利用了pod自身的特性和kubelet的拉起功能。kruise中仅对自己的支持原地升级, 其实也可以扩展到对原生资源的支持(如一开始的测试),但会存在一些问题和限制(如测试二中deployment的镜像版本不会发生改变)。原创 2024-02-21 14:53:08 · 1236 阅读 · 0 评论 -
如何实现一个K8S DevicePlugin?
k8s允许限制容器对资源的使用,比如CPU和内存,并以此作为调度的依据。当其他非官方支持的设备类型需要参与到k8s的工作流程中时,就需要实现一个。Kubernetes提供了一个设备插件框架,你可以用它来将系统硬件资源发布到Kubelet。供应商可以实现设备插件,由你手动部署或作为 DaemonSet 来部署,而不必定制 Kubernetes 本身的代码。目标设备包括 GPU、高性能 NIC、FPGA、 InfiniBand 适配器以及其他类似的、可能需要特定于供应商的初始化和设置的计算资源。原创 2024-02-21 14:50:53 · 1417 阅读 · 0 评论 -
快速理解容器网络原理
我们知道, 容器是依赖于linux系统中的cgroup与namespace机制。 所以要了解容器网络要先知道怎么在宿主中管理网络命名空间(namespace)。linux中提供了强大的命令可以管理网络。有了ns之后, 我们就可以实现网络隔离了。那么如何打通不同ns间的壁垒(不同容器间的通讯), 实现通讯呢?那就需要为它们分配网络设备了,这个创建出的网络设备,被原创 2024-02-01 18:55:31 · 977 阅读 · 0 评论 -
Volcano Scheduler(Plugins&Actions)调度器源码解析
本文从源码的角度分析Volcano Scheduler中Actions和Plugins相关功能的实现。本篇Volcano版本为v1.8.0。Volcano项目地址:controller命令main入口: cmd/scheduler/main.gocontroller相关代码目录: pkg/schedulerVolcano的调度过程可以查看感觉volcano中插件的方法类型实在太多了, 对于开发者学习成本很大。原创 2024-01-11 14:14:39 · 888 阅读 · 0 评论 -
Volcano Scheduler调度器源码解析
本文从源码的角度分析Volcano Scheduler相关功能的实现。本篇Volcano版本为v1.8.0。Volcano项目地址:controller命令main入口: cmd/scheduler/main.gocontroller相关代码目录: pkg/scheduler更多文章访问:看过我之前文章的朋友应该已经大致了解了k8s原生调度器的运行逻辑了。大致运行流程:fill:#333;color:#333;color:#333;fill:none;原创 2024-01-09 18:11:28 · 1477 阅读 · 0 评论 -
从源码解析KubeScheduler Framework插件
Framework是的核心组件,它管理了资源分配和调度策略等相关插件。这些插件联合起来就实现了的调度功能。scheduler在node列表中取出一个node,然后依次调用"参与调度的插件"的PreFilterFilter等方法,如果所有插件都返回成功,则调度成功,否则调度失败。PrePreEnqueuePlugin 在进入到调度队列之前运行的插件,他将判断pod是否可以被调度。PreFilterPlugin 过滤前的预处理, 根据pod中已知的信息,准备后续处理需要的数据。原创 2023-12-15 14:41:43 · 1019 阅读 · 0 评论 -
源码分析KubeController Attachdetach功能实现
源码文件路径: pkg/controller/volume/attachdetach/attach_detach_controller.go// type attachDetachController 结构体定义// 省略informer相关定义// 主要监听pvc/pv/pod/node/csinode/csidriver/volumeattachment对象//// 云厂商提供的接口// 主要负责的volumeplugin的管理// 包含intree以及outtree的桥接转换。原创 2023-12-21 14:50:15 · 929 阅读 · 0 评论 -
GC控制器(Garbagecollector)源码解析
在执行删除资源时, 不同的删除策略会使资源在finalizers中增加不同的字段, 从而触发不同的处理逻辑。想要删除一个资源需要满足几个条件:清空关联关系无ownerfinalizers为空不同的删除策略决定了上述几个条件具体执行的方式, 但最终需要满足的条件是一致。删除是按固定的逻辑执行的,整个流程可以理解为递归的处理方式。原创 2023-12-28 17:05:55 · 1030 阅读 · 0 评论 -
k8s client-go源码解析之informer 一
k8 s client-go源码解析之informer。本篇为先导篇, 介绍informer的入口工厂函数。原创 2023-03-07 09:55:39 · 502 阅读 · 0 评论 -
k8s client-go源码解析之informer 二
informer中controller负责数据控制,包括:获取数据、数据处理、数据分发。controllerReflector负责获取数据并写入到队列。数据获取时会携带上一次的版本号,这样就可以获取到版本号之后的数据。取出数据,写入到indexer中,同时将数据分发到processor中。processor中会根据动作类型,OnAddOnUpdateOnDelete,执行对应的事件处理函数。原创 2023-03-08 21:48:01 · 443 阅读 · 0 评论 -
k8s client-go源码解析之informer三
本文内容为学习笔记,内容为个人见解,不保证准确性,但欢迎大家讨论何指教。觉得文章不错请关注跟博客及本篇介绍DeltaFIFO及indexer。原创 2023-03-11 22:11:06 · 449 阅读 · 0 评论 -
containerd Snapshots功能解析
本文以 ctr i pull命令为例,分析containerd的snapshot 创建 相关的功能。原创 2023-11-23 18:07:23 · 428 阅读 · 0 评论 -
Containerd Container管理功能解析
containerd的容器管理功能,主要是通过grpc调用containerd的image和container服务实现的。container创建时会获取镜像快照信息(解压/挂载),命令行参数会转换成oci配置,最终生成container的基础信息。container的创建动作仅生成数据,用于后续的container start(task)操作。原创 2023-11-27 16:33:34 · 239 阅读 · 0 评论 -
从源码解析Containerd容器启动流程
task是containerd中真正运行的对象,它包含了容器的所有信息,如rootfs、namespace、进程等。创建task时,会启动shim进程。shim进程是一个短暂的进程,它的生命周期与容器一致。它的主要作用是与交互,完成容器的创建。容器的网络配置是在task创建之后,由ctr调用cni插件完成的。原创 2023-11-29 18:10:46 · 397 阅读 · 0 评论 -
Flannel源码解析
host-gw模式性能最好,因为不需要经过vxlan设备,不需要封装数据。但是局限性也最大,只能在二层网络中使用。vxlan模式通过tun/tap设备,封装数据,然后通过udp发送到目标节点,可以在三层网络中使用。使用场景更为广泛。当开启isMasq时, 会在节点上添加iptables转发规则,将pod的ip地址隐藏,只暴露node的ip地址。flannel本身负责跨设备间的通信, 同设备间通信通过bridge、namespce等方式实现。原创 2023-12-05 16:19:58 · 220 阅读 · 0 评论 -
从源码解析KubeScheduler调度过程
scheduler通过informer监听pod和node的变化, 并将pod添加到中。中有三个队列,activeQ。activeQ中的pod可以被调度,中的pod不可被调度(未调度),中的pod是调度失败的pod。方法中,会从activeQ中取出pod,由调用framework运行插件的筛选与评分函数, 最终选出最优的节点,由将pod绑定到节点上。scheduler的调度过程是单线程的, 通过的阻塞Pop实现, 保证了调度的顺序性。通过node提名机制,实现pod优先调度到指定的节点上。原创 2023-12-11 17:21:59 · 145 阅读 · 0 评论