searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用Helm完成项目的部署和升级

2025-03-25 05:33:31
3
0

背景

目前,k8s项目的应用组件越来越多,每次升级和部署都需要更新大量的pod容器镜像和配置文件,整个过程非常繁琐,给运维升级造成很大的困扰。为了简化生产环境应用的部署和升级,提升开发和运维的工作效率,确保应用能够快速、稳定地发布到生产环境中,我们可以在自己项目中使用Helm这个工具。

Helm简介

Helm 是一个用于 Kubernetes 的包管理工具,它通过 Helm Chart 来定义、安装、升级和管理 Kubernetes 应用,Helm有三个重要的概念:

Chart Helm Chart 是一个包含 Kubernetes 资源定义的包,它描述了如何部署一个应用,包括所需的 Deployments、Services、ConfigMaps 等
Repository Helm Repository 是一个存储 Chart 的仓库,用户可以从这些仓库中搜索、download和安装 Chart
Release 当使用 helm install 命令将一个 Chart 部署到 Kubernetes 集群时,会创建一个 Release,它代表了特定版本的应用部署

Helm 适用于需要管理和部署复杂应用场景的环境。通过Helm,用户可以轻松地安装、升级和uninstall Kubernetes应用,同时支持版本管理和依赖关系处理。这使得在Kubernetes平台上管理和部署应用变得更加高效和可靠。

入门指南

使用Helm,需要准备以下几点:

  1. 一个 Kubernetes 集群,并安装了kubectl指令
  2. 确定你安装版本的安全配置
  3. 安装和配置Helm。

使用Helm 部署 Kubernetes 应用

charts 除了可以在 repo 中download,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

一个典型的 Helm Chart 包含以下目录和文件结构:

my-app/
├── Chart.yaml          # Chart 的元数据
├── values.yaml         # 默认配置
├── .helmignore         # 忽略的文件模式
├── templates/          # Kubernetes 资源模板
│   ├── NOTES.txt       # 部署后的提示信息
│   ├── _helpers.tpl    # 辅助模板
│   ├── deployment.yaml # Deployment 资源模板
│   ├── service.yaml    # Service 资源模板
│   └── ingress.yaml    # Ingress 资源模板(可选)
└── charts/             # 依赖的子 Chart(可选)

1. 编写 Chart.yaml

Chart.yaml 是 Helm Chart 的元数据文件,包含 Chart 的基本信息。例如:

apiVersion: v2
name: my-app
description: A Helm chart for my application
type: application
version: 0.1.0
appVersion: "1.0"
  • apiVersion:Helm Chart 的版本格式(v2 是当前推荐的版本)。

  • name:Chart 的名称。

  • description:Chart 的描述。

  • type:Chart 的类型(application 或 library)。

  • version:Chart 的版本号。

  • appVersion:应用本身的版本号。

2. 编写 values.yaml

values.yaml 是 Helm Chart 的默认配置文件,用户可以通过它覆盖默认值。例如:

# 默认配置
replicaCount: 1
 
image:
  repository: my-app
  tag: latest
  pullPolicy: IfNotPresent
 
service:
  type: ClusterIP
  port: 80
 
ingress:
  enabled: false
  annotations: {}
  hosts:
    - host: my-app.local
      paths: ["/"]
  tls: []
 
resources: {}
  • replicaCount:Pod 的副本数量。

  • image:Docker 镜像的配置。

  • service:Service 的配置。

  • ingress:Ingress 的配置。

  • resources:资源限制的配置。

3. 编写 .helmignore

.helmignore 文件用于指定在打包 Chart 时需要忽略的文件或目录。例如:

# 忽略文件
.DS_Store
.git/
.gitignore
README.md

4. 编写 templates/ 目录中的 Kubernetes 资源模板

templates/ 目录包含 Kubernetes 资源的模板文件。Helm 会根据 values.yaml 中的配置渲染这些模板。

# 忽略文件
.DS_Store
.git/
.gitignore
README.md
4.1 编写 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.nameOverride }}
  labels:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Chart.Name }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ .Chart.Name }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}

