{"id":50421492,"url":"https://github.com/dejanu/etcd-utils","last_synced_at":"2026-05-31T08:30:32.979Z","repository":{"id":352876905,"uuid":"1217016774","full_name":"dejanu/etcd-utils","owner":"dejanu","description":"OCI image with etcd binaries","archived":false,"fork":false,"pushed_at":"2026-05-24T15:48:26.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T17:15:06.240Z","etag":null,"topics":["docker","etcd","etcd-client"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/repository/docker/dejanualex/etcd-utils/general","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dejanu.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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-21T13:12:28.000Z","updated_at":"2026-05-24T15:45:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dejanu/etcd-utils","commit_stats":null,"previous_names":["dejanu/etcd-utils"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/dejanu/etcd-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dejanu%2Fetcd-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dejanu%2Fetcd-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dejanu%2Fetcd-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dejanu%2Fetcd-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dejanu","download_url":"https://codeload.github.com/dejanu/etcd-utils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dejanu%2Fetcd-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33725060,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["docker","etcd","etcd-client"],"created_at":"2026-05-31T08:30:31.642Z","updated_at":"2026-05-31T08:30:32.970Z","avatar_url":"https://github.com/dejanu.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"## etcd-utils\n\nImage available at [dejanualex/etcd-utils](https://hub.docker.com/r/dejanualex/etcd-utils)\n\nThe container does not run any etcd commands because it's entrypoint/command is meant to be overwritten. The image supports `linux/amd64` and `linux/arm64`. To test the etcdctl version:\n\n```bash\ndocker run --rm -it dejanualex/etcd-utils:latest version\n\n# explicitly target an architecture:\ndocker run --rm -it --platform linux/arm64 dejanualex/etcd-utils:latest version\n```\n\n## Kubernetes debug container\n\n**etcd-utils** is meant for [`kubectl debug node/...`](https://kubernetes.io/docs/tasks/debug/debug-cluster/#node-debugging-with-kubectl-debug): an ephemeral container on a node where you run `etcdctl` subcommands (endpoint status, member list, defrag, snapshots, and so on).\n\n### Where to run it (and why)\n\nRun the debug container on a node that **runs etcd** and has etcd TLS material on disk:\n\n| Cluster type | Run on | Do not use |\n|---|---|---|\n| Vanilla Kubernetes (kubeadm, etc.) | **Control plane** nodes | Worker nodes |\n| k3s | **Server** nodes | Agent-only nodes |\n| HA control plane | Any control plane / server node that runs etcd | — |\n\n**Why:** etcd is part of the control plane, not the data plane. It stores cluster state and listens on the node (typically `127.0.0.1:2379`). Worker nodes do not run etcd and do not have `/etc/kubernetes/pki/etcd` (or the k3s equivalent). The image entrypoint reads those certs from the host mount at `/host/...` and connects to local etcd; on a worker, those paths are missing and auto-configuration does not apply.\n\nUse a control plane node name for `\u003cnodename\u003e`:\n\n```bash\n# List control plane nodes (label name varies by distro/installer)\nkubectl get nodes -l node-role.kubernetes.io/control-plane\n# older clusters may use: node-role.kubernetes.io/master\n\nkubectl debug node/\u003ccontrol-plane-nodename\u003e -it --profile=sysadmin \\\n  --image=dejanualex/etcd-utils:v1.0.1 \\\n  --image-pull-policy=Always -- \\\n  etcdctl endpoint status --cluster -w table\n```\n\nExamples once the debug shell is open (k3s and vanilla k8s):\n\n```bash\netcdctl endpoint status --cluster -w table\netcdctl endpoint health --cluster -w table\n\n# member IDs, names, peer/client URLs\netcdctl member list -w table\n```\n\n### How auto-TLS works\n\nThe entrypoint detects k3s vs vanilla Kubernetes from cert directories under `/host` and injects `--endpoints`, `--cacert`, `--cert`, and `--key`. You only pass the `etcdctl` subcommand and flags.\n\n| Distribution | Cert directory on host | cacert | cert | key |\n|---|---|---|---|---|\n| k3s | `/host/var/lib/rancher/k3s/server/tls/etcd/` | `server-ca.crt` | `client.crt` | `client.key` |\n| vanilla k8s | `/host/etc/kubernetes/pki/etcd/` | `ca.crt` | `server.crt` | `server.key` |\n\nIf neither directory exists (e.g. you attached to a worker), the wrapper runs `etcdctl` with your arguments only—supply endpoints and TLS flags yourself, and ensure the debug container can reach etcd on the network.\n\n### See also\n\n* [Using etcdctl in k3s clusters](https://docs.k3s.io/advanced?_highlight=etcdctl#using-etcdctl)\n* [DHI catalog](https://hub.docker.com/hardened-images/catalog) (base images used in the Dockerfile)\n* [etcd releases](https://github.com/etcd-io/etcd/releases): etcd release archives ships all 3 binaries together: `etcd, etcdctl, etcdutl`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdejanu%2Fetcd-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdejanu%2Fetcd-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdejanu%2Fetcd-utils/lists"}