[
https://issues.apache.org/jira/browse/FLINK-35695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17861156#comment-17861156
]
Mate Czagany commented on FLINK-35695:
--------------------------------------
h2. Setup
Build flink and flink-docker using the documentation found in the corresponding
repositories.
To enable S3 support, I have moved `flink-s3-fs-hadoop` lib to plugins/ folder
locally.
We also need minio, on Minikube I have applied the following YAML and added
`minio` to /etc/hosts:
{code:java}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minio
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio
spec:
selector:
matchLabels:
app: minio
strategy:
type: Recreate
template:
metadata:
labels:
app: minio
spec:
volumes:
- name: data
persistentVolumeClaim:
claimName: minio
containers:
- name: minio
volumeMounts:
- name: data
mountPath: "/data"
image: minio/minio:latest
args:
- server
- /data
- --console-address
- ":9001"
env:
- name: MINIO_ACCESS_KEY
value: "admin"
- name: MINIO_SECRET_KEY
value: "password"
ports:
- containerPort: 9000
name: data
- containerPort: 9001
name: web
---
apiVersion: v1
kind: Service
metadata:
name: minio
labels:
app: minio
spec:
ports:
- port: 9000
name: data
- port: 9001
name: web
clusterIP: None
selector:
app: minio
{code}
In all Flink applications, I added the next to the default configs in
`config.yaml`:
{code:java}
s3:
access-key: admin
secret-key: password
endpoint: http://minio:9000
path.style.access: true
{code}
h2. Deploy local job JAR as the only dependency:
{code:java}
./bin/flink run-application \
--target kubernetes-application \
-Dkubernetes.service-account=flink \
-Dkubernetes.container.image.ref=flink:1.20 \
-Dkubernetes.artifacts.local-upload-enabled=true \
-Dkubernetes.artifacts.local-upload-target=s3://test/ \
-Dcontainerized.taskmanager.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.20-SNAPSHOT.jar
\
-Dcontainerized.master.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.20-SNAPSHOT.jar
\
local://$(pwd)/examples/streaming/StateMachineExample.jar{code}
!image-2024-07-01-14-54-17-770.png|width=862,height=261!
* Verified in the logs that the JAR was uploaded to
`s3://test/StateMachineExample.jar`.
* Verified that job is running
* Verified the following can be found in the JM pod logs:
{code:java}
INFO [] - Loading configuration property: pipeline.jars,
['s3://test/StateMachineExample.jar']
{code}
h2. Deploy job with a local job JAR, and further dependencies
This will also copy udf2.jar from "other-bucket" to the "test" bucket, so that
will also need to be created.
{code:java}
./bin/flink run-application \
--target kubernetes-application \
-Dkubernetes.service-account=flink \
-Dkubernetes.container.image.ref=flink:1.20 \
-Dkubernetes.artifacts.local-upload-enabled=true \
-Dkubernetes.artifacts.local-upload-target=s3://test/ \
-Dcontainerized.taskmanager.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.20-SNAPSHOT.jar
\
-Dcontainerized.master.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.20-SNAPSHOT.jar
\
-Duser.artifacts.artifact-list=local://$(pwd)/examples/table/GettingStartedExample.jar\;s3://other-bucket/udf2.jar
\
local://$(pwd)/examples/streaming/StateMachineExample.jar
2 {code}
!image-2024-07-01-15-04-53-764.png|width=859,height=284!
* Verified that "GettingStartedExample.jar" and "StateMachineExample.jar" can
be found in the "test" bucket.
* Verified that job is running
* Verified that "GettingStartedExample.jar", "StateMachineExample.jar" and
"udf2.jar" can be found in the JM pod under
"/opt/flink/artifacts/default/flink-cluster-xxx/"
* Verified the following line can be found in the JM pod logs:
{code:java}
INFO [] - Loading configuration property: pipeline.jars,
['s3://test/StateMachineExample.jar']
...
INFO [] - Loading configuration property: user.artifacts.artifact-list,
['s3://test/GettingStartedExample.jar', 's3://other-bucket/udf2.jar'] {code}
> Release Testing: Verify FLINK-32315: Support local file upload in K8s mode
> --------------------------------------------------------------------------
>
> Key: FLINK-35695
> URL: https://issues.apache.org/jira/browse/FLINK-35695
> Project: Flink
> Issue Type: Sub-task
> Components: Client / Job Submission
> Reporter: Ferenc Csaky
> Assignee: Mate Czagany
> Priority: Blocker
> Labels: release-testing
> Fix For: 1.20.0
>
> Attachments: image-2024-07-01-14-54-17-770.png,
> image-2024-07-01-15-04-53-764.png
>
>
> Follow up the test for FLINK-32315.
> In Flink 1.20, we introduced a local file upload possibility for Kubernetes
> deployments. To verify this feature, you can check the relevant
> [PR|https://github.com/apache/flink/pull/24303], which includes the docs, and
> examples for more information.
> To test this feature, it is required to have an available Kubernetes cluster
> to deploy to, and some DFS where Flink can deploy the local JAR. For a
> sandbox setup, I recommend to install {{minikube}}. The flink-k8s-operator
> [quickstart
> guide|https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-main/docs/try-flink-kubernetes-operator/quick-start/#prerequisites]
> explains that pretty well ({{helm}} is not needed here). For the DFS, I have
> a gist to setup Minio on a K8s pod
> [here|https://gist.github.com/ferenc-csaky/fd7fee71d89cd389cac2da4a4471ab65].
> The two following main use-case should be handled correctly:
> # Deploy job with a local job JAR, but without further dependencies
> {code:bash}
> $ ./bin/flink run-application \
> --target kubernetes-application \
> -Dkubernetes.cluster-id=my-first-application-cluster \
> -Dkubernetes.container.image=flink:1.20 \
> -Dkubernetes.artifacts.local-upload-enabled=true \
> -Dkubernetes.artifacts.local-upload-target=s3://my-bucket/ \
> local:///path/to/TopSpeedWindowing.jar
> {code}
> # Deploy job with a local job JAR, and further dependencies (e.g. a UDF
> included in a separate JAR).
> {code:bash}
> $ ./bin/flink run-application \
> --target kubernetes-application \
> -Dkubernetes.cluster-id=my-first-application-cluster \
> -Dkubernetes.container.image=flink:1.20 \
> -Dkubernetes.artifacts.local-upload-enabled=true \
> -Dkubernetes.artifacts.local-upload-target=s3://my-bucket/ \
>
> -Duser.artifacts.artifact-list=local:///tmp/my-flink-udf1.jar\;s3://my-bucket/my-flink-udf2.jar
> \
> local:///tmp/my-flink-job.jar
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)