高级 Helm chart 自定义
- .
- 执行任何必要的特定于平台的设置.
- 检查 .
- 使用 helm 进行 Istio 安装.
- Helm 版本支持后期渲染。(>= 3.1)
- 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
值。我们需要:
- 创建
sysctl
部署自定义补丁模板。 - 验证
sysctl
补丁是否已正确应用到 pod 中。
下面的 shell 脚本有助于弥补 Helm post-renderer
和 Kustomize 之间的差距, 因为前者适用 stdin/stdout
,而后者适用于文件。
$ cat > kustomize.sh <<EOF
#!/bin/sh
cat > base.yaml
exec kubectl kustomize # 如果你安装了它,你也可以使用 "kustomize build ."。
$ chmod +x ./kustomize.sh
最后,让我们创建 kustomization
yaml 文件, 这是 kustomize
的一组资源和相关定制细节的输入。
$ cat > kustomization.yaml <<EOF
resources:
- base.yaml
patchesStrategicMerge:
- sysctl-ingress-gw-customization.yaml
EOF
应用自定义
现在 Kustomization 文件已经准备好了,让我们使用 Helm 来确保它被正确应用。
$ 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
属性:
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
value: "10"
使用以下命令来安装 Istio 入口网关,使用 Helm 来应用我们的自定义 post-renderer
:
检查 ingress-gateway 部署,您将看到新操作的 sysctl
值:
apiVersion: apps/v1
kind: Deployment
metadata:
…
name: istio-ingress
namespace: istio-ingress
spec:
template:
metadata:
…
spec:
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait