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

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

阿里云Kubernetes服务已经内置提供了Helm/Chart支持,可以直接使用。参考文档:https://help.aliyun.com/document_detail/58587.html

搭建私有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 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
资源调度 Kubernetes 监控
Kubernetes 集群性能优化实践
【5月更文挑战第17天】在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随着集群规模的增长和业务复杂度的提升,性能优化成为确保系统稳定性与高效运行的关键。本文将深入探讨 Kubernetes 集群性能优化的策略与实践,覆盖从节点资源配置到网络通信优化,再到高效的资源调度机制,旨在为运维人员提供系统的优化路径和具体的操作建议。
|
2天前
|
Kubernetes 前端开发 容器
k8s部署模板
k8s部署模板
|
2天前
|
Java 数据库连接 Spring
K8S+Docker理论与实践深度集成java面试jvm原理
K8S+Docker理论与实践深度集成java面试jvm原理
|
2天前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
2天前
|
存储 Kubernetes 监控
使用Kubernetes进行容器编排:技术详解与实践
【5月更文挑战第16天】Kubernetes,简称K8s,是开源容器编排系统,用于自动化部署、扩展和管理容器化应用。核心概念包括节点、Pod(最小部署单元)、服务、标签和副本集。其特点有高可用性、可扩展性、自动化和可移植性。实践使用涉及安装配置集群、编写YAML部署清单、应用部署、监控管理和扩展更新。Kubernetes帮助提升应用的可用性、可扩展性和可移植性。
|
3天前
|
Kubernetes Ubuntu Docker
初始化k8s多结点集群
在Ubuntu22.04.3 LTS上设置k8s多节点集群,采用Docker v24.0.6、kubeadm v1.28和cir-dockerd v0.3.4。首先安装docker和cri-dockerd,更新k8s三件套至v1.28。然后,参照官方文档进行`kubeadm init`初始化集群,配置包括自定义镜像仓库、控制面端点等。成功初始化后,显示了相关证书和配置信息。最后,提供了一些额外的kubectl命令以管理节点。
12 1
|
3天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化策略
【5月更文挑战第14天】 在动态且不断扩展的云计算环境中,保持 Kubernetes 集群的高性能运行是一个挑战。本文将探讨一系列实用的性能优化措施,旨在帮助运维专家确保其容器化应用能在资源受限的情况下仍保持高效与稳定。通过分析 Kubernetes 的资源调度机制、存储和网络配置,我们提出了一套综合的性能调优框架,并结合实际案例,展示如何实施这些策略以提升集群的整体性能。
|
3天前
|
运维 Prometheus 监控
Kubernetes 集群监控与性能优化实践
【5月更文挑战第14天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的增加,监控系统的性能及稳定性变得至关重要。本文将深入探讨 Kubernetes 集群监控的重要性,介绍常用监控工具,并分享一系列针对集群性能优化的实践策略,帮助运维工程师确保服务的高可用性和优越性能。
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
1568 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2522 0

相关产品

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

    更多