当前位置: 首页 > 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;能达到什么…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...