跳到主要内容

2023.7.9-如何使用SonatypeNexus管理HelmCharts-仅收藏

参考链接

本文由 简悦 SimpRead 转码, 原文地址 cloud.tencent.com

正文

Helm 是 Kubernetes 的最受欢迎的软件包管理工具。

Helm 现在正成为管理 Kubernetes 应用程序的标准,并且是使用 Kubernetes 的任何人的必备技能。

Helm 是 Kubernetes 的最受欢迎的软件包管理工具。它允许 DevOps 团队对 Kubernetes 应用程序进行版本控制,分发和管理。尽管可以使用标准的 kubectl 命令和 Kubernetes 清单 YAML 文件,但是当组织从事微服务体系结构时 - 数百个容器相互交互 - 这就需要对 Kubernetes 清单进行版本化和管理。

为什么要使用 Helm?

Helm 使模板应用程序变得容易

我们可以使用同一个 DockerImage 来创建多个容器,而 Kubernetes 并非如此。您不能轻易重用清单文件,当部署多个实例的时候就需要复制清单文件。Helm 可帮助您使用 chart 和变量对其进行管理。您只需要创建一个通用的 chart 并使用变量以发布的形式部署不同的实例。

Helm 使 Kubernetes 应用程序的版本控制成为可能

开发人员最初使用 YAML 文件创建 Kubernetes 清单,然后将其存储在源代码存储库中。这种方法的问题是清单没有进行语义版本控制。应该始终将发行版作为软件包进行版本控制。Helm 通过将应用程序打包到 Helm Chart 中来解决此问题,这使得可以在 Helm 存储库中存储 Chart 的多个版本,并且您可以快速发布或回滚而无需再次从源代码构建。

Helm 使重用和共享成为可能

对于 Docker 映像,您可以在 DockerHub 上共享您的映像 - Kubernetes 无法做到这一点。有了 KubernetesCharts 之类的公共 Helm 存储库,现在就可以实现。公共 Helm 存储库允许重复使用 Kubernetes 应用程序,使供应商能够为消费者提供标准的 Helm 图表,并使两者的工作变得简单。

Helm 使部署 Kubernetes 应用程序变得简洁

使用 Helm,您可以运行简单的命令(例如 helm install 和 helm del)来安装和删除发行版。

您不必担心查找清单文件并运行 kubectl delete。Helm 一切都充满活力。

Helm 使依赖管理成为可能

让我们以一个 LAMP 堆栈为例。Apache 对 MySQL 有明确的依赖性。您不应该在没有 MySQL 的情况下安装 Apache。使用 Helm,您可以在 Apache 图表上添加 MySQL 的依赖项以允许这种情况发生,而纯粹的 Kubernetes 清单则无法做到这一点。

Helm 有助于执行标准

Helm 允许图表开发人员从标准模板开始,然后根据其应用程序要求对其进行自定义。标准模板将使它们满足使用 Kubernetes 开发应用程序的最低标准。Helm 生成的清单模板具有一定的质量,开发人员可以从中学习。



Helm 三大概念

Helm charts

Chart 是 Helm 程序包。如果您了解 Linux,那么 Helm 图表相当于 Kubernetes 的 RPM 或 DEB。Helm Chart 将您的 Kubernetes 清单包装成具有 chart 版本和所有所需依赖项的动态模板,这使您可以标准化和分发应用程序。

Helm release

Helm release 是 Kubernetes 集群上 Helm chart 的一个实例。Helm chart 充当发布的模板,而发布是实际运行的 Helm 应用程序。您可以使用相同的 Helm chart 来创建多个版本。

Helm repo

Helm 存储库存储 Helm chart,如 Yum 存储库存储 RPM。任何需要在 Kubernetes 上安装应用程序的人都可以使用简单的 Helm 命令从 Helm 存储库下载该应用程序。

Helm 存储库可以在任何 Web 服务器上运行,因此托管一个 Web 服务器很简单。传统方法包括 index.yaml 在 charts 目录中创建一个文件,该 public 文件在 Web 服务器的文件夹中创建,并在将图表推入存储库时手动更新文件。以下是 Web 服务器目录结构的示例结构:

charts/
|
|- index.yaml
|
|- alpine-0.1.2.tgz
|
|- alpine-0.1.2.tgz.prov

