{"id":13891526,"url":"https://github.com/sergelogvinov/proxmox-cloud-controller-manager","last_synced_at":"2026-01-03T06:25:00.982Z","repository":{"id":152264256,"uuid":"624443384","full_name":"sergelogvinov/proxmox-cloud-controller-manager","owner":"sergelogvinov","description":"Kubernetes cloud controller manager for Proxmox","archived":false,"fork":false,"pushed_at":"2025-03-13T02:00:31.000Z","size":342,"stargazers_count":167,"open_issues_count":9,"forks_count":17,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-28T14:04:59.014Z","etag":null,"topics":["cloud-providers","controller-manager","kubernetes","proxmox"],"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/sergelogvinov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2023-04-06T13:33:04.000Z","updated_at":"2025-03-26T12:48:06.000Z","dependencies_parsed_at":"2023-11-20T08:29:35.911Z","dependency_job_id":"82d60224-d19c-4d4e-835b-1fa2d74eed18","html_url":"https://github.com/sergelogvinov/proxmox-cloud-controller-manager","commit_stats":{"total_commits":75,"total_committers":5,"mean_commits":15.0,"dds":0.07999999999999996,"last_synced_commit":"63eef87a878017d1c834c27007eeb6f3938043dd"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fproxmox-cloud-controller-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fproxmox-cloud-controller-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fproxmox-cloud-controller-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fproxmox-cloud-controller-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergelogvinov","download_url":"https://codeload.github.com/sergelogvinov/proxmox-cloud-controller-manager/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198442,"owners_count":20900079,"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":["cloud-providers","controller-manager","kubernetes","proxmox"],"created_at":"2024-08-06T17:00:24.406Z","updated_at":"2026-01-03T06:25:00.977Z","avatar_url":"https://github.com/sergelogvinov.png","language":"Go","funding_links":[],"categories":["Go","Base components"],"sub_categories":["Cloud Controller Manager"],"readme":"# Kubernetes cloud controller manager for Proxmox\n\nTo me, it seems like Proxmox is a bit old-fashioned when it comes to creating virtual machines.\nIt doesn't have a lot of automation built-in, so you have to do a lot of things manually.\nProxmox is a good option if you have a static infrastructure or don't create new virtual machines very often.\n\nI use Terraform to launch my Kubernetes nodes.\nHowever, when I need to scale down the cluster, I have to manually delete the corresponding node resource in Kubernetes.\nThat's why I created the CCM (Cloud Controller Manager) for Proxmox.\nOriginally, it was designed to work with [Talos CCM](https://github.com/siderolabs/talos-cloud-controller-manager), but it was not difficult to make it as standalone solution.\n\nThe CCM does a few things: it initialises new nodes, applies common labels to them, and removes them when they're deleted. It also supports multiple clusters, meaning you can have one kubernetes cluster across multiple Proxmox clusters.\n\nThe basic definitions:\n* kubernetes label `topology.kubernetes.io/region` is a Proxmox cluster `clusters[].region`\n* kubernetes label `topology.kubernetes.io/zone` is a hypervisor host machine name\n\nThis makes it possible for me to use pods affinity/anti-affinity.\n\n## Example\n\n```yaml\n# cloud provider config\nclusters:\n  - url: https://cluster-api-1.exmple.com:8006/api2/json\n    insecure: false\n    # Proxox auth token\n    token_id: \"user!token-id\"\n    token_secret: \"secret\"\n    # Uniq region name\n    region: cluster-1\n  - url: https://cluster-api-2.exmple.com:8006/api2/json\n    insecure: false\n    token_id: \"user!token-id\"\n    token_secret: \"secret\"\n    region: cluster-2\n```\n\nNode spec result:\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    ...\n    # Type generated base on CPU and RAM\n    node.kubernetes.io/instance-type: 2VCPU-2GB\n    # Proxmox cluster name as in the config\n    topology.kubernetes.io/region: cluster-1\n    # Proxmox hypervisor host machine name\n    topology.kubernetes.io/zone: pve-node-1\n\n    # Proxmox specific labels\n    topology.proxmox.sinextra.dev/region: cluster-1\n    topology.proxmox.sinextra.dev/zone: pve-node-1\n    # HA group labels - the same idea as node-role\n    group.topology.proxmox.sinextra.dev/${HAGroup}: \"\"\n\n  name: worker-1\nspec:\n  ...\n  # providerID - magic string:\n  #   cluster-1 - cluster name as in the config\n  #   123 - Proxmox VM ID\n  providerID: proxmox://cluster-1/123\nstatus:\n  addresses:\n  - address: 172.16.0.31\n    type: InternalIP\n  - address: worker-1\n    type: Hostname\n```\n\n## Install\n\nSee [Install](docs/install.md) for installation instructions.\n\n## Controllers\n\nSupport controllers:\n\n* cloud-node\n  * Updates node resource.\n  * Assigns labels and taints based on Proxmox VM configuration.\n* cloud-node-lifecycle\n  * Cleans up node resource when Proxmox VM is deleted.\n\n## FAQ\n\nSee [FAQ](docs/faq.md) for answers to common questions.\n\n## Contributing\n\nContributions are welcomed and appreciated!\nSee [Contributing](CONTRIBUTING.md) for our guidelines.\n\n## License\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](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---\n\n`Proxmox®` is a registered trademark of [Proxmox Server Solutions GmbH](https://www.proxmox.com/en/about/company).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergelogvinov%2Fproxmox-cloud-controller-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergelogvinov%2Fproxmox-cloud-controller-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergelogvinov%2Fproxmox-cloud-controller-manager/lists"}