我已经按照https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/kubernetes/#session-mode在 Kubernetes 上部署了 Apache Flink 会话模式,并且尚未将 sql 客户端连接到 JobManager 实例。
我尝试将conf/flink-conf.yaml中的
jobmanager.rpc.address
更改为localhost
以及jobmanager
、flink-jobmanager
和flink-jobmanager-<k8s pod id>
。我还尝试将 FLINK_PROPERTIES 环境变量更新为上述 4 个值中的每一个,但当我创建表并在其上运行 select ...
时,仍然看不到 JobManager 实例的输出。
作为参考,我能够运行
kubectl port-forward flink-jobmanager-<k8s pod id> 8081:8081
,然后通过导航到 localhost:8081
从浏览器打开 Flink Web UI。
我最终通过使用另一个专门针对 sql 客户端的作业模板来解决这个问题,以便它拉入 flink ConfigMap。只是分享给下一个有类似问题的人 -
apiVersion: batch/v1
kind: Job
metadata:
name: flink-sql-client
spec:
template:
metadata:
labels:
app: flink
component: sql-client
spec:
containers:
- name: sql-client
image: <image>
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
volumeMounts:
- name: flink-config-volume
mountPath: /opt/flink/conf/
securityContext:
runAsUser: 9999 # refers to user _flink_ from official flink image, change if necessary
restartPolicy: Never
volumes:
- name: flink-config-volume
configMap:
name: flink-config
items:
- key: flink-conf.yaml
path: flink-conf.yaml
- key: log4j-console.properties
path: log4j-console.properties
然后(在其他 yaml 之后这里),
kc create sql-client.yaml
kc exec --stdin --tty flink-sql-client-<assigned pod id> -- /bin/bash
bin/sql-client.sh
这应该创建一个永不消亡的作业,并由其他 flink 组件使用 ConfigMap。