{"id":19888247,"url":"https://github.com/project-codeflare/appwrapper","last_synced_at":"2025-05-02T17:31:57.871Z","repository":{"id":221053549,"uuid":"753321559","full_name":"project-codeflare/appwrapper","owner":"project-codeflare","description":"AppWrapper controller for Kueue","archived":false,"fork":false,"pushed_at":"2024-10-16T21:36:02.000Z","size":788,"stargazers_count":5,"open_issues_count":5,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-18T18:17:28.360Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://project-codeflare.github.io/appwrapper/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/project-codeflare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-05T22:18:14.000Z","updated_at":"2024-10-16T21:27:35.000Z","dependencies_parsed_at":"2024-04-09T17:41:46.918Z","dependency_job_id":"7261fde7-2905-4acc-8824-ed960c533317","html_url":"https://github.com/project-codeflare/appwrapper","commit_stats":null,"previous_names":["project-codeflare/appwrapper"],"tags_count":47,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-codeflare%2Fappwrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-codeflare%2Fappwrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-codeflare%2Fappwrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-codeflare%2Fappwrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/project-codeflare","download_url":"https://codeload.github.com/project-codeflare/appwrapper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224324498,"owners_count":17292521,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-12T18:06:44.553Z","updated_at":"2025-05-02T17:31:57.860Z","avatar_url":"https://github.com/project-codeflare.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AppWrapper\n\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Continuous Integration](https://github.com/project-codeflare/appwrapper/actions/workflows/CI.yaml/badge.svg)](https://github.com/project-codeflare/appwrapper/actions/workflows/CI.yaml)\n\nAn AppWrapper contains a collection of Kubernetes resources that a\nuser desires to manage as a single logical workload. AppWrapper is\ndesigned to smoothly interoperate with\n[Kueue](https://kueue.sigs.k8s.io).  AppWrapper provides a flexible and\nworkload-agnostic mechanism for enabling Kueue to manage a group of\nKubernetes resources as a single logical unit without requiring any\nKueue-specific support by the controllers of those resources.\nBeginning in Kueue 0.11 (and AppWrapper v1.1), AppWrapper is a\n*built-in Kueue integration* and is enabled by default. In older versions\nAppWrapper was supported by Kueue as an *external framework* and needed to\nbe explicitly enabled via a custom Kueue configuration.\n\nAn AppWrapper can be used to harden workloads by providing an\nadditional level of automatic fault detection and recovery. The AppWrapper\ncontroller monitors the health of the workload and if corrective actions\nare not taken by the primary resource controllers within specified deadlines,\nthe AppWrapper controller will orchestrate workload-level retries and\nresource deletion to ensure that either the workload returns to a\nhealthy state or is cleanly removed from the cluster and its quota\nfreed for use by other workloads. If [Autopilot](https://github.com/ibm/autopilot)\nis also being used on the cluster, the AppWrapper controller can be configured\nto automatically inject Node anti-affinities into Pods and to trigger\nretries when Pods in already running workloads are using resources\nthat Autopilot has tagged as unhealthy. For details on customizing and\nconfiguring these fault tolerance capabilities, please see the\n[Fault Tolerance](https://project-codeflare.github.io/appwrapper/arch-fault-tolerance/)\nsection of our website.\n\nAppWrapper is designed to be used as part of fully open source software stack\nto run production batch workloads on Kubernetes and OpenShift. The [MLBatch](https://github.com/project-codeflare/mlbatch)\nproject leverages [Kueue](https://kueue.sigs.k8s.io), the [Kubeflow Training\nOperator](https://www.kubeflow.org/docs/components/training/),\n[KubeRay](https://docs.ray.io/en/latest/cluster/kubernetes/index.html), and the\n[Codeflare Operator](https://github.com/project-codeflare/codeflare-operator)\nfrom [Red Hat OpenShift\nAI](https://www.redhat.com/en/technologies/cloud-computing/openshift/openshift-ai).\nMLBatch enables [AppWrapper](https://project-codeflare.github.io/appwrapper/)\nand adds\n[Coscheduler](https://github.com/kubernetes-sigs/scheduler-plugins/blob/master/pkg/coscheduling/README.md).\nMLBatch includes a number of configuration steps to help these components work\nin harmony and support large workloads on large clusters.\n\n## Installation\n\nTo install the latest release of AppWrapper in a Kubernetes cluster with Kueue already installed\nand configured, simply run the command:\n\n```sh\nkubectl apply --server-side -f https://github.com/project-codeflare/appwrapper/releases/download/v1.1.2/install.yaml\n```\n\nThe controller runs in the `appwrapper-system` namespace.\n\nRead the [Quick Start Guide](https://project-codeflare.github.io/appwrapper/quick-start/) to learn more.\n\nIf you have modified the default configuration of Kueue to set `manageJobsWithoutQueueName` to true,\nthen you must also apply [this patch](./hack/kueue-patches/02-aw-external-frameworks.txt) to your\nKueue installation.\n\n## Usage\n\nFor example of AppWrapper usage, browse our [Samples](./samples) directory or\nsee the [Samples](https://project-codeflare.github.io/appwrapper/samples/) section\nof the project website.\n\n## Development\n\nTo contribute to the AppWrapper project and for detailed instructions on how to\nbuild and deploy the project from source, see the\n[Development Setup](https://project-codeflare.github.io/appwrapper/dev-setup/) section\nof the project website.\n\n## License\n\nCopyright 2024 IBM Corporation.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproject-codeflare%2Fappwrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproject-codeflare%2Fappwrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproject-codeflare%2Fappwrapper/lists"}