4.2 编写 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.nameOverride }}
  labels:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}

5. 编写 charts/ 目录(可选)

如果需要依赖其他 Helm Charts,可以将它们放在 charts/ 目录中。例如:

my-app/
└── charts/
    └── my-dependency/
        ├── Chart.yaml
        ├── values.yaml
        └── templates/
            └── ...

6. 打包和安装 Helm Chart

完成 Chart 的编写后,可以通过以下命令打包和安装:

helm package my-app
helm install my-release ./my-app

使用Helm升级 Kubernetes 应用

使用 Helm 升级 Kubernetes 应用的步骤如下:

1、更新 Helm 仓库索引

helm repo update

确保本地仓库索引是最新的。

2、查看可用的 Chart 版本

helm search repo <chart名称>

查看目标 Chart 的可用版本。

3、升级应用程序

运行helm upgrade命令,指定要升级的Release名称和Chart名称,以及任何必要的配置参数。

helm upgrade --install <release名称> <chart名称> --version <版本号> -n <命名空间> -f <自定义值文件> --set <参数1>=<值1>,<参数2>=<值2> ...

例如:

helm upgrade --install poptestagent sa_helm_rel/poptestserver --version 3.23.1821 -n platform -f /root/tmp/poptestserver.yaml

使用Helm动态更新配置文件

如果需要更新配置文件,可以直接修改 values.yaml 文件,然后运行以下命令:

helm upgrade RELEASE_NAME .

也可以通过命令行参数覆盖values.yaml中的值:

helm upgrade RELEASE_NAME --set image.tag='1.19.6' .

或者使用 YAML 文件指定配置:

helm upgrade RELEASE_NAME -f values.yaml .

注意事项

在升级之前,建议先运行 helm status <release名称> 检查当前部署的状态。

如果需要回滚到之前的版本,可以使用 helm rollback <release名称> <版本号>

 

0条评论
作者已关闭评论
陈****通
6文章数
0粉丝数
陈****通
6 文章 | 0 粉丝
原创

使用Helm完成项目的部署和升级

2025-03-25 05:33:31
3
0

背景

目前,k8s项目的应用组件越来越多,每次升级和部署都需要更新大量的pod容器镜像和配置文件,整个过程非常繁琐,给运维升级造成很大的困扰。为了简化生产环境应用的部署和升级,提升开发和运维的工作效率,确保应用能够快速、稳定地发布到生产环境中,我们可以在自己项目中使用Helm这个工具。

Helm简介

Helm 是一个用于 Kubernetes 的包管理工具,它通过 Helm Chart 来定义、安装、升级和管理 Kubernetes 应用,Helm有三个重要的概念:

Chart Helm Chart 是一个包含 Kubernetes 资源定义的包,它描述了如何部署一个应用,包括所需的 Deployments、Services、ConfigMaps 等
Repository Helm Repository 是一个存储 Chart 的仓库,用户可以从这些仓库中搜索、download和安装 Chart
Release 当使用 helm install 命令将一个 Chart 部署到 Kubernetes 集群时,会创建一个 Release,它代表了特定版本的应用部署

Helm 适用于需要管理和部署复杂应用场景的环境。通过Helm,用户可以轻松地安装、升级和uninstall Kubernetes应用,同时支持版本管理和依赖关系处理。这使得在Kubernetes平台上管理和部署应用变得更加高效和可靠。

入门指南

使用Helm,需要准备以下几点:

  1. 一个 Kubernetes 集群,并安装了kubectl指令
  2. 确定你安装版本的安全配置
  3. 安装和配置Helm。

使用Helm 部署 Kubernetes 应用

charts 除了可以在 repo 中download,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

一个典型的 Helm Chart 包含以下目录和文件结构:

my-app/
├── Chart.yaml          # Chart 的元数据
├── values.yaml         # 默认配置
├── .helmignore         # 忽略的文件模式
├── templates/          # Kubernetes 资源模板
│   ├── NOTES.txt       # 部署后的提示信息
│   ├── _helpers.tpl    # 辅助模板
│   ├── deployment.yaml # Deployment 资源模板
│   ├── service.yaml    # Service 资源模板
│   └── ingress.yaml    # Ingress 资源模板(可选)
└── charts/             # 依赖的子 Chart(可选)

