Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异

Helm Charts[1] 如今已是一种非常流行的软件打包方式,在其应用市场中你可以找到接近一万款适用于云原生环境的软件。然后在如今的混合云多集群环境中,业务越来越依赖部署到不同的集群、不同的环境、同时指定不同的配置。再这样的环境下,单纯依赖 Helm 工具可能无法做到灵活的部署和交付。

在本文中,我们将介绍如何通过 KubeVela[2] 解决多集群环境下 Helm Chart 的部署问题。如果你手里没有多集群也不要紧,我们将介绍一种仅依赖于 Docker 或者 Linux 系统的轻量级部署方式,可以让你轻松的体验多集群功能。当然,KubeVela 也完全具备单集群的 Helm Chart 交付[3]能力。

前提条件

  • 安装 Docker v20.10.5+ (runc >= v1.0.0-rc93) 或者你的操作系统是 Linux。
  • VelaD[4],一个轻量级的部署 KubeVela 和 Kubernetes 的工具。

准备集群

本节是做 KubeVela 以及多集群环境的准备,我们将基于 Docker 或者 Linux 环境从头开始。如果你已经具备了 KubeVela 的环境并且完成了集群管理[5] ,则可以跳过本节。

安装 KubeVela 控制平面

velad install

将新创建的集群导入到环境变量

export KUBECONFIG=$(velad kubeconfig --name default --host)

到这里,恭喜你!我们已经完成了 KubeVela 控制平面的安装。你可以通过下面这个方式加入你的 Kubernetes 集群:

vela cluster join <path-to-kubeconfig-of-cluster> --name foo

如果你没有现成的 Kubernetes 集群,VelaD 也可以很方便的为你创建一个:

用 velad 创建一个名为 foo 的集群,并加入到控制平面

velad install --name foo --cluster-only
vela cluster join $(velad kubeconfig --name foo --internal) --name foo

作为一个充分可扩展的控制平面,KubeVela 的大多数能力都是作为插件提供的。接下来的几步我们介绍安装 Helm 多集群部署的必要插件。

启用 velaux 插件,获得 UI 控制台

vela addon enable velaux

启用 fluxcd 插件获得 helm chart 交付能力

vela addon enable fluxcd

如果你在加入新集群之前已启用过 fluxcd 插件,则应该通过以下方式来为新加入的集群启用(部署)插件:

vela addon enable fluxcd --clusters foo

至此,我们完成了所有的准备工作,可以查看加入的集群了:

$ vela cluster ls
CLUSTER ALIAS   TYPE            ENDPOINT                ACCEPTED    LABELS
local           Internal        -                       true
foo             X509Certificate https://172.20.0.6:6443 true

local 是 KubeVela 控制平面的集群,foo 则是我们刚刚添加的集群。

多集群部署

我们可以使用 topology 策略来指定 Helm Chart 交付的环境,指令如下:

cat <<EOF | vela up -f -
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: helm-hello
spec:components:- name: hellotype: helmproperties:repoType: "helm"url: "https://jhidalgo3.github.io/helm-charts/"chart: "hello-kubernetes-chart"version: "3.0.0"policies:- name: foo-cluster-onlytype: topologyproperties:clusters: ["foo"]
EOF

clusters 字段的 topology 策略是一个切片(slice),此处可以指定多个集群的名称。你还可以使用标签选择器或指定命名空间,详情见参考文档[6] 。

部署后,你可以通过以下方式检查已部署的应用程序:

vela status helm-hello

部署成功的预期输出应该如下:

About:Name:         helm-helloNamespace:    defaultCreated at:   2022-06-09 19:14:57 +0800 CSTStatus:       runningWorkflow:mode: DAGfinished: trueSuspend: falseTerminated: falseSteps- id:vtahj5zrz4name:deploy-foo-cluster-onlytype:deployphase:succeededmessage:Services:- Name: helloCluster: foo  Namespace: defaultType: helmHealthy Fetch repository successfully, Create helm release successfullyNo trait applied

