istio部署-helm


參考

1. Istio Chart 目錄結構

  • PATH: istio-1.1.7/install/kubernetes/helm

1.1 Chart.yaml

  • Chart 的基礎信息文件,其中包含版本號,名稱,關鍵字等元數據信息。

1.2 values-*.yaml

  • 提供 istio 在各種場景下的關鍵配置范本,范本文件可以作為 helm 的輸入文件,對 istio 進行典型定制;
  • 對輸入文件改寫后,使用 helm template 命令生成最終的部署文件。

1.3 requirements.yaml

  • 用於管理對子 Chart 的依賴關系,其中定義了一系列開關變量‘
  • 在 helm 的輸入內容中對相關變量進行定義,就可以對 istio 的部署文件進行修改,來控制對應組件的啟用狀態。

1.4 templates

1.4.1 _affinity.tpl

  • 生成一組節點親和或互斥元素,供各個組件在渲染 yaml 時使用;
  • 在該文件里使用一系列變量,用於控制 istio 組件的節點親和性,即 istio 在部署時對節點的選擇。
  • 定義了兩個局部模版:
    • nodeAffinityRequiredDuringScheduling: 會根據全局變量中的 arch 參數對部署節點進行限制;istio 組件的 pod 會根據 arch 參數中的服務器類型列表來決定是否部署到某一台服務器上,並根據各種服務器類型的權重來決定優先級。
    • nodeAffinityPreferredDuringScheduling: 類似 nodeAffinityRequiredDuringScheduling,但是軟限制

1.4.2 sidecar-injector-configmap.yaml

  • 該文件最終會生成一個 ConfigMap 對象,在該對象中保存的配置數據被用於進行 Sidecar 注入;
  • istio 完成的手工注入或自動注入,都會引用這個 ConfigMap 對象,即如果希望修改 istio 的 Sidecar 的注入過程及具體行為,可以從該文件或對應的 ConfigMap 入手。

1.4.3 configmap.yaml

  • 生成名為 istioConfigMap 對象,用於為 Pilot 提供啟動配置數據。

1.5 charts

目錄中的子目錄就是istio組件:

  • certmanager: 一個基於 Jetstack Cert-Manager 項目的 ACME 證書客戶端,用於自動進行證書的申請,獲取與分發。
  • galley:istio 利用 galley 進行配置管理工作。
  • gateways: 對 gateways chart 進行配置,可以安裝多個 gateway controller。
  • grafana:圖形化的 istio dashboard。
  • ingress: 遺留設計,默認關閉,在流量控制協議升級到 network.istio.io/v1alpha3 之后關閉,已建議棄用。
  • kiali: 帶有分布式跟蹤,配置校驗等多項功能的 dashboard。
  • mixer: istio 的策略實施組件。
  • pilot: istio 的流量管理組件。
  • prometheus: 監控軟件,其中包含 istio 特定的指標抓取設置。
  • security: citadel 組件,用於證書自動管理。
  • servicegraph:分布式跟蹤組件,用於獲取和展示服務調用關系圖,即將廢除。
  • sidecarInjectorWebhook:自動注入 Webhook 的相關配置。
  • tracing:分布式跟蹤組件,使用 Jaeger 實現,替代原 servicegraph 組件。

2. 全局變量

istio chart 分為父子兩層,因此變量具有全局與本地兩級。

  • 全局變量使用保留字 global 進行定義;
  • 子 chart 可以通過 values.global的方式引用全局變量;
  • 在主 chart 中也可以用 chart.var 的方式為子 chart 指定變量值。

2.1 hub & tag

  • 在多數情況下,這兩個變量代表所有鏡像的地址,具體名稱一般以 {{ .Values.global.hub }}/[component]/:{{ .Values.global.tag }} 的形式拼接而成;
  • proxy_initMixerGrafanaPilot 的 Deployment 模板中 ,一旦在其 image 變量中包含路徑符 "/" ,則會棄用 global.hub ,直接采用 image 的定義。

