digitalocean-cloud-controller-manager
is the Kubernetes cloud controller manager implementation for DigitalOcean. Read more about cloud controller managers here. Running digitalocean-cloud-controller-manager
allows you to leverage many of the cloud provider features offered by DigitalOcean on your kubernetes clusters.
Cloud Controller Manager follows semantic versioning.
The current version is: v0.1.21
. This means that the project is still
under active development and may not be production ready. The plugin will be
bumped to v1.0.0
once the DigitalOcean Kubernetes
product is released and
will continue following the rules below:
- Bug fixes will be released as a
PATCH
update. - New features will be released as a
MINOR
update. - Significant breaking changes makes a
MAJOR
update.
Because of the fast Kubernetes release cycles, CCM (Cloud Controller Manager) will only support the version that is also supported on DigitalOcean Kubernetes product. Any other releases will be not officially supported by us.
Learn more about running DigitalOcean cloud controller manager here!
Note that this CCM is installed by default on DOKS (DigitalOcean Managed Kubernetes), you don't have to do it yourself.
Here are some examples of how you could leverage digitalocean-cloud-controller-manager
:
When creating load-balancers through CCM (via LoadBalancer
-typed Services), it is important that you must not change the DO load-balancer configuration manually. Such changes will eventually be reverted by the reconciliation loop built into CCM. One exception are load-balancer names which can be changed (see also the documentation on load-balancer ID annotations).
Other than that, the only safe place to make load-balancer configuration changes is through the Service object.
For technical reasons, the ports 50053, 50054, and 50055 cannot be used as load-balancer entry ports (i.e., the port that the load-balancer listens on for requests). Trying to use one of the affected ports as service port causes a 422 entry port is invalid HTTP error response to be returned by the DO API (and surfaced as a Kubernetes event).
The solution is to change the service port to a different, non-conlicting one.
Requirements:
- Go: min
v1.12.x
This project uses Go modules for dependency management and employs vendoring. Please ensure to run make vendor
after any dependency modifications.
After making your code changes, run the tests and CI checks:
make ci
If you want to test your changes, create a new image with the version set to dev
:
VERSION=dev make publish
This will create a binary with version dev
and docker image pushed to
digitalocean/digitalocean-cloud-controller-manager:dev
To release a new version first bump the version:
make NEW_VERSION=v1.0.0 bump-version
Make sure everything looks good. Create a new branch with all changes:
git checkout -b release-<new version> origin/master
git commit -a -v
git push origin release-<new version>
After it's merged to master, tag the commit and push it:
git checkout master
git pull
git tag <new version>
git push --tags
Finally, create a Github release from master with the new version and publish it:
make publish
This will compile a binary containing the new version bundled in a docker image pushed to
digitalocean/digitalocean-cloud-controller-manager:<new version>
At DigitalOcean we value and love our community! If you have any issues or would like to contribute, feel free to open an issue/PR and cc any of the maintainers below.