你可以通过以下方式检查已部署的资源:

$ vela status helm-hello --tree
CLUSTER       NAMESPACE     RESOURCE             STATUS
foo       ─── default   ─┬─ HelmRelease/hello    updated└─ HelmRepository/hello updated

你也可以通过 VelaUX 检查已部署的资源。

使用 UI 控制台查看部署状态

通过使用 velaux UI 控制台,则可以很方便的查看多集群信息,并获得统一的体验。你可以参考文档[7]了解 VelaUX 的访问和使用细节。


通过 UI 界面,我们可以:

  • 检查来自不同集群的实例状态和事件:

  • 检查来自不同集群的实例日志:

  • 检查资源拓扑关系和状态:

使用 Override 配置进行部署

在某些情况下,我们会为不同集群的 Helm Chart 设置不同的 Value ,这样我们可以使用 Override 策略[8]

下面是一个复杂的示例,我们将把一个 Helm Chart 部署到两个集群中,并为每个集群指定不同的 Value 。让我们部署它:

cat <<EOF | vela up -f -
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: helm-hello
spec:components:- name: hellotype: helmproperties:repoType: "helm"url: "https://jhidalgo3.github.io/helm-charts/"chart: "hello-kubernetes-chart"version: "3.0.0"policies:- name: topology-localtype: topologyproperties:clusters: ["local"]- name: topology-footype: topologyproperties:clusters: ["foo"]- name: override-localtype: overrideproperties:components:- name: helloproperties:values:configs:MESSAGE: Welcome to Control Plane Cluster!- name: override-footype: overrideproperties:components:- name: helloproperties:values:configs:MESSAGE: Welcome to Your New Foo Cluster!workflow:steps:- name: deploy2localtype: deployproperties:policies: ["topology-local", "override-local"]- name: manual-approvaltype: suspend- name: deploy2footype: deployproperties:policies: ["topology-foo", "override-foo"]
EOF

注意:如果你觉得策略和工作流程有点复杂,你可以将它们作为一个外部对象并仅引用该对象,用法和容器交付[9]是一样的。

部署过程分为三个步骤:

(1)部署到本地集群;

(2)等待人工审批;

(3)部署到 foo 集群。

你会发现它在第一步之后就被暂停了,就像下面这样:

$ vela status helm-hello
About:Name:         helm-helloNamespace:    defaultCreated at:   2022-06-09 19:38:13 +0800 CSTStatus:       workflowSuspendingWorkflow:mode: StepByStepfinished: falseSuspend: trueTerminated: falseSteps- id:ww4cydlveename:deploy2localtype:deployphase:succeededmessage:- id:xj6hu97e1ename:manual-approvaltype:suspendphase:succeededmessage:Services:- Name: helloCluster: local  Namespace: defaultType: helmHealthy Fetch repository successfully, Create helm release successfullyNo trait applied

你可以查看并使用 Value 为 “Welcome to Control Plane Cluster!” 的部署在控制平面的 Helm Chart 。

vela port-forward helm-hello

浏览器会自动提示如下页面:

发现部署成功,让我们继续。

vela workflow resume helm-hello

然后它会部署到 foo 集群,你可以查看这些资源的详细信息。

$ vela status helm-hello --tree --detail
CLUSTER       NAMESPACE     RESOURCE             STATUS    APPLY_TIME          DETAIL
foo       ─── default   ─┬─ HelmRelease/hello    updated   2022-06-09 19:38:13 Ready: True  Status: Release reconciliation succeeded  Age: 64s└─ HelmRepository/hello updated   2022-06-09 19:38:13 URL: https://jhidalgo3.github.io/helm-charts/  Age: 64s  Ready: TrueStatus: stored artifact for revision 'ab876069f02d779cb4b63587af1266464818ba3790c0ccd50337e3cdead44803'
local     ─── default   ─┬─ HelmRelease/hello    updated   2022-06-09 19:38:13 Ready: True  Status: Release reconciliation succeeded  Age: 7m34s└─ HelmRepository/hello updated   2022-06-09 19:38:13 URL: https://jhidalgo3.github.io/helm-charts/  Age: 7m34s  Ready: True

Status: stored 再次使用端口转发:

vela port-forward helm-hello

然后它会弹出一些选项:

? You have 2 deployed resources in your app. Please choose one:  [Use arrows to move, type to filter]
> Cluster: foo | Namespace: default | Kind: HelmRelease | Name: helloCluster: local | Namespace: default | Kind: HelmRelease | Name: hello

选择带有 foo 集群的选项,然后你会看到结果已经被新消息覆盖。

$ curl http://127.0.0.1:8080/
...snip...<div id="message">Welcome to Your New Foo Cluster!
</div>
...snip...

为不同环境指定不同的 Value 文件

你可以为不同环境选择 Helm Chart 中现有的不同 Value 文件。比如:

请确保你的本地集群有两个命名空间 “test” 和 “prod”,它们代表我们示例中的两个环境。

我们以 Chart hello-kubernetes-chart 为例。这个 Chart 有两个 Value 文件。你可以拉取此 Chart 并查看其中包含的所有文件:

$ tree ./hello-kubernetes-chart
./hello-kubernetes-chart
├── Chart.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── config-map.yaml
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
├── values-production.yaml
└── values.yaml

我们可以看到此 Chart 中有 values.yaml values-production.yaml 这两个 Value 文件。

cat <<EOF | vela up -f -
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: hello-kubernetes
spec:components:- name: hello-kubernetestype: helmproperties:repoType: "helm"url: "https://wangyikewxgm.github.io/my-charts/"chart: "hello-kubernetes-chart"version: "0.1.0"policies:- name: topology-testtype: topologyproperties:clusters: ["local"]namespace: "test"- name: topology-prodtype: topologyproperties:clusters: ["local"]namespace: "prod"- name: override-prodtype: overrideproperties:components:- name: hello-kubernetesproperties:valuesFiles:- "values-production.yaml"workflow:steps:- name: deploy2testtype: deployproperties:policies: ["topology-test"]- name: deploy2prodtype: deployproperties:policies: ["topology-prod", "override-prod"]  
EOF

访问 Application 的 endpoint :

vela port-forward hello-kubernetes

如果你选择 Cluster: local | Namespace: test | Kind: HelmRelease | Name: hello-kubernetes 你会看到:

选择 Cluster: local | Namespace: prod | Kind: HelmRelease | Name: hello-kubernetes 则会看到:

清理

如果你使用 velad 进行此演示,则可以通过以下方式便捷地进行清理:

  • 清理 foo 集群

velad uninstall -n foo

  • 清理默认集群

velad uninstall

不仅如此

KubeVela 提供的能力远不止如此,通过安装其他插件,你还可以获得包括金丝雀发布[10] 在内的更多能力,为你的 Helm Chart 交付保驾护航。

快使用 KubeVela 交付 Helm Chart ,让现代化的应用交付和管理更简单、轻松、可靠!

相关链接

[1] Helm Charts:

https://artifacthub.io/packages/search?kind=0

[2] KubeVela:

https://kubevela.io/

[3] 单集群的 Helm Charts 交付

https://kubevela.net/zh/docs/tutorials/helm

[4] velad:

https://github.com/kubevela/velad

[5] 集群管理:

https://kubevela.net/zh/docs/platform-engineers/system-operation/managing-clusters

[6] 参考文档:

https://kubevela.net/zh/docs/end-user/policies/references#topology

[7] 文档

https://kubevela.io/docs/install#2-install-velaux

[8] Override 策略

https://kubevela.io/docs/end-user/policies/references#override

[9] 容器交付

https://kubevela.io/docs/case-studies/multi-cluster#use-policies-and-workflow-outside-the-application

[10] 金丝雀发布:

https://kubevela.io/docs/tutorials/helm-rollout

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

跨全端 SDK 技术演进