1. 编写 Chart.yaml

Chart.yaml 是 Helm Chart 的元数据文件,包含 Chart 的基本信息。例如:

apiVersion: v2
name: my-app
description: A Helm chart for my application
type: application
version: 0.1.0
appVersion: "1.0"
  • apiVersion:Helm Chart 的版本格式(v2 是当前推荐的版本)。

  • name:Chart 的名称。

  • description:Chart 的描述。

  • type:Chart 的类型(application 或 library)。

  • version:Chart 的版本号。

  • appVersion:应用本身的版本号。

2. 编写 values.yaml

values.yaml 是 Helm Chart 的默认配置文件,用户可以通过它覆盖默认值。例如:

# 默认配置
replicaCount: 1
 
image:
  repository: my-app
  tag: latest
  pullPolicy: IfNotPresent
 
service:
  type: ClusterIP
  port: 80
 
ingress:
  enabled: false
  annotations: {}
  hosts:
    - host: my-app.local
      paths: ["/"]
  tls: []
 
resources: {}
  • replicaCount:Pod 的副本数量。

  • image:Docker 镜像的配置。

  • service:Service 的配置。

  • ingress:Ingress 的配置。

  • resources:资源限制的配置。

3. 编写 .helmignore

.helmignore 文件用于指定在打包 Chart 时需要忽略的文件或目录。例如:

# 忽略文件
.DS_Store
.git/
.gitignore
README.md

4. 编写 templates/ 目录中的 Kubernetes 资源模板

templates/ 目录包含 Kubernetes 资源的模板文件。Helm 会根据 values.yaml 中的配置渲染这些模板。

# 忽略文件
.DS_Store
.git/
.gitignore
README.md
4.1 编写 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.nameOverride }}
  labels:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Chart.Name }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ .Chart.Name }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}

4.2 编写 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.nameOverride }}
  labels:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ .Chart.Name }}
    app.kubernetes.io/instance: {{ .Release.Name }}

5. 编写 charts/ 目录(可选)

如果需要依赖其他 Helm Charts,可以将它们放在 charts/ 目录中。例如:

my-app/
└── charts/
    └── my-dependency/
        ├── Chart.yaml
        ├── values.yaml
        └── templates/
            └── ...

6. 打包和安装 Helm Chart

完成 Chart 的编写后,可以通过以下命令打包和安装:

helm package my-app
helm install my-release ./my-app

使用Helm升级 Kubernetes 应用

使用 Helm 升级 Kubernetes 应用的步骤如下:

1、更新 Helm 仓库索引

helm repo update

确保本地仓库索引是最新的。

2、查看可用的 Chart 版本

helm search repo <chart名称>

查看目标 Chart 的可用版本。

3、升级应用程序

运行helm upgrade命令,指定要升级的Release名称和Chart名称,以及任何必要的配置参数。

helm upgrade --install <release名称> <chart名称> --version <版本号> -n <命名空间> -f <自定义值文件> --set <参数1>=<值1>,<参数2>=<值2> ...

例如:

helm upgrade --install poptestagent sa_helm_rel/poptestserver --version 3.23.1821 -n platform -f /root/tmp/poptestserver.yaml

使用Helm动态更新配置文件

如果需要更新配置文件,可以直接修改 values.yaml 文件,然后运行以下命令:

helm upgrade RELEASE_NAME .

也可以通过命令行参数覆盖values.yaml中的值:

helm upgrade RELEASE_NAME --set image.tag='1.19.6' .

或者使用 YAML 文件指定配置:

helm upgrade RELEASE_NAME -f values.yaml .

注意事项

在升级之前,建议先运行 helm status <release名称> 检查当前部署的状态。

如果需要回滚到之前的版本,可以使用 helm rollback <release名称> <版本号>

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0