The FlinkKubeClient interface offers several methods which are synchronous (e.g. FlinkKubeClient.createTaskManagerPod, FlinkKubeClient.stopPod, FlinkKubeClient.getPodsWithLabels, etc). The problem is that these methods are directly used by the KubernetesResourceManager which calls them from the main thread. Since these methods perform I/O operations (sending and receiving network packages) they can potentially block the execution and hence should not happen from the RpcEndpoint's main thread.
I propose to make all potentially blocking operations on the FlinkKubeClient asynchronous so that the KubernetesResourceManager does not risk to block the main thread. Alternatively, we could also introduce a FlinkKubeClientAsync which offers asynchronous operations.