当前位置: 首页 > news >正文

【笔记】Helm-3 主题-17 弃用的Kubernetes API

弃用的Kubernetes API

Kubernetes是一个API驱动系统,且API会随着时间的推移而变化,以反映对问题理解的不断推移。这是系统及API的普遍做法。API推移的一个重要部分是良好的弃用策略和通知用户更改API是如何实现的。换句话说,您的API使用者需要提前知道要发布的API删除或更改了什么。这消除了重大改变对用户造成的恐惧。

Kubernetes弃用策略文档描述了如何处理API版本的变化。弃用策略声明了在弃用生命之后支持的API版本的时间范围。因此关注弃用声明并知道API何时被移除很重要。有助于将影响降到最低。

Kubernetes Deprecation Policy | Kubernetes

这是一个声明示例,针对Kubernetes 1.6弃用的API版本,而且是在版本发布的几个月之前发布。在这之前,这些API版本可能已经宣布不再使用了。这表明一个好的策略可以通知用户API的版本支持。

Deprecated APIs Removed In 1.16: Here’s What You Need To Know | Kubernetes

Chart Maintainers

您应该审核chart,检查Kubernetes中已弃用或已删除的Kubernetes API版本。如果API版本不再被支持,应该更新为支持版本并发布新的chart版本。API版本应该由kind和apiVersion字段定义。比如,Kubernetes 1.16中有个被移除的Deployment对象API版本:

apiVersion: apps/v1beta1

kind: Deployment

apiVersion: apps/v1beta1
kind: Deployment

Helm用户

您应该审视您使用的chart(类似于 chart维护者 ),并识别所有的chart中Kubernetes版本弃用或移除的API版本。针对确定的chart,需要检查(有支持的API版本的)chart最新的版本,或者手动更新。

Helm | 弃用的 Kubernetes API

另外,您还需要审核已经部署的chart(即Helm版本)还有没有弃用或移除的API版本。可以使用helm get manifest获取详细信息。

将Helm更新为支持的API取决于您通过以下方式找到的:

1、如果您只找到弃用的API版本,则:

1)执行helm upgrade升级Kubernetes API版本支持的chart版本

2)在升级中添加一个描述,在当前版本之前不执行Helm版本会滚

2、如果您发现了在Kubernetes版本中被移除的API版本,则:

1)如果您运行的Kubernetes版本中API版本依然可用(比如,您在Kubernetes 1.15 且您发现使用的API会在1.16中移除):

遵循第1步的步骤

2)否则(比如,您运行的Kubernetes版本中某些API版本通过helm get manifest显示不可用):

需要编辑存储在集群中的版本清单,更新API版本到支持的API。查看 更新版本清单的API版本

Helm | 弃用的 Kubernetes API

注意:在所有使用支持的API更新Helm版本的场景中,绝不应该将发布版本会滚到API版本支持的之前的版本

建议:最佳实践是将正在使用的弃用版本升级到支持的API版本,在升级Kubernetes集群之前删除这些API版本。

如果您没有按照之前的建议更新版本,当升级的Kubernetes版本中API的版本已经移除,会出现类似下面的错误:

Error: UPGRADE FAILED: current release manifest contains removed kubernetes api(s)
for this kubernetes version and it is therefore unable to build the kubernetes
objects for performing the diff. error from kubernetes: unable to recognize "":
no matches for kind "Deployment" in version "apps/v1beta1"

Helm在这个情况中会失败,因为试图它在当前部署的和您传了更新/支持的API版本的chart之间创建一个diff补丁(包含在这个Kubernetes版本中删除的Kubernetes API)。失败的根本原因是,当Kubernetes删除了一个API版本时,Kubernetes的Go客户端不再解析弃用的对象,所以Helm调用库时会失败。不幸的是,Helm无法从这种情况下恢复,且无法再管理这样的版本。查看 升级发布清单的API版本 获取更多如何从这种情况恢复的细节信息。

Helm | 弃用的 Kubernetes API

Updating API Version of a Release Manifest

清单manifest是Helm发布对象的一个特性,存储在集群中的密钥(默认)或配置映射的数据字段中。数据字段包含了一个base64编码的gzip压缩的对象(对于密钥是一个额外的base 64编码)。在版本的命名空间中每个版本或修订都对应一个密钥或配置映射。

