Flink Kubernetes部署HPA报错:无法获取目标规模,请求技术协助
问题场景
已通过以下YAML部署Flink有状态应用,作业运行正常:
apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: operational-reporting-15gb spec: image:.azurecr.io/stateful-app-v2 flinkVersion: v1_15 flinkConfiguration: taskmanager.numberOfTaskSlots: "2" state.savepoints.dir: abfs://flinktest@.dfs.core.windows.net/savepoints.v2 state.checkpoints.dir: abfs://flinktest@.dfs.core.windows.net/checkpoints.v2 high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory high-availability.storageDir: abfs://flinktest@.dfs.core.windows.net/ha.v2 serviceAccount: flink jobManager: resource: memory: "15360m" cpu: 2 taskManager: resource: memory: "15360m" cpu: 3 podTemplate: spec: containers: - name: flink-main-container volumeMounts: - mountPath: /flink-data name: flink-volume volumes: - name: flink-volume emptyDir: {} job: jarURI: local:///opt/operationalReporting.jar parallelism: 1 upgradeMode: savepoint state: running
为实现自动扩缩容创建了如下HPA:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: basic-hpa namespace: default spec: minReplicas: 1 maxReplicas: 15 metrics: - type: Resource resource: name: memory target: type: Utilization averageValue: 100m scaleTargetRef: apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment name: operational-reporting-15gb
但HPA状态报错:
Type Status Reason Message
AbleToScale False FailedGetScale the HPA controller was unable to get the target's current scale: flinkdeployments.flink.apache.org "operational-reporting-15gb" not found
Events:
Type Reason Age From MessageWarning FailedGetScale 4m4s (x121 over 34m) horizontal-pod-autoscaler flinkdeployments.flink.apache.org "operational-reporting-15gb" not found
HPA目标状态显示UNKNOWN,以下是排查步骤:
排查步骤
检查命名空间一致性
HPA明确指定了namespace: default,先确认FlinkDeployment是否部署在default命名空间:kubectl get flinkdeployments.flink.apache.org operational-reporting-15gb -n default如果返回
NotFound,说明FlinkDeployment在其他命名空间,执行以下命令查找其所在空间:kubectl get flinkdeployments.flink.apache.org operational-reporting-15gb --all-namespaces找到后修改HPA的
metadata.namespace为对应命名空间即可。确认Flink CRD是否正确安装
HPA需要识别FlinkDeployment自定义资源,检查CRD是否存在:kubectl get crd flinkdeployments.flink.apache.org如果CRD不存在,需重新安装对应Flink 1.15版本的Kubernetes Operator,确保CRD被正确部署。
核对资源名称拼写
检查HPA的scaleTargetRef.name与FlinkDeployment的metadata.name是否完全一致,注意大小写、连字符等细节,避免拼写错误。验证API版本与Operator兼容性
确认集群支持autoscaling/v2版本的HPA(Kubernetes 1.23+默认支持),同时检查Flink Kubernetes Operator版本是否兼容Flink 1.15且支持HPA扩缩容(Operator 1.1.x及以上版本支持该功能)。检查HPA控制器的RBAC权限
HPA控制器需要具备获取FlinkDeployment资源的权限,确认其使用的ServiceAccount(默认在kube-system命名空间下的horizontal-pod-autoscaler)拥有flinkdeployments.flink.apache.org的get、list权限。可通过查看对应的ClusterRole或Role规则确认:kubectl describe clusterrole <hpa-cluster-role-name> | grep flinkdeployments
内容的提问来源于stack exchange,提问作者user1112259

