{"id":15753700,"url":"https://github.com/marella/orchestra","last_synced_at":"2025-03-31T07:42:23.865Z","repository":{"id":66207396,"uuid":"398643066","full_name":"marella/orchestra","owner":"marella","description":"A basic container orchestration tool.","archived":false,"fork":false,"pushed_at":"2021-08-21T19:56:29.000Z","size":84,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-06T12:15:47.951Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"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/marella.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":"2021-08-21T19:42:17.000Z","updated_at":"2021-08-22T12:30:21.000Z","dependencies_parsed_at":"2023-04-18T07:47:13.188Z","dependency_job_id":null,"html_url":"https://github.com/marella/orchestra","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/marella%2Forchestra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marella%2Forchestra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marella%2Forchestra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marella%2Forchestra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marella","download_url":"https://codeload.github.com/marella/orchestra/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246436052,"owners_count":20776960,"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-10-04T07:41:46.089Z","updated_at":"2025-03-31T07:42:23.838Z","avatar_url":"https://github.com/marella.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orchestra [![build](https://github.com/marella/orchestra/actions/workflows/build.yml/badge.svg)](https://github.com/marella/orchestra/actions/workflows/build.yml)\n\nA basic container orchestration tool written in Java. It uses ZooKeeper for storing data, Docker for running containers and CoreDNS for service discovery.\n\n## Architecture\n\n\u003cdiv align=\"center\"\u003e\n\n![Architecture Diagram](./docs/architecture.svg)\n\n\u003c/div\u003e\n\n### Store\n\nZooKeeper is used for storing the state and configuration of cluster. All services \"communicate\" with each other by reading and writing data to the store. It is also used by master nodes for leader election.\n\n### API Server\n\nThe API server allows users to perform CRUD operations on deployments. Users can specify the deployment name, image and number of replicas for a deployment. Each deployment is also assigned a hash so that the controller service can detect changes in the deployment.\n\n### Controller\n\nThe controller service reads the deployments created through the API server and creates or deletes the pods accordingly. Each pod is also assigned a unique ID.\n\n### Scheduler\n\nThe scheduler service reads the pods created by the controller service and assigns them to the worker nodes.\n\n### Worker\n\nThe worker service runs on each worker node and reads the pods assigned by the scheduler service and creates or deletes the containers accordingly using Docker. It also maintains a list of running pods and their IP addresses in the store.\n\n### DNS\n\nThe DNS service reads the running pods and their IP addresses created by each worker service and writes them to the zone file served by CoreDNS.\n\n## Usage\n\nStart:\n\n```sh\nmake up\n```\n\nStop:\n\n```sh\nmake down\n```\n\nCreate or update deployment:\n\n```sh\nmake deploy name=nginx image=nginx:alpine replicas=2\n```\n\nGet deployments:\n\n```sh\nmake get\n```\n\nDelete deployment:\n\n```sh\nmake delete name=nginx\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarella%2Forchestra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarella%2Forchestra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarella%2Forchestra/lists"}