{"id":19699184,"url":"https://github.com/fred78290/kubernetes-svc-dependencies","last_synced_at":"2025-02-27T12:36:30.366Z","repository":{"id":40354780,"uuid":"170999638","full_name":"Fred78290/kubernetes-svc-dependencies","owner":"Fred78290","description":"Check if kubernetes resources dependencies are ready before start your container","archived":false,"fork":false,"pushed_at":"2024-04-05T03:51:24.000Z","size":191,"stargazers_count":3,"open_issues_count":28,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-05T04:34:45.784Z","etag":null,"topics":["dependencies","init-containers","kubernetes"],"latest_commit_sha":null,"homepage":"","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/Fred78290.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}},"created_at":"2019-02-16T12:08:05.000Z","updated_at":"2024-04-15T01:30:47.303Z","dependencies_parsed_at":"2024-01-10T18:11:52.566Z","dependency_job_id":"faade51e-1466-4305-a6a6-20bb2437b213","html_url":"https://github.com/Fred78290/kubernetes-svc-dependencies","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fred78290%2Fkubernetes-svc-dependencies","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fred78290%2Fkubernetes-svc-dependencies/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fred78290%2Fkubernetes-svc-dependencies/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fred78290%2Fkubernetes-svc-dependencies/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fred78290","download_url":"https://codeload.github.com/Fred78290/kubernetes-svc-dependencies/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241013895,"owners_count":19894164,"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":["dependencies","init-containers","kubernetes"],"created_at":"2024-11-11T20:01:27.469Z","updated_at":"2025-02-27T12:36:30.330Z","avatar_url":"https://github.com/Fred78290.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://github.com/fred78290/kubernetes-svc-dependencies/actions/workflows/ci.yml/badge.svg)](https://github.com/Fred78290/kubernetes-svc-dependencies/actions)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Fred78290_kubernetes-svc-dependencies\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=Fred78290_kubernetes-svc-dependencies)\n[![Licence](https://img.shields.io/hexpm/l/plug.svg)](https://github.com/Fred78290/kubernetes-svc-dependencies/blob/master/LICENSE)\n\n# Kubernetes service dependencies ready checker #\n\nwhen you create resources in kubernetes often yours containers failed to start because they need somes already running resources before starting. For example you deploy a php website and it must connect to a MySQL server. With kubernetes service dependencies embeded in the deployment, the container doesn't start until his all dependencies are ready\n\n### How it work ###\n\nkubernetes service dependencies use \"initContainers\" mechanism of kubernetes. You can see the sample [examples/helloworld.json](examples/helloworld.json).\n\nThis sample is helloworld waiting a ready mongodb instance before to start.\n\n### Releases ###\n\n* 1.13.3 (unmaintened)\n    - This version is supported kubernetes v1.13.3\n* 1.15.0 (unmaintened)\n    - This version is supported kubernetes v1.15.0\n* 1.16 (unmaintened)\n    - This version is supported kubernetes v1.15\n* 1.17.5 (unmaintened)\n    - This version is supported kubernetes v1.17\n* 1.18.2 (unmaintened)\n    - This version is supported kubernetes v1.18\n* 1.20.5\n    - This version is supported kubernetes v1.20\n* 1.21.0\n    - This version is supported kubernetes v1.21\n\n\n### How to use? ###\n\nWhen you create kubernetes resources, just add an init container belong to your container.\n\n```json\n\"spec\": {\n    \"initContainers\": [\n        {\n            \"image\": \"fred78290/kubernetes-svc-dependencies:v1.20.5\",\n            \"command\": [\n                \"/usr/local/bin/check-dependencies\"\n            ],\n            \"args\": [\n                \"-v\",\n                \"--namespace=kube-public\",\n                \"--kubeconfig=/etc/kubernetes/config\",\n                \"--maxretry=5\",\n                \"--sleep=15\",\n                \"--timeout=300\",\n                \"svc/kube-public:mongodb\"\n            ],\n            \"name\": \"helloworld-init\",\n            \"volumeMounts\": [\n                {\n                    \"name\": \"kubeconfig\",\n                    \"mountPath\": \"/etc/kubernetes/config\",\n                    \"readOnly\": true\n                }\n            ]\n        }\n    ],\n    \"containers\": [\n        ...\n    ],\n    \"volumes\": [\n        {\n            \"name\": \"kubeconfig\",\n            \"hostPath\": {\n                \"path\": \"/etc/kubernetes/admin.conf\",\n                \"type\": \"File\"\n            }\n        }\n    ]\n}\n```\n\n### Command line arguments ###\n\n| Name | Description |\n| --- | --- |\n| `-n \\| --namespace` | Default namespace |\n| `-k \\| --kubeconfig` | Kubeconfig file  |\n| `-a \\| --apiserver` | apiserver host  |\n| `-r \\| --maxretry` | The number of retry before a dependency is considered as unready  |\n| `-b \\| --keeponerror` | Try always to reach the dependency else the process exit  |\n| `-i \\| --ignoreerror` | Ignore error  |\n| `-v \\| --verbose` | Verbose  |\n| `-s \\| --sleep` | Time interval in `time.Duration` unit  |\n| `-t \\| --timeout` | Time to wait before to declare service down in `time.Duration` unit  |\n| `dependencies` | Enumeration of dependencies |\n\n### Syntax to enumerate dependencies ###\n\nThe dependency is composed of 3 parts: type of kubernetes resource, namespace and resource name. The syntax is \u003c resource \u003e/\u003c namespace \u003e:\u003c name \u003e\n\n| Resource | Description |Example |\n| --- | --- | --- |\n| `po` | Pod |`po/kube-public:mongodb-023a4` |\n| `deploy` | Deployment | `deploy/kube-public:mongodb` |\n| `ds` | DaemonSet | `ds/kube-public:mongodb` |\n| `rs` | Replicaset | `rs/kube-public:mongodb` |\n| `rc` | Replication controller | `rc/kube-public:mongodb` |\n| `sts` | Statefulset | `sts/kube-public:mongodb` |\n| `svc` | Service | `svc/kube-public:mongodb` |\n\n## Build ##\n\nTo build the docker image, enter `make container`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffred78290%2Fkubernetes-svc-dependencies","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffred78290%2Fkubernetes-svc-dependencies","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffred78290%2Fkubernetes-svc-dependencies/lists"}