但是,目前,成熟的组织使用某种形式的工件存储库管理器,例如 Sonatype Nexus,它与 CI / CD 管道集成在一起。

带有 Docker 和 Helm 的 CI/CD

与 Docker 和 Helm 一起使用的典型的持续集成持续部署(CI/CD)管道如下所示:

DevOps 工程师创建 Docker 文件和所需的依赖关系(以及应用程序的 HelmChart),并将其推送到源代码存储库。

源代码存储库具有对 CI / CD 工具(例如 Jenkins)的提交后触发构建,该工具可以:

  • 使用 Dockerfile 构建 Docker 映像并将其推送到 Sonatype Nexus 中的 Docker 存储库
  • 打包 HelmChart 并将其推送到 Sonatype Nexus 中的 Helm 存储库

然后,它使用 Nexus 使用的最新软件包来更新索引,helm repo update 并触发 Kubernetes 运行,helm upgrade --install 以根据 Nexus 中可用的最新 chart 升级现有版本或安装新版本。


在 Sonatype Nexus 上托管 Helm 存储库

Nexus 为各种技术(例如 Maven,Yum,Go,Python,npm,Docker 等)提供的多种类型的存储库支持,使存储库的组织和管理变得容易。

对于已经使用 Sonatype Nexus 的组织,将它们托管在 Nexus 中的 Helm 存储库是很有意义的。Sonatype 社区已做出努力来构建托管 Helm 存储库的功能。需要安装 nexus-repository-helm 插件来完成。

Nexus Repository Manager 3.21+ 中已包含 Helm 格式。因此,无需安装它。如果您的 Nexus 安装版本低于此版本,建议升级或者使用正确的插件版本手动配置。


创建仓库

测试配置

使用以下命令将 Nexus 存储库添加到您的 Helm 配置中,访问 Helm 存储库。

# helm repo add  nexus http://admin:admin123@192.168.1.200:8081/repository/myhelm/
"nexus" has been added to your repositories
# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts/
gitlab https://charts.gitlab.io
mattermost https://helm.mattermost.com
nexus http://admin:admin123@192.168.1.200:8081/repository/myhelm/
[root@zeyang-nuc-service ~]#

上传 chart 到存储库

[root@zeyang-nuc-service new-k8s-runner]# ls
buildcache-pvc.yml buildsdir-pvc.yml gitlab-runner
[root@zeyang-nuc-service new-k8s-runner]# ls gitlab-runner/
CHANGELOG.md Chart.yaml Makefile README.md values.yaml
CONTRIBUTING.md LICENSE NOTICE templates
[root@zeyang-nuc-service new-k8s-runner]# helm package ./gitlab-runner
Successfully packaged chart and saved it to: /root/new-k8s-runner/custom-gitlab-runner-0.15.0.tgz
[root@zeyang-nuc-service new-k8s-runner]# ls
buildcache-pvc.yml custom-gitlab-runner-0.15.0.tgz
buildsdir-pvc.yml gitlab-runner

curl -v -F file=@custom-gitlab-runner-0.15.0.tgz -u admin:admin123 http://192.168.1.200:8081/service/rest/v1/components?repository=myhelm

接下来测试在 nexus 中获取 helm chart

要从 Nexus 安装 chart,您需要使用 Nexus 上的最新软件包更新本地仓库索引,helm repo update 然后运行 helm install 以从 Chart 中创建新版本。如果一切顺利,Helm 将从 Nexus 下载该 chart 并将其安装在您的 Kubernetes 集群上

# helm search repo -l custom-gitlab-runner
No results found
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "nexus" chart repository
...Successfully got an update from the "mattermost" chart repository
...Successfully got an update from the "gitlab" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. Happy Helming!
# helm search repo -l custom-gitlab-runner
NAME CHART VERSION APP VERSION DESCRIPTION
nexus/custom-gitlab-runner 0.15.0 12.9.0 GitLab Runner

# helm fetch nexus/custom-gitlab-runner --version 0.15.0
[root@zeyang-nuc-service opt]# ls
atlassian ci-build-cache cni custom-gitlab-runner-0.15.0.tgz jenkins teamviewer
cache ci-build-dir containerd halyard spinnaker zap



本着学习的态度翻译分享,如有侵权等请联系我立即删除,多谢!。