{"id":44338566,"url":"https://github.com/canonical/kserve-operators","last_synced_at":"2026-04-24T14:04:13.181Z","repository":{"id":45690330,"uuid":"513534882","full_name":"canonical/kserve-operators","owner":"canonical","description":"Charmed KServe","archived":false,"fork":false,"pushed_at":"2026-04-23T11:27:17.000Z","size":1214,"stargazers_count":4,"open_issues_count":31,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-23T13:27:08.578Z","etag":null,"topics":["charm","charmed-kubeflow","single-charm"],"latest_commit_sha":null,"homepage":"https://github.com/canonical/kserve-operators","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canonical.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-13T13:36:03.000Z","updated_at":"2026-04-17T14:32:15.000Z","dependencies_parsed_at":"2023-10-24T08:23:36.554Z","dependency_job_id":"55b013ab-ba87-41c9-9c66-2f74261669a8","html_url":"https://github.com/canonical/kserve-operators","commit_stats":null,"previous_names":[],"tags_count":154,"template":false,"template_full_name":null,"purl":"pkg:github/canonical/kserve-operators","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fkserve-operators","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fkserve-operators/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fkserve-operators/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fkserve-operators/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canonical","download_url":"https://codeload.github.com/canonical/kserve-operators/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fkserve-operators/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32226409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["charm","charmed-kubeflow","single-charm"],"created_at":"2026-02-11T12:15:21.176Z","updated_at":"2026-04-24T14:04:13.164Z","avatar_url":"https://github.com/canonical.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"## KServe Operators - a component of the Charmed Kubeflow distribution from Canonical\n[![CharmHub Badge](https://charmhub.io/kubeflow/badge.svg)](https://charmhub.io/kubeflow)\n[![On Pull Request](https://github.com/canonical/kserve-operators/actions/workflows/on_pull_request.yaml/badge.svg)](https://github.com/canonical/kserve-operators/blob/main/.github/workflows/on_pull_request.yaml)\n[![On Push](https://github.com/canonical/kserve-operators/actions/workflows/on_push.yaml/badge.svg)](https://github.com/canonical/kserve-operators/blob/main/.github/workflows/on_push.yaml)\n[![Release Charm to track](https://github.com/canonical/kserve-operators/actions/workflows/release.yaml/badge.svg)](https://github.com/canonical/kserve-operators/blob/main/.github/workflows/release.yaml)\n\nThis repository hosts the Kubernetes Python Operators for KServe\n(see [CharmHub](https://charmhub.io/?q=dex-auth)).\n\nUpstream documentation can be found at https://kserve.github.io/website/0.8/\n\n## Usage\n\n### Supported versions\n\n* Kubernetes 1.24\n* istio-operators 1.16/stable\n* knative-operators 1.8/stable\n\n### Pre-requisites\n\n* Kubernetes cluster\n\u003eNOTE: If you are using Microk8s, it is assumed you have run `microk8s enable dns storage rbac metallb:\"10.64.140.43-10.64.140.49,192.168.0.105-192.168.0.111\"`.\n\n* `istio-pilot` and `istio-ingressgateway`. See \"Deploy dependencies\" for deploy instructions.\n\n### Add a model and set variables\n\n```\nMODEL_NAME=\"kserve\"\nDEFAULT_GATEWAY=\"kserve-gateway\"\njuju add-model ${MODEL_NAME}\n```\n\n### Deploy dependencies\n\nkserve-operators require istio-operators to be deployed in the cluster. To correctly configure them, you can:\n\n```\nISTIO_CHANNEL=1.16/stable\njuju deploy istio-pilot --config default-gateway=${DEFAULT_GATEWAY} --channel ${ISTIO_CHANNEL} --trust\njuju deploy istio-gateway istio-ingressgateway --config kind=\"ingress\" --channel ${ISTIO_CHANNEL} --trust\njuju relate istio-pilot istio-ingressgateway\n```\n\n#### Only for Knative mode\n\nFor serverless operations kserve-operators depends on knative-serving. To correctly configure it, you can:\n\n\u003e NOTE: these instructions assume you have deployed Microk8s and MetalLB is enabled. If your cloud configuration is different than this, please refer to [knative-operators](https://github.com/canonical/knative-operators#usage) documentation.\n\n```\nKNATIVE_CHANNEL=1.8/stable\njuju deploy knative-operator --channel ${KNATIVE_CHANNEL} --trust\njuju deploy knative-serving --config namespace=\"knative-serving\" --config istio.gateway.namespace=${MODEL_NAME} --config istio.gateway.name=${DEFAULT_GATEWAY} --channel ${KNATIVE_CHANNEL} --trust\n```\n\n### Deploy in `Standard` mode\n\nkserve-operators support `Standard` mode to manage `InferenceService`, which removes the KNative dependency and unlocks some of its limitations, like mounting multiple volumes. Please note this mode is not loaded with serverless capabilities, for that you'd need to deploy in `Knative` mode.\n\n1. Deploy `kserver-controller`\n\n```\njuju deploy kserve-controller --channel \u003cchannel\u003e --trust\n```\n\n2. Relate `kserve-controller` and `istio-pilot`\n\n```\njuju relate istio-pilot:gateway-info kserve-controller:ingress-gateway\n```\n\n\u003e `channel` is the available channels of the Charmed KServe:\n* latest/edge\n* 0.10/stable\n\n### Deploy in `Knative` mode\n\nkserve-operatos support `Serveless` mode to manage event driven `InferenceService`s, which enables autoscaling on demand, and supports scaling down to zero.\n\n1. Deploy `kserver-controller`\n\n```\njuju deploy kserve-controller --channel \u003cchannel\u003e --config deployment-mode=\"knative\" --trust\n```\n\n2. Relate `kserve-controller` and `istio-pilot`\n\n```\njuju relate istio-pilot:gateway-info kserve-controller:ingress-gateway\n```\n\n3. Relate `kserve-controller` and `knative-serving`\n\n```\njuju relate kserve-controller:local-gateway knative-serving:local-gateway\n```\n\n## Deploy a simple `InferenceService`\n\nTo deploy a simple example of an `InferenceServer`, you can use the one provided in `examples/`\n\n\u003e NOTE: this example is based on [First InferenceService](https://kserve.github.io/website/0.9/get_started/first_isvc/#2-create-an-inferenceservice)\n\n1. Create an `InferenceService` in a testing namespace\n\n```\nUSER_NS=\"kserve-testing\"\nkubectl create ns ${USER_NS}\nkubectl apply -f sklearn-iris.yaml -n${USER_NS}\n```\n\n2. Check the `InferenceService` status\n\n```\nkubectl get inferenceservices sklearn-iris -n${USER_NS}\n```\n\n3. Determine the URL for performing inference\n\n* Using the `ClusterIP`\n\n\u003e NOTE: this method can only be used for performing inference within the cluster.\n\n```\nSERVICE_IP=$(kubectl get svc sklearn-iris-predictor-default -n${USER_NS} -ojsonpath='{.spec.clusterIP}')\nINFERENCE_URL=\"${SERVICE_IP}/v1/models/sklearn-iris:predict\"\n```\n\n* Using the `InferenceService` URL\n\n```\nkubectl get inferenceservice sklearn-iris -n${USER_NS}\n# From the output, take the URL\nINFERENCE_URL=\"${URL}/v1/models/sklearn-iris:predict\"\n```\n\n4. Perform inference\n\nCreate a file with the input request:\n\n```\ncat \u003c\u003cEOF \u003e \"./iris-input.json\"\n{\n  \"instances\": [\n    [6.8,  2.8,  4.8,  1.4],\n    [6.0,  3.4,  4.5,  1.6]\n  ]\n}\nEOF\n```\n\nNow call the `InferenceService`:\n\n```\ncurl -v $INFERENCE_URL -d @iris-input.json\n```\n\nExpected output:\n\n```\n{\"predictions\": [1, 1]}\n```\n\n## Looking for a fully supported platform for MLOps?\n\nCanonical [Charmed Kubeflow](https://charmed-kubeflow.io) is a state of the art, fully supported MLOps platform that helps data scientists collaborate on AI innovation on any cloud from concept to production, offered by Canonical - the publishers of [Ubuntu](https://ubuntu.com).\n\n[![Kubeflow diagram](https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_350,h_304/https://assets.ubuntu.com/v1/10400c98-Charmed-kubeflow-Topology-header.svg)](https://charmed-kubeflow.io)\n\nCharmed Kubeflow is free to use: the solution can be deployed in any environment without constraints, paywall or restricted features. Data labs and MLOps teams only need to train their data scientists and engineers once to work consistently and efficiently on any cloud – or on-premise.\n\nCharmed Kubeflow offers a centralised, browser-based MLOps platform that runs on any conformant Kubernetes – offering enhanced productivity, improved governance and reducing the risks associated with shadow IT.\n\nLearn more about deploying and using Charmed Kubeflow at [https://charmed-kubeflow.io](https://charmed-kubeflow.io).\n\n### Key features\n* Centralised, browser-based data science workspaces: **familiar experience**\n* Multi user: **one environment for your whole data science team**\n* NVIDIA GPU support: **accelerate deep learning model training**\n* Apache Spark integration: **empower big data driven model training**\n* Ideation to production: **automate model training \u0026 deployment**\n* AutoML: **hyperparameter tuning, architecture search**\n* Composable: **edge deployment configurations available**\n\n### What’s included in Charmed Kubeflow 1.4\n* LDAP Authentication\n* Jupyter Notebooks\n* Work with Python and R\n* Support for TensorFlow, Pytorch, MXNet, XGBoost\n* TFServing, Seldon-Core\n* Katib (autoML)\n* Apache Spark\n* Argo Workflows\n* Kubeflow Pipelines\n\n### Why engineers and data scientists choose Charmed Kubeflow\n* Maintenance: Charmed Kubeflow offers up to two years of maintenance on select releases\n* Optional 24/7 support available, [contact us here](https://charmed-kubeflow.io/contact-us) for more information\n* Optional dedicated fully managed service available, [contact us here](https://charmed-kubeflow.io/contact-us) for more information or [learn more about Canonical’s Managed Apps service](https://ubuntu.com/managed/apps).\n* Portability: Charmed Kubeflow can be deployed on any conformant Kubernetes, on any cloud or on-premise\n\n### Documentation\nPlease see the [official docs site](https://charmed-kubeflow.io/docs) for complete documentation of the Charmed Kubeflow distribution.\n\n## Setting Custom Images for Kserve controller\n\nKServe controller comes with a set of preconfigured images that are used in Kserve workloads. The default images are listed in [default-custom-images.json](https://github.com/canonical/kserve-operators/blob/main/charms/kserve-controller/src/default-custom-images.json)\n\nThese images can be overridden in the charm configuration under custom_images in the charms/kserve-controller/config.yaml file. Whenever you leave the custom_images field empty in the config, the default images will be used (listed above). You can specify your own images with the config by filling one or multiple entries. The config accepts either YAML or JSON entries. For example.\n\n```\njuju config kserve-controller custom_images='{\"configmap__agent\": \"custom:1.0\", \"serving_runtimes__lgbserver\": \"cuustom:2.1\"}'\n```\n\nThese images are being used in *.j2 files under charms/kserve-controller/src/templates/*.j2.\n\n### Bugs and feature requests\nIf you find a bug in our operator or want to request a specific feature, please file a bug here:\n[https://github.com/canonical/dex-auth-operator/issues](https://github.com/canonical/dex-auth-operator/issues)\n\n### License\nCharmed Kubeflow is free software, distributed under the [Apache Software License, version 2.0](https://github.com/canonical/dex-auth-operator/blob/master/LICENSE).\n\n### Contributing\nCanonical welcomes contributions to Charmed Kubeflow. Please check out our [contributor agreement](https://ubuntu.com/legal/contributors) if you're interested in contributing to the distribution.\n\n### Security\nSecurity issues in Charmed Kubeflow can be reported through [LaunchPad](https://wiki.ubuntu.com/DebuggingSecurity#How%20to%20File). Please do not file GitHub issues about security issues.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fkserve-operators","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanonical%2Fkserve-operators","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fkserve-operators/lists"}