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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
15天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
56 2
|
11天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
41 1
|
15天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
48 1
|
25天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
70 4
|
26天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
59 3
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
10天前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
26 0
|
2月前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
35 2
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
85 2

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    无影云桌面