应用程序
用于以下类型应用程序的通用 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.affinity | Pod/节点的亲和性 | [] |
deployment.topologySpreadConstraints | 拓扑分布约束定义 | [] |
deployment.ports | 主容器的端口 | [] |
deployment.securityContext | Pod 的安全上下文 | {} |
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.fluentdConfigAnnotations | fluentd 配置的注释 | {} |
部署镜像参数
名称 | 描述 | 值 |
---|---|---|
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.name | Configmap 或 Secret 的名称,如果设置为空,则设置为应用程序名称 | `` |
deployment.envFrom.nameSuffix | Configmap 或 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.exec | Kubelet 执行指定命令来执行探针 | {} |
就绪探针
容器服务就绪状态的周期性探测。如果探测失败,容器将从服务端点中移除。
名称 | 描述 | 值 |
---|---|---|
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.exec | Kubelet 执行指定命令来执行探针 | {} |
存活探针
容器存活状态的周期性探测。如果探测失败,容器将被重启。
名称 | 描述 | 值 |
---|---|---|
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.exec | Kubelet 执行指定命令来执行探针 | {} |
部署 OpenshiftOAuthProxy 参数
名称 | 描述 | 值 |
---|---|---|
deployment.openshiftOAuthProxy.enabled | 添加 Openshift OAuth 代理作为边车容器 | false |
deployment.openshiftOAuthProxy.port | 应用端口,代理应该转发到此端口 | 8080 |
deployment.openshiftOAuthProxy.secretName | 包含 TLS 证书的 Secret 名称 | openshift-oauth-proxy-tls |
deployment.openshiftOAuthProxy.image | oauth 边车容器的镜像 | openshift/oauth-proxy:latest |
deployment.openshiftOAuthProxy.disableTLSArg | 如果禁用,将使用 --http-address=:8081 而不是 --https-address=:8443 | false |
部署 DNS 参数
名称 | 描述 | 值 |
---|---|---|
deployment.dnsConfig | 启用 Pod 干扰预算 | {} |
PodDisruptionBudget 参数
名称 | 描述 | 值 |
---|---|---|
pdb.enabled | 启用 Pod 干扰预算 | false |
pdb.minAvailable | 驱逐后必须可用的 Pod 数量。如果同时设置了 minAvailable 和 maxUnavailable,则优先选择 minAvailable | 1 |
pdb.maxUnavailable | 驱逐后可以不可用的 Pod 数量。需要提供 minAvailable 或 maxUnavailable 之一 | `` |
持久化参数
名称 | 描述 | 值 |
---|---|---|
persistence.enabled | 启用持久化 | false |
persistence.mountPVC | 是否将创建的 PVC 挂载到部署中 | false |
persistence.mountPath | 如果设置了 persistence.mountPVC ,则在部署中挂载卷的位置 | / |
persistence.name | PVC 的名称。 | `` |
persistence.accessMode | 卷的访问模式 | ReadWriteOnce |
persistence.storageClass | 卷的存储类 | - |
名称 | 描述 | 值 |
--------------------------------- | ------------------------------------------------------------------------------ | ------------------------ |
secret.enabled | 启用 secret | false |
secret.additionalLabels | secret 的标签 | {} |
secret.annotations | secret 的注释 | {} |
secret.files | 带后缀的 secret 文件映射及其包含的数据 | {} |
secret.files.[name].stringData | 允许在 secret 中提供明文内容 | {} |
secret.files.[name].data | 允许在 secret 中提供将被 base64 编码的文本内容 | {} |
secret.files.[name].encodedData | 允许在 secret 中提供已经 base64 编码的文本内容 | {} |
ServiceMonitor 参数
名称 | 描述 | 值 |
---|---|---|
serviceMonitor.enabled | 启用 serviceMonitor | false |
serviceMonitor.additionalLabels | serviceMonitor 的标签 | {} |
serviceMonitor.annotations | serviceMonitor 的注释 | {} |
serviceMonitor.jobLabel | 用于应用选择器的作业标签 | k8s-app |
serviceMonitor.endpoints | Prometheus 抓取的端点数组 | - 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.additionalLabels | endpointMonitor 的标签 | {} |
endpointMonitor.annotations | endpointMonitor 的注释 | {} |
endpointMonitor.additionalConfig | endpointMonitor 的额外配置 | {} |
SealedSecret 参数
名称 | 描述 | 值 |
---|---|---|
sealedSecret.enabled | 启用 sealed secret | false |
sealedSecret.additionalLabels | sealed 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.renewBefore | cert-manager 开始尝试续签证书的时间,即当前颁发证书的 notAfter 时间之前的时间量 | 720h0m0s |
certificate.subject | 证书的完整 X509 名称规范 | {} |
certificate.commonName | DER 编码 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.inhibitRules | InhibitRule 定义了一个抑制规则,允许在其他警报已经触发时静音警报 | [] |
PrometheusRule 参数
名称 | 描述 | 值 |
---|---|---|
prometheusRule.enabled | 为此应用启用 prometheusRule | false |
prometheusRule.additionalLabels | Kubernetes 标签对象,这些附加标签将添加到 PrometheusRule CRD | {} |
prometheusRule.spec.groups | 要添加的 PrometheusRules 及其组 | [] |
SecretProviderClass 参数
名称 | 描述 | 值 |
---|---|---|
secretProviderClass.enabled | 启用 Secret Provider Class 自定义资源 | false |
secretProviderClass.name | Secret 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
,否则返回图表名称作为输出nameSuffix
是secret.files
、configMap.files
、sealedSecret.files
和externalSecret.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
。你只需要根据需要覆盖 port
和 path
。
livenessProbe:
enabled: true
httpGet:
path: '/path'
port: 8080
要使用 exec
处理程序,你可以在 values.yaml 中定义 livenessProbe.exec
字段。
livenessProbe:
enabled: true
exec:
command:
- cat
- /tmp/healthy