An open API service indexing awesome lists of open source software.

https://github.com/oxidecomputer/rancher-machine-driver-oxide

This repository contains the Rancher Node Driver for provisioning hosts on Oxide that can be used by Rancher to deploy Kubernetes clusters.
https://github.com/oxidecomputer/rancher-machine-driver-oxide

Last synced: 11 months ago
JSON representation

This repository contains the Rancher Node Driver for provisioning hosts on Oxide that can be used by Rancher to deploy Kubernetes clusters.

Awesome Lists containing this project

README

          

= Oxide Rancher Machine Driver

This repository contains the Oxide Rancher machine driver, also known as a node
driver in Rancher parlance. Rancher uses this node driver to provision virtual
machines on Oxide that can then be used to deploy Kubernetes clusters.

== Building

Build the binary using `make`.

[source,sh]
----
make
----

== Deploying

The binary name must match the format `docker-machine-driver-*` (e.g.,
`docker-machine-driver-oxide`) otherwise Rancher will error when trying to use
the node driver.

=== Rancher Kubernetes

IMPORTANT: You must deploy the Oxide node driver using
the Kubernetes API rather than the Rancher UI otherwise
Rancher will be unable to use the Oxide node driver. See
https://github.com/oxidecomputer/rancher-machine-driver-oxide/issues/11 for
more information.

. Upload the `docker-machine-driver-oxide` binary somewhere accessible from
Rancher Kubernetes.

. Ensure your `kubectl` context is configured to use your Rancher Kubernetes
cluster.

. Create the following `oxide-nodedriver.yaml` Kubernetes manifest.
+
[source,yaml]
----
---
apiVersion: management.cattle.io/v3
kind: NodeDriver
metadata:
name: oxide
annotations:
privateCredentialFields: token
publicCredentialFields: host
finalizers:
- controller.cattle.io/node-driver-controller
spec:
active: true
addCloudCredential: true
builtin: false
checksum:
description: "Oxide Rancher node driver."
displayName: oxide
externalId: ""
uiUrl: ""
url: "https://example.com/docker-machine-driver-oxide"
----

. Apply the Kubernetes manifest to create the Oxide Rancher node driver.
+
[source,sh]
----
kubectl apply -f oxide-nodedriver.yaml
----

=== Rancher Machine CLI

. Install https://github.com/rancher/machine[`rancher-machine`].

. Place the `docker-machine-driver-oxide` binary somewhere on `PATH`.

. Use `rancher-machine` to create an Oxide instance.
+
[source,sh]
----
rancher-machine create \
--driver oxide \
--oxide-additional-ssh-public-key-ids 529885a0-2919-463a-a588-ac48f100a165 \
--oxide-boot-disk-image-id feb2c8ee-5a1d-4d66-beeb-289b860561bf \
--oxide-boot-disk-size "21474836480" \
--oxide-host https://silo01.oxide.example.com \
--oxide-memory "4294967296" \
--oxide-project exampleproject \
--oxide-ssh-user ubuntu \
--oxide-subnet "default" \
--oxide-token oxide-token-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
--oxide-vcpus "2" \
--oxide-vpc "default" \
example-oxide-machine
----

== Releasing

This project uses https://goreleaser.com/[GoReleaser] to build binaries and
create GitHub releases. The release process is as follows.

. Determine the version to be released. This could be a new major version or a
minor or patch version (e.g., `v1.0.0`).

. Determine the version control revision to be released (e.g., `1a0acaf`).
Usually this is the latest revision on the default branch for major version
releases but it could be another revision for minor or patch releases.

. Create a Git tag on the version control revision with a name that matches the
version to be released (e.g., `git tag -a v1.0.0 1a0acaf`).

. Push the newly created Git tag to GitHub (e.g., `git push origin v1.0.0`).

. Monitor the latest
https://github.com/oxidecomputer/rancher-machine-driver-oxide/actions/workflows/release.yaml[Release]
GitHub Actions job to ensure it runs successfully.

. Ensure the
https://github.com/oxidecomputer/rancher-machine-driver-oxide/releases[GitHub Releases]
page shows a new release for the desired version.

.. Update the description for the release as necessary.

.. Ensure the release is published, not a draft.