Develop
文章平均质量分 87
Hermokrates
当你觉得学习难,学不进去的时候,想想你身后『强大的祖国』
展开
-
巧用Prometheus来扩展kubernetes调度器
scheduler允许进行自定义,但是对于只需要引用对应的,并且实现自己的plugins的逻辑即可。err!= nil {而允许注入 out of tree plugins,也就是注入外部的自定义 plugins,这种情况下就无需通过修改源码方式去定义一个调度器,而仅仅通过自行实现即可完成一个自定义调度器。// WithPlugin 用于注入out of tree plugins 因此scheduler代码中没有其引用。其中是提供了Kubernetes API与scheduler。.........原创 2022-08-08 02:02:34 · 663 阅读 · 2 评论 -
彻底搞懂kubernetes调度框架与插件
v1kindname参数的描述maxSkewRequired,Pod分布不均的程度,并且数字必须大于零当,则定义目标拓扑中匹配pod的数量与全局最小值(拓扑域中的标签选择器匹配的pod的最小数量)maxSkew之间的最大允许差异。例如有3个Zone,分别具有2、4和5个匹配的pod,则全局最小值为2当,scheduler会为减少倾斜的拓扑提供更高的优先级。minDomainsoptional,符合条件的域的最小数量。如果不指定该选项。与。.........原创 2022-07-27 23:01:52 · 887 阅读 · 0 评论 -
深度解析kube-scheduler调度上下文
在构建一个scheduler时经历如下步骤准备cache,informer,queue,错误处理函数等添加事件函数,会监听资源(如Pod),当有变动则触发对应事件函数,这是入站activeQ构建完成后会run,run时会run一个,这个是作为不可调度队列BackoffQ不可调度队列会根据注册时定期消费队列中Pod将其添加到activeQ中启动一个的loop,这个是调度上下文中所有的扩展点的执行,也是activeQ的消费端获取pod执行各个扩展点,如果出错则Error函数。......原创 2022-07-21 23:45:39 · 548 阅读 · 0 评论 -
kubernetes调度概念与工作流程
但是,Pod中的每个容器对资源的要求都不同,每个Pod也有不同的要求。注kubernetes官方没有找到预选和优选的概念,而Predicates和filtering是处于预选阶段的动词,而Priorities和scoring是优选阶段的动词。因为绑定事件时异步发生的,该插件是为了避免Pod在绑定到节点前时,调度到新的Pod,使节点使用资源超过可用资源情况。通过上面步骤过滤过得列表则是适合托管的Pod,这个结果通常来说是一个列表,如何选择最优Node进行调度,则是接下来打分的步骤步骤。...原创 2022-07-18 17:49:02 · 464 阅读 · 0 评论 -
深入解析Kubernetes admission webhooks
admission controllers的特点:下图,显示了用户操作资源的流程,可以看出 admission controllers 作用是在通过身份验证资源持久化之前起到拦截作用。在准入控制器的加入会使kubernetes增加了更高级的安全功能。这里找到一个大佬博客画的图,通过两张图可以很清晰的了解到admission webhook流程,与官方给出的不一样的地方在于,这里清楚地定位了kubernetes admission webhook 处于准入控制中,RBAC之后,push 之前。根据官方提供的说原创 2022-07-11 21:23:30 · 870 阅读 · 0 评论 -
利用kubernetes中的leader选举机制来完成自己的HA应用
前一章中,对kubernetes的选举原理进行了深度剖析,下面就通过一个example来实现一个,利用kubernetes提供的选举机制完成的高可用应用。对于此章需要提前对一些概念有所了解后才可以继续看下去如果仅仅是使用Kubernetes中的锁,实现的代码也只有几行而已。生成镜像这里已经制作好了镜像并上传到dockerhub()上了,如果只要学习运行原理,则忽略此步骤准备资源清单默认情况下,Kubernetes运行的pod在请求Kubernetes集群内资源时,默认的账户是没有权限的,默认服务帐原创 2022-06-29 00:48:21 · 216 阅读 · 0 评论 -
深入解析kubernetes中的选举机制
在 Kubernetes的 , , 以及使用 的底层实现 都支持高可用系统中的leader选举,本文将以理解 (底层的实现是 ) 中的leader选举以在kubernetes controller中是如何实现的。在运行 时,是有一些参数提供给cm进行leader选举使用的,可以参考官方文档提供的 参数 来了解相关参数。本身以为这些组件的选举动作时通过etcd进行的,但是后面对 学习时,发现并没有配置其相关的etcd相关参数,这就引起了对选举机制的好奇。怀着这种好奇心搜索了下有关于 kubern原创 2022-06-28 18:04:49 · 893 阅读 · 0 评论 -
深入解析kubernetes controller-runtime
controller-runtime 是 Kubernetes 社区提供可供快速搭建一套 实现了controller 功能的工具,无需自行实现Controller的功能了;在 与 也是使用 。本文将对 的工作原理以及在不同场景下的使用方式进行简要的总结和介绍。 主要组成是需要用户创建的 和 以及 自己启动的 和 。由图可知,Controller会向 Informer 注册一些列eventHandler;然后Cache启动Informer(informer属于cache包中),与ApiS原创 2022-06-27 22:17:18 · 2253 阅读 · 0 评论 -
使用Aggregated APIServer扩展你的kubernetes API
Kubernetes apiserver aggregation AA 是Kubernetes提供的一种扩展API的方法,目前并没有GA众所周知,kubernetes扩展API的方法大概为三种:CRD、AA、手动扩展源码。根据CNCF分享中Min Kim说的AA更关注于实践,而用户无需了解底层的原理,这里使用过 , 的用户是很能体会到这点。官方也给出了CRD与AA的区别要想很好的使用AA,就需要对kubernetes与 AA 之间认证机制进行有一定的了解,这里涉及到一些概念在下面的说明中,所有出现的API原创 2022-06-22 23:20:32 · 665 阅读 · 0 评论 -
kubernetes code-generator使用
Kubernetes中提供了多种自定义控制器的方式:Controller 作为CRD的核心,这里将解释如何使用 来创建自定义的控制器,作为文章的案例,将完成一个 Firewalld Port 规则的控制器作为描述,通过 Kubernetes 规则来生成对应节点上的 iptables规则。code-generator需要预先下载 。因为这个工具不是必需要求的。编写代码模板要想使用 生成控制器,必须准备三个文件 , , 。在使用 时,就需要对 的tag进行了解。 的tag是根据几个固定格原创 2022-06-20 21:39:13 · 405 阅读 · 0 评论 -
编写自己的kubernetes controller
根据Kuberneter文档对Controller的描述,Controller在kubernetes中是负责协调的组件,根据设计模式可知,controller会不断的你的对象(如Pod)从当前状态与期望状态同步的一个过程。当然Controller会监听你的实际状态与期望状态。通过日志可以看出,Pod create后的步骤大概为4步:大致上与 看到的内容页相似...原创 2022-06-19 17:43:33 · 216 阅读 · 0 评论 -
使用CRD扩展Kubernetes API
在 Kubernetes API 中,resources 是存储 API 对象集合的endpoint。例如,内置 Pod resource 包含 Pod 对象的集合。当我们想扩展API,原生的Kubernetes就不能满足我们的需求了,这时 CRD () 就出现了。在 Kubernetes 中创建了 CRD 后,就可以像使用任何其他原生 Kubernetes 对象一样使用它,从而利用 Kubernetes 的所有功能、如安全性、API 服务、RBAC 等。Kubernetes 1.7 之后增加了对 CRD原创 2022-06-19 17:41:38 · 316 阅读 · 0 评论 -
浅析Kubernetes架构之workqueue
在kubernetes中,使用go的channel无法满足kubernetes的应用场景,如延迟、限速等;在kubernetes中存在三种队列通用队列 ,延迟队列 ,和限速队列 Interface作为所有队列的一个抽象定义Implementation可以看到其中核心属性就是 , , 在研究优先级队列前,需要对 有一定的了解,因为delay queue使用了 做延迟队列 是基于树属性的特殊数据结构;heap是一种完全二叉树类型,具有两种类型:二叉堆的存储规则:那么下列图片中,那个是堆步骤一:将原创 2022-06-17 17:42:02 · 194 阅读 · 0 评论 -
浅析kubernetes中client-go Informer
之前了解了client-go中的架构设计,也就是 tools/cache 下面的一些概念,那么下面将对informer进行分析Controller在client-go informer架构中存在一个 controller ,这个不是 Kubernetes 中的Controller组件;而是在 tools/cache 中的一个概念,controller 位于 informer 之下,Reflector 之上。codeConfig从严格意义上来讲,controller 是作为一个 sharedInfo原创 2022-05-25 22:29:33 · 255 阅读 · 0 评论 -
浅析kubernetes client-go structure
PrepareIntroduction从2016年8月起,Kubernetes官方提取了与Kubernetes相关的核心源代码,形成了一个独立的项目,即client-go,作为官方提供的go客户端。Kubernetes的部分代码也是基于这个项目的。client-go 是kubernetes中广义的客户端基础库,在Kubernetes各个组件中或多或少都有使用其功能。。也就是说,client-go可以在kubernetes集群中添加、删除和查询资源对象(包括deployment、service、pod、原创 2022-05-22 22:40:41 · 807 阅读 · 0 评论 -
Kubernetes API 基础
APIServer在kubernetes架构概念层面上,Kubernetes由一些具有不同角色的服务节点组成。而master的控制平面由 Apiserver Controller-manager 和 Scheduler 组成。Apiserver 从概念上理解可以分为 api 和 object 的集合,api 可以理解为,处理读写请求来修改相应 object 的组件;而 object 可以表示为 kubernetes 对象,如 Pod, Deployment 等 。基于声明式的API在命令式 API原创 2022-05-16 17:25:26 · 1534 阅读 · 0 评论 -
kubernetes源码编译
本地构建选择要构建的版本git checkout tags/v1.19.5将依赖包复制到对应路径下cp staging/src/k8s.io vendor/调整makefile在windows上编译的克隆下可能文件编码变了,需要手动修改下文件编码。比如说出现 \r not found 类似关键词时这里转换编码使用了 dos2unix,需要提前安装下apt install dos2unix转换原因是因为对于bash 脚本执行识别不了windows的换行find . -name '*.原创 2022-05-15 22:21:50 · 926 阅读 · 0 评论 -
kubernetes中的API Schema
什么是schemaschema一词起源于希腊语中的form或figure,但具体应该如何定义schema取决于应用环境的上下文。schema有不同的类型,其含义与数据科学、教育、营销和SEO以及心理学等领域密切相关。在维基百科中将schema解释为,图式,在心里学中主要描述一种思维或行为类型,用来组织资讯的类别,以及资讯之间的关系。它也可以被描述为先入为主思想的心理结构,表示世界某些观点的框架,或是用于组织和感知新资讯的系统。但在计算机中的schema其实与这个解释很接近了,从很多地方都可以看到原创 2021-11-17 00:31:53 · 594 阅读 · 0 评论 -
kubernetes开发环境配置
下载源码根据kubernetes github 方式可以mkdir -p $GOPATH/src/k8s.iocd $GOPATH/src/k8s.iogit clone https://github.com/kubernetes/kubernetescd kubernetesmake如果有需要可以切换到对应的版本进行学习或者修改,一般kubernetes版本为对应taggit fetch origin [远程tag名]git checkout [远程tag名]git branch原创 2021-11-16 22:28:32 · 769 阅读 · 0 评论 -
kubernetes API设计理念
overviewkubernetes的设计里面大致上分为3部分:API驱动型的特点 (API-driven)控制循环(control loops)与 条件触发 (Level Trigger)API的可延伸性而正因为这些设计特性,才使得kubernetes工作非常稳定。什么是Level Trigger与 Edge trigger看到网上有资料是这么解释两个属于的:条件触发(level-trigger,也被称为水平触发)LT指: 只要满足条件,就触发一个事件(只要有数据没有被获取,就不断原创 2021-12-12 23:22:54 · 582 阅读 · 0 评论 -
kubernetes源码学习之client-go
overviewclient-go 是kubernetes中广义的客户端基础库,在Kubernetes各个组件中或多或少都有使用其功能。Kubernetes API对象 在 Kubernetes 集群中,Kubernetes 对象是我们持久化的实体,就是最终存入 etcd 中的数据,集群中通过这些实体来表示整个集群的状态。API 版本 为了可扩展性,Kubernetes 在不同的 API 路径(比如/api/v1 或者 /apis/batch)下面支持了多个 API 版本,不同的 API 版原创 2021-12-07 23:06:39 · 1314 阅读 · 0 评论