本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 IPv6 叢集上執行 EMR on EKS
您可以在 IPv6 Amazon EKS 叢集上執行 Amazon EMR on EKS 工作負載,以利用更大的地址空間,並在您的Kubernetes環境擴展時避免 IPv4 地址耗盡。
如需有關建立 IPv6 Amazon EKS 叢集的資訊,請參閱《Amazon EKS 使用者指南》中的叢集、Pod 和服務 IPv6 地址。
支援的提交模型
IPv6 Amazon EKS 叢集支援下列提交模型:
-
StartJobRun -
Spark Connect 互動式端點
-
Amazon SageMaker Unified Studio
-
Spark 運算子
-
Flink 運算子
-
Livy 運算子
不支援的提交模型
IPv6 叢集不支援 Jupyter Enterprise Gateway (JEG) 端點。
不需要額外組態的提交模型
對於下列提交模型,您可以在 IPv6 叢集上設定和提交 Amazon EMR 工作負載,方法與 IPv4 相同。不需要額外的組態:
-
StartJobRun -
Spark Connect 互動式端點
-
Amazon SageMaker Unified Studio
運算子型提交模型
以運算子為基礎的提交模型需要額外的組態,以實現 IPv6 相容性。下列各節說明每個運算子所需的組態。
Spark 運算子
若要在 IPv6 叢集上執行 Spark Operator 工作負載,請將下列 Spark 組態新增至您的SparkApplication規格。所有支援的版本都需要此組態。
spec: sparkConf: "spark.kubernetes.driver.service.ipFamilies": "IPv6"
此組態會通知Kubernetes用戶端使用 IPv6 IP 系列建立 Spark 驅動程式服務。如果沒有此功能,驅動程式服務會預設為 IPv4,這在IPv6-only的叢集上不受支援。
此外,對於emr-7.x版本,您必須在 Spark Operator 部署上設定此環境變數,以套用下列解決方法:
KUBERNETES_DISABLE_HOSTNAME_VERIFICATION=true
安裝 Spark 運算子之後,請執行下列命令來設定環境變數:
kubectl set env deployment/spark-operator-deployment-name\ KUBERNETES_DISABLE_HOSTNAME_VERIFICATION=true \ -nspark-operator-namespace
此解決方法解決了 GitHub 上 IPv6 主機名稱驗證的已知問題emr-7.x 版本使用依賴 OkHttp 3.x 的 fabric8 Kubernetes用戶端版本,這會在透過 IPv6 連線至 Kubernetes API 伺服器時失敗 TLS 主機名稱驗證。
Flink 運算子
若要在 IPv6 叢集上執行 Flink Operator 工作負載,您必須在 Flink Operator Pod 和您的FlinkDeployment任務 Pod 上設定下列環境變數:
KUBERNETES_DISABLE_HOSTNAME_VERIFICATION=true
此解決方法解決了 Spark Operator 區段所述的相同 OkHttp 3.x IPv6 主機名稱驗證問題。如需詳細資訊,請參閱 Apache Flink Kubernetes Operator 文件中的 IPv6 組態
在 Flink Operator Pod 上設定環境變數
在 期間設定環境變數helm install:
helm installmy-flink-operatorchart\ --set operatorPod.env[0].name=KUBERNETES_DISABLE_HOSTNAME_VERIFICATION \ --set-string operatorPod.env[0].value=true
在 FlinkDeployment 任務 Pod 上設定環境變數
透過 FlinkDeployment YAML 中的 Pod 範本注入環境變數:
spec: podTemplate: spec: containers: - name: flink-main-container env: - name: KUBERNETES_DISABLE_HOSTNAME_VERIFICATION value: "true"
Livy 運算子
若要在 IPv6 叢集上執行 Livy Operator 工作負載,您必須設定兩個項目:
-
Dualstack 負載平衡器註釋 — 在安裝 Livy helm Chart 時新增下列註釋,以便 AWS Load Balancer控制器佈建雙堆疊 Network Load Balancer:
helm installmy-livychart\ --set "service.annotations.service\.beta\.kubernetes\.io/aws-load-balancer-ip-address-type=dualstack" -
Spark 驅動程式服務 IPv6 組態 — 當您透過 Livy 提交 Spark 任務時,請包含
spark.kubernetes.driver.service.ipFamilies組態:{ "conf": { "spark.kubernetes.driver.service.ipFamilies": "IPv6" } }
支援的版本
下表顯示依提交模型和 Amazon EMR 發行版本的 IPv6 支援。emr-spark-8.x 版本為 Spark 限定版本,不包含 Flink。
| 提交模型 | emr-7.14.0 和更新版本的 7.x |
emr-spark-8.0.0 |
emr-spark-8.1.0+ |
|---|---|---|---|
StartJobRun |
✅ 支援的 |
✅ 支援的 |
✅ 支援的 |
Spark Connect 互動式端點 |
✅ 支援的 |
✅ 支援的 |
✅ 支援的 |
Amazon SageMaker Unified Studio |
✅ 支援的 |
✅ 支援的 |
✅ 支援的 |
Spark 運算子 |
✅ 支援的1、2 |
❌ 不支援 |
✅ 支援的 2 |
Flink 運算子 |
✅ 支援的 1 |
N/A |
N/A |
Livy 運算子 |
✅ 支援的 2 |
✅ 支援的 2 |
✅ 支援的 2 |
1 需要此提交模型上一節所述的KUBERNETES_DISABLE_HOSTNAME_VERIFICATION解決方法。
2 需要此提交模型上一節所述的其他組態。
疑難排解
以下是您在 IPv6 叢集上執行 Amazon EMR on EKS 工作負載時可能遇到的常見錯誤。
錯誤: 【】 中包含的預期主機名稱或 IPv6 IP
java.lang.AssertionError: assertion failed: Expected hostname or IPv6 IP enclosed in [] but got 2600:1f14:31b1:d102:d812::2
原因:您使用的 Amazon EMR 版本不支援 IPv6。早於 的版本emr-7.14.0不包含必要的 IPv6 修正。
解決方案:升級至 emr-7.14.0或更新版本。如需支援版本的完整清單,支援的版本請參閱 。
錯誤:SSLPeerUnverifiedException 主機名稱未驗證
javax.net.ssl.SSLPeerUnverifiedException: Hostname fd0f:f96c:1438::1 not verified
原因:Spark 或 Flink Operator Pod 沒有設定KUBERNETES_DISABLE_HOSTNAME_VERIFICATION=true環境變數。當 Kubernetes API 伺服器使用 IPv6 地址時,OkHttp 3.x 無法驗證 TLS 主機名稱。
解決方案:在運算子 Pod KUBERNETES_DISABLE_HOSTNAME_VERIFICATION=true上設定 。請參閱 Spark 運算子 或 Flink 運算子。
錯誤:此叢集上未設定無效值 "IPv4"
Service "...-driver-svc" is invalid: spec.ipFamilies[0]: Invalid value: "IPv4": not configured on this cluster
原因:Spark 應用程式不包含 spark.kubernetes.driver.service.ipFamilies=IPv6組態。如果沒有此設定,Spark 會嘗試使用IPv6-only叢集拒絕的 IPv4 建立驅動程式服務。
解決方案:將 "spark.kubernetes.driver.service.ipFamilies": "IPv6"新增至您的 sparkConf(適用於 Spark Operator) 或 Livy 批次提交中的conf物件。請參閱 Spark 運算子 或 Livy 運算子。