2.2 ingress.enabled

  • 用來控制是否啟用 istio 的 ingress controller;
  • 設置為 True ,就會啟用對 Kubernetes Ingress 資源的支持,這是一個兼容功能,istio 並不推薦 ingress 的使用方式,建議使用 ingress gateway 取代;
  • k8sIngressSelector & k8sIngressHttps 兩個變量受 ingress.enabled 影響(設置為 True 時,兩個變量相關內容才生效)。

2.3 proxy相關參數

在 values.yaml 中定義了一組 proxy 變量,用於對 Sidecar 進行控制。

2.3.1 proxy.resources

  • 用於為 Sidecar 分配資源。

2.3.2 proxy.concurrency

  • Proxy Worker 的線程數量;
  • 如果被設置為 0 (default),則根據 CPU 線程或核的數量進行分配。

2.3.3 proxy.accessLogFile

  • Sidecar 的訪問日志位置;
  • 如果被設置為空字符串,表示關閉訪問日志功能;
  • 默認值:/dev/stdout 。

2.3.4 proxy.privileged

  • istio-init & istio-proxy 的特權模式開關,默認值 false

2.3.5 proxy.enableCoreDump

  • 如果打開,則新注入的 Sidecar 會啟動 CoreDump 功能,在 Pod 中加入初始化容器 enable-core-dump
  • 默認值 false

2.3.6 proxy.includeIPRanges

  • 劫持 IP 范圍的白名單;
  • 默認值 * ,表示劫持所有流量;
  • sidecar-injector-configmap.yaml 中應用了這個變量,用於生成 istio-sidecar-injector 這個 ConfigMap,此 ConfigMap 設置了 istio-init 的運行參數,proxy.includeIPRanges 通過對 istio-init 的"-i" 參數進行修改來完成這一個任務。

2.3.7 proxy.excludeIPRanges

  • 劫持 IP 范圍的黑名單;
  • 默認值為空字符串,表示劫持該范圍以外的IP;
  • proxy.excludeIPRanges 影響 istio-init 的"-x" 參數。

2.3.8 proxy.includeInboundPorts

  • 入站流量的端口劫持白名單;
  • 所有從范圍內的端口進入 Pod 的流量都會被劫持;
  • proxy.includeInboundPorts 影響 istio-init 的"-b" 參數。

2.3.9 proxy.excludeInboundPorts

  • 入站流量的端口劫持黑名單;
  • 端口范圍之外的入站流量會被劫持;
  • proxy.excludeInboundPorts 影響 istio-init 的"-d" 參數。

2.3.10 proxy.autoInject

  • 用於控制是否自動完成 Sidecar 的注入工作。

2.3.11 proxy.envoyStatsd

  • 默認值如下:
    • enabled: true
    • host: istio-statsd-prom-bridge
    • port: 9125
  • 參數會設置 Envoy 的 "--statsdUdpAddress" 參數,在某些參數下(如沒有安裝 Mixer)可以關閉。

2.4 proxy_init.image

  • 用於指定初始化容器鏡像。網格中的服務 Pod 在啟動之前,首先會運行一個初始化鏡像來完成流量劫持工作。

2.5 imagePullPolicy

  • 鏡像拉取策略;
  • 默認值 IfNotPresent

2.6 controlPlaneSecurityEnabled

  • 指定是否在 istio 控制面組件上啟用 mTLS 通信;
  • 啟用之后,Sidecar 與控制面組件之間,以及控制平面組件之間的通信,都會被改成 mTLS 方式;
  • 受影響組件包括:Ingress , Mixer ,Pilot 及 Sidecar。

2.7 disablePloicyChecks

  • 設置為 True ,則會禁用 Mixer 的預檢功能;
  • 預檢功能是一個同步過程,有可能因預檢緩慢造成業務應用的阻塞。

2.8 enableTracing

  • 是否啟用分布式跟蹤功能;
  • 默認值 true

