Project Icon

application

通用Helm图表优化Kubernetes应用部署

这是一个通用Helm图表,专为部署无状态、仅创建命名空间范围资源的Kubernetes应用设计。支持部署和CronJob运行模式,无需特权容器或自定义资源。图表提供全面配置选项,涵盖部署策略、资源管理、健康检查、存储、服务暴露和入口设置等,简化应用部署流程,提高管理效率。

许可证: MIT

应用程序

用于以下类型应用程序的通用 Helm Chart:

  • 无状态
  • 仅创建命名空间范围的资源(例如,不需要 CRB - 集群角色绑定)
  • 不需要特权容器
  • 不调用底层 Kubernetes API 或不使用底层 etcd 作为数据库来定义自定义资源
  • 作为部署或 CronJob 运行

安装 Chart

要在 test 命名空间中以 my-application 为发布名称安装 chart:

helm repo add stakater https://stakater.github.io/stakater-charts
helm repo update
helm install my-application stakater/application --namespace test

卸载 Chart

要卸载 chart:

helm delete <chart-名称>

参数

名称描述
applicationName应用程序名称application
namespaceOverride用自定义值覆盖默认发布命名空间application
labels.group定义应用程序组的标签com.stakater.platform
labels.team定义团队的标签stakater

部署参数

名称描述
deployment.enabled在 Helm Chart 部署中启用部署true
deployment.strategy更新部署的策略RollingUpdate
deployment.reloadOnChange如果更新了挂载的 ConfigMap/Secret,则重新加载部署true
deployment.nodeSelector选择要部署此应用程序的节点{}
deployment.hostAliases向 Pod 的 /etc/hosts 文件添加条目,在 DNS 和其他选项不适用时提供 Pod 级别的主机名解析覆盖[]
deployment.additionalLabels部署的附加标签{}
deployment.podLabels添加到 Pod 上的附加标签,用于服务的标签选择器{}
deployment.annotations部署上的注释{}
deployment.additionalPodAnnotations此部署创建的 Pod 上添加的附加 Pod 注释{}
deployment.replicas要创建的副本数``
deployment.imagePullSecrets用于拉取镜像的 Secret""
deployment.env传递给应用容器的环境变量{}
deployment.volumes要添加到 Pod 的卷{}
deployment.volumeMounts卷的挂载路径{}
deployment.revisionHistoryLimit保留允许回滚的旧历史记录数量2
deployment.command部署主容器的命令[]
deployment.args部署主容器的参数[]
deployment.priorityClassName定义 Pod 调度的优先级类""
deployment.tolerations节点的污点容忍[]
deployment.affinityPod/节点的亲和性[]
deployment.topologySpreadConstraints拓扑分布约束定义[]
deployment.ports主容器的端口[]
deployment.securityContextPod 的安全上下文{}
deployment.additionalContainers除初始化容器和应用容器外添加额外的容器[]
deployment.containerSecurityContext在容器级别添加安全上下文{}
deployment.terminationGracePeriodSeconds优雅终止超时时间``
deployment.lifecycle容器生命周期管理,用于优雅启动和关闭程序{}

部署资源参数

名称描述
deployment.resources应用程序 Pod 的资源请求和限制见下文
请求和限制
  resources:
    limits:
      memory: 256Mi
      cpu: 0.5
    requests:
      memory: 128Mi
      cpu: 0.1

部署初始化容器参数

名称描述
deployment.initContainers在应用容器之前运行的初始化容器{}

部署 fluentd 参数

名称描述
deployment.fluentdConfigAnnotationsfluentd 配置的注释{}

部署镜像参数

名称描述
deployment.image.repository应用程序镜像的仓库repository/image-name
deployment.image.tag应用程序镜像的标签null
deployment.image.digest应用程序镜像的摘要``
deployment.image.pullPolicy应用程序镜像的拉取策略IfNotPresent

部署 envFrom 参数

