监听Helm release资源

监听Helm release资源

基于helm做部署管理工具时,可能想要管理用户已有环境,这时需要将已有环境中的release信息上报到业务系统中。当用户在环境中部署新的release时,也需要实时监听并上报回来。下面将讲解如何去监听release资源

helm release存储源码分析

查看helm install源码,在helm/pkg/action/install.go中的run方法会执行实际的release安装
在这里插入图片描述
在install.run()方法中首先通过install.createRelease()方法创建release,然后在解析组装完chart模版中资源文件后,通过storage.Storage的Create方法将release信息进行存储,实际使用的是driver.Driver的Create方法进行release信息的存储。driver.Driver有三种存储实现,在helm2中默认使用ConfigMaps;在helm3中默认使用Secrets;也可以使用内存存储即通过map存储
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
无论存储到K8s的ConfigMaps还是Secrets或者内存map中,其资源名称或者map的key的命名规则满足:sh.helm.release.v1.<release的名称>.<release的版本>
在这里插入图片描述

如何监听

监听K8s中的CRD资源一种方式是通过资源的Watch方法监听,类似如下方式

func (c *Client) WaitAndGetCompletedPodPhase(name string, timeout time.Duration) (v1.PodPhase, error) {client, _ := c.Factory.KubernetesClientSet()to := int64(timeout)watcher, err := client.CoreV1().Pods(c.namespace()).Watch(metav1.ListOptions{FieldSelector:  fmt.Sprintf("metadata.name=%s", name),TimeoutSeconds: &to,})for event := range watcher.ResultChan() {p, ok := event.Object.(*v1.Pod)if !ok {return v1.PodUnknown, fmt.Errorf("%s not a pod", name)}switch p.Status.Phase {case v1.PodFailed:return v1.PodFailed, nilcase v1.PodSucceeded:return v1.PodSucceeded, nil}}return v1.PodUnknown, err
}
  • 所有K8s的资源都会存储在etcd中,当客户端通过APIServer操作资源时,会将资源存储在etcd中,而etcd在存储信息时会发送事件到APIServer。当APIServer接收到创建pod资源事件后,会将事件发给其他监听pod资源的监听器,这样我们也能监听到pod的变化做出响应的处理

另一中方式是使用operator-sdk,这种方式其实也是借助于K8s中CRD资源的Watch方法,但使用operator-sdk监听资源代码结构会更好,便于统一控制,而且当处理失败后还能重新接到事件继续处理,直到成功。具体使用方式可以参考官网

在这里我们要监听release信息可以通过监听ConfigMaps、Secrets资源,判断其名称是否是以sh.helm.release.v1.开头,如果是则认为是helm release发生变化,通过解析出的release名称和命名空间名称,可以使用helm go客户端获取到release的详细信息,将这些release信息处理后上报到业务系统,release的所有信息包括参数、其下各种资源详细都能获取并上报

但对于使用内存map存储的release资源无法监听处理,因为其是从当前执行的helm客户端中获取,两个helm客户端是不能共享其内存中的map缓存的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边写代码边学习之TF Attention

1. Attention 背景介绍 通常注意力机制可以使得网络资源集中到某几个需要关注的部分上&#xff0c;和有选择性的弱化对网络结果不重要的部分。网络的注意力机制来源于人的视觉注意力&#xff0c;因为人的精力有限&#xff0c;不能注意到所有的细节&#xff0c;而是有选择性的弱…

在Linux操作系统上安装 kafka

Kafka是一个分布式的流处理平台&#xff0c;它可以处理数据管道中的实时数据流。以下是在Linux操作系统上安装Kafka的步骤。 前提条件&#xff1a;您需要在计算机上安装Java运行时环境。 下载Kafka 您可以从官方网站&#xff08;https://kafka.apache.org/downloads&#xf…

算法篇汇总

文章浏览 I https://leetcode.cn/problems/article-views-i/description/?envTypestudy-plan-v2&envId30-days-of-pandas&langpythondata 我的题解 import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:dfviews[views[author_id]views…

前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析

引入Vue自定义得分构成水平柱形图组件&#xff1a;cc-horBarChart 随着技术的发展&#xff0c;传统的开发方式使得系统的复杂度越来越高&#xff0c;一个小小的改动或小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c…

当AI遇到IoT:开启智能生活的无限可能

文章目录 1. AI和IoT的融合1.1 什么是人工智能&#xff08;AI&#xff09;&#xff1f;1.2 什么是物联网&#xff08;IoT&#xff09;&#xff1f;1.3 AI和IoT的融合 2. 智能家居2.1 智能家居安全2.2 智能家居自动化 3. 医疗保健3.1 远程监护3.2 个性化医疗 4. 智能交通4.1 交通…

c高级 day2

写一个1.sh脚本&#xff0c;将以下内容放到脚本中:在家目录下创建目录文件&#xff0c;dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中解压d…

华为云云服务器评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源&#xff0c;本EulerOS的源在这里&#xff1a; cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…

软件架构设计(四) 基于服务的架构(SOA)

前面我们了解到了层次架构中表示层的架构分层,分为了MVC,MVP,MVVM等架构风格,下面我们了解一下SOA架构与微服务架构。 什么是服务? 服务是一种为了满足某项业务需求的操作,规则等的逻辑组合,它包含了一系列有序活动的交互,为实现用户目标提供支持。 SOA的起源 前面…

