小知识:如何在 Helm Chart 中兼容不同的 Kubernetes 版本?

%小知识:如何在 Helm Chart 中兼容不同的 Kubernetes 版本?-猿站网-插图

随着 Kubernetes 的版本不断迭代发布,很多 Helm Chart 包压根跟不上更新的进度,导致在使用较新版本的 Kubernetes 的时候很多 Helm Chart 包不兼容,所以我们在开发 Helm Chart 包的时候有必要考虑到对不同版本的 Kubernetes 进行兼容。

%小知识:如何在 Helm Chart 中兼容不同的 Kubernetes 版本?-1猿站网-插图

要实现对不同版本的兼容核心就是利用 Helm Chart 模板提供的内置对象 Capabilities,该对象提供了关于 Kubernetes 集群支持功能的信息,包括如下特性:

Capabilities.APIVersions 获取集群版本集合

Capabilities.APIVersions.Has $version 判断集群中的某个版本 (e.g., batch/v1) 或是资源 (e.g., apps/v1/Deployment) 是否可用

Capabilities.KubeVersion 和 Capabilities.KubeVersion.Version 可以获取 Kubernetes 版本号

Capabilities.KubeVersion.Major 获取 Kubernetes 的主版本

Capabilities.KubeVersion.Minor 获取 Kubernetes 的次版本

Capabilities.HelmVersion 包含 Helm 版本详细信息的对象,和 helm version 的输出一致

Capabilities.HelmVersion.Version 是当前 Helm 版本的语义格式

Capabilities.HelmVersion.GitCommit Helm 的 git sha1 值

Capabilities.HelmVersion.GitTreeState 是 Helm git 树的状态

Capabilities.HelmVersion.GoVersion 使用的 Go 编译器版本

利用上面的几个对象我们可以判断资源对象需要使用的 API 版本或者属性,下面我们以 Ingress 资源对象为例进行说明。

Kubernetes 在 1.19 版本为 Ingress 资源引入了一个新的 API:networking.k8s.io/v1,这与之前的 networking.k8s.io/v1beta1 beta 版本使用方式基本一致,但是和前面的 extensions/v1beta1 这个版本在使用上有很大的不同,资源对象的属性上有一定的区别,所以要兼容不同的版本,我们就需要对模板中的 Ingress 对象做兼容处理。

新版本的资源对象格式如下所示:

apiVersion:networking.k8s.io/v1

kind:Ingress

metadata:

name:minimal-ingress

annotations:

nginx.ingress.kubernetes.io/rewrite-target:/

spec:

rules:

-http:

paths:

-path:/testpath

pathType:Prefix

backend:

service:

name:test

port:

number:80

而旧版本的资源对象格式如下:

apiVersion:extensions/v1beta1

kind:Ingress

metadata:

name:minimal-ingress

annotations:

nginx.ingress.kubernetes.io/rewrite-target:/

spec:

rules:

-http:

paths:

-path:/testpath

backend:

serviceName:test

servicePort:80

具体使用哪种格式的资源对象需要依赖我们的集群版本,首先我们在 Chart 包的 _helpers.tpl 文件中添加几个用于判断集群版本或 API 的命名模板:

{{/*AllowKubeVersiontobeoverridden.*/}}

{{-define“ydzs.kubeVersion”-}}

{{-default.Capabilities.KubeVersion.Version.Values.kubeVersionOverride-}}

{{-end

{{/*GetIngressAPIVersion*/}}

{{-define“ydzs.ingress.apiVersion”-}}

{{-ifand(.Capabilities.APIVersions.Has“networking.k8s.io/v1”)(semverCompare

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:自动化服务器配置管理工具Chef入门介绍

2023-3-15 17:28:20

建站知识

小知识:docker compose 一键部署分布式配置中心Apollo的过程详解

2023-3-15 20:40:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索