V1Service

polyaxon._flow.run.service.V1Service()

Services are used to launch Tensorboards, Notebooks, JupyterHub apps, Streamlit/Voila/Bokeh apps, internal tools, and dashboards based on your models and data analysis.

YAML usage

run:
  kind: service
  environment:
  connections:
  volumes:
  init:
  sidecars:
  container:
  ports:
  rewritePath:
  isExternal:
  int:

Python usage

from polyaxon.schemas import V1Environment, V1Init, V1Service
from polyaxon import k8s
service = V1Service(
    environment=V1Environment(...),
    connections=["connection-name1"],
    volumes=[k8s.V1Volume(...)],
    init=[V1Init(...)],
    sidecars=[k8s.V1Container(...)],
    container=k8s.V1Container(...),
    ports=[6006],
    rewritePath=True,
)

Fields

kind

The kind signals to the CLI, client, and other tools that this component’s runtime is a service.

If you are using the python client to create the runtime, this field is not required and is set by default.

run:
  kind: service

environment

Optional environment section, it provides a way to inject pod related information.

run:
  kind: service
  environment:
    labels:
       key1: "label1"
       key2: "label2"
     annotations:
       key1: "value1"
       key2: "value2"
     nodeSelector:
       node_label: node_value
     ...
 ...

connections

A list of connection names to resolve for the service.

If you are referencing a connection it must be configured. All referenced connections will be checked:
  • If they are accessible in the context of the project of this run

  • If the user running the operation can have access to those connections

After checks, the connections will be resolved and inject any volumes, secrets, configMaps, environment variables for your main container to function correctly.

run:
  kind: service
  connections: [connection1, connection2]

volumes

A list of Kubernetes Volumes to resolve and mount for your services.

This is an advanced use-case where configuring a connection is not an option.

When you add a volume you need to mount it manually to your container(s).

run:
  kind: service
  volumes:
    - name: volume1
      persistentVolumeClaim:
        claimName: pvc1
  ...
  container:
    name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo custom init container']
    volumeMounts:
    - name: volume1
      mountPath: /mnt/vol/path

init

A list of init handlers and containers to resolve for the service.

If you are referencing a connection it must be configured. All referenced connections will be checked:
  • If they are accessible in the context of the project of this run

  • If the user running the operation can have access to those connections

run:
  kind: service
  init:
    - artifacts:
        dirs: ["path/on/the/default/artifacts/store"]
    - connection: gcs-large-datasets
      artifacts:
        dirs: ["data"]
      container:
        resources:
          requests:
            memory: "256Mi"
            cpu: "500m"
    - container:
      name: myapp-container
      image: busybox:1.28
      command: ['sh', '-c', 'echo custom init container']

sidecars

A list of sidecar containers that will be used as sidecars.

run:
  kind: service
  sidecars:
    - name: sidecar2
      image: busybox:1.28
      command: ['sh', '-c', 'echo sidecar2']
    - name: sidecar1
      image: busybox:1.28
      command: ['sh', '-c', 'echo sidecar1']
      resources:
        requests:
          memory: "128Mi"
          cpu: "500m"

container

The main Kubernetes Container that will run your experiment training or data processing logic.

run:
  kind: service
  init:
    - connection: my-code-repo
  container:
    name: tensorflow:2.1
    command: ["python", "/plx-context/artifacts/my-code-repo/service.py"]

ports

The ports to expose for your service.

run:
  kind: service
  ports: [6006]

rewritePath

By default, Polyaxon exposes services with a base url following this pattern: /services/v1/namespace/owner/project/runs/uuid

This default behavior works very well for Tensorboards and Notebooks, but if you are exposing an API that doesn’t handle base urls, you can enable this option to rewrite the path and remove that part.

run:
  kind: service
  rewritePath: true

isExternal

By default, Polyaxon will control access to services with the built-in auth mechanism.

If you need to expose a service without controlling authZ & authN, you can enable this flag.

run:
  kind: service
  isExternal: true

replicas

All services are provisioned with one replica by default.

This default behavior works very well for Tensorboards, Notebooks, and other small service app and dashboards. In some cases, and especially in the case of external service, you might need to provision more than a single replica, you can set the required number of replicas with this field.

run:
  kind: service
  replicas: 3