189 lines
5.7 KiB
Markdown
189 lines
5.7 KiB
Markdown
# Operator
|
|
|
|
The Elemental operator is responsible for managing the Elemental versions
|
|
and maintaining a machine inventory to assist with edge or baremetal installations.
|
|
|
|
## Installation
|
|
|
|
The Elemental operator can be added to a cluster running Rancher Multi Cluster
|
|
Management server. It is a helm chart and can be installed as follows:
|
|
|
|
```bash
|
|
helm -n cattle-elemental-system install --create-namespace elemental-operator https://github.com/rancher/elemental-operator/releases/download/v0.1.0/elemental-operator-0.1.0.tgz
|
|
```
|
|
|
|
## Managing Upgrades
|
|
|
|
The Elemental operator will manage the upgrade of the local cluster where the operator
|
|
is running and also any downstream cluster managed by Rancher Multi-Cluster
|
|
Manager.
|
|
|
|
### ManagedOSImage
|
|
|
|
The ManagedOSImage kind used to define what version of Elemental should be
|
|
running on each node. The simplest example of this type would be to change
|
|
the image of the local nodes.
|
|
|
|
```bash
|
|
kubectl edit -n fleet-default default-os-image
|
|
```
|
|
```yaml
|
|
apiVersion: elemental.cattle.io/v1beta1
|
|
kind: ManagedOSImage
|
|
metadata:
|
|
name: default-os-image
|
|
namespace: fleet-default
|
|
spec:
|
|
osImage: rancher/elemental:v0.0.0
|
|
```
|
|
|
|
A `ManagedOSImage` can also use a `ManagedOSVersion` to drive upgrades.
|
|
To use a `ManagedOSVersion` specify a `managedOSVersionName`, as `osImage` takes precedence, mind to set back as empty:
|
|
|
|
```bash
|
|
kubectl edit -n fleet-default default-os-image
|
|
```
|
|
```yaml
|
|
apiVersion: elemental.cattle.io/v1beta1
|
|
kind: ManagedOSImage
|
|
metadata:
|
|
name: default-os-image
|
|
namespace: fleet-local
|
|
spec:
|
|
osImage: ""
|
|
managedOSVersionName: "version-name"
|
|
```
|
|
|
|
|
|
#### Reference
|
|
|
|
Below is reference of the full type
|
|
|
|
```yaml
|
|
apiVersion: elemental.cattle.io/v1beta1
|
|
kind: ManagedOSImage
|
|
metadata:
|
|
name: arbitrary
|
|
|
|
# There are two special namespaces to consider. If you wish to manage
|
|
# nodes on the local cluster this namespace must be `fleet-local`. If
|
|
# you wish to manage nodes in Rancher MCM managed clusters then the
|
|
# namespace must match the namespace of the clusters.provisioning.cattle.io resource
|
|
# which is typically fleet-default.
|
|
namespace: fleet-default
|
|
spec:
|
|
# The image name to pull for the OS. Overrides managedOSVersionName when specified
|
|
osImage: rancher/os2:v0.0.0
|
|
|
|
# The ManagedOSVersion to use for the upgrade
|
|
managedOSVersionName: ""
|
|
|
|
# The selector for which nodes will be select. If null then all nodes
|
|
# will be selected
|
|
nodeSelector:
|
|
matchLabels: {}
|
|
|
|
# How many nodes in parallel to update. If empty the default is 1 and
|
|
# if set to 0 the rollout will be paused
|
|
concurrency: 2
|
|
|
|
# Arbitrary action to perform on the node prior to upgrade
|
|
prepare:
|
|
image: ubuntu
|
|
command: ["/bin/sh"]
|
|
args: ["-c", "true"]
|
|
env:
|
|
- name: TEST_ENV
|
|
value: testValue
|
|
|
|
# Parameters to control the drain behavior. If null no draining will happen
|
|
# on the node.
|
|
drain:
|
|
# Refer to kubectl drain --help for the definition of these values
|
|
timeout: 5m
|
|
gracePeriod: 5m
|
|
deleteLocalData: false
|
|
ignoreDaemonSets: true
|
|
force: false
|
|
disableEviction: false
|
|
skipWaitForDeleteTimeout: 5
|
|
|
|
# Which clusters to target
|
|
# This is used if you are running Rancher MCM and managing
|
|
# multiple clusters. The syntax of this field matches the
|
|
# Fleet targets and is described at https://fleet.rancher.io/gitrepo-targets/
|
|
clusterTargets: []
|
|
|
|
# Overrides the default container created for running the upgrade with a custom one
|
|
# This is optional and used only if specific upgrading mechanisms needs to be applied
|
|
# in place of the default behavior.
|
|
# The image used here overrides ones specified in osImage, depending on the upgrade strategy.
|
|
upgradeContainer:
|
|
image: ubuntu
|
|
command: ["/bin/sh"]
|
|
args: ["-c", "true"]
|
|
env:
|
|
- name: TEST_ENV
|
|
value: testValue
|
|
```
|
|
|
|
## Inventory Management
|
|
|
|
The Elemental operator can hold an inventory of machines and
|
|
the mapping of the machine to it's configuration and assigned cluster.
|
|
|
|
### MachineInventory
|
|
|
|
#### Reference
|
|
|
|
```yaml
|
|
apiVersion: elemental.cattle.io/v1beta1
|
|
kind: MachineInventory
|
|
metadata:
|
|
name: machine-a
|
|
# The namespace must match the namespace of the cluster
|
|
# assigned to the clusters.provisioning.cattle.io resource
|
|
namespace: fleet-default
|
|
spec:
|
|
# The cluster that this machine is assigned to
|
|
clusterName: some-cluster
|
|
# The hash of the TPM EK public key. This is used if you are
|
|
# using TPM2 to identifiy nodes. You can obtain the TPM by
|
|
# running `rancherd get-tpm-hash` on the node. Or nodes can
|
|
# report their TPM hash by using the MachineRegister
|
|
tpm: d68795c6192af9922692f050b...
|
|
# Generic SMBIOS fields that are typically populated with
|
|
# the MachineRegister approach
|
|
smbios: {}
|
|
# A reference to a secret that contains a shared secret value to
|
|
# identify a node. The secret must be of type "elemental.cattle.io/token"
|
|
# and have on field "token" which is the value of the shared secret
|
|
machineTokenSecretName: some-secret-name
|
|
# Arbitrary cloud config that will be added to the machines cloud config
|
|
# during the rancherd bootstrap phase. The one important field that should
|
|
# be set is the role.
|
|
config:
|
|
role: server
|
|
```
|
|
|
|
### MachineRegistration
|
|
|
|
#### Reference
|
|
|
|
```yaml
|
|
apiVersion: elemental.cattle.io/v1beta1
|
|
kind: MachineRegistration
|
|
metadata:
|
|
name: machine-registration
|
|
# The namespace must match the namespace of the cluster
|
|
# assigned to the clusters.provisioning.cattle.io resource
|
|
namespace: fleet-default
|
|
spec:
|
|
# Labels to be added to the created MachineInventory object
|
|
machineInventoryLabels: {}
|
|
# Annotations to be added to the created MachineInventory object
|
|
machineInventoryAnnotations: {}
|
|
# The cloud config that will be used to provision the node
|
|
cloudConfig: {}
|
|
```
|