高级 Helm Chart 自定义
先决条件
在开始之前,请检查以下先决条件
- 下载 Istio 版本.
- 执行任何必要的 平台特定设置。
- 查看 Pod 和服务的必要条件。
- 使用 helm 安装 Istio.
- 支持后渲染的 Helm 版本。(>= 3.1)
- kubectl 或 kustomize。
高级 Helm Chart 自定义
Istio 的 helm chart 尝试包含用户对其特定需求所需的大多数属性。但是,它不包含您可能想要调整的每个可能的 Kubernetes 值。虽然实施这种机制并不实用,但在此文档中,我们将演示一种方法,该方法允许您进行一些高级 helm chart 自定义,而无需直接修改 Istio 的 helm chart。
使用 Helm 和 kustomize 后渲染 Istio 图表
使用 Helm post-renderer
功能,您可以轻松地调整安装清单以满足您的需求。后渲染
提供了在 Helm 安装渲染的清单之前操作、配置和/或验证它们的灵活性。这使具有高级配置需求的用户能够使用 Kustomize 等工具应用配置更改,而无需原始 chart 维护人员提供任何额外支持。
向现有图表添加值
在此示例中,我们将向 Istio 的 ingress-gateway
部署添加一个 sysctl
值。我们将要
- 创建一个
sysctl
部署自定义补丁模板。 - 使用 Helm
后渲染
应用补丁。 - 验证
sysctl
补丁是否已正确应用于 Pod。
创建 Kustomization
首先,我们创建一个 sysctl
补丁文件,向 ingress-gateway
Pod 的 securityContext
添加具有附加属性。
$ cat > sysctl-ingress-gw-customization.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingress
namespace: istio-ingress
spec:
template:
spec:
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
value: "10"
EOF
下面的 shell 脚本有助于弥合 Helm post-renderer
和 Kustomize 之间的差距,因为前者使用 stdin/stdout
,而后者使用文件。
$ cat > kustomize.sh <<EOF
#!/bin/sh
cat > base.yaml
exec kubectl kustomize # you can also use "kustomize build ." if you have it installed.
EOF
$ chmod +x ./kustomize.sh
最后,让我们创建 kustomization
yaml 文件,它是 kustomize
的输入,包含一组资源和相关的自定义详细信息。
$ cat > kustomization.yaml <<EOF
resources:
- base.yaml
patchesStrategicMerge:
- sysctl-ingress-gw-customization.yaml
EOF
应用 Kustomization
现在 Kustomization 文件已准备就绪,让我们使用 Helm 确保它得到正确应用。
添加 Istio 的 Helm 仓库
$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update
使用 Helm 模板渲染和验证
我们可以使用 Helm post-renderer
在 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"
使用 Helm Post-Renderer
应用补丁
使用以下命令安装 Istio ingress-gateway,使用 Helm post-renderer
应用我们的自定义。
$ kubectl create ns istio-ingress
$ helm upgrade -i istio-ingress istio/gateway --namespace istio-ingress --wait --post-renderer ./kustomize.sh
验证 Kustomization
检查 ingress-gateway 部署,您将看到新修改的 sysctl
值。
$ kubectl -n istio-ingress get deployment istio-ingress -o yaml
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
value: "10"
其他信息
有关本文档中描述的概念和技术的更多详细信息,请参阅