kubernetes
文章平均质量分 81
随风奔跑尿飞扬
在梦想的道路上越摔越疼~
有提供工作机会老板请发邮件到 [email protected]
展开
-
Istio中的全局限流方案
在k8s网格(istio)环境中, 可以通过创建的方式来配置限流。在istio本地限流的细节这里不再赘述, 主要讲解全局限流的配置方式。原创 2024-05-10 20:03:23 · 680 阅读 · 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 · 947 阅读 · 0 评论 -
如何实现一个CSI?源码解析csi-nfs
/ 对于块设备的挂载与卸载// 文件系统的挂载与卸载// 状态获取// 扩容// 容量获取// 基本信息// grpc服务会调用此具体实现// 挂载指定路径,不可包含敏感项// 与mount一致, 但是可以包含敏感项(如密码)并不会被记录// 与MountSensitive一致,但禁用systemd// 与MountSensitiveWithoutSystemd一致, 但包含附加选项// 卸载// 返回挂载点列表。原创 2024-02-28 11:53:38 · 1073 阅读 · 0 评论 -
从源码解析Kruise(K8S)原地升级原理
原地升级的原理比较简单, 主要还是利用了pod自身的特性和kubelet的拉起功能。kruise中仅对自己的支持原地升级, 其实也可以扩展到对原生资源的支持(如一开始的测试),但会存在一些问题和限制(如测试二中deployment的镜像版本不会发生改变)。原创 2024-02-21 14:53:08 · 1167 阅读 · 0 评论 -
如何实现一个K8S DevicePlugin?
k8s允许限制容器对资源的使用,比如CPU和内存,并以此作为调度的依据。当其他非官方支持的设备类型需要参与到k8s的工作流程中时,就需要实现一个。Kubernetes提供了一个设备插件框架,你可以用它来将系统硬件资源发布到Kubelet。供应商可以实现设备插件,由你手动部署或作为 DaemonSet 来部署,而不必定制 Kubernetes 本身的代码。目标设备包括 GPU、高性能 NIC、FPGA、 InfiniBand 适配器以及其他类似的、可能需要特定于供应商的初始化和设置的计算资源。原创 2024-02-21 14:50:53 · 1240 阅读 · 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 · 745 阅读 · 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 · 1360 阅读 · 0 评论 -
从源码解析KubeScheduler Framework插件
Framework是的核心组件,它管理了资源分配和调度策略等相关插件。这些插件联合起来就实现了的调度功能。scheduler在node列表中取出一个node,然后依次调用"参与调度的插件"的PreFilterFilter等方法,如果所有插件都返回成功,则调度成功,否则调度失败。PrePreEnqueuePlugin 在进入到调度队列之前运行的插件,他将判断pod是否可以被调度。PreFilterPlugin 过滤前的预处理, 根据pod中已知的信息,准备后续处理需要的数据。原创 2023-12-15 14:41:43 · 977 阅读 · 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 · 897 阅读 · 0 评论 -
GC控制器(Garbagecollector)源码解析
在执行删除资源时, 不同的删除策略会使资源在finalizers中增加不同的字段, 从而触发不同的处理逻辑。想要删除一个资源需要满足几个条件:清空关联关系无ownerfinalizers为空不同的删除策略决定了上述几个条件具体执行的方式, 但最终需要满足的条件是一致。删除是按固定的逻辑执行的,整个流程可以理解为递归的处理方式。原创 2023-12-28 17:05:55 · 996 阅读 · 0 评论 -
k8s client-go源码解析之informer 一
k8 s client-go源码解析之informer。本篇为先导篇, 介绍informer的入口工厂函数。原创 2023-03-07 09:55:39 · 478 阅读 · 0 评论 -
k8s client-go源码解析之informer 二
informer中controller负责数据控制,包括:获取数据、数据处理、数据分发。controllerReflector负责获取数据并写入到队列。数据获取时会携带上一次的版本号,这样就可以获取到版本号之后的数据。取出数据,写入到indexer中,同时将数据分发到processor中。processor中会根据动作类型,OnAddOnUpdateOnDelete,执行对应的事件处理函数。原创 2023-03-08 21:48:01 · 421 阅读 · 0 评论 -
k8s client-go源码解析之informer三
本文内容为学习笔记,内容为个人见解,不保证准确性,但欢迎大家讨论何指教。觉得文章不错请关注跟博客及本篇介绍DeltaFIFO及indexer。原创 2023-03-11 22:11:06 · 434 阅读 · 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 · 124 阅读 · 0 评论 -
解决k8s环境harbor无法上传大镜像的问题
无法上传大镜像多半是ingress nginx 中超时限制和大小限制的原因。ingress nginx 安装的namespace 一般为 ingress-nginx执行kubectl get cm -n ingress-nginxNAME DATA AGEcustom-client-headers 5 101dcustom-headers原创 2021-07-20 18:28:54 · 1835 阅读 · 1 评论 -
golang中对于docker sdk的使用
本文涉及到使用golang docker sdk 进行 pull、exec、push、import等常见操作的教程,对官方文档缺失的示例进行了补充。docker sdk 官方文档:https://docs.docker.com/engine/api/sdk/examples/docker client 初始化docker client 有多种初始化方法, 本文使用从env中读取的方式。client, _ := client.NewClientWithOpts(client.FromEnv, clie原创 2021-04-21 19:50:03 · 2277 阅读 · 0 评论 -
为 k8s nginx ingress controller添加错误页面
创建错误页面kubectl apply -f error-page.yaml -n ingress-nginxapiVersion: v1kind: ConfigMapmetadata: name: error-page namespace: ingress-nginxdata: 404.html: |- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR原创 2020-08-11 11:27:58 · 1413 阅读 · 0 评论 -
kubeadm加入master节点失败,报错 error execution phase check-etcd: etcd cluster is not healthy: context deadli
出现这个报错,多是因为之前的集群信息没有清理干净。解决办法如下:执行命令,获取etcd节点列表。kubectl get pod -n kube-systemetcd节点名称为 “etcd”+hostname这里以 etcd-k8s-master1 为例, 进入etcd容器内部kubectl exec -ti etcd-k8s-master1 -n kube-system sh# k8s中etcd使用的是v3的api, 所以要先声明变量export ETCDCTL_API=3# 执行命令,原创 2020-07-24 14:54:51 · 2373 阅读 · 1 评论 -
生产级kubernetes etcd数据目录更换
使用kubeadm搭建的k8s集群,默认etcd的数据目录为 /var/lib/etcd 。集群运行一段时间后, 发现在系统硬盘上的etcd即占空间,又影响速度。所以将其数据目录迁移到ssd中。注意修改配置文件后,etcd会自动重启,并且导致对应机器的kubectl不可用。所以请一台一台修改,etcd leader 节点放到最后操作,并且确保其他机器的kubectl可用。vim /etc...原创 2020-04-13 10:12:34 · 2061 阅读 · 0 评论