https://github.com/absaoss/karpenter-provider-vsphere
https://github.com/absaoss/karpenter-provider-vsphere
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/absaoss/karpenter-provider-vsphere
- Owner: AbsaOSS
- Created: 2025-05-21T19:52:58.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-01-28T13:55:16.000Z (5 months ago)
- Last Synced: 2026-01-29T02:46:44.596Z (5 months ago)
- Language: Go
- Size: 189 KB
- Stars: 8
- Watchers: 7
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# karpenter-provider-vsphere
Karpenter provider for VMWare Vsphere
# !!!Early alpha - NOT for Production use!!!
# Required flags
| Flag | Environment variable | Required |
|------------------|----------------------|----------|
| cluster-name | CLUSTER_NAME | true |
| cluster-endpoint | CLUSTER_ENDPOINT | true |
| vsphere-endpoint | GOVC_URL | true |
| vsphere-username | GOVC_USERNAME | true |
| vsphere-password | GOVC_PASSWORD | true |
| vsphere-path | VSPHERE_FOLDER | true |
| vsphere-insecure | GOVC_INSECURE | false |
| join-token | JOIN_TOKEN | true |
| kube-distro | KUBE_DISTRO | true |
# About supported distros
* `rke2` - as first class citizen
* `kubeadm` - to be implemented
* `rke2airgapped` - expects rke2 artifacts to be baked-in into node image
# VsphereNodeClass API
Besides `VSPHERE_FOLDER` (vsphere folder to place virtulal machines on), all placement settings are defined in `VsphereNodeClass` resource. This is done via selectors:
* `.spec.computeSelector` - defines how to search for desired resourcePool
* `.spec.datastoreSelector` - defines how to search for desired datastore
* `.spec.networkSelector` - difines how to discover network
* `.spec.imageSelector` - VM Template to use for VM Clone
All selectors have `tag` and `name` properties, those are mutually exclusive. Karpenter will find a resource either by Tag or Name.
* `.spec.instanceTypes` - a list of desired instance types:
- `os`: linux
- `cpu`: number of CPUS
- `memory`: amount of memory in gigabytes
- `region`: region topology
- `zone`: zone topology
- `maxPods`: maxPods to pass to kubelet (not implemented)
* `.spec.diskSize` - a desired root volume size in Gigabytes
* `.spec.tags` - a list of tags to apply to Karpenter managed virtual machines
[!NOTE]
At least two tags must be specified explicitly:
* `topology.kubernetes.io/zone` and `k8s-zone` to satisfy Vsphere Cloud controller manager which bootstraps Kubernetes node and removes `unitialized` Taint.
* `.spec.userdata`:
- `type` - Either `ignition` or `cloud-config`
- `additionalUserdata` - extra init data to be merged with distribution specific