名称描述
deployment.envFrom从 ConfigMap 或 Secret 中获取的环境变量{}
deployment.envFrom.type数据类型,即 Configmap 或 Secret``
deployment.envFrom.nameConfigmap 或 Secret 的名称,如果设置为空,则设置为应用程序名称``
deployment.envFrom.nameSuffixConfigmap 或 Secret 的后缀名称,applicationName 作为前缀附加``

部署探针参数

启动探针

启动探针表明 Pod 已成功初始化。如果指定,则在此探针成功完成之前不会执行其他探针。

名称描述
deployment.startupProbe.enabled启用启动探针false
deployment.startupProbe.failureThreshold当探针失败时,Kubernetes 在放弃之前会尝试 failureThreshold 次30
deployment.startupProbe.periodSeconds每隔 periodSeconds 秒执行一次探针10
deployment.startupProbe.successThreshold探针在失败后被视为成功所需的最小连续成功次数。
deployment.startupProbe.timeoutSeconds探针超时的秒数。
deployment.startupProbe.httpGet基于 HTTP Get 请求的操作描述path: '/path' port: 8080
deployment.startupProbe.execKubelet 执行指定命令来执行探针{}
就绪探针

容器服务就绪状态的周期性探测。如果探测失败,容器将从服务端点中移除。

名称描述
deployment.readinessProbe.enabled启用就绪探针true
deployment.readinessProbe.failureThreshold当探针失败时,Kubernetes 在放弃之前会尝试 failureThreshold 次3
deployment.readinessProbe.periodSeconds每隔 periodSeconds 秒执行一次探针10
deployment.readinessProbe.successThreshold探针在失败后被视为成功所需的最小连续成功次数。1
deployment.readinessProbe.timeoutSeconds探针超时的秒数。1
deployment.readinessProbe.initialDelaySeconds容器启动后延迟多少秒才进行存活或就绪探测10
deployment.readinessProbe.httpGet基于 HTTP Get 请求的操作描述path: '/path' port: 8080
deployment.readinessProbe.execKubelet 执行指定命令来执行探针{}
存活探针

容器存活状态的周期性探测。如果探测失败,容器将被重启。

名称描述
deployment.livenessProbe.enabled启用存活探针true
deployment.livenessProbe.failureThreshold当探针失败时,Kubernetes 在放弃之前会尝试 failureThreshold 次3
deployment.livenessProbe.periodSeconds每隔 periodSeconds 秒执行一次探针10
deployment.livenessProbe.successThreshold探针在失败后被视为成功所需的最小连续成功次数。1
deployment.livenessProbe.timeoutSeconds探针超时的秒数。1
deployment.livenessProbe.initialDelaySeconds容器启动后延迟多少秒才进行存活或就绪探测10
deployment.livenessProbe.httpGet基于 HTTP Get 请求的操作描述path: '/path' port: 8080
deployment.livenessProbe.execKubelet 执行指定命令来执行探针{}

部署 OpenshiftOAuthProxy 参数

名称描述
deployment.openshiftOAuthProxy.enabled添加 Openshift OAuth 代理作为边车容器false
deployment.openshiftOAuthProxy.port应用端口,代理应该转发到此端口8080
deployment.openshiftOAuthProxy.secretName包含 TLS 证书的 Secret 名称openshift-oauth-proxy-tls
deployment.openshiftOAuthProxy.imageoauth 边车容器的镜像openshift/oauth-proxy:latest
deployment.openshiftOAuthProxy.disableTLSArg如果禁用,将使用 --http-address=:8081 而不是 --https-address=:8443false

部署 DNS 参数

名称描述
deployment.dnsConfig启用 Pod 干扰预算{}

PodDisruptionBudget 参数

名称描述
pdb.enabled启用 Pod 干扰预算false
pdb.minAvailable驱逐后必须可用的 Pod 数量。如果同时设置了 minAvailable 和 maxUnavailable,则优先选择 minAvailable1
pdb.maxUnavailable驱逐后可以不可用的 Pod 数量。需要提供 minAvailable 或 maxUnavailable 之一``

