You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flink Kubernetes Operator部署Flink任务失败求助

场景一错误根源与修复

错误原因

  1. FLINK_HOME路径配置错误:自定义docker-entrypoint.sh中FLINK_HOME被设置为/opt/flink/bin,正确路径应为/opt/flink。这导致脚本无法正确定位Flink的启动脚本目录,进而找不到kubernetes-jobmanager.sh命令。
  2. 未适配Operator的启动命令:Flink Operator会传入kubernetes-jobmanager.sh kubernetes-application这类K8s专属启动命令,但原脚本仅处理job-cluster/task-manager两种命令,无法直接执行传入的命令。

修复后的docker-entrypoint.sh

#!/bin/bash

### If unspecified, the hostname of the container is taken as the JobManager address
FLINK_HOME=${FLINK_HOME:-"/opt/flink"}
export PATH=$FLINK_HOME/bin:$PATH

JOB_CLUSTER="job-cluster"
TASK_MANAGER="task-manager"

CMD="$1"
shift;

if [ "${CMD}" == "--help" -o "${CMD}" == "-h" ]; then
    echo "Usage: $(basename $0) (${JOB_CLUSTER}|${TASK_MANAGER})"
    exit 0
elif [ "${CMD}" == "${JOB_CLUSTER}" -o "${CMD}" == "${TASK_MANAGER}" ]; then
    echo "Starting the ${CMD}"

    if [ "${CMD}" == "${TASK_MANAGER}" ]; then
        exec $FLINK_HOME/bin/taskmanager.sh start-foreground "$@"
    else
        exec $FLINK_HOME/bin/standalone-job.sh start-foreground "$@"
    fi
fi

exec "$@"

场景二错误根源与修复

错误原因

  1. 自定义脚本缺少执行权限:Dockerfile中仅复制了custom-docker-entrypoint.sh到容器,但未添加执行权限,导致容器启动时无法执行该脚本。
  2. Jar路径配置错误:原FlinkDeployment中jarURI指向/home/gradle/app/lib/job.jar,但Dockerfile已将Jar复制到/opt/flink/lib/job.jar,路径不匹配会导致Job无法加载。

修复后的Dockerfile

FROM openjdk:11 AS job-build
WORKDIR /home/gradle/app/

COPY build.gradle settings.gradle ./
COPY gradlew ./
COPY gradle gradle
RUN echo "class Dummy {}" > Dummy.java
RUN ./gradlew build
COPY . .
RUN rm Dummy.java
RUN ./gradlew build
RUN mv /home/gradle/app/build/libs/rrr-rule-calculation_v1*-deploy.jar /home/gradle/app/build/libs/rrr-rule-calculation_v1-deploy.jar

FROM flink:1.17

COPY --from=job-build /home/gradle/app/build/libs/rrr-rule-calculation_v1-deploy.jar lib/job.jar
COPY custom-docker-entrypoint.sh /
# 添加脚本执行权限
RUN chmod +x /custom-docker-entrypoint.sh

USER flink
EXPOSE 8081 6123
ENTRYPOINT ["/custom-docker-entrypoint.sh"]

修复后的FlinkDeployment配置

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-example-w-file-path
spec:
  image: flink-job-fraud-demo:latest
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
    kubernetes.entry.path: "/custom-docker-entrypoint.sh"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/lib/job.jar
    parallelism: 2
    upgradeMode: stateless
    state: running

验证步骤

  1. 在Minikube环境下执行eval $(minikube docker-env)切换到本地镜像环境
  2. 重新构建镜像:docker build -t flink-job-fraud-demo:latest .
  3. 重新部署:kubectl apply -f <your-deployment-file.yaml>
  4. 查看Pod状态与日志:
    kubectl get pods
    kubectl logs -f <pod-name>
    

内容的提问来源于stack exchange,提问作者yokus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:43:18