高级 Helm chart 自定义

    1. .
    2. 执行任何必要的特定于平台的设置.
    3. 检查 .
    4. 使用 helm 进行 Istio 安装.
    5. Helm 版本支持后期渲染。(>= 3.1)
    6. kubectl 或 kustomize 。

    高级 Helm chart 自定义

    Istio 的 helm chart 尝试结合用户满足其特定需求所需的大部分属性。 然而,它并不包含了所有您可能想要调整 Kubernetes 值。 虽然建立这样的机制并不实际,但在本文档中, 我们将演示一种方法,该方法允许您进行一些高级 helm chart 自定义,而无需直接修改 Istio 的 helm chart。

    使用 Helm post-renderer 功能,使用 Helm post-renderer 功能,你可以轻松地调整安装清单以满足你的要求。 Post-rendering 可在 Helm 安装前灵活地操作、配置、和/或验证已渲染的清单。 这使得具有高级配置需求的用户可以使用像 Kustomize 这样的工具来应用配置更改, 而不需要原始图表维护人员提供的任何额外支持。

    在本例中,我们将为 Istio 的 ingress-gateway 部署添加一个 sysctl 值。我们需要:

    1. 创建 sysctl 部署自定义补丁模板。
    2. 验证 sysctl 补丁是否已正确应用到 pod 中。

    下面的 shell 脚本有助于弥补 Helm post-renderer 和 Kustomize 之间的差距, 因为前者适用 stdin/stdout,而后者适用于文件。

    1. $ cat > kustomize.sh <<EOF
    2. #!/bin/sh
    3. cat > base.yaml
    4. exec kubectl kustomize # 如果你安装了它,你也可以使用 "kustomize build ."。
    5. $ chmod +x ./kustomize.sh

    最后,让我们创建 kustomization yaml 文件, 这是 kustomize 的一组资源和相关定制细节的输入。

    1. $ cat > kustomization.yaml <<EOF
    2. resources:
    3. - base.yaml
    4. patchesStrategicMerge:
    5. - sysctl-ingress-gw-customization.yaml
    6. EOF

    应用自定义

    现在 Kustomization 文件已经准备好了,让我们使用 Helm 来确保它被正确应用。

    1. $ helm template istio-ingress istio/gateway --namespace istio-ingress --post-renderer ./kustomize.sh | grep -B 2 -A 1 netfilter.nf_conntrack_tcp_timeout_close_wait

    在输出中,检查 ingress-gateway pod 中新增的 sysctl 属性:

    1. securityContext:
    2. sysctls:
    3. - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
    4. value: "10"

    使用以下命令来安装 Istio 入口网关,使用 Helm 来应用我们的自定义 post-renderer:

    检查 ingress-gateway 部署,您将看到新操作的 sysctl 值:

      1. apiVersion: apps/v1
      2. kind: Deployment
      3. metadata:
      4. name: istio-ingress
      5. namespace: istio-ingress
      6. spec:
      7. template:
      8. metadata:
      9. spec:
      10. securityContext:
      11. sysctls:
      12. - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait

      附加信息

      1. 高级 Helm 技术