kubernetes(k8s):构建Helm Chart并部署mychart应用到k8s集群

本文详细介绍了如何构建一个Helm Chart,设置本地chart仓库,安装push插件,将应用部署到Kubernetes集群,并进行版本更新和回滚操作。重点包括修改应用配置,将chart推送到私有Harbor仓库,以及在集群中部署、升级和回滚应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 构建一个 Helm Chart

[kubeadm@server1 helm]$ helm create mychart
Creating mychart
[kubeadm@server1 helm]$ ls
mychart  redis-ha
[kubeadm@server1 helm]$ cd mychart/
[kubeadm@server1 mychart]$ tree .  
.
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

[kubeadm@server1 mychart]$ ls
charts  Chart.yaml  templates  values.yaml
values.yaml //用于获取变量
chart.yaml //介绍发行版本

[kubeadm@server1 mychart]$ helm lint . // 检测当前目录依赖和模板配置是否正确
==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

[kubeadm@server2 helm]$ helm package mychart/  // 将应用打包
Successfully packaged chart and saved it to: /home/kubeadm/helm/mychart-0.1.0.tgz
[kubeadm@server2 helm]$ ls
mychart  mychart-0.1.0.tgz  redis-ha
  • 编写mychart的应用描述信息
$ vim Chart.yaml 
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: latest
  • 编写应用部署信息:
$ vim values.yaml
replicaCount: 1

image:
  repository: game2048
  pullPolicy: IfNotPresent
...
[kubeadm@server1 mychart]$ ls
charts  Chart.yaml  templates  values.yaml
[kubeadm@server1 mychart]$ 

主要是编写value.yaml文件
在这里插入图片描述

  • 修改harbor仓库的配置:

把values.yaml文件指定的镜像提前push到本地的私有镜像仓库中,并修改values.conf文件中的镜像名称,如下格式:

nginx:
  image:
    repository: reg.westos.org	//确保可以从私有仓库下载
    tag: v1.10.1

$ vim values.yaml
expose:
    type: nodePort
    tls:
        enabled: false

harbor仓库默认会动态创建PV持久卷,如果集群中不支持,可以禁用相应的配置:

persistence:
  enabled: false

2. 构建本地chart仓库

方式一:

helm v3 需要外部仓库软件的支持:https://github.com/goharbor/harbor-helm

$ helm repo add harbor https://helm.goharbor.io

$ helm pull harbor/harbor		

方式二:使用我自己搭建的harbor仓库
在harbor私有仓库中新建一个charts项目(公有项目)
在这里插入图片描述
可以看出现在仓库还没有chart

将仓库添加到helm:

[kubeadm@server1 helm]$ helm repo add mychart https://reg.westos.org/chartrepo/charts
Error: looks like "https://reg.westos.org/chartrepo/charts" is not a valid chart repository or cannot be reached: Get https://reg.westos.org/chartrepo/charts/index.yaml: x509: certificate signed by unknown authority

//问题:需要证书x509: certificate signed by unknown authority
[kubeadm@server1 helm]$

可以看出报错是缺少证书,可以将证书复制到redhat的全局证书地址


                
### 使用 HelmKubernetes部署应用程序 HelmKubernetes 的包管理工具,用于简化应用的定义、安装和升级过程。以下是关于如何在 Kubernetes 中通过 Helm 部署应用程序的相关说明。 #### 安装 Helm 要使用 Helm 进行应用部署,首先需要确保 Helm 工具已正确安装初始化集群中的 Tiller 组件(对于 Helm v2 版本)。可以通过以下命令完成安装[^3]: ```bash wget https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz tar -zxvf helm-v3.7.0-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/ ``` 注意:上述示例适用于 Helm v3.x 版本,而 Helm v3 不再依赖于 Tiller 组件,因此无需额外配置 Tiller。 #### 创建 Chart 或 使用现有 Chart ChartHelm 的打包格式,包含了运行某个应用所需的所有 Kubernetes 资源文件。可以创建自定义 Chart 或者直接使用官方仓库中的现成 Chart。 如果选择使用现有的 Chart,则可以直接从 Helm Hub 获取所需的 Chart 文件。例如,假设我们需要部署名为 `myapp` 的应用,可以从本地 Chart 存储库中获取它[^1]。 #### 应用程序的安装与卸载 一旦准备就绪,就可以执行实际的应用部署操作: - **安装应用** 使用 `helm install` 命令来部署指定的 ChartKubernetes 集群上。例如: ```bash [root@k8s2 ~]# helm install myapp local/mychart ``` - **验证部署状态** 可以通过访问服务端点或者查看 Pod 状态确认应用是否成功启动。比如测试 ingress 是否正常工作: ```bash [root@k8s1 nfsdata]# curl myapp.westos.org Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> ``` - **删除应用** 如果不再需要该应用实例,可利用 `helm uninstall` 删除对应的发布版本: ```bash [root@k8s2 ~]# helm uninstall myapp ``` 以上流程展示了完整的 Helm 应用生命周期管理方法。 #### 示例代码片段 下面是一个简单的 Python 函数模拟调用 Helm CLI 来自动化部署的过程: ```python import subprocess def deploy_helm_app(release_name, chart_path): try: result = subprocess.run( ['helm', 'install', release_name, chart_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) if result.returncode != 0: raise Exception(f"Helm deployment failed with error:\n{result.stderr}") return f"Application {release_name} deployed successfully." except Exception as e: return str(e) print(deploy_helm_app('test-app', './charts/test-chart')) ``` 此函数封装了基本的 Helm 部署逻辑,能够捕获可能发生的错误情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值