前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Sonatype Nexus管理Helm Charts

如何使用Sonatype Nexus管理Helm Charts

作者头像
DevOps云学堂
发布2020-06-19 11:46:41
3.3K0
发布2020-06-19 11:46:41
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

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服务器目录结构的示例结构:

代码语言:javascript
复制
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存储库。

代码语言:javascript
复制
# 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到存储库

代码语言:javascript
复制
[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
代码语言:javascript
复制
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集群上

代码语言:javascript
复制
# 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


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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要使用Helm?
    • Helm使模板应用程序变得容易
      • Helm使Kubernetes应用程序的版本控制成为可能
        • Helm使重用和共享成为可能
          • Helm使部署Kubernetes应用程序变得简洁
            • Helm使依赖管理成为可能
              • Helm有助于执行标准
              • Helm三大概念
                • Helm charts
                  • Helm release
                    • Helm repo
                    • 带有Docker和Helm的CI/CD
                    • 在Sonatype Nexus上托管Helm存储库
                    • 创建仓库
                    • 测试配置
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档