私有Chart仓库搭建以及使用CodePipeline部署Chart到Kubernetes集群的实践

简介: Helm有助于简化部署和管理 Kubernetes 应用,本文将演示如何使用阿里云OSS服务和阿里云容器服务搭建私有Chart仓库、推送Chart以及使用CodePipeline部署Chart到Kubernetes集群的过程。

搭建私有Chart仓库

本文主要演示使用阿里云OSS Bucket和阿里云容器服务提供的ChartMuseum应用搭建私有Chart仓库的过程。

申请OSS Bucket

为了保证chart存储的高可用,可漂移,这里使用oss作为chart文件存储的载体。

安装ChartMuseum

在阿里云Kubernetes服务的应用目录页面找到chartmuseum并选择安装此chart。

这里需要修改一些默认的values配置:

env:
  open:
    # storage backend, can be one of: local, alibaba, amazon, google, microsoft
    STORAGE: alibaba
    # oss bucket to store charts for alibaba storage backend
    STORAGE_ALIBABA_BUCKET: codepipeline-chart-demo
    # prefix to store charts for alibaba storage backend
    STORAGE_ALIBABA_PREFIX:
    # oss endpoint to store charts for alibaba storage backend
    STORAGE_ALIBABA_ENDPOINT: oss-cn-beijing.aliyuncs.com

    ALIBABA_CLOUD_ACCESS_KEY_ID: xxxxxxxxxx
    ALIBABA_CLOUD_ACCESS_KEY_SECRET: xxxxxxxxxx

DISABLE_API 设置为false 这样能打开API 请求。

  DISABLE_API: false

Chartmuseum 可以打开basic auth,保护私有chart。这里就可以设置用户名密码,后面会使用这个用户名密码来 Push或者Pull chart。

  secret:
    # username for basic http authentication
    BASIC_AUTH_USER: admin
    # password for basic http authentication
    BASIC_AUTH_PASS: xxxxxx

本示例使用LoadBalancer的方式暴露Service,配置如下:

service:
  type: LoadBalancer
  externalPort: 8080
  nodePort:
  annotations: {}

配置好以后就可以创建这个应用。
至此,私有Chart仓库就创建好了。浏览器访问ChartMuseum服务http://xx.xx.xx.xx:8080,输入用户名密码登录后显示如下:

上传Chart文件到私有仓库

Helm Client的安装可以参考云栖社区博客:https://yq.aliyun.com/articles/159601

安装helm plugin

本示例使用helm plugin来实现chart上传,plugin 地址https://github.com/chartmuseum/helm-push, 安装方式如下:

helm plugin install https://github.com/chartmuseum/helm-push

Helm初始化及repo设置

初始化:

$ helm init --client-only --stable-repo-url 
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
Not installing Tiller due to 'client-only' flag having been set
Happy Helming!

添加repo:

$ helm repo add codepipeline-chartmuseum http://xx.xx.xx.xx:8080 --username admin --password xxxxxx
"codepipeline-chartmuseum" has been added to your repositories

更新和查看repo:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "codepipeline-chartmuseum" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

$ helm repo list
NAME                        URL
stable                      https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local                       http://127.0.0.1:8879/charts
codepipeline-chartmuseum    http://xx.xx.xx.xx:8080

上传chart到私有仓库

本示例提供了一个简单的java应用的源码示例,下载地址:

$ git clone https://code.aliyun.com/CodePipeline/kubernetes-helm-deploy-demo.git
$ cd kubernetes-helm-deploy-demo/codepipeline-helm-java-demo
$ tree
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml

1 directory, 7 files

helm package对chart进行打包:

$ helm package .
Successfully packaged chart and saved it to: /kubernetes-helm-deploy-demo/codepipeline-helm-java-demo/codepipeline-helm-java-demo-0.1.0.tgz

上传chart:

$ helm push codepipeline-helm-java-demo-0.1.0.tgz codepipeline-chartmuseum
Pushing codepipeline-helm-java-demo-0.1.0.tgz to codepipeline-chartmuseum...
Done.

查看私有仓库中是否有我们上传的chart:

$ helm search codepipeline-helm-java-demo
NAME                                                  CHART VERSION    APP VERSION    DESCRIPTION
codepipeline-chartmuseum/codepipeline-helm-java...    0.1.0            1.0            A Helm chart for Kubernetes
local/codepipeline-helm-java-demo                     0.1.0            1.0            A Helm chart for Kubernetes

使用CodePipeline安装、重装、升级Helm应用

进入CodePipeline主页,创建名为test-helm的作业,进入配置页面,增加构建步骤选择Helm部署Kubernetes,并配置各个参数项如下:

各个参数项说明如下:

参数项 说明
认证方式 选择认证方式
API服务器地址 Kubernetes集群API Server地址
证书 Kubernetes集群认证证书
Chart仓库地址 请输入私有Chart仓库地址,例如http://xx.xx.xx.xx:8080。
Chart仓库用户名 请输入私有Chart仓库的用户名,若无用户名密码则置空。
Chart仓库密码 请输入私有Chart仓库的密码,若无用户名密码则置空。
Chart名称 请输入要部署的Chart名称。
Release名称 请输入部署的Chart的Release名称。
配置项 请输入要部署的Chart的参数项。多个参数项请用逗号隔开。
重装应用 请选择是否重新安装Chart。
升级应用 请选择是否升级Chart, 可以用来升级Chart版本或更改已部署的Release的参数项。
状态检查配置 支持检验的 Kubernetes Kind:pods,daemonsets,deployments,replicasets,replicationcontrollers,statefulsets。

本示例中,我们在部署codepipeline-helm-java-demo chart的时候设置了使用镜像tag为0.1.0的镜像,构建日志如下:


浏览器访问服务http://xx.xx.xx.xx/demo/打印信息为:

Hello World!

若需要重新部署则勾选“重装应用”选项, CodePipeline会先检测名为“codepipeline-helm-java”的Release是否存在, 若存在则先删除再安装, 若不存在则直接安装。

注意,“重装应用”选项会覆盖“升级应用”选项的设置, 如果需要做升级操作, 请确保“重装应用选项没有被勾选”。

若需要升级Chart或者更改values参数项, 则需要勾选“升级应用”选项。例如,我需要更新codepipeline-helm-java-demo应用使用的镜像tag为0.2.0,则CodePipeline的项目配置如下:

浏览器访问服务http://xx.xx.xx.xx/demo/打印信息为:

Hello CodePipeline!

使用阿里云容器服务团队提供的公共Chart仓库部署Kubernetes应用

阿里云容器服务团队提供的公共Chart仓库地址为:

https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

我们以部署wordpress应用到Kubernetes集群为例, CodePipeline作业配置如下:

可以在浏览器上看到熟悉的WordPress站点:

总结

Helm项目提供了一个统一软件打包方式,支持版本控制,可以大大简化Kubernetes应用分发与部署中的复杂性。 CodePipeline通过开发插件的形式集成和支持Helm自动化部署应用到Kubernetes集群的能力。

了解更多CodePipeline内容,请访问https://www.aliyun.com/product/codepipeline;
了解更多阿里云容器服务内容,请访问 https://www.aliyun.com/product/containerservice

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
373 1
|
3月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
276 89
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
358 9
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
9月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
967 33
|
9月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
存储 Kubernetes API
在K8S集群中,如何正确选择工作节点资源大小? 2
在K8S集群中,如何正确选择工作节点资源大小?
|
Kubernetes Serverless 异构计算
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
|
Kubernetes API 调度
在K8S集群中,如何正确选择工作节点资源大小?1
在K8S集群中,如何正确选择工作节点资源大小?

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多