Hello good people! I am trying to schedule my work...
# ask-the-community
i
Hello good people! I am trying to schedule my workloads on a bare-metal kubernetes cluster. The helm installation guide mentions EKS, or other cloud-provided Kube clusters. Is it possible to use Flyte with bare-metal clusters? I am also open to use Ray alongside Flyte. Could anyone guide me through this? Thanks a lot!
v
The flyte-sandbox helmchart installs the flyte-binary helmchart together with minio, postgres, docker registry and kubernetes dashboards: https://github.com/flyteorg/flyte/blob/master/charts/flyte-sandbox/Chart.yaml You can see here in the values file which helm values it passes to flyte-binary to support local installation: https://github.com/flyteorg/flyte/blob/master/charts/flyte-sandbox/values.yaml These values can also be used directly with a regular flyte-binary helm installation if you want to install the other dependencies yourself, or you can keep using the flyte-sandbox helmchart if you prefer to have it all in one package
i
@Victor Churikov thanks a lot for your answer. After a few modifications on the values.yaml file, I am now running this on my local cluster. Now, how should I inform Flyte to schedule workload on this cluster?
v
You can register workflows and schedule executions either using
flytectl
command-line tool, or using python’s flytekit.FlyteRemote class. You can configure flytectl using
flytectl config --file <path>
or set the environment variable FLYTECTL_CONFIG to the file path. An example config file looks like this:
Copy code
admin:
  # For GRPC endpoints you might want to use dns:///flyte.myexample.com
  endpoint: localhost:30080
  authType: Pkce
  insecure: true
console:
  endpoint: <http://localhost:30080>
logger:
  show-source: true
  level: 0
That’s the config file that is automatically created from
flytectl demo start
, the demo uses localhost but you can adjust this file according to your needs. To schedule executions with either method you will need to expose the flyte endpoint. With flytectl demo cluster, the endpoint service looks like this:
Copy code
flyte         flyte-sandbox-proxy                  NodePort    10.43.3.84      <none>        8000:30080/TCP                  14m
Look for a similar service in your installation. If it’s a nodeport you can access it using the node’s IP address (rather than localhost) and the port, or you can set up a load balancing solution such as klipper or MetalLB to enable the LoadBalancer type services feature and give you an IP address. Once you have your flyte endpoint, add it in the flytectl configuration file and run flytectl commands such as flytectl register and flytectl create execution Personally I didn’t get to use flytectl much yet, I prefer the FlyteRemote approach from python. This is configured like:
Copy code
from flytekit.remote import FlyteRemote
from flytekit.configuration import Config

remote = FlyteRemote(
    config=Config.for_endpoint(endpoint="<http://flyte.example.net|flyte.example.net>"),
    default_project="flytesnacks",
    default_domain="development",
)

flyte_entity = ...  # one of FlyteTask, FlyteWorkflow, or FlyteLaunchPlan
execution = remote.execute(
    flyte_entity, inputs={...}, execution_name="my_execution", wait=True
)
The flyte_entity can be remotely fetched or a local python decorated function with @workflow, and can get a default launchplan for a workflow like this:
Copy code
launch_plan = LaunchPlan.get_or_create(name="my_launch_plan", workflow=flyte_workflow)
i
Thanks a lot @Victor Churikov for such a detailed answer. I really appreciate it. I will get back to you, if I am unsuccessful in running the workflow.