持久化参数

名称描述
persistence.enabled启用持久化false
persistence.mountPVC是否将创建的 PVC 挂载到部署中false
persistence.mountPath如果设置了 persistence.mountPVC,则在部署中挂载卷的位置/
persistence.namePVC 的名称。``
persistence.accessMode卷的访问模式ReadWriteOnce
persistence.storageClass卷的存储类-
名称描述
---------------------------------------------------------------------------------------------------------------------------------------
secret.enabled启用 secretfalse
secret.additionalLabelssecret 的标签{}
secret.annotationssecret 的注释{}
secret.files带后缀的 secret 文件映射及其包含的数据{}
secret.files.[name].stringData允许在 secret 中提供明文内容{}
secret.files.[name].data允许在 secret 中提供将被 base64 编码的文本内容{}
secret.files.[name].encodedData允许在 secret 中提供已经 base64 编码的文本内容{}

ServiceMonitor 参数

名称描述
serviceMonitor.enabled启用 serviceMonitorfalse
serviceMonitor.additionalLabelsserviceMonitor 的标签{}
serviceMonitor.annotationsserviceMonitor 的注释{}
serviceMonitor.jobLabel用于应用选择器的作业标签k8s-app
serviceMonitor.endpointsPrometheus 抓取的端点数组- interval: 5s
  path: /actuator/prometheus
  port: http

自动伸缩参数

名称描述
autoscaling.enabled启用水平 Pod 自动伸缩false
autoscaling.additionalLabels水平 Pod 自动伸缩的标签{}
autoscaling.annotations水平 Pod 自动伸缩的注释{}
autoscaling.minReplicas启用自动伸缩时设置最小副本数1
autoscaling.maxReplicas启用自动伸缩时设置最大副本数10
autoscaling.metrics启用自动伸缩时的 HPA 指标配置{}

VPA - 垂直 Pod 自动伸缩参数

名称描述
vpa.enabled启用垂直 Pod 自动伸缩false
vpa.additionalLabels垂直 Pod 自动伸缩的标签{}
vpa.annotations垂直 Pod 自动伸缩的注释{}
vpa.containerPolicies单个容器的容器策略[]

EndpointMonitor 参数

Stakater IngressMonitorController EndpointMonitor 参数

