{"id":23542378,"url":"https://github.com/neo9/pilot-operator","last_synced_at":"2026-04-20T19:02:45.005Z","repository":{"id":64302439,"uuid":"193713016","full_name":"neo9/pilot-operator","owner":"neo9","description":"Kubernetes Operator to manage NodeJS, Java and Web applications","archived":false,"fork":false,"pushed_at":"2019-09-26T10:31:19.000Z","size":104,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-15T06:11:29.575Z","etag":null,"topics":["gitops","k8s","kubernetes","kubernetes-operator"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neo9.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}},"created_at":"2019-06-25T13:27:43.000Z","updated_at":"2020-02-14T20:41:50.000Z","dependencies_parsed_at":"2023-01-15T09:45:30.726Z","dependency_job_id":null,"html_url":"https://github.com/neo9/pilot-operator","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/neo9/pilot-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neo9%2Fpilot-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neo9%2Fpilot-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neo9%2Fpilot-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neo9%2Fpilot-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neo9","download_url":"https://codeload.github.com/neo9/pilot-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neo9%2Fpilot-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32061251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["gitops","k8s","kubernetes","kubernetes-operator"],"created_at":"2024-12-26T06:11:47.785Z","updated_at":"2026-04-20T19:02:44.989Z","avatar_url":"https://github.com/neo9.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes Pilot Operator\n\n[![Build Status](https://travis-ci.org/neo9/pilot-operator.svg?branch=master)](https://travis-ci.org/neo9/pilot-operator)\n\nKubernetes operator to manage and deploy Java, NodeJS and web applications.\n\n[API documentation](doc/api.md)\n\n[Docker image on Docker Hub](https://hub.docker.com/r/neo9sas/pilot-operator)\n\n## Requirements\n\n- Kubernetes 1.14.x / 1.13.x (other versions are not tested yet)\n- Go 1.12.x\n- Operator SDK v0.10.0\n\n## Local\n\nBuild\n\n```bash\ngo mod vendor -v\noperator-sdk build image_name\n```\n\nTests\n\n```bash\noperator-sdk test local ./test/e2e --up-local --namespace default\n```\n\nThis will use the default ~/.kube/config configuration or you can\nmodify the env variable `KUBECONFIG`.\n\n## Motivations\n\nAnsible has a push only strategy and does not sync well resources.  If you\ndelete a deployment from the Ansible vars, you should also remember to delete\nit manually from the cluster. Therefore, the architecture is not immutable.\n\nWe also found limitations with Kustomize which does not handle loops and\ncomplex logic because it was not designed for it.  We used Helm instead but\nwe've had issues syncing the versions from our CI/CD pipelines which only\nupdates the tag and our source value file was not being synced. We did not want\nto manage the charts directly in each repository to avoid misconfiguration and\nsyncing work accross our dozen microservices. We also had to duplicate the\nmain charts to have default values between NodeJS, Java and Web applications.\nWith Helm 2, Tiller also had lots of security issues and deploying multiple\nTiller instances made the workflow more complex.\n\nPilot operator is designed to fix the limitations we've had and to manage\ndeployments, hpa and services with simpler pipelines, logic and more flexible\nconfiguration files. Getting back to the core of what makes Kubernetes great\nand avoiding pushing the limits of Helm and Kustomize too far just because it\ndid not meet our needs.\n\n\n## Pilot operator deployment\n\nWith kubectl:\n\n```bash\ngit clone https://github.com/neo9/pilot-operator\ncd pilot-operator/deploy\nkubectl -n [namespace] apply -f ./crds\nkubectl -n [namespace] apply -f ./\n```\n\nWith Helm:\n\n```bash\nhelm repo add n9 https://n9-charts.storage.googleapis.com\nhelm upgrade -i \\\n  --namespace integration \\\n  pilot n9/pilot-operator\n\n# If you are deploying a second instance, crd are already created\n# You can use --no-crd-hook instead\nhelm install --no-crd-hook \\\n  --namespace another-namespace \\\n  --name pilot n9/pilot-operator\n```\n\n\n## Examples\n\n### Application\n\n[API documentation](doc/api.md)\n\n```yaml\napiVersion: pilot.neo9.fr/v1alpha1\nkind: Application\nmetadata:\n  name: my-api\n  namespace: integration\nspec:\n  type: java\n  repository: eu.gcr.io/example/my-api\n  initTag: v0.0.1\n  service:\n    targetPort: 8080\n  pod:\n    secrets:\n      - name: my-api\n        key: MONGO_URI\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneo9%2Fpilot-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneo9%2Fpilot-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneo9%2Fpilot-operator/lists"}