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

2024-01-24 12:04

本文主要是介绍【笔记】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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639624

相关文章

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit