Terraform部署Rancher启用集群监控报422错误求助
问题背景
在AWS ap-south-1区域使用Terraform 1.1.9版本部署Rancher环境,所用组件版本如下:
- Rancher版本:Rocky-8.5-rancher-2.6.3
- Kubernetes版本:v1.21.7-rancher1-1
- Kubernetes provider:2.11.0
- Helm provider:2.5.1
- Rancher2 provider:1.24.0
- rancher/rke:1.3.0
- cert-manager:1.5.0
执行terraform apply操作时抛出错误,已尝试0.1.0、0.1.4、0.3.1、0.3.2多个cluster monitoring版本,问题仍未解决。
报错信息
╷ │ Error: Bad response statusCode [422]. Status [422 Unprocessable Entity]. Body: [baseType=error, code=InvalidBodyContent, message=cluster [c-xxgkz] status version is not available yet. Cannot validate kube version for template [system-library-rancher-monitoring-0.3.2]] from [https://ec2-13-232-176-25.ap-south-1.compute.amazonaws.com/v3/clusters/c-xxgkz?action=enableMonitoring] │ │ with module.rke_custom_cluster.rancher2_cluster.rancher2-custom-cluster, │ on .terraform/modules/rke_custom_cluster/rancher2_custom_cluster.tf line 20, in resource "rancher2_cluster" "rancher2-custom-cluster": │ 20: resource "rancher2_cluster" "rancher2-custom-cluster" { │ ╵
关联Terraform配置片段
resource "rancher2_cluster" "rancher2-custom-cluster" { name = var.rancher2_custom_cluster_name cluster_template_id = var.rke_template_id cluster_template_revision_id = var.rke_template_revisions_id enable_cluster_monitoring = var.enable_cluster_monitoring cluster_monitoring_input { answers = { "exporter-kubelets.https" = var.exporter_kubelets_https "exporter-node.enabled" = var.exporter_node_enabled "exporter-node.ports.metrics.port" = var.exporter_node_ports_metrics_port "exporter-node.resources.limits.cpu" = var.exporter_node_resources_limits_cpu "exporter-node.resources.limits.memory" = var.exporter_node_resources_limits_memory "grafana.persistence.enabled" = var.grafana_persistence_enabled "grafana.persistence.size" = var.grafana_persistence_size "grafana.persistence.storageClass" = var.grafana_persistence_storageClass "operator.resources.limits.memory" = var.operator_resources_limits_memory "prometheus.persistence.enabled" = var.prometheus_persistence_enabled "prometheus.persistence.size" = var.prometheus_persistence_size "prometheus.persistence.storageClass" = var.prometheus_persistence_storageClass "prometheus.persistent.useReleaseName" = var.prometheus_persistent_useReleaseName "prometheus.resources.core.limits.cpu" = var.prometheus_resources_core_limits_cpu, "prometheus.resources.core.limits.memory" = var.prometheus_resources_core_limits_memory "prometheus.resources.core.requests.cpu" = var.prometheus_resources_core_requests_cpu "prometheus.resources.core.requests.memory" = var.prometheus_resources_core_requests_memory "prometheus.retention" = var.prometheus_retention "grafana.nodeSelectors[0]" = var.node_selector "operator.nodeSelectors[0]" = var.node_selector "prometheus.nodeSelectors[0]" = var.node_selector "exporter-kube-state.nodeSelectors[0]" = var.node_selector } version = var.cluster_monitoring_version } #depends_on = [ null_resource.rke_custom_cluster_dependency_getter ] depends_on = [ null_resource.wait_for_rancher2 ] }
故障根因
报错核心原因是资源依赖顺序配置错误:当前配置仅依赖Rancher服务本身启动完成,没有等待下游RKE集群完全初始化、状态切换为active、Kubernetes版本信息同步到Rancher后端,就提前调用了enableMonitoring接口。此时监控模板无法完成Kubernetes版本兼容性校验,直接返回422参数错误。
另外配置中存在语法瑕疵:"prometheus.resources.core.limits.cpu" = var.prometheus_resources_core_limits_cpu,行尾多了冗余逗号,部分Terraform版本会出现map解析异常。
解决方案
- 先删除配置中answers块里
prometheus.resources.core.limits.cpu赋值行末尾的冗余逗号。 - 不要在
rancher2_cluster资源块中直接内嵌cluster_monitoring_input配置,将集群监控部署逻辑拆分为独立资源,避免集群创建过程中提前触发监控安装接口。 - 新增集群状态校验逻辑,确保下游RKE集群状态为
active、集群版本信息已成功上报Rancher后,再执行监控组件安装。如果不想拆分资源,需要将depends_on的依赖对象从仅等待Rancher启动的wait_for_rancher2,替换为等待所有集群节点就绪、Kubernetes组件全部启动完成的后置空资源,保证集群完全可用后再触发监控配置。 - 若集群初始化速度较慢,可增加3-5分钟的固定等待时间缓冲,避免Rancher后端状态同步延迟导致的接口校验失败。
内容的提问来源于stack exchange,提问作者sethu ram
相关产品推荐
相关产品推荐