关于为什么要选择跨平台的实现方式 Write Once&#xff0c; Run AnyWhere. 越来越多的业务需求都有统一的业务诉求&#xff0c;按照传统的方式&#xff0c;在开发、测试、维护上的成本都是乘以N的&#xff0c;体验也很难做到一致性&#xff0c;特别是复杂的业务&#xff0c;实…

SKG 渠道中台借助 SAE + 大禹打造云原生 DevOPS,提效 60%

项目背景 未来穿戴健康科技股份有限公司&#xff08;SKG&#xff09;是一家专注为个人与家庭提供智能可穿戴健康产品的高新技术企业&#xff0c;专业从事 SKG 品牌可穿戴健康产品和便携式健康产品的研发、设计、生产及销售。 随着市场需求的迅速变化&#xff0c;SKG 的 IT 系…

资源预测数字模型搭建思路分享

业务背景 资源预测是项目管理过程中的一个环节&#xff0c;即通过搭建合适的数据模型&#xff0c;对未来的项目人力资源投入情况进行有效预测&#xff0c;可以更加精准的完成项目资源规划并能及时发现问题进行相关调整。 难题和痛点 PM排期时没有有效数据支撑资源使用情况&a…

视频压缩:I帧、P帧、B帧

/************************************************************************************************************************************************************************************** **说明&#xff1a; 1.本文通过整理而来&#xff0c;集多个高手的精华&a…

EasyNLP 中文文图生成模型带你秒变艺术家

导读 宣物莫大于言&#xff0c;存形莫善于画。 --【晋】陆机 多模态数据&#xff08;文本、图像、声音&#xff09;是人类认识、理解和表达世间万物的重要载体。近年来&#xff0c;多模态数据的爆炸性增长促进了内容互联网的繁荣&#xff0c;也带来了大量多模态内容理解和生成…

阿里本地生活全域日志平台 Xlog 的思考与实践

1. 背景 程序员学习每一门语言都是从打印“hello world”开始的。这个启蒙式的探索&#xff0c;在向我们传递着一个信息&#xff1a;“当你踏进了编程的领域&#xff0c;代码和日志将是你最重要的伙伴”。在代码部分&#xff0c;伴随着越来越强大的idea插件、快捷键&#xff0…

关于运维,阿里云、字节、华科的专家如是说

只有今天周密的“运”筹帷幄&#xff0c;才有将来持续的“维”护稳定。不久前&#xff0c;阿里云联合中国计算机行业协会信息存储与安全专业委员会&#xff0c;邀请到了来自阿里云、字节跳动、华中科技大学的多位专家&#xff0c;共同探讨数字经济时代存储系统的运维之道。 一…

行业 SaaS 微服务稳定性保障实战

很多研发人员在日常工作中经常回遇到以下两个问题&#xff1a;竟然不可以运行&#xff0c;为什么&#xff1f;竟然可以运行&#xff0c;为什么&#xff1f; 因此&#xff0c;他们非常期望可观测能够提供解决问题的思路。 引言 2017 年&#xff0c;推特工程师 Cindy 发表了一篇…

阿里云全站加速 DCDN 重磅发布!打造新一代加速引擎

在数字化转型变革逐步深入的当下&#xff0c;安全高效成为企业上云、全球化部署的关键需求。 随着应用场景复杂度不断提升、业务需求差异化发展&#xff0c;为了给企业提供更完善的安全加速服务&#xff0c;阿里云对全站加速DCDN产品进行了全面升级&#xff0c;针对边缘安全防…

阿里云云原生一体化数仓 - 数据安全能力解读

MaxCompute产品简介 MaxCompute是一款多功能、低成本、高性能、高可靠、易于使用的数据仓库和支持全部数据湖能力的大数据平台&#xff0c;支持超大规模、serverless和完善的多租户能力&#xff0c;内建企业级安全能力和管理功能&#xff0c;支持数据保护和安全共享&#xff0…

EMT4J——让 Java 应用升级更轻松

前言 JDK 升级对于 Java 应用来说是不得不面对的事情&#xff0c;一方面 Java 生态系统希望 Java 应用能跟上最新 JDK 版本&#xff1a; Oracle 建议将 JDK 的 LTS 版本的发布周期从 3 年调整为 2 年,对于只使用 LTS 版本的应用来说,可以在更短时间内使用最新的技术&#xff…

多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅

一、Kata 的过去 让我们将时钟拨回 2015 年 5 月&#xff0c;Hyper.sh 和 Intel 开源技术中心的工程师们分别独立发布了runV 和 Clear Containers 的虚拟化容器项目&#xff0c;而这两个项目便是 Kata Containers1 的前身。这两个项目互相有很多交流&#xff0c;在分别独立发展…

从函数计算到 Serverless 架构

前言 随着 Serverless 架构的不断发展&#xff0c;各云厂商和开源社区都已经在布局 Serverless 领域&#xff0c;一方面表现在云厂商推出传统服务/业务的 Serverless 化版本&#xff0c;或者 Serverless 计算平台&#xff0c;另一方面表现在开源社区中 Serverless 相关项目逐渐…

PolarDB B-tree 并发控制优化

InnoDB 索引 InnoDB 引擎使用索引组织表&#xff0c;每个表的数据都放在一个对应的索引中&#xff0c;该索引称为聚集索引&#xff08;clustered index&#xff09;&#xff0c;使用索引组织表的目的是&#xff1a; 动态地组织磁盘文件结构&#xff0c;维护数据记录有序&…

几种常见的 MySQL/PolarDB-MySQL 回收表空间方法对比

背景 为什么需要回收表空间&#xff1f;任何一个存储或您购买的实例规格都有容量限制&#xff0c;并且根据存储介质不同&#xff0c;保存方式不同&#xff0c;相应地成本也会不同。在线数据库的存储成本是比较高的&#xff0c;所以架构师和DBA在系统设计之初就要考虑满足未来几…

Lindorm-Operator云原生实践

背景介绍&#xff1a; 随着 Kubernetes 使用的越来越广泛&#xff0c;k8s管理的native的对象资源有时并不能满足用户的需求&#xff0c;为了提高可扩展性&#xff0c;自 v1.7 以来&#xff0c;Kubernetes 引入了 CRD 机制&#xff08;CustomResourceDefinition&#xff09;&am…

客户端单元测试实践 — C++篇

背景 我们团队在手淘中主要负责BehaviX模块&#xff0c;代码主要是一些逻辑功能&#xff0c;很少涉及到UI&#xff0c;为了减少双端不一致问题、提高性能&#xff0c;我们采用了将核心代码C化的策略。 由于团队项目偏底层&#xff0c;测试同学难以完全覆盖&#xff0c;回归成…

基于 RTS 超低延时直播优化强互动场景体验

RTS 在阿里云视频直播的基础上进行底层技术优化&#xff0c;通过集成阿里云播放器 SDK&#xff0c;支持在千万级并发场景下节点间毫秒级延时直播的能力&#xff0c;弥补了传统直播存在 3~6 秒延时的问题&#xff0c;确保了超低延时、低卡顿、秒开流畅的直播观看体验。本文介绍了…

一文详解用 eBPF 观测 HTTP

前言 随着eBPF推出&#xff0c;由于具有高性能、高扩展、安全性等优势&#xff0c;目前已经在网络、安全、可观察等领域广泛应用&#xff0c;同时也诞生了许多优秀的开源项目&#xff0c;如Cilium、Pixie等&#xff0c;而iLogtail 作为阿里内外千万实例可观测数据的采集器&…

面向云时代的龙蜥操作系统,是 CentOS 替代的最佳选择

2022 开放原子全球开源峰会 OpenAnolis 分论坛上&#xff0c;阿里云智能基础软件产品经理张鹏程做了《面向云时代的龙蜥操作系统&#xff0c;应对 CentOS 停服的最佳选择》的主题分享&#xff0c;介绍了操作系统产业迎来新发展格局&#xff0c;龙蜥致力于成为 CentOS 迁移的最佳…