2.9 mtls.enabled

  • 服務之間是否默認啟用 mTLS 連接;
  • 如果被設置為 true ,那么網格內部所有服務之間的通信都會使用 mTLS 進行安全加固;
  • 此變量是全局的,對於每個服務還可以單獨使用目標規則或通過服務注解的方式,自行決定是否采用 mTLS 加固。

2.10 imagePullSecrets

  • 用於為 ServiceAccount 分配在鏡像拉取過程中所需要的認證憑據;
  • 默認值為空。

2.11 arch

  • 在設置 istio 組件的節點親和性過程中,會使用此變量的列表內容來確定可以用於部署的節點范圍,並按照不同的服務器架構設置優先順序;
  • 默認列表內容如下:
    amd64: 2
    s390x: 2
    ppc64le: 2
    

2.12 oneNamespace

  • 默認值 false ,Pilot 會監控所有命名空間內的服務變化;
  • 如果設置為 true ,則會在 Pilot 的服務發現參數中加入 "-a",此時 Pilot 只會對 istio 組件所在命名空間進行監控。

2.13 configValidation

  • 用於配置是否開啟服務端的配置驗證;
  • 默認值 true
  • 開啟之后,會生成1個 "ValidatingWebhookConfiguration" 對象,並被包含到 Galley 的配置中,從而啟用校驗功能。

2.14 meshExpansion

  • 需要將網格擴展到物理機或虛擬機上時,使用此變量;
  • 默認值 false
  • 開啟之后,會在 Ingress Gateway 上公開 Pilot 與 Citadel 的服務。

2.15 meshExpansionILB

  • 是否在內部網關中公開 Pilot 與 Citadel 的端口;
  • 默認值 false ,僅在網格擴展時會使用此變量。

2.16 defaultResources

  • 為所有 istio 組件都提供1個最小資源限制;
  • 默認只設置1個請求 10m CPU 資源的值;
  • 可在各 Chart 的局部變量中分別設置資源需求。

2.17 hyperkube

  • 在 istio 的設置過程會使用一個鏡像執行一些 Job,如早期版本安裝過程中的 CRD 初始化,或現在的清理過期證書等任務;
  • 鏡像默認使用:quay.io/coreos:v1.7.6_coreos.0

2.18 priorityClassName

  • 在 Kubernetes v1.11.0 以上版本有 priorityClass 的概念,具有優先級的 Pod 不會被驅逐或搶占資源;
  • 默認值為空 ,可選值:system-cluster-criticalsystem-node-critical

2.19 crds

  • 該變量用於決定是否包含 CRD 定義;
  • 如果使用 heml template 命令,或 2.10 以上版本的 heml install 命令,應將其設置為 true
  • 否則在安裝之前需要執行 kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml,並將該變量設置為 false

3. 自定義安裝

3.1 Install with Helm via helm template

根據實際需求定制 values.yaml 文件,包括各子 Chart 的 values.yaml 。如:

  • 鏡像地址
  • 系統資源
  • 服務類型
  • 可視化組件的服務開放

3.1.1 准備

# 創建 "namespace"
kubectl create namespace istio-system

# 安裝 Istio Custom Resource Definitions (CRDs)
helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -

# "CRDs" 部署后,需要等待一些時間(3~5min),待其完全向 Kubernetes API-servera 注冊提交
# "CRDs" 數量默認是 "53",如果啟用 "cert-manager" ,則是 "58" 
# istio "CRDs" 以 "istio.io" 或 "certmanager.k8s.io" 結尾
kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l

3.1.2 生成部署清單

# --name: 設置生成的部署內容的基礎名稱;
# --namespace: 設置命名空間;
# -f: 從指定文件獲取輸入內容。
helm template install/kubernetes/helm/istio --name istio --namespace istio-system -f values-demo.yaml > istio-demo.yaml

3.1.3 部署

# default profile 
# helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -

# 采用生成的部署清單
kubectl apply -f istio-demo.yaml

3.2 Install with Helm and Tiller via helm install

  • helm install 方式需要 Tiller 服務器端,不會生成清單文件;
  • 如果需要管理 release,建議使用此方式。
  • 參考:helm install


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM