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: hello
type: helm
properties:
repoType: "helm"
url: "https://jhidalgo3.github.io/helm-charts/"
chart: "hello-kubernetes-chart"
version: "3.0.0"
policies:
- name: foo-cluster-only
type: topology
properties:
clusters: ["foo"]
EOF
clusters 字段的 topology 战略是一个切片(slice),此处能够指定多个集群的称号。你还能够运用标签挑选器或指定命名空间,概况见参阅文档 [ 6] 。
布置后,你能够经过以下方法检查已布置的运用程序:
vela status helm-hello
布置成功的预期输出应该如下:
About:
Name: helm-hello
Namespace: default
Created at: 2022-06-09 19:14:57 +0800 CST
Status: running
Workflow:
mode: DAG
finished: true
Suspend: false
Terminated: false
Steps
- id:vtahj5zrz4
name:deploy-foo-cluster-only
type:deploy
phase:succeeded
message:
Services:
- Name: hello
Cluster: foo Namespace: default
Type: helm
Healthy Fetch repository successfully, Create helm release successfully
No 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: hello
type: helm
properties:
repoType: "helm"
url: "https://jhidalgo3.github.io/helm-charts/"
chart: "hello-kubernetes-chart"
version: "3.0.0"
policies:
- name: topology-local
type: topology
properties:
clusters: ["local"]
- name: topology-foo
type: topology
properties:
clusters: ["foo"]
- name: override-local
type: override
properties:
components:
- name: hello
properties:
values:
configs:
MESSAGE: Welcome to Control Plane Cluster!
- name: override-foo
type: override
properties:
components:
- name: hello
properties:
values:
configs:
MESSAGE: Welcome to Your New Foo Cluster!
workflow:
steps:
- name: deploy2local
type: deploy
properties:
policies: ["topology-local", "override-local"]
- name: manual-approval
type: suspend
- name: deploy2foo
type: deploy
properties:
policies: ["topology-foo", "override-foo"]
EOF
留意:假如你觉得战略和工作流程有点复杂,你能够将它们作为一个外部目标并仅引证该目标,用法和容器交给 [ 9] 是一样的。
布置进程分为三个步骤:
(1)布置到本地集群;
(2)等待人工批阅;
(3)布置到 foo 集群。
你会发现它在第一步之后就被暂停了,就像下面这样:
$ vela status helm-hello
About:
Name: helm-hello
Namespace: default
Created at: 2022-06-09 19:38:13 +0800 CST
Status: workflowSuspending
Workflow:
mode: StepByStep
finished: false
Suspend: true
Terminated: false
Steps
- id:ww4cydlvee
name:deploy2local
type:deploy
phase:succeeded
message:
- id:xj6hu97e1e
name:manual-approval
type:suspend
phase:succeeded
message:
Services:
- Name: hello
Cluster: local Namespace: default
Type: helm
Healthy Fetch repository successfully, Create helm release successfully
No 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: True
Status: 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: hello
Cluster: 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-kubernetes
type: helm
properties:
repoType: "helm"
url: "https://wangyikewxgm.github.io/my-charts/"
chart: "hello-kubernetes-chart"
version: "0.1.0"
policies:
- name: topology-test
type: topology
properties:
clusters: ["local"]
namespace: "test"
- name: topology-prod
type: topology
properties:
clusters: ["local"]
namespace: "prod"
- name: override-prod
type: override
properties:
components:
- name: hello-kubernetes
properties:
valuesFiles:
- "values-production.yaml"
workflow:
steps:
- name: deploy2test
type: deploy
properties:
policies: ["topology-test"]
- name: deploy2prod
type: deploy
properties:
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:
artifacthub.io/packages/se…
[2] KubeVela:
kubevela.io/
[3] 单集群的 Helm Charts 交给
kubevela.net/zh/docs/tut…
[4] velad:
github.com/kubevela/ve…
[5] 集群办理:
kubevela.net/zh/docs/pla…
[6]参阅文档:
kubevela.net/zh/docs/end…
[7]文档
kubevela.io/docs/instal…
[8]Override战略
kubevela.io/docs/end-us…
[9] 容器交给
kubevela.io/docs/case-s…
[10] 金丝雀发布:
kubevela.io/docs/tutori…
您能够经过如下材料了解更多关于 KubeVela 以及 OAM 项目的细节:
- 项目代码库:github.com/oam-dev/kubevela 欢迎 Star/Watch/Fork!
- 项目官方主页与文档:kubevela.io ,从 1.1 版本开端,已供给中文、英文文档,更多语言文档欢迎开发者进行翻译。
- 项目钉钉群:23310022;Slack:CNCF #kubevela Channel
- 参加微信群:请先添加以下 maintainer 微信号,表明进入 KubeVela 用户群:
戳此处:检查 KubeVela 项目官网!