Sidecars with pod template
You can extend your FlinkDeployment in case you want to add more containers in your Kubernetes pod using the pod template and sidecars.
The Flink Operator CRD has a minimal set of settings to express the basic attributes of a
deployment. For more customization you can use the flinkConfiguration
and
podTemplate
properties.
Pod templates allow customization of the Flink job and task manager pods, to, for example, specify volume mounts, ephemeral storage, sidecar containers and so on.
Pod templates can be layered as shown in the below example. You can define the settings for the pod templates to be applied to both the job and task manager in a common pod template. You can also add another template under the job or task manager to define additional settings that supplement (or override) the common template, for example when using sidecars.
- to download artifacts (for example, JAR files) before executing the job
- to collect metrics and logs from Flink during runtime and analyze/save them.
apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: flink-kubernetes-tutorial spec: image: [***REGISTRY HOST***]:[***PORT***]/[***PROJECT***]/flink-kubernetes-tutorial:latest flinkVersion: v1_19 flinkConfiguration: taskmanager.numberOfTaskSlots: "4" serviceAccount: flink mode: native jobManager: resource: memory: "2048m" cpu: 1 taskManager: resource: memory: "2048m" cpu: 1 job: jarURI: local:///opt/flink/usrlib/flink-kubernetes-tutorial.jar parallelism: 4 state: running upgradeMode: stateless podTemplate: spec: containers: - name: flink-main-container volumeMounts: - mountPath: /opt/flink/log name: flink-logs - name: sidecar image: busybox command: [ 'sh','-c','while true; do wc -l /flink-logs/*.log; sleep 5; done' ] volumeMounts: - mountPath: /flink-logs name: flink-logs initContainers: # Sample sidecar container - name: sidecar-init image: busybox command: [ 'sh', '-c', 'echo initContainer loaded' ] volumes: - name: flink-logs emptyDir: {}You can use the following commands to create the new deployment:
kubectl -n flink apply -f flink-deployment.yaml
This sidecar creates a new temporary volume called flink-logs
in the Flink
main container that is mounted to the default log output path,
/opt/flink/log
. The example also creates a BusyBox sidecar that also mounts
the same volume and periodically prints the logs' line count.
The init-container is a type of container that needs to finish running and exit with code 0 before the other containers can start. As an example, this can be used to download artifacts for the Flink jobs.