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