{"id":19226887,"url":"https://github.com/mehuaniket/tugboat","last_synced_at":"2026-05-05T06:34:32.483Z","repository":{"id":228563175,"uuid":"745568431","full_name":"mehuaniket/tugboat","owner":"mehuaniket","description":"Controller which replicates kruise but simple. ","archived":false,"fork":false,"pushed_at":"2024-03-25T17:41:51.000Z","size":342,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-04T21:47:04.753Z","etag":null,"topics":["controller","devops","job-scheduler","kubernetes"],"latest_commit_sha":null,"homepage":"https://tugboat.cloudrasayan.com","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/mehuaniket.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-01-19T16:10:13.000Z","updated_at":"2024-09-24T16:47:30.000Z","dependencies_parsed_at":"2024-03-25T08:48:50.426Z","dependency_job_id":"1ea24093-48f3-432a-b460-a4e5c0613592","html_url":"https://github.com/mehuaniket/tugboat","commit_stats":null,"previous_names":["mehuaniket/tugboat"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehuaniket%2Ftugboat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehuaniket%2Ftugboat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehuaniket%2Ftugboat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehuaniket%2Ftugboat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mehuaniket","download_url":"https://codeload.github.com/mehuaniket/tugboat/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240300279,"owners_count":19779601,"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":["controller","devops","job-scheduler","kubernetes"],"created_at":"2024-11-09T15:20:47.104Z","updated_at":"2026-05-05T06:34:27.460Z","avatar_url":"https://github.com/mehuaniket.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tugboat\n\nMinimal version of `openkruise/kruise`. It was named Tugboat because it does minimal tasks with a small footprint compared to Kruise.\n## Description\nIntroducing a lightweight Kubernetes operator for BroadcastJobs, enabling efficient pod deployment across your cluster.\n\n### Key Features:\n\n- **Effortless Node-Wide Deployments:** Seamlessly create BroadcastJobs to launch pods on all eligible nodes, streamlining cluster-wide operations.\n- **Precise Node Selection:** Customize pod placement with node selectors for granular control.\n- **Restart Management:** Define restart limits for individual pods to ensure resilience and manage potential failures.\n- **Minimal Footprint:** Designed for efficiency with a smaller resource footprint than OpenKruise, ideal for resource-conscious environments.\n- **Perfect for Learning Go:** Built as a learning project, it showcases Go development practices while creating a valuable Kubernetes tool.\n\n\nIdeal for:\n\n- Cluster-wide maintenance tasks\n- Diagnostics and data collection\n- Distributing workloads across all nodes\n- Get started today and experience effortless cluster-wide pod deployments!\n\n## Install \n\n```bash\nhelm repo add tugboat https://mehuaniket.github.io/tools/tugboat\nhelm install tugboat tugboat/tugboat\n```\n\n## Uninstall\n\n```bash\nhelm uninstall tugboat \n```\n\n## Deploy\n\n- Create cronbroadcast job. `touch cronbroadcast.yaml`\n\n```yaml\napiVersion: apps.tugboat.cloudrasayan.com/v1\nkind: CronBroadcastJob\nmetadata:\n  labels:\n    app.kubernetes.io/name: cronbroadcastjob\n    app.kubernetes.io/instance: cronbroadcastjob-sample\n    app.kubernetes.io/part-of: tugboat\n    app.kubernetes.io/managed-by: kustomize\n    app.kubernetes.io/created-by: tugboat\n  name: cronbroadcastjob-sample\nspec:\n  schedule: \"*/2 * * * *\"\n  successfulJobsHistoryLimit: 3\n  failedJobsHistoryLimit: 3\n  broadcastJobTemplate:\n    template:\n      spec:\n        containers:\n          - name: helloworld\n            image: hello-world\n    # restartLimit: 3 #number of retry allowed for each node\n    labels:\n      kubernetes.io/hostname: microk8s-vm\n    nodeSelector:\n      kubernetes.io/os: linux\n    cleanupafter: 500s\n```\n\n- Apply\n\n```\nkubectl apply -f cronbroadcast.yaml\n```\n\n\n## License\n\nCopyright 2024.\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\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehuaniket%2Ftugboat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmehuaniket%2Ftugboat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehuaniket%2Ftugboat/lists"}