名称描述
endpointMonitor.enabled为 IMC 启用 endpointMonitor (https://github.com/stakater/IngressMonitorController)false
endpointMonitor.additionalLabelsendpointMonitor 的标签{}
endpointMonitor.annotationsendpointMonitor 的注释{}
endpointMonitor.additionalConfigendpointMonitor 的额外配置{}

SealedSecret 参数

名称描述
sealedSecret.enabled启用 sealed secretfalse
sealedSecret.additionalLabelssealed secret 的标签{}
sealedSecret.annotations适用于在 files 下创建的所有 sealed secrets 的注释{}
sealedSecret.files包含名称和加密数据的 secret 文件映射{}
sealedSecret.files.[name].annotations适用于通过 sealed secret 创建的 secret 的注释{}
sealedSecret.files.[name].labels适用于通过 sealed secret 创建的 secret 的标签{}
sealedSecret.files.[name].type通过 sealed secret 创建的 secret 类型Opaque
sealedSecret.files.[name].clusterWide设置为 true 时,为通过 sealed secret 创建的 secret 添加注释 sealedsecrets.bitnami.com/cluster-wide: true,将 secret 范围设置为集群范围。false

Cert-manager 证书参数

名称描述
certificate.enabled启用证书自定义资源false
certificate.enabled启用证书自定义资源false
certificate.additionalLabels证书自定义资源的附加标签{}
certificate.annotations证书自定义资源的注释{}
certificate.secretName此证书资源将自动创建和管理的 secret 资源名称tls-cert
certificate.duration证书请求的"持续时间"(即生命周期)8760h0m0s
certificate.renewBeforecert-manager 开始尝试续签证书的时间,即当前颁发证书的 notAfter 时间之前的时间量720h0m0s
certificate.subject证书的完整 X509 名称规范{}
certificate.commonNameDER 编码 CSR 中指定的通用名称admin-app
certificate.keyAlgorithm此证书对应私钥的私钥算法rsa
certificate.keyEncoding此证书私钥的私钥加密标准(PKCS)编码pkcs1
certificate.keySize此证书对应私钥的密钥位大小2048
certificate.isCA将此证书标记为有效的证书签名false
certificate.usages证书请求的 x509 用途集{}
certificate.dnsNames要在证书上设置的 DNS 主题备用名称列表{}
certificate.ipAddresses要在证书上设置的 IP 地址主题备用名称列表{}
certificate.uriSANs要在证书上设置的 URI 主题备用名称列表{}
certificate.emailSANs要在证书上设置的电子邮件主题备用名称列表{}
certificate.privateKey.enabled为证书启用私钥false
certificate.privateKey.rotationPolicy表示在颁发证书时应如何生成或获取私钥Always
certificate.issuerRef.name此证书的颁发者引用。被引用资源的名称ca-issuer
certificate.issuerRef.kind被引用资源的类型ClusterIssuer
certificate.keystores.enabled启用密钥库配置。密钥库配置存储在 secretName Secret 资源中的其他密钥库输出格式false
certificate.keystores.pkcs12.create为证书启用 PKCS12 密钥库创建。PKCS12 配置在 spec.secretName Secret 资源中存储 PKCS12 密钥库的选项true
certificate.keystores.pkcs12.key要使用的 Secret 资源数据字段中的条目键test_key
certificate.keystores.pkcs12.name被引用的 Secret 资源的名称test-creds
certificate.keystores.jks.create为证书启用 jks 密钥库创建。JKS 配置在 spec.secretName Secret 资源中存储 JKS 密钥库的选项false
certificate.keystores.jks.key要使用的 Secret 资源数据字段中的条目键test_key
certificate.keystores.jks.name被引用的 Secret 资源的名称test-creds

Alertmanager 配置参数

名称描述
alertmanagerConfig.enabled为此应用启用 alertmanagerConfig(将合并到基本配置中)false
alertmanagerConfig.selectionLabels用于在 alertmanager 基本配置中选择此配置进行合并的标签alertmanagerConfig: "workload"
alertmanagerConfig.spec.route与资源命名空间匹配的警报的 Alertmanager 路由定义。它将作为一级路由添加到生成的 Alertmanager 配置中{}
alertmanagerConfig.spec.receivers接收器列表[]
alertmanagerConfig.spec.inhibitRulesInhibitRule 定义了一个抑制规则,允许在其他警报已经触发时静音警报[]

PrometheusRule 参数

名称描述
prometheusRule.enabled为此应用启用 prometheusRulefalse
prometheusRule.additionalLabelsKubernetes 标签对象,这些附加标签将添加到 PrometheusRule CRD{}
prometheusRule.spec.groups要添加的 PrometheusRules 及其组[]

SecretProviderClass 参数

名称描述
secretProviderClass.enabled启用 Secret Provider Class 自定义资源false
secretProviderClass.nameSecret Provider Class
job.jobs 中每个 job 对象的作业参数
名称描述
<name>.image.repository作业容器镜像的仓库
<name>.image.tag作业容器镜像的标签
<name>.image.digest作业容器镜像的摘要
<name>.image.imagePullPolicy作业容器镜像的拉取策略
<name>.command作业容器的命令
<name>.args作业容器的参数
<name>.resources作业容器的资源
<name>.additionalLabels作业的额外标签
<name>.annotations作业的注解
<name>.volumeMounts作业的卷挂载
<name>.volumes作业的卷
<name>.nodeSelector作业的节点选择器
<name>.affinity作业的亲和性
<name>.tolerations作业的容忍度
<name>.restartPolicy作业的重启策略
<name>.imagePullSecrets作业的镜像拉取密钥
<name>.activeDeadlineSeconds作业的活动截止时间(秒)
<name>.backoffLimit作业的退避限制
<name>.additionalPodAnnotations作业 Pod 的额外注解
<name>.additionalPodLabels作业 Pod 的额外标签
<name>.topologySpreadConstraints作业 Pod 的拓扑分布约束
<name>.securityContext作业 Pod 的安全上下文

ConfigMap、Secret、SealedSecret 和 ExternalSecret 的命名约定

ConfigMap、Secret、SealedSecret 和 ExternalSecret 的名称格式为 {{ template "application.name" $ }}-{{ $nameSuffix }},其中:

  • {{ template "application.name" }} 是一个辅助函数,如果存在则输出 .Values.applicationName,否则返回图表名称作为输出
  • nameSuffixsecret.filesconfigMap.filessealedSecret.filesexternalSecret.files 中的每个键

例如,如果我们有以下值文件:

applicationName: helloworld # {{ template "application.name" $ }}

configMap:
  files:
    config: # {{ $nameSuffix }}
      key: value

那么 configmap 的名称将是 helloworld-config

在应用程序图表中使用环境变量

为了在部署或 cronjob 中使用环境变量,你需要在 env 值中以键/值对的形式提供环境变量,其中键是环境变量的键,值在不同情况下有所不同

  • 对于简单的键/值环境变量,只需提供 value: <value>

     env:
        KEY:
          value: MY_VALUE
    
  • ConfigMap 获取环境变量值

    假设我们从应用程序图表创建了 configmap

    applicationName: my-application
    configMap:
      enabled: true
      files:
        application-config:
          LOG: DEBUG
          VERBOSE: v1
    

    要从上面创建的 configmap 获取环境变量值,我们需要添加以下内容

    env:
     APP_LOG_LEVEL:
      valueFrom:
        configMapKeyRef:
          name: my-application-appication-config
          key: LOG
    

    要从 ConfigMap 获取所有环境变量键/值,其中 configmap 键作为环境变量的键,值作为值

      envFrom:
       application-config-env:
         type: configmap
         nameSuffix: application-config
    

    你可以提供 nameSuffix,这意味着在前缀 <applicationName>- 之后添加的名称,或者使用 name 提供 configmap 的静态名称。

  • Secret 获取环境变量值

    假设我们从应用程序图表创建了 secret

     applicationName: my-application
     secret:
       enabled: true
       files:
          db-credentials:
            PASSWORD: skljd#2Qer!!
            USER: postgres
    

    要从上面创建的 secret 获取环境变量值,我们需要添加以下内容

      env:
         KEY:
          valueFrom:
           secretKeyRef:
             name: my-application-db-credentials
             key: USER
    

    要从 Secret 获取环境变量值,其中 secret 键作为环境变量的键,值作为值

    envFrom:
      database-credentials:
         type: secret
         nameSuffix: db-credentials
    

    你可以提供 nameSuffix,这意味着在前缀 <applicationName>- 之后添加的名称,或者使用 name 提供 secret 的静态名称

    注意: envFrom 后的第一个键仅用于唯一标识 envFrom 块中的不同对象。确保保持其唯一性和相关性

配置探针

要禁用存活或就绪探针,将 enabled 的值设置为 false

  livenessProbe:
    enabled: false

默认情况下,探针处理程序类型是 httpGet。你只需要根据需要覆盖 portpath

  livenessProbe:
    enabled: true
    httpGet:
      path: '/path'
      port: 8080

要使用 exec 处理程序,你可以在 values.yaml 中定义 livenessProbe.exec 字段。

  livenessProbe:
    enabled: true
    exec:
      command:
        - cat
        - /tmp/healthy
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号