Seldon KubernetesResources API
KubernetesResources APIs for Seldon Deploy
KubernetesResources APIs for Seldon Deploy
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/seldon-kubernetesresources-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: 'API to interact and manage the lifecycle of your machine learning models
deployed through Seldon Deploy.'
title: Seldon Deploy Kubernetes Resources API
version: v1alpha1
servers:
- url: http://X.X.X.X/seldon-deploy/api/v1alpha1
- url: https://X.X.X.X/seldon-deploy/api/v1alpha1
security:
- OAuth2:
- '[]'
tags:
- description: KubernetesResources APIs for Seldon Deploy
name: KubernetesResources
paths:
/namespaces/{namespace}/seldondeployments/{name}/resources:
get:
description: list objects of kind resource for Seldon Deployment
operationId: ListSeldonDeploymentResources
parameters:
- description: Component differentiates between types of model (e.g. predictor, explainer... etc)
in: query
name: component
schema:
type: string
- description: Name identifies a resource
in: path
name: name
required: true
schema:
type: string
- description: Namespace provides a logical grouping of resources
in: path
name: namespace
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/ResourceListResponse'
'400':
$ref: '#/components/responses/ErrorDefault'
'405':
$ref: '#/components/responses/ErrorDefault'
'424':
$ref: '#/components/responses/ErrorDefault'
'500':
$ref: '#/components/responses/ErrorDefault'
tags:
- KubernetesResources
components:
schemas:
FlexVolumeSource:
description: 'FlexVolume represents a generic volume resource that is
provisioned/attached using an exec based plugin.'
properties:
driver:
description: driver is the name of the driver to use for this volume.
type: string
fsType:
description: 'fsType is the filesystem type to mount.
Must be a filesystem type supported by the host operating system.
Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
+optional'
type: string
options:
additionalProperties:
type: string
description: 'options is Optional: this field holds extra command options if any.
+optional'
type: object
readOnly:
description: 'readOnly is Optional: defaults to false (read/write). ReadOnly here will force
the ReadOnly setting in VolumeMounts.
+optional'
type: boolean
secretRef:
$ref: '#/components/schemas/LocalObjectReference'
type: object
PodAffinityTerm:
description: 'Defines a set of pods (namely those matching the labelSelector
relative to the given namespace(s)) that this pod should be
co-located (affinity) or not co-located (anti-affinity) with,
where co-located is defined as running on a node whose value of
the label with key <topologyKey> matches that of any node on which
a pod of the set of pods is running'
properties:
labelSelector:
$ref: '#/components/schemas/LabelSelector'
matchLabelKeys:
description: 'MatchLabelKeys is a set of pod label keys to select which pods will
be taken into consideration. The keys are used to lookup values from the
incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
to select the group of existing pods which pods will be taken into consideration
for the incoming pod''s pod (anti) affinity. Keys that don''t exist in the incoming
pod labels will be ignored. The default value is empty.
The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
Also, MatchLabelKeys cannot be set when LabelSelector isn''t set.
This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+listType=atomic
+optional'
items:
type: string
type: array
mismatchLabelKeys:
description: 'MismatchLabelKeys is a set of pod label keys to select which pods will
be taken into consideration. The keys are used to lookup values from the
incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
to select the group of existing pods which pods will be taken into consideration
for the incoming pod''s pod (anti) affinity. Keys that don''t exist in the incoming
pod labels will be ignored. The default value is empty.
The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
Also, MismatchLabelKeys cannot be set when LabelSelector isn''t set.
This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+listType=atomic
+optional'
items:
type: string
type: array
namespaceSelector:
$ref: '#/components/schemas/LabelSelector'
namespaces:
description: 'namespaces specifies a static list of namespace names that the term applies to.
The term is applied to the union of the namespaces listed in this field
and the ones selected by namespaceSelector.
null or empty namespaces list and null namespaceSelector means "this pod''s namespace".
+optional'
items:
type: string
type: array
topologyKey:
description: 'This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
the labelSelector in the specified namespaces, where co-located is defined as running on a node
whose value of the label with key topologyKey matches that of any node on which any of the
selected pods is running.
Empty topologyKey is not allowed.'
type: string
type: object
VolumeProjection:
description: Projection that may be projected along with other supported volume types
properties:
clusterTrustBundle:
$ref: '#/components/schemas/ClusterTrustBundleProjection'
configMap:
$ref: '#/components/schemas/ConfigMapProjection'
downwardAPI:
$ref: '#/components/schemas/DownwardAPIProjection'
secret:
$ref: '#/components/schemas/SecretProjection'
serviceAccountToken:
$ref: '#/components/schemas/ServiceAccountTokenProjection'
type: object
GCEPersistentDiskVolumeSource:
description: 'A GCE PD must exist before mounting to a container. The disk must
also be in the same GCE project and zone as the kubelet. A GCE PD
can only be mounted as read/write once or read-only many times. GCE
PDs support ownership management and SELinux relabeling.'
properties:
fsType:
description: 'fsType is filesystem type of the volume that you want to mount.
Tip: Ensure that the filesystem type is supported by the host operating system.
Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
TODO: how do we prevent errors in the filesystem from compromising the machine
+optional'
type: string
partition:
description: 'partition is the partition in the volume that you want to mount.
If omitted, the default is to mount by volume name.
Examples: For volume /dev/sda1, you specify the partition as "1".
Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+optional'
format: int32
type: integer
pdName:
description: 'pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE.
More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk'
type: string
readOnly:
description: 'readOnly here will force the ReadOnly setting in VolumeMounts.
Defaults to false.
More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+optional'
type: boolean
title: Represents a Persistent Disk resource in Google Compute Engine.
type: object
CephFSVolumeSource:
description: 'Represents a Ceph Filesystem mount that lasts the lifetime of a pod
Cephfs volumes do not support ownership management or SELinux relabeling.'
properties:
monitors:
description: 'monitors is Required: Monitors is a collection of Ceph monitors
More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it'
items:
type: string
type: array
path:
description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /
+optional'
type: string
readOnly:
description: 'readOnly is Optional: Defaults to false (read/write). ReadOnly here will force
the ReadOnly setting in VolumeMounts.
More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+optional'
type: boolean
secretFile:
description: 'secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+optional'
type: string
secretRef:
$ref: '#/components/schemas/LocalObjectReference'
user:
description: 'user is optional: User is the rados user name, default is admin
More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+optional'
type: string
type: object
PodCondition:
properties:
lastProbeTime:
description: 'Last time we probed the condition.
+optional'
type: string
lastTransitionTime:
description: 'Last time the condition transitioned from one status to another.
+optional'
type: string
message:
description: 'Human-readable message indicating details about last transition.
+optional'
type: string
reason:
description: 'Unique, one-word, CamelCase reason for the condition''s last transition.
+optional'
type: string
status:
$ref: '#/components/schemas/ConditionStatus'
type:
$ref: '#/components/schemas/PodConditionType'
title: PodCondition contains details for the current condition of this pod.
type: object
VolumeDevice:
properties:
devicePath:
description: devicePath is the path inside of the container that the device will be mapped to.
type: string
name:
description: name must match the name of a persistentVolumeClaim in the pod
type: string
title: volumeDevice describes a mapping of a raw block device within a container.
type: object
NodeSelectorOperator:
description: 'A node selector operator is the set of operators that can be used in
a node selector requirement.
+enum'
type: string
Volume:
properties:
awsElasticBlockStore:
$ref: '#/components/schemas/AWSElasticBlockStoreVolumeSource'
azureDisk:
$ref: '#/components/schemas/AzureDiskVolumeSource'
azureFile:
$ref: '#/components/schemas/AzureFileVolumeSource'
cephfs:
$ref: '#/components/schemas/CephFSVolumeSource'
cinder:
$ref: '#/components/schemas/CinderVolumeSource'
configMap:
$ref: '#/components/schemas/ConfigMapVolumeSource'
csi:
$ref: '#/components/schemas/CSIVolumeSource'
downwardAPI:
$ref: '#/components/schemas/DownwardAPIVolumeSource'
emptyDir:
$ref: '#/components/schemas/EmptyDirVolumeSource'
ephemeral:
$ref: '#/components/schemas/EphemeralVolumeSource'
fc:
$ref: '#/components/schemas/FCVolumeSource'
flexVolume:
$ref: '#/components/schemas/FlexVolumeSource'
flocker:
$ref: '#/components/schemas/FlockerVolumeSource'
gcePersistentDisk:
$ref: '#/components/schemas/GCEPersistentDiskVolumeSource'
gitRepo:
$ref: '#/components/schemas/GitRepoVolumeSource'
glusterfs:
$ref: '#/components/schemas/GlusterfsVolumeSource'
hostPath:
$ref: '#/components/schemas/HostPathVolumeSource'
iscsi:
$ref: '#/components/schemas/ISCSIVolumeSource'
name:
description: 'name of the volume.
Must be a DNS_LABEL and unique within the pod.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
nfs:
$ref: '#/components/schemas/NFSVolumeSource'
persistentVolumeClaim:
$ref: '#/components/schemas/PersistentVolumeClaimVolumeSource'
photonPersistentDisk:
$ref: '#/components/schemas/PhotonPersistentDiskVolumeSource'
portworxVolume:
$ref: '#/components/schemas/PortworxVolumeSource'
projected:
$ref: '#/components/schemas/ProjectedVolumeSource'
quobyte:
$ref: '#/components/schemas/QuobyteVolumeSource'
rbd:
$ref: '#/components/schemas/RBDVolumeSource'
scaleIO:
$ref: '#/components/schemas/ScaleIOVolumeSource'
secret:
$ref: '#/components/schemas/SecretVolumeSource'
storageos:
$ref: '#/components/schemas/StorageOSVolumeSource'
vsphereVolume:
$ref: '#/components/schemas/VsphereVirtualDiskVolumeSource'
title: Volume represents a named volume in a pod that may be accessed by any container in the pod.
type: object
PreferredSchedulingTerm:
description: 'An empty preferred scheduling term matches all objects with implicit weight 0
(i.e. it''s a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).'
properties:
preference:
$ref: '#/components/schemas/NodeSelectorTerm'
weight:
description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
format: int32
type: integer
type: object
ProjectedVolumeSource:
description: Represents a projected volume source
properties:
defaultMode:
description: 'defaultMode are the mode bits used to set permissions on created files by default.
Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
Directories within the path are not affected by this setting.
This might be in conflict with other options that affect the file
mode, like fsGroup, and the result can be other mode bits set.
+optional'
format: int32
type: integer
sources:
description: 'sources is the list of volume projections
+optional'
items:
$ref: '#/components/schemas/VolumeProjection'
type: array
type: object
EmptyDirVolumeSource:
description: Empty directory volumes support ownership management and SELinux relabeling.
properties:
medium:
$ref: '#/components/schemas/StorageMedium'
sizeLimit:
$ref: '#/components/schemas/Quantity'
title: Represents an empty directory for a pod.
type: object
ConfigMapProjection:
description: 'The contents of the target ConfigMap''s Data field will be presented in a
projected volume as files using the keys in the Data field as the file names,
unless the items element is populated with specific mappings of keys to paths.
Note that this is identical to a configmap volume source without the default
mode.'
properties:
items:
description: 'items if unspecified, each key-value pair in the Data field of the referenced
ConfigMap will be projected into the volume as a file whose name is the
key and content is the value. If specified, the listed keys will be
projected into the specified paths, and unlisted keys will not be
present. If a key is specified which is not present in the ConfigMap,
the volume setup will error unless it is marked optional. Paths must be
relative and may not contain the ''..'' path or start with ''..''.
+optional'
items:
$ref: '#/components/schemas/KeyToPath'
type: array
name:
description: 'Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
+optional'
type: string
optional:
description: 'optional specify whether the ConfigMap or its keys must be defined
+optional'
type: boolean
title: Adapts a ConfigMap into a projected volume.
type: object
AzureDataDiskKind:
description: +enum
type: string
LabelSelectorRequirement:
description: 'A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.'
properties:
key:
description: key is the label key that the selector applies to.
type: string
operator:
$ref: '#/components/schemas/LabelSelectorOperator'
values:
description: 'values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
+optional'
items:
type: string
type: array
type: object
SELinuxOptions:
description: SELinuxOptions are the labels to be applied to the container
properties:
level:
description: 'Level is SELinux level label that applies to the container.
+optional'
type: string
role:
description: 'Role is a SELinux role label that applies to the container.
+optional'
type: string
type:
description: 'Type is a SELinux type label that applies to the container.
+optional'
type: string
user:
description: 'User is a SELinux user label that applies to the container.
+optional'
type: string
type: object
ServiceList:
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+optional'
type: string
continue:
description: 'continue may be set if the user set a limit on the number of items returned, and indicates that
the server has more data available. The value is opaque and may be used to issue another request
to the endpoint that served this list to retrieve the next set of available objects. Continuing a
consistent list may not be possible if the server configuration has changed or more than a few
minutes have passed. The resourceVersion field returned when using this continue value will be
identical to the value in the first response, unless you have received this token from an error
message.'
type: string
items:
description: List of services
items:
$ref: '#/components/schemas/Service'
type: array
kind:
description: 'Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+optional'
type: string
remainingItemCount:
description: 'remainingItemCount is the number of subsequent items in the list which are not included in this
list response. If the list request contained label or field selectors, then the number of
remaining items is unknown and the field will be left unset and omitted during serialization.
If the list is complete (either because it is not chunking or because this is the last chunk),
then there are no more remaining items and this field will be left unset and omitted during
serialization.
Servers older than v1.15 do not set this field.
The intended use of the remainingItemCount is *estimating* the size of a collection. Clients
should not rely on the remainingItemCount to be set or to be exact.
+optional'
format: int64
type: integer
resourceVersion:
description: 'String that identifies the server''s internal version of this object that
can be used by clients to determine when objects have changed.
Value must be treated as opaque by clients and passed unmodified back to the server.
Populated by the system.
Read-only.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+optional'
type: string
selfLink:
description: 'Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.
+optional'
type: string
title: ServiceList holds a list of services.
type: object
PortworxVolumeSource:
properties:
fsType:
description: 'fSType represents the filesystem type to mount
Must be a filesystem type supported by the host operating system.
Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.'
type: string
readOnly:
description: 'readOnly defaults to false (read/write). ReadOnly here will force
the ReadOnly setting in VolumeMounts.
+optional'
type: boolean
volumeID:
description: volumeID uniquely identifies a Portworx volume
type: string
title: PortworxVolumeSource represents a Portworx volume resource.
type: object
ClusterTrustBundleProjection:
description: 'ClusterTrustBundleProjection describes how to select a set of
ClusterTrustBundle objects and project their contents into the pod
filesystem.'
properties:
labelSelector:
$ref: '#/components/schemas/LabelSelector'
name:
description: 'Select a single ClusterTrustBundle by object name. Mutually-exclusive
with signerName and labelSelector.
+optional'
type: string
optional:
description: 'If true, don''t block pod startup if the referenced ClusterTrustBundle(s)
aren''t available. If using name, then the named ClusterTrustBundle is
allowed not to exist. If using signerName, then the combination of
signerName and labelSelector is allowed to match zero
ClusterTrustBundles.
+optional'
type: boolean
path:
description: Relative path from the volume root to write the bundle.
type: string
signerName:
description: 'Select all ClusterTrustBundles that match this signer name.
Mutually-exclusive with name. The contents of all selected
ClusterTrustBundles will be unified and deduplicated.
+optional'
type: string
type: object
PodStatus:
description: 'PodStatus represents information about the status of a pod. Status may trail the actual
state of a system, especially if the node that hosts the pod cannot contact the control
plane.'
properties:
conditions:
description: 'Current service state of pod.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
+optional
+patchMergeKey=type
+patchStrategy=merge'
items:
$ref: '#/components/schemas/PodCondition'
type: array
containerStatuses:
description: 'The list has one entry per container in the manifest.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
+optional'
items:
$ref: '#/components/schemas/ContainerStatus'
type: array
ephemeralContainerStatuses:
description: 'Status for any ephemeral containers that have run in this pod.
+optional'
items:
$ref: '#/components/schemas/ContainerStatus'
type: array
hostIP:
description: 'hostIP holds the IP address of the host to which the pod is assigned. Empty if the pod has not started yet.
A pod can be assigned to a node that has a problem in kubelet which in turns mean that HostIP will
not be updated even if there is a node is assigned to pod
+optional'
type: string
hostIPs:
description: 'hostIPs holds the IP addresses allocated to the host. If this field is specified, the first entry must
match the hostIP field. This list is empty if the pod has not started yet.
A pod can be assigned to a node that has a problem in kubelet which in turns means that HostIPs will
not be updated even if there is a node is assigned to this pod.
+optional
+patchStrategy=merge
+patchMergeKey=ip
+listType=atomic'
items:
$ref: '#/components/schemas/HostIP'
type: array
initContainerStatuses:
description: 'The list has one entry per init container in the manifest. The most recent successful
init container will have ready = true, the most recently started container will have
startTime set.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status'
items:
$ref: '#/components/schemas/ContainerStatus'
type: array
message:
description: 'A human readable message indicating details about why the pod is in this condition.
+optional'
type: string
nominatedNodeName:
description: 'nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
scheduled right away as preemption victims receive their graceful termination periods.
This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
give the resources on this node to a higher priority pod that is created after preemption.
As a result, this field may be different than PodSpec.nodeName when the pod is
scheduled.
+optional'
type: string
phase:
$ref: '#/components/schemas/PodPhase'
podIP:
description: 'podIP address allocated to the pod. Routable at least within the cluster.
Empty if not yet allocated.
+optional'
type: string
podIPs:
description: 'podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
is empty if no IPs have been allocated yet.
+optional
+patchStrategy=merge
+patchMergeKey=ip'
items:
$ref: '#/components/schemas/PodIP'
type: array
qosClass:
$ref: '#/components/schemas/PodQOSClass'
reason:
description: 'A brief CamelCase message indicating details about why the pod is in this state.
e.g. ''Evicted''
+optional'
type: string
resize:
$ref: '#/components/schemas/PodResizeStatus'
resourceClaimStatuses:
description: 'Status of resource claims.
+patchMergeKey=name
+patchStrategy=merge,retainKeys
+listType=map
+listMapKey=name
+featureGate=DynamicResourceAllocation
+optional'
items:
$ref: '#/components/schemas/PodResourceClaimStatus'
type: array
startTime:
description: 'RFC 3339 date and time at which the object was acknowledged by the Kubelet.
This is before the Kubelet pulled the container image(s) for the pod.
+optional'
type: string
type: object
ServiceInternalTrafficPolicy:
description: 'ServiceInternalTrafficPolicy describes how nodes distribute service traffic they
receive on the ClusterIP.
+enum'
type: string
PodList:
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+optional'
type: string
continue:
description: 'continue may be set if the user set a limit on the number of items returned, and indicates that
the server has more data available. The value is opaque and may be used to issue another request
to the endpoint that served this list to retrieve the next set of available objects. Continuing a
consistent list may not be possible if the server configuration has changed or more than a few
minutes have passed. The resourceVersion field returned when using this continue value will be
identical to the value in the first response, unless you have received this token from an error
message.'
type: string
items:
description: 'List of pods.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md'
items:
$ref: '#/components/schemas/Pod'
type: array
kind:
description: 'Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+optional'
type: string
remainingItemCount:
description: 'remainingItemCount is the number of subsequent items in the list which are not included in this
# --- truncated at 32 KB (243 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/seldon/refs/heads/main/openapi/seldon-kubernetesresources-api-openapi.yml