可以使用Helm mapkubeapis 插件对支持API执行版本升级。查看readme获取更多信息。

https://github.com/helm/helm-mapkubeapis

或者,可以按照这些步骤手动执行发布清单的API版本升级。根据您的配置,应该遵循密钥或配置映射的后台步骤。

1、获取最近部署的版本密钥或配置映射:

1)Secrets后台:kubectl get secret -l owner=helm,status=deployed,name=<release_name> --namespace <release_namespace> | awk '{print $1}' | grep -v NAME

2)ConfigMap后台:kubectl get configmap -l owner=helm,status=deployed,name=<release_name> --namespace <release_namespace> awk '{print $1}' | grep -v NAME

2、获取最新部署版本细节:

1)Secrets后台:kubectl get secret <release_secret_name> -n <release_namespace> -o yaml > release.yaml

2)ConfigMap后台:kubectl get configmap <release_configmap_name> -n <release_namespace> -o yaml > release.yaml

3、备份版本以便出错时恢复:

1)cp release.yaml release.bak

2)在紧急情况下恢复:kubectl apply -f release.bak -n <release_namespace>

4、解码发布版本对象:
1)Secrets后台:cat release.yaml | grep -oP '(?<=release:).*' | base64 -d | base64 -d | gzip -d > release.data.decoded

cat release.yaml | grep -oP '(?<=release: ).*' | base64 -d | base64 -d | gzip -d > release.data.decoded

2)ConfigMap后台:cat release.yaml | grep -oP '(?<=release:).*' | base64 -d | gzip -d > release.data.decoded

cat release.yaml | grep -oP '(?<=release: ).*' | base64 -d | gzip -d > release.data.decoded

5、修改清单的API版本。可以使用任意工具(如编辑器)修改。在您解码的发布对象的manifest字段。

(release.data.decoded)

6、编码发布对象:

1)Secrets后台:cat release.data.decoded | gzip | base64 | base64

2)ConfigMap后台:cat release.data.decoded | gzip | base64

7、用新编码的发布对象替换部署的发布文件(release.yaml)中data.release的值

8、将文件部署到命名空间:kubectl apply -f release.yaml -n <release_namespace>

9、用支持Kubernetes API版本的chart执行helm upgrade

10、在升级中添加一个描述,不要执行回滚到当前版本之前的版本

————————————

仅用于本人学习

来源:Helm | Docs 

相关文章:

【笔记】Helm-3 主题-17 弃用的Kubernetes API

弃用的Kubernetes API Kubernetes是一个API驱动系统&#xff0c;且API会随着时间的推移而变化&#xff0c;以反映对问题理解的不断推移。这是系统及API的普遍做法。API推移的一个重要部分是良好的弃用策略和通知用户更改API是如何实现的。换句话说&#xff0c;您的API使用者需要…...

麒麟系统—— openKylin 安装 java

麒麟系统—— openKylin 安装 java JDK 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。2. 了解 java JDK 的版本信息&#xff0c;以便下载合适的安装包。 二、安装 java JDK3. 将下载好的 java JDK 安装包解压到指定目录。4. 配置环境5. 验证安装结果 本文将分享如何在…...

HTML学习笔记——07:其他嵌入技术

除了将图像、视频和音频嵌入到网页上&#xff0c;还能让你在网页中嵌入各种内容类型的元素&#xff1a;<iframe>, <embed> 和 <object> 元素。 <iframe>用于嵌入其他网页&#xff0c;另外两个元素则允许你嵌入 PDF&#xff0c;SVG&#xff0c;甚至 Fl…...

【UE】在控件蓝图中通过时间轴控制材质参数变化

效果 步骤 1. 新建一个控件蓝图和一个材质 2. 打开材质&#xff0c;设置材质域为用户界面&#xff0c;混合模式设置为“半透明” 在材质图表中添加两个参数来控制材质的颜色和不透明度 3. 对材质创建材质实例 4. 打开控件蓝图&#xff0c;在画布面板中添加一个图像控件 将刚…...

linux C语言socket函数send

在Linux中&#xff0c;使用C语言进行网络编程时&#xff0c;send函数是用于发送数据到已连接的套接字的重要函数之一。它通常用于TCP连接&#xff0c;但也可以用于UDP&#xff08;尽管对于UDP&#xff0c;通常更推荐使用sendto&#xff0c;因为它允许你指定目标地址和端口&…...

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…...

