Helm Chart三分钟轻松掌握

这篇具有很好参考价值的文章主要介绍了Helm Chart三分钟轻松掌握。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


我们的日常工作中需创建、修改和部署Helm Chart,以管理应用程序的部署。Helm是Kubernetes的应用程序包管理器,它负责协调应用程序的下载、安装和部署。 chart就是一个描述Kubernetes相关资源的文件集合。

​ 那么为什么会有人使用 Helm 呢? Helm 通过模板化方法在 Kubernetes 中更轻松地管理应用程序的部署。所有 Helm 图表都遵循相同的结构。不必为每个应用程序手动编写单独的YAML文件,只需创建一个Helm chart,让Helm为你将应用程序部署到集群。

安装Helm

Helm 的每个 版本都为各种操作系统提供二进制版本。这些二进制版本可以手动下载和安装。

  1. 下载 版本
  2. 打开包装 ( tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
  3. 在解压后的目录中找到helm二进制文件,并将其移动到所需的目的地 ( mv linux-amd64/helm /usr/local/bin/helm)

创建Helm Chart

首先确认我们刚刚的helm已经安装成功:

[root@master ~]# which helm
/usr/local/bin/helm
[root@master ~]# helm --help
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts

启动一个新的Helm图标只需要一个简单的命令:

helm create mychartname

为了贴合线上使用,将创建chart auto-excels

[root@master ~]# helm create auto-excels^C
[root@master ~]# cd auto-excels/
[root@master auto-excels]# ll
total 16
drwxr-xr-x 2 root root 4096 Sep 21 20:46 charts
-rw-r--r-- 1 root root 1146 Sep 21 20:46 Chart.yaml
drwxr-xr-x 3 root root 4096 Sep 22 10:09 templates
-rw-r--r-- 1 root root 1941 Sep 22 10:23 values.yaml

检查图表结构

刚刚我们创建了图表,看看它的结构,看看里面有什么。 Chart.yamlvalues.yaml 这两个文件定义了图表的名称以及部署时将包含那些值。

Chart.yaml
apiVersion: v2         ##API 版本
name: auto-excel	## chart名称
description: A Helm chart for Kubernetes  ##对项目的描述

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application		##chart类型

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

chart部分包括了正在使用的API版本(必需),图表的名称和描述,图表的类型(默认为application),图表的版本以及应用程序的版本(应用版本会在更改时增加)。

Template

图表中最重要的部分时模板目录。 它包含将部署到集群中的应用程序的所有配置。这个应用程序有一个基本的部署、入口、服务帐户和服务。该目录还包括一个测试目录,其中包括一个连接到应用程序的测试。这些应用程序功能中的每一个在**templates/**下都有自己的模板文件:

[root@master auto-excels]# ll templates/
total 32
-rw-r--r-- 1 root root 1853 Sep 22 10:09 deployment.yaml
-rw-r--r-- 1 root root 1812 Sep 21 20:46 _helpers.tpl
-rw-r--r-- 1 root root  925 Sep 21 20:46 hpa.yaml
-rw-r--r-- 1 root root 2085 Sep 21 20:46 ingress.yaml
-rw-r--r-- 1 root root 1759 Sep 21 20:46 NOTES.txt
-rw-r--r-- 1 root root  326 Sep 21 20:46 serviceaccount.yaml
-rw-r--r-- 1 root root  370 Sep 21 20:46 service.yaml
drwxr-xr-x 2 root root 4096 Sep 21 20:46 tests

还有另外一个charts目录,它里面时空的。 它允许您添加部署应用程序所需的相关图表。这个高级的玩法我们先略过,让charts/ 文件夹先为空。

value

当Helm渲染chart时,它会通过模板引擎遍历目录中的每个文件。

模板的Value通过两种方式提供:

  • Chart开发者可以在chart中提供一个命名为 values.yaml 的文件。这个文件包含了默认值。
  • Chart用户可以提供一个包含了value的YAML文件。可以在命令行使用 helm install命令时提供。

当用户提供自定义value时,这些value会覆盖chart的values.yaml文件中value。

# Default values for auto-excels.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: ""

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

podAnnotations: {}

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  className: ""
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

nodeSelector: {}

tolerations: []

affinity: {}

从顶部开始,您可以看到replicaCount自动设置为 1,这意味着只会出现一个 pod。对于这个示例,您只需要一个 pod,但您可以看到告诉 Kubernetes 运行多个 pod 以实现冗余是多么容易。

image部分有两个地方需要查看:repositorypullPolicypillPolicy设置为IfNotPresent;这意味着如果集群中不存在该镜像,才回去拉取该镜像版本。

replicaCount: 1

image:
  repository: hub.17usoft.com/gstrain/test
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "master-183b8d7"

这个还有另外两个选项:Always, 这意味着它将在每次部署或重新启动时拉取镜像(建议), 以及Latest,它将始终拉取最新版本的可用的图像 。这些都是容器的基本知识,相信大家一定都很熟悉。

Naming and secrets

接下来,看一下图表中的 nameOverride 。第一个 nameOverride 是imagePullSecrets,这是一个用于提取私密的设置。接下来是nameOverridefullnameOverride。从您运行helm create的那一刻起,它的名称 (autoexcel) 就被添加到了许多配置文件中——从上面的 YAML 文件到templates/_helper.tpl文件。如果您在创建图表后需要重命名图表,则在此处修改。

imagePullSecrets: [{ name: first-registry}]
nameOverride: "autoexcel"
fullnameOverride: "autoexcel"

Accounts

服务帐户提供用户身份以在集群内的 pod 中运行。 如果留空,将使用helpers.tpl文件根据全名生成名称。

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: "autoexcel"

Security

您可以配置 pod 安全性来设置要使用的文件系统组类型或可以使用和不可以使用的用户的限制。了解这些选项对于保护 Kubernetes pod 很重要,当我们深入学习k8s的时候再去了解,现在我们暂时为空。

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

Service

图表中有两种不同类型的网络选项。

ClusterIP: 将服务暴露在集群内部 IP 上。选择此值会使与您的应用程序关联的服务只能从集群内访问。

NodePort: 在ClusterIP基础上暴露出一个随机端口至外部,供外部访问

service:
  type: NodePort
  port: 80

ingress:
  enabled: false
  className: ""
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

Resoueces

默认情况下,Pod 运行没有 CPU 和内存的限额。 这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一样,消耗足够多的 CPU 和内存。

一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过resources 的 requests 和 limits 来实现

resources: 
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

Tolerations, nodeselectors, and affinities

这一部分主要将的是资源调度,有兴趣的同学可以了解一下之前这边文章。

Deploy

现在我们已经对创建的Helm图表进行了必要的修改,我们可以使用install命令来部署它

[root@master project]# helm install auto-excels auto-excels/ --values auto-excels/values.yaml -n default
NAME: auto-excels
LAST DEPLOYED: Thu Sep 22 22:19:46 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=autoexcel,app.kubernetes.io/instance=auto-excels" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

该命令的输出将为您提供连接到应用程序的后续步骤,包括设置端口转发,以便您可以从本地主机访问应用程序来验证应用是否正常。

[root@master project]# kubectl get po -n default
NAME                          READY   STATUS    RESTARTS        AGE
autoexcel-5f846d8c6c-ccjvg    1/1     Running   0   			8m52s
[root@master project]# kubectl get svc -n default
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
autoexcel    NodePort    10.253.110.124   <none>        8889:45511/TCP   8m52s

恭喜!您已经学会了使用Helm图表的部署,刚开始我们可以选择nginx来进行学习和试验。

到这里只是第一步,我们还有很多东西要学习。如果想更深入的学习Helm,可到官网学习

参考文献:

https://helm.sh/docs/

https://www.jianshu.com/p/026f17489f2b

https://zhuanlan.zhihu.com/p/511413922文章来源地址https://www.toymoban.com/news/detail-405490.html

到了这里,关于Helm Chart三分钟轻松掌握的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【笔记】Helm-3 主题-6 Chart仓库指南

    Chart仓库指南 本节介绍如何创建和使用chart仓库。在高层级中,chart仓库是打包的chart存储和分享的位置。 社区的Helm chart仓位于 Artifact Hub ,欢迎加入。不过Helm也可以创建并运行您自己的chart仓库。该指南将介绍如何操作。 Artifact Hub 先决条件 先阅读 快速开始 阅读 Charts 文档

    2024年01月18日
    浏览(35)
  • 【Harbor作为Chart仓库】Helm离线部署AWX1.0.0

    1.Helm是什么?   Helm 帮助管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。具有复杂性管理、易于升级、分发简单、回滚优点。可以简单理解为k8s的yum源、maven后端依赖库、nexus前端依赖库等。 2.Chart是什么?   Chart是

    2024年01月20日
    浏览(39)
  • Devops系列二(使用helm chart,将java应用发布部署至k8s的示例)

    docker镜像已经有了,本文我们将接着演示如何使用helm部署应用到k8s。 分为两大部分: 制作helm chart,推送到私有仓库nexus helm拉取chart,部署到k8s 要求你先安装helm,随便一台linux机器即可,不要求你要有k8s或者docker环境。 这里,我删除了没用到的一些文件,最后保留的见下:

    2024年02月12日
    浏览(42)
  • 未来已来:AR如何改变我们的日常体验

    引言 在数字革命的浪潮中,一种技术正在逐渐改变着我们与数字世界互动的方式,这就是增强现实(AR)技术。AR不再只是科幻电影的幻想,它已经成为我们日常生活中的一部分,重新定义了我们与数字内容交互的方式。 AR,即增强现实,是一种技术,它将数字内容叠加到我

    2024年02月05日
    浏览(42)
  • 数据之美:如何用数据可视化优化我们的日常生活?

    在这个信息爆炸的时代,我们周围充斥着各种数据,而数据可视化正是一种强大的工具,帮助我们更好地理解和利用这些信息。那么,如何将数据可视化应用在我们的日常生活中呢?让我们一起探索这个引人入胜的话题。 首先,让我们简单了解一下数据可视化的概念。数据可

    2024年02月02日
    浏览(57)
  • 物联网行业的革命:Web3 技术如何改变我们的日常生活

    物联网 (IoT) 是一个充满创新和潜力的领域,它将物理设备、传感器和互联网连接起来,实现智能化和自动化。 在过去几年中,从智能家居、智能城市到工业自动化,物联网技术已经渗透到了各个领域。然而,随着物联网设备和系统的数量不断增加,如何确保这些设备和系统

    2024年02月13日
    浏览(54)
  • 数字之美:探秘数据可视化如何在我们的日常生活中展现魅力

    数据可视化是如何通过多种方式走进我们生活的呢?它不仅仅是冰冷的数字和图表,更是一门让信息跃然纸上的艺术。让我们一同探讨数据可视化如何以多种方式渗透进我们的日常生活,为我们呈现丰富而生动的信息画卷。下面我就以可视化从业者的角度来简单说说这个话题

    2024年02月02日
    浏览(43)
  • 元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?

    创造者经济、新兴的在线趋势和新的加密经济为创造者提供了更多的机会。各种平台、协议和数字市场都在争夺用户的注意和他们提供的创造力。这引领了高度的独立性,尤其是在年轻的数字原生代Z世代之间。加密经济正在塑造下一代创造者经济参与者的未来工作模式。 现

    2024年02月09日
    浏览(38)
  • 软件测试人员每天的工作日常

    我现在每天9点左右从家里出发,9点半左右到公司,到公司之后,首先用养生壶煮一壶好茶,工作忙碌时也要记得多喝水,然后一边听着煮茶声一边写着当天的工作计划,工作计划主要包括当天工作内容、学习计划和总结。 计划并不是每天都能完成,在工作结束之后根据实际

    2024年02月12日
    浏览(44)
  • DBA 职责及日常工作职责

    DBA 职责及日常工作职责:     1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境.     2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案.     3.根据开发人员设计的应用系统需求创建数据库存储结构.     4.根据开发人员设计的应用系

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包