Flink、Kubernetes 和 Linkerd

问题描述 投票:0回答:0

我正在部署一些 Flink 作业,这些作业需要访问通过 Linkerd 实现的服务网格下的某些服务。有时,我遇到这个错误:

java.lang.NoClassDefFoundError: Could not initialize class foo.bar.Job 

这很奇怪,因为我有一些工作运行良好,但其他工作却出现此错误。我可以确认 jar 文件包含显然找不到的类,所以这不是 jar 本身的问题,但似乎与 Linkerd 有关。特别是,我对 jobmanager 和 taskmanager pod 使用了以下 pod 注释(取自我的 Helm Chart 值文件):

podAnnotations:
  linkerd.io/inject: enabled
  config.linkerd.io/skip-outbound-ports: 6123,6124
  config.linkerd.io/proxy-await: enabled

值得一提的是,我正在使用 Ververica 平台(社区版)将我的工作部署到 Kubernetes,尽管我不认为这个问题是特定于 VVP 的:

{{- define "vvp.deployment" }}
kind: Deployment
apiVersion: v1
metadata:
  name: my-job
spec:
  template:
    spec:
      artifact:
        kind: jar
        flinkImageRegistry: {{ .Values.flink.imageRegistry }}
        flinkVersion: "1.15.1"
        flinkImageTag: 1.15.1-stream1-scala_2.12-java11-linkerd
        entryClass: foo.bar.Job
      kubernetes:
        jobManagerPodTemplate:
          metadata:
            {{- with .Values.flink.podAnnotations }}
            annotations:
              {{- toYaml . | nindent 14 }}
            {{- end }}
          spec:
            containers:
              - name: flink-jobmanager
                command:
                  - linkerd-entrypoint.sh
        taskManagerPodTemplate:
          metadata:
            {{- with .Values.flink.podAnnotations }}
            annotations:
              {{- toYaml . | nindent 14 }}
            {{- end }}
{{- end }}

其中

linkered-entrypoint.sh
的内容是:

#!/bin/bash
set -e
exec linkerd-await --shutdown -- "$@"

对于额外的上下文,VVP 和 flink 作业被部署到不同的命名空间中。此外,对于 VVP pod,我没有使用任何 linkerd 注释。

明确地说,如果我从 jobmanager/taskmanager pod 中删除注释/与 Linkerd 相关的所有内容,一切都会按预期进行。

有没有人遇到过类似的问题?我错过了什么吗?我还应该为 VVP pod 使用

linkerd.io/inject: enabled
注释吗?到目前为止,我找到的最接近的故障排除资源/指南是这个,它针对的是 Istio 而不是 Linkerd。

kubernetes apache-flink kubernetes-helm linkerd
© www.soinside.com 2019 - 2024. All rights reserved.