{"id":22960531,"url":"https://github.com/hex108/coscheduling-plugin","last_synced_at":"2026-04-24T16:36:31.434Z","repository":{"id":141081619,"uuid":"198239790","full_name":"hex108/coscheduling-plugin","owner":"hex108","description":"A Kubernetes scheduler plugin that implements coscheduling(or named gang scheduling)","archived":false,"fork":false,"pushed_at":"2019-07-23T01:57:29.000Z","size":7260,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-07T17:45:15.466Z","etag":null,"topics":["coscheduling","gang-scheduling","kubernetes","scheduler-plugin"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/hex108.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2019-07-22T14:27:21.000Z","updated_at":"2024-04-15T12:52:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"a36534ae-3d10-4120-a833-dac389d13fce","html_url":"https://github.com/hex108/coscheduling-plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hex108%2Fcoscheduling-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hex108%2Fcoscheduling-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hex108%2Fcoscheduling-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hex108%2Fcoscheduling-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hex108","download_url":"https://codeload.github.com/hex108/coscheduling-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246746880,"owners_count":20827061,"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":["coscheduling","gang-scheduling","kubernetes","scheduler-plugin"],"created_at":"2024-12-14T18:37:58.094Z","updated_at":"2026-04-24T16:36:31.394Z","avatar_url":"https://github.com/hex108.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Coscheduling plugin\n\nBased on the great work of Kubernetes [new scheduler framework](https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20180409-scheduling-framework.md) and [kube-batch](https://github.com/kubernetes-sigs/kube-batch), it is very promising to impelment [coscheduling](https://github.com/kubernetes/enhancements/tree/master/keps/sig-scheduling) feature(or named [Gang scheduling](https://en.wikipedia.org/wiki/Gang_scheduling)). And this coscheduling plugin is for this purpose. It is just a **POC**(proof of concept) now. We will design and discuss more about it.\n\n## Design and implementation\n\nIt is implemented using [PodGroup](https://github.com/kubernetes-sigs/kube-batch/blob/master/pkg/apis/scheduling/v1alpha2/types.go#L89) in kube-batch and [permit plugin](https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/framework/v1alpha1/interface.go#L202) in Kubernetes new framework now.  In the futher, we might re-design a new `PodGroup` that includes `WaitTimeout` and other attributes.\n\n# How to run\n\n1. Run a kubernetes cluster\n  \n   We could run a Kubernetes cluster easily in a local machine. Or we could run this coschedling pluing in an existing Kuberntes cluster.\n   \n    ```\n   # hack/local-up-cluster.sh        # run it in the Kuberentes repo directory\n    ```\n\n2. Install CRD PodGroup\n\n    ```\n    # kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/deployment/kube-batch/templates/scheduling_v1alpha2_podgroup.yaml\n    ```\n\n3. Kill the default scheduler, and run the scheduler with coscheduling plugin\n\n    ```\n    # kill XXX   # XXX is the pid of the default scheduler\n    # go build -o ./coscheduling ./main.go\n    # ./coscheduling --v=5 --config ./hack/config.json\n    ```\n\n4. Test\n\n    ```\n    # kubectl create -f examples/podgroup.yaml\n    # kubectl create -f ./examples/deployment.yaml\n    ```\n    \n    In the scheduler log, we'll see logs as following:\n    \n    ```\n    Wait for pod number of PodGroup to be 3, got 1 now\n    ...\n    Wait for pod number of PodGroup to be 3, got 2 now\n    ...\n    Wait for pod number of PodGroup to be 3, got 3 now\n    ```\n    \n    When it reaches the min number 3, it will permit these waiting pods.\n    \n    We could also test other cases for it, will add more tests for it.\n    \n    \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhex108%2Fcoscheduling-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhex108%2Fcoscheduling-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhex108%2Fcoscheduling-plugin/lists"}