Oracle表索引查看方法总结(查看oracle表索引)

Oracle表索引查看方法总结 Oracle是当前应用最广泛的关系数据库&#xff0c;也是多数大型企业使用的数据库。Oracle表索引在提高查询效率方面起着至关重要的作用&#xff0c;掌握该方法也是技术人员必备技能之一。本文总结了几种常见的查看Oracle表索引信息的方法&#xff0c;…

Windows Server 系统各版本及授权说明(附下载地址

本文为Windows Server系统各版本差异对比及授权说明。 会对相关目前仍主流使用的相关Windows Server系统版本和相关授权进行对比和功能说明。 WindowsServer2012 R2 Windows Server 2012 R2授权方式是按照物理CPU数量进行授权&#xff0c;比如物理服务器CPU插槽数量2&#xff…

部署Django报错-requires SQLite 3.8.3 or higher

记一次CentOS7部署Django项目时的报错 问题出现 在部署测试环境时&#xff0c;有需要用到一个python的后端服务&#xff0c;要部署到测试环境中去 心想这不是so easy吗&#xff0c;把本地调试时使用的python版本及Django版本在服务器上对应下载好&#xff0c;然后直接执行命…

1065 A+B and C (64bit)

题&#xff1a;点我 题目大意&#xff1a; 这题虽然看着像签到&#xff0c;然鹅签不过去。 因为我最初写的沙雕代码是&#xff1a; #include<iostream> #include<cstdio> using namespace std; int main(void) {int t;scanf("%d", &t);for (int i …

【云计算网络安全】解析DDoS攻击:工作原理、识别和防御策略 | 文末送书

文章目录 一、前言二、什么是 DDoS 攻击&#xff1f;三、DDoS 攻击的工作原理四、如何识别 DDoS 攻击五、常见的 DDoS 攻击有哪几类&#xff1f;5.1 应用程序层攻击5.1.1 攻击目标5.1.2 应用程序层攻击示例5.1.3 HTTP 洪水 5.2 协议攻击5.2.1 攻击目标5.2.2 协议攻击示例5.2.3 …

IDEA中Run/Debug Configurations添加VM options和Program arguments

1. 现象描述 我在我的IDEA当中打开配置模板后&#xff0c;发现没有VM options和Program arguments&#xff0c;也就是虚拟机选项和程序实参这两项&#xff0c;导致我不能配置系统属性参数和命令行参数&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…

最强的AI视频去码图片修复模型:CodeFormer

目录 1 CodeFormer介绍 1.1 CodeFormer解决的问题 1.2 人脸复原的挑战 1.3 方法动机 1.4 模型实现 1.5 实验结果 2 CodeFormer部署与运行 2.1 conda环境安装 2.2 运行环境构建 2.3 模型下载 2.4 运行 2.4.1 人脸复原 ​编辑​编辑 2.4.2 全图片增强 2.4.3 人脸颜色…

LA@二次型标准形@标准化问题介绍和合同对角化@二次型可标准化定理

文章目录 二次型的标准形&#x1f388;标准形的矩阵式标准化问题(合同对角化)二次型标准化分析&#x1f388; 二次型可标准化定理正交相似角度证明配方角度证明case1方法1:case2 方法2case2case3 二次型的标准形&#x1f388; 如果二次型只含有变量的平方项,则称之为二次型的标…

Android逆向学习(二)vscode进行双开与图标修改

Android逆向学习&#xff08;二&#xff09;vscode进行双开与图标修改 写在前面 这其实应该还是吾爱的第一个作业&#xff0c;但是写完上一个博客的时候已经比较晚了&#xff0c;如果继续敲机械键盘吵到室友&#xff0c;我怕我看不到明天的太阳&#xff0c;所以我决定分成两篇…

类ChatGPT大模型LLaMA及其微调模型

1.LLaMA LLaMA的模型架构:RMSNorm/SwiGLU/RoPE/Transfor mer/1-1.4T tokens 1.1对transformer子层的输入归一化 对每个transformer子层的输入使用RMSNorm进行归一化&#xff0c;计算如下&#xff1a; 1.2使用SwiGLU替换ReLU 【Relu激活函数】Relu(x) max(0,x) 。 【GLU激…

lintcode 1410 · 矩阵注水【BFS 中等 vip】

题目链接&#xff0c;描述 https://www.lintcode.com/problem/1410 给一个二维矩阵&#xff0c;每个grid的值代表地势的高度。水流只会沿上下左右流动&#xff0c;且必须从地势高的地方流向地势低的地方。视为矩阵四面环水&#xff0c;现在从(R,C)处注水&#xff0c;问水能否…

Unity ProBuilder(自己创建斜面、拐角)

目录 基础操作 下载 打开面板 新增对象 材质保存 1.斜面实例 2.拐角实例 3.切割实例 4.单独面赋值 基础操作 下载 打开面板 新增对象 选中想创建的块体后&#xff0c;在编辑器见面拉出块体 材质保存 打开材质编辑器后&#xff0c;将材质赋值&#xff0c;之后&am…