This is the official cluster-api provider for Equinix Metal, formerly known as Packet. It implements cluster-api provider version v1beta1.
IMPORTANT Before you upgrade, please note that Facilities have been deprecated as of version v0.7.0
- Newly generated cluster yaml files will use Metro by default.
- Facility is still usable, but should be moved away from as soon as you can
- See here for more info on the facility deprecation: Bye Facilities, Hello (again) Metros
- If you would like to upgrade your existing clusters from using facilities to using metros, please work with your Equinix support team to figure out the best course of action. We can also provide some support via our community Slack and the Equinix Helix community site.
- The basic process will be to upgrade to v0.7.0, then replace
facility: sv15
withmetro: sv
(insert your correct metro instead of sv, for more information check out our Metros documentation) in your existing PacketCluster and PacketMachineTemplate objects.- For example, to update a PacketCluster object from facility
sv15
to metrosv
kubectl patch packetclusters my-cluster --type='json' -p '[{"op":"remove","path":"/spec/facility"},{"op":"add","path":"/spec/metro","value":"sv"}]'
- To update a PacketMachineTemplate object from facility
sv15
to metrosv
PLEASE NOTE Most people do not set the facility on their PacketMachineTemplate objects, so you may not need to do this step.kubectl patch packetmachinetemplate my-cluster-control-plane --type='json' -p '[{"op":"remove","path":"/spec/template/spec/facility"},{"op":"add","path":"/spec/template/spec/metro","value":"sv"}]'
- For example, to update a PacketCluster object from facility
- The expectation is that if the devices are already in the correct metros you've specified, no disruption will happen to clusters or their devices, however, as with any breaking change you should verify this outside of production before you upgrade.
To use the cluster-api to deploy a Kubernetes cluster to Equinix Metal, you need the following:
- A Equinix Metal API key
- A Equinix Metal project ID
- The
clusterctl
binary from the official cluster-api provider releases page - A Kubernetes cluster - the "bootstrap cluster" - that will deploy and manage the cluster on Equinix Metal.
kubectl
- not absolutely required, but it is hard to interact with a cluster without it!
For the bootstrap cluster, any compliant cluster will work, including official kubernetes, k3s, kind and k3d.
Once you have your cluster, ensure your KUBECONFIG
environment variable is set correctly.
You should then follow the Cluster API Quick Start Guide, selecting the 'Equinix Metal' tabs where offered.
If you do not change the generated yaml
files, it will use defaults. You can look in the templates/cluster-template.yaml file for details.
CPEM_VERSION
(defaults tov3.6.2
)KUBE_VIP_VERSION
(defaults tov0.5.12
)NODE_OS
(defaults toubuntu_20_04
)POD_CIDR
(defaults to192.168.0.0/16
)SERVICE_CIDR
(defaults to172.26.0.0/16
)
If you'd like to use reserved instances for your cluster, you need to edit your cluster yaml and add a hardwareReservationID field to your PacketMachineTemplates. That field can contain either a comma-separated list of hardware reservation IDs you'd like to use (which will cause it to ignore the facility and machineType you've specified), or just "next-available" to let the controller pick one that's available (that matches the machineType and facility you've specified). Here's an example:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: PacketMachineTemplate
metadata:
name: my-cluster-control-plane
namespace: default
spec:
template:
spec:
billingCycle: hourly
machineType: c3.small.x86
os: ubuntu_20_04
sshKeys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDvMgVEubPLztrvVKgNPnRe9sZSjAqaYj9nmCkgr4PdK username@computer
tags: []
#If you want to specify the exact machines to use, provide a comma separated list of UUIDs
hardwareReservationID: "b537c5aa-2ef3-11ed-a261-0242ac120002,b537c5aa-2ef3-11ed-a261-0242ac120002"
#Or let the controller pick from available reserved hardware in the project that matches machineType and facility with `next-available`
#hardwareReservationID: "next-available"
Learn how to engage with the Kubernetes community on the community page.
Equinix has a cluster-api guide
You can reach the maintainers of this project at:
- Chat with us on Slack in the #cluster-api-provider-packet channel
- Subscribe to the SIG Cluster Lifecycle Google Group for access to documents and calendars
The following section describes how to use the cluster-api provider for packet (CAPP) as a regular user.
You do not need to clone this repository, or install any special tools, other than the standard
kubectl
and clusterctl
; see below.
- To build CAPP and to deploy individual components, see docs/BUILD.md.
- To build CAPP and to cut a proper release, see docs/RELEASE.md.
Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.