上海计算机学会12月月赛 丙组题解

上海计算机学会 12 月月赛 丙组题解涉及知识点&#xff1a;数学、字符串、模拟、裴蜀定理、宽度优先搜索、动态规划 比赛链接&#xff1a;https://iai.sh.cn/contest/58 第一题&#xff1a;T1数砖数 标签&#xff1a;数学题意&#xff1a;给定一种 2 2 2x 2 2 2的瓷砖&#…...

nextjs中beforePopState使用

在某些情况下&#xff0c;希望监听popstate并在路由器对其进行操作之前执行某些操作。可以使用beforePopState。 在Next.js中&#xff0c;beforePopState是一个可选的生命周期函数&#xff0c;用于在浏览器的历史记录发生更改之前执行一些操作。具体来说&#xff0c;beforePopS…...

【并发编程】活锁

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 活锁 定义&#xff1a;活锁出现在两个线程互相改变对象的结束条件&#xff0c;最后谁也无法结束 代码示例 public class TestLiveLock {stati…...

CSMM和CMMI之间有什么区别?

CSMM&#xff08;软件能力成熟度评估&#xff09;和CMMI&#xff08;能力成熟度模型集成&#xff09;都是软件行业中用于评估和提高企业软件开发过程成熟度的模型。它们之间的主要区别在于起源、定位、适应范围和具体内容。 1. 起源与定位&#xff1a; - CMMI是由美国卡耐基…...

企业面临的典型网络安全风险及其防范策略

网络安全威胁是一种技术风险&#xff0c;会削弱企业网络的防御能力&#xff0c;危及专有数据、关键应用程序和整个IT基础设施。由于企业面临着广泛的威胁&#xff0c;因此通过监控和缓解最关键的威胁和漏洞。网络安全问题有七大类&#xff0c;包括多种威胁&#xff0c;以及团队…...

JavaScript进阶:WebAPIs重点知识整理1

目录 1 DOM修改元素内容 2 DOM修改元素常见属性 3 修改元素样式属性 3.1 通过style修改元素样式 3.2 通过类名className修改元素样式 3.3 通过classList修改元素样式 4 操作表单元素属性 5 自定义属性 6 定时器 7 事件监听 7.1 点击事件 click 7.2 鼠mouseenter和移…...

【Nginx】使用自生成证书配置nginx代理https

使用Nginx代理HTTPS请求并使用自签名证书&#xff0c;可以按照以下步骤进行配置&#xff1a; 生成自签名证书&#xff1a; 打开终端或命令提示符&#xff0c;并导航到Nginx配置文件所在的目录。运行以下命令生成自签名证书和私钥&#xff1a; openssl req -x509 -nodes -days 3…...

【Linux】文件周边001之系统文件IO

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.C语言文件IO 1.1…...

防火墙接口配置实验

1、搭建拓扑 2、给云端添加网络&#xff0c;来实现真机与虚拟机的连接 3、 给防火墙g0/0/0口配置IP&#xff0c;由于我云端绑定的是192.168.100.10&#xff0c;所以这里IP配置为192.168.100.1/24,使用命令开启防火墙远程连接的服务&#xff0c;之后便可通过web远程登陆防火墙 …...

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…...

SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1. 分页获取预约数据代码2.保存预约信息代码3.修改订单状态代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的充电桩管理系统。首先&…...

【数据结构】二叉树算法讲解(定义+算法原理+源码)

博主介绍&#xff1a;✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦&#xff01; &#x1f345;附上相关C语言版源码讲解&#x1f345; &#x1f44…...

Vue3基础:挂载事例方法.mount()是什么?根组件模板又是什么?

.mount() <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Vue 3 演示</title> </head>…...

Unity 面试篇|(七)Unity渲染与Shader篇 【全面总结 | 持续更新】

目录 1.问一个Terrain&#xff0c;分别贴3张&#xff0c;4张&#xff0c;5张地表贴图&#xff0c;渲染速度有什么区别&#xff1f;为什么&#xff1f;2.什么是LightMap&#xff1f;3.MipMap是什么&#xff0c;作用&#xff1f;4.请问alpha test在何时使用&#xff1f;能达到什么…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...