![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kubernetes二次开发
文章平均质量分 83
常鱼
这个作者很懒,什么都没留下…
展开
-
【玩转client-go】使用client-go从POD拷贝文件出来
先讲思路,通过client-go RestClient模拟kubectl exec 的手法,结合容器镜像里的tar命令和golang原生tar包,作为管道的输入输出,实现文件的数据流拷贝,以下是具体做法。循环读取,并把归档输出写入新创建的文件,当出现End of File(文件结束符)错误,代表输入已完成,没有可读取的输出。tar cf - index.html这条命令的含义是创建一个tar归档文件,并将名为"index.html"的文件加入到归档中。首先是一段将文件内容输出到标准输出的代码。原创 2023-11-27 15:57:53 · 482 阅读 · 0 评论 -
实现ConfigMap热更新的三种常用方法:使用sidecar、CI脚本和自定义Controller
在config-reloader容器中,我们指定了ConfigMap的watched-dir和volume-dir,并指定了webhook-url为localhost:5000/-/reload,当ConfigMap发生变化时,config-reloader会向该地址发送一个HTTP POST请求,触发应用程序的重新读取。其次,由于Controller需要监听ConfigMap的变化事件,并更新对应的Pod,这可能会增加集群的负载,影响集群的稳定性。首先,需要编写CI脚本,配置复杂,需要一定的编程能力。原创 2023-04-03 17:36:26 · 3047 阅读 · 0 评论 -
【玩转client-go】管理 Kubernetes 中资源删除:Finalizer 和 DeletionTimestamp
Finalizer 和 DeletionTimestamp 是 Kubernetes 中管理资源删除的重要机制。控制器可以使用 Finalizer 和 DeletionTimestamp 安全地管理资源对象的删除,并在必要时执行某些清理操作。在处理资源对象时,务必考虑 Finalizer 和 DeletionTimestamp 的作用,并确保正确使用它们,以避免意外删除资源对象。原创 2023-04-03 14:18:12 · 1042 阅读 · 0 评论 -
【玩转client-go】通过包含多个集群信息的Kubernetes配置文件获取所有集群的ClientSet
总结来说,通过上述代码示例,我们可以学习到如何通过包含多个集群信息的Kubernetes配置文件获取所有集群的rest.Config,以及如何使用rest.Config对象创建Kubernetes客户端对象并获取每个集群中的Namespace列表。这对于管理多个Kubernetes集群的开发人员来说,是非常实用的技能。原创 2023-04-02 20:44:33 · 851 阅读 · 3 评论 -
“invalid character ‘\x1f‘ looking for beginning of value“ 报错解决方法
这个问题来源于我在开启kubectl proxy代理的时候,通过kubectl apply -f xxx.yaml向代理提交一个configMap对象,返回了 "Error while proxying request: invalid character '\x1f' looking for beginning of value" 的报错。原创 2023-03-12 16:01:07 · 1655 阅读 · 0 评论 -
code-generator 使用介绍——CRD客户端生成工具
ops-operator是我的项目名称,extensions是GVK的Group中的抬头,operation是我的CRD的名称,v1则是GVK的Version。然后需要根据CRD的申明字段做一些客制化的修改,这里的代码主要是用于Controller调用client-go过程中对对象的一些反序列化操作,以及对外暴露的注册到Manager 的Scheme的函数方法。此外,查看生成的代码目录,还支持Clientset以外的informer、lister的扩展。要先生成整体的客户端代码,首先需要打下框架。原创 2023-03-07 15:37:27 · 751 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(6)——web终端实现pod shell
上一章通过http chunked 长连接实现了pod的日志读取和展现;本章将通过前端的xterm.js库以及websocket来实现pod终端在浏览器页面上的实现。至此,我们就完成了pod shell的实现。在下一章中,我们将在此基础上进一步实现node shell。其实原理是类似的,基本思路就是通过ssh开启一个会话,并同样以其构造实现io.Reader和io.Writer接口的结构体。原创 2022-11-29 13:01:02 · 1722 阅读 · 2 评论 -
Kubernetes 开发【5】—— scheduling framework 构建自定义调度插件
对于不同插件的基本描述,摘自官方文档PreFilter这些插件用于预处理 Pod 的相关信息,或者检查集群或 Pod 必须满足的某些条件。如果 PreFilter 插件返回错误,则调度周期将终止。Filter这些插件用于过滤出不能运行该 Pod 的节点。对于每个节点, 调度器将按照其配置顺序调用这些过滤插件。如果任何过滤插件将节点标记为不可行, 则不会为该节点调用剩下的过滤插件。节点可以被同时进行评估。PostFilter这些插件在 Filter 阶段后调用,但仅在该 Pod 没有可行的节点时调用。原创 2022-11-18 16:18:06 · 1042 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(5)—— Container日志及持续输出
上章我们实现了deployment等列表显示,并且当有部分资源发生了增删改时,会自动重新渲染加载新列表。这章要实现的是通过go-client将Pod的中的Container(可选择)的日志抓取出来,并且持续输出到控制台。Pod的Log抓取可通过长连接即可简单实现,下章中我们将通过websocket和xterm库取实现Pod的远程终端。原创 2022-10-24 22:51:47 · 1528 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(4)——自动更新资源列表(下)
至此,整一个websocket的前后端调用就完成了。可见的是,这种是比较初级的做法,未来将会看见更优雅的实现。原创 2022-10-15 23:59:50 · 650 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(3)——自动更新资源列表(上)
这里只是做一个思路的展示,因为诸如或者容器日志或者远程 shell 这类复杂的操作,往往通过多个资源的组合(namespace、deployment、pod..)来获取最终操作的对象,我们不可能去多次请求api,一是延迟问题,二是 apiserver 的压力问题(这个影响比较小)。有了本地缓存 map,我们就可以通过加入 deployment 对应类型的 informer 去 watch 资源的变化,并且通过 handler 来对 map 中的内容进行增删改。原创 2022-10-15 16:26:31 · 1059 阅读 · 0 评论 -
Kubernetes 开发【4】—— 基于kubebuilder开发简单的Operator
Kubernetes 为自动化而生。安装 crd 到集群里,这里其实是通过 kubectl 和 kustomize 去 apply 的,所以会安装 CRD 到我本机的~/.kube/config中配置的集群里去。首先到 /api/v1/redis_types.go 文件下对 CRD 的 api 添加字段,也就是我们最后 apply 的 yaml 中包含的字段。crd 是指我们定义了什么样的一种资源,定义它需要什么字段(schema),这些字段的值描述了我们对于这个资源的预期(终态);以上释义来自官方文档;.原创 2022-08-31 17:28:45 · 1552 阅读 · 0 评论 -
Kubernetes 开发【3】——kubectl插件开发
本文仅简单介绍kubectl插件开发模式,不做深入扩展。仅通过开发一个kubectl pods命令,来展示开发kubectl的方法和技巧其本身也是一个kubectl插件,我们可以通过kubectl plugin list查看所有可执行的插件。krew是对插件的一种扩展 ,以kuebctl krew运行,可以通过这个工具来管理和安装公网上发布的插件。...原创 2022-08-16 19:01:01 · 637 阅读 · 0 评论 -
Kubernetes开发【2】—— Informer 的简单应用,构建 Event 事件告警机制并推送到钉/企微机器人
由于 K8S 内置了许多的 Controller 来对各种各样的资源进行 List & Watch,因此也会产生各种不同的事件(Event),其中部分事件是需要我们作为告警来处理的,比如 ReadinessProbe Failed 这种事件,我们需要在其到达失败阈值之前获得通知并做及时处理。其中,因为钉/企微的 Webhook 机器人有固定的消息模版用于展示,我们需要在预先定义好的模版中填充关于事件的一些信息字段,这些字段可以表示成事件对象(结构体)的成员变量名。至此,编码阶段就完成了。..........原创 2022-08-16 14:19:36 · 892 阅读 · 0 评论 -
Kubernetes 开发【1】——webhook 实现 API Server 请求拦截和修改
admission controller是一段代码,它会在请求通过认证和授权之后、对象被持久化之前拦截到达 API 服务器的请求。控制器编译进可执行文件,并且只能由集群管理员配置。使用准入控制器 | Kubernetes我们也可以通过自己编写一段代码二次开发来实现更为高级更为复杂的需求,官方有具体的实例,该实例的用途是即仅允许pod从指定的镜像仓库拉取image,否则apiserver将会拒绝本次请求。............原创 2022-08-04 11:28:34 · 1327 阅读 · 0 评论