進階 Helm Chart 自訂
先決條件
在開始之前,請檢查以下先決條件
- 下載 Istio 版本.
- 執行任何必要的平台特定設定。
- 檢查Pod 和服務的需求。
- 使用 Helm 安裝 Istio.
- 支援後渲染的 Helm 版本。(>= 3.1)
- kubectl 或 kustomize。
進階 Helm Chart 自訂
Istio 的 Helm 圖表嘗試納入使用者針對其特定需求所需的大部分屬性。但是,它不包含您可能想要調整的每個可能的 Kubernetes 值。雖然擁有這樣的機制並不實際,但在此文件中,我們將示範一種方法,讓您可以進行一些進階的 Helm 圖表自訂,而無需直接修改 Istio 的 Helm 圖表。
使用 Helm 和 kustomize 來後渲染 Istio 圖表
使用 Helm 的 post-renderer
功能,您可以輕鬆調整安裝清單以滿足您的需求。Post-rendering
提供了彈性,讓您可以在 Helm 安裝之前操作、配置和/或驗證渲染後的清單。這讓具有進階配置需求的用戶可以使用像 Kustomize 這樣的工具來應用配置變更,而無需原始 Chart 維護者的任何額外支援。
將值新增至已存在的圖表
在這個範例中,我們將為 Istio 的 ingress-gateway
部署新增一個 sysctl
值。我們將會:
- 建立一個
sysctl
部署自訂修補程式範本。 - 使用 Helm
post-rendering
應用修補程式。 - 驗證
sysctl
修補程式是否已正確應用到 Pod。
建立 Kustomization
首先,我們建立一個 sysctl
修補程式檔案,將一個 securityContext
新增到 ingress-gateway
Pod,並帶有額外的屬性。
$ 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 Template 渲染和驗證
我們可以使用 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"
其他資訊
有關本文件中描述的概念和技術的更多詳細資訊,請參閱: