The Deckhouse Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.
The module lifecycle stage: General Availability
Instance
Scope: Cluster
- v1alpha2
- v1alpha1
Instance describes the full lifecycle of a server in Deckhouse Platform, aggregating status from the Machine object (infrastructure) and Bashible service on the node (configuration).
- objectspec
Specification of the Instance, including references to related resources.
- objectspec.classReference
The reference to the
InstanceClassobject. It is unique for eachcloud-provider-*module.- stringspec.classReference.kind
The object type (e.g.,
OpenStackInstanceClass). The object type is specified in the documentation of the correspondingcloud-provider-module. - stringspec.classReference.name
The name of the required
InstanceClassobject (e.g.,finland-medium).
- objectspec.machineRef
Reference to instance in the cloud.
- stringspec.machineRef.apiVersion
APIVersion defines the versioned schema of this representation of an reference object.
- stringspec.machineRef.kind
Kind is a string value representing the REST resource referenced object represents.
- stringspec.machineRef.name
Name of referenced object.
- stringspec.machineRef.namespace
Namespace of referenced object.
- objectspec.nodeGroupRef
Reference to the NodeGroup that ordered this instance. It is known before the node joins the cluster.
- stringspec.nodeGroupRef.name
NodeGroup name.
- objectspec.nodeRef
Reference to the kubernetes node object.
- stringspec.nodeRef.name
Node name.
- objectstatus
Most recently observed status of the Instance.
- stringstatus.bashibleStatus
Aggregated status of the bashible configuration process.
Derived from
BashibleReadycondition.Allowed values:
Error,Unknown,Ready,WaitingApproval - objectstatus.bootstrapStatus
Information about instance bootstrapping process.
- stringstatus.bootstrapStatus.description
Description about getting logs.
- stringstatus.bootstrapStatus.logsEndpoint
http endpoint for getting bootstrap logs.
- array of objectsstatus.conditions
Detailed conditions of the instance (
MachineReady,BashibleReady, etc.).On a node that has a NodeConfig,
NodeAgentReadyisTruewhile the node agent reports andUnknownwith reasonNoReportafter 10 minutes without a report.- stringstatus.conditions.lastHeartbeatTime
Last time the condition heartbeat was updated by its source.
- stringstatus.conditions.lastTransitionTime
Last time the condition transitioned from one status to another.
- stringstatus.conditions.message
A human-readable message indicating details about the transition.
- integerstatus.conditions.observedGeneration
The generation observed by the controller.
- stringstatus.conditions.reason
Required value
The reason for the condition’s last transition.
- stringstatus.conditions.severity
Severity of the condition (
Error,Warning,Info). - stringstatus.conditions.status
Required value
Status of the condition (
True,False,Unknown). - stringstatus.conditions.type
Required value
Type of the condition (e.g.,
MachineReady,BashibleReady).
- stringstatus.machineStatus
Aggregated status of the infrastructure machine.
Derived from
MachineReadycondition.Allowed values:
Progressing,Error,Ready,Blocked,Rebooting - stringstatus.message
A human-readable message indicating details about the current status or error.
Displayed in CLI only when using
-o wideford8 k. - stringstatus.phase
The high-level lifecycle phase of the Instance.
Mapping: Pending -> Provisioning -> Provisioned -> Running -> Terminating.
Allowed values:
Pending,Provisioning,Provisioned,Running,Terminating,Unknown
Describes an implementation-independent ephemeral machine resource.
- objectstatus
- objectstatus.bootstrapStatus
Information about instance bootstrapping process.
- stringstatus.bootstrapStatus.description
Description about getting logs.
- stringstatus.bootstrapStatus.logsEndpoint
http endpoint for getting bootstrap logs.
- objectstatus.classReference
The reference to the
InstanceClassobject. It is unique for eachcloud-provider-*module.- stringstatus.classReference.kind
The object type (e.g.,
OpenStackInstanceClass). The object type is specified in the documentation of the correspondingcloud-provider-module.Allowed values:
OpenStackInstanceClass,GCPInstanceClass,VsphereInstanceClass,AWSInstanceClass,YandexInstanceClass,AzureInstanceClass,VCDInstanceClass,ZvirtInstanceClass,DynamixInstanceClass,HuaweiCloudInstanceClass,DVPInstanceClass - stringstatus.classReference.name
The name of the required
InstanceClassobject (e.g.,finland-medium).
- objectstatus.currentStatus
Current status of the instance object.
- stringstatus.currentStatus.lastUpdateTime
Last update time of current status.
- stringstatus.currentStatus.phase
InstancePhase is a label for the condition of a instance at the current time.
- objectstatus.lastOperation
Last operation refers to the status of the last operation performed.
- stringstatus.lastOperation.description
Description of the current operation.
- stringstatus.lastOperation.lastUpdateTime
Last update time of current operation.
- stringstatus.lastOperation.state
State of operation.
- stringstatus.lastOperation.type
Type of operation.
- objectstatus.machineRef
Reference to instance in the cloud.
- stringstatus.machineRef.apiVersion
APIVersion defines the versioned schema of this representation of an reference object.
- stringstatus.machineRef.kind
Kind is a string value representing the REST resource referenced object represents.
- stringstatus.machineRef.name
Name of referenced object.
- stringstatus.machineRef.namespace
Namespace of referenced object.
- objectstatus.nodeRef
Reference to the kubernetes node object.
- stringstatus.nodeRef.name
Node name.
InstanceTypesCatalog
Scope: Cluster
Version: v1alpha1
Contains information about discovered data from cloud.
- array of objectsinstanceTypes
Required value
List of available instance types.
- integer or stringinstanceTypes.cpu
Required value
The number of CPUs for the instance type.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - integer or stringinstanceTypes.memory
Required value
The amount of RAM a instance type has.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - stringinstanceTypes.name
Instance type name.
- integer or stringinstanceTypes.rootDisk
Root disk size.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
NodeGroup
Short names: ng
Scope: Cluster
- v1
- v1alpha2
- v1alpha1
Describes the runtime parameters of the node group.
Example:
# NodeGroup for cloud nodes in AWS.
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
name: test
spec:
nodeType: CloudEphemeral
cloudInstances:
zones:
- eu-west-1a
- eu-west-1b
minPerZone: 1
maxPerZone: 2
classReference:
kind: AWSInstanceClass
name: test
nodeTemplate:
labels:
tier: test
---
# NodeGroup for static nodes on bare metal servers (or VMs).
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
name: worker
spec:
nodeType: Static
- objectmetadata
- stringmetadata.name
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Maximum length:
42
- objectspec
Required value
- objectspec.chaos
Chaos monkey settings.
Example:
chaos: mode: DrainAndDelete period: 24h- stringspec.chaos.mode
The chaos monkey mode:
DrainAndDelete— drains and deletes a node when triggered;Disabled— leaves this NodeGroup intact.
Default:
DisabledAllowed values:
Disabled,DrainAndDelete - stringspec.chaos.period
The time interval to use for the chaos monkey.
It is specified as a string containing the time unit in hours and minutes: 30m, 1h, 2h30m, 24h.
Default:
6hPattern:
^([0-9]+h([0-9]+m)?|[0-9]+m)$
- objectspec.cloudInstances
Parameter for provisioning the cloud-based VMs.
Caution. Can only be used together with
nodeType: CloudEphemeral.- objectspec.cloudInstances.classReference
Required value
The reference to the
InstanceClassobject. It is unique for eachcloud-provider-*module.- stringspec.cloudInstances.classReference.kind
The kind of the
InstanceClassobject (e.g.,OpenStackInstanceClass). Supported kinds are defined by the installed cloud provider modules and specified in their documentation. - stringspec.cloudInstances.classReference.name
The name of the required
InstanceClassobject (e.g.,finland-medium).
- integerspec.cloudInstances.maxPerZone
Required value
The maximum number of instances for the group in each zone.
This value is used as the upper bound in cluster-autoscaler.
Allowed values:
0 <= X - integerspec.cloudInstances.maxSurgePerZone
The maximum number of instances the platform creates in each zone above the desired number while it replaces the instances of the group.
Replacement happens when parameters that require recreating a virtual machine change, for example in the InstanceClass. The parameter does not limit the number of instances that the cluster autoscaler orders when it scales the group up. For details on what NodeGroup parameters affect, see NodeGroup parameters and their result.
The value
0is treated as if the parameter is not set, so the default value applies.Default:
1Allowed values:
0 <= X - integer
The maximum number of unavailable instances (during rollout) in the group in each zone.
Default:
0Allowed values:
0 <= X - integerspec.cloudInstances.minPerZone
Required value
The minimum number of instances for the group in each zone.
This value is used in the
MachineDeploymentobject and as a lower bound in cluster-autoscaler.Allowed values:
0 <= X - integerspec.cloudInstances.priority
Priority of the node group.
When scaling a cluster, the autoscaler will first select node groups with a higher priority set. If several node groups have the same priority, the autoscaler randomly selects a group of them. You can control the rate at which nodes are switched to lower-priority groups on demand (for more details, see the FAQ).
Using priorities can be convenient to prefer ordering cheaper nodes (for example, spot instances) over more expensive ones.
- booleanspec.cloudInstances.quickShutdownDeprecated
Lowers CloudEphemeral machine drain timeout to 5 minutes.
- integer or stringspec.cloudInstances.standby
The summary number of overprovisioned nodes for this
NodeGroupin all zones.An overprovisioned node is a cluster node on which resources are reserved that are available at any time for scaling. The presence of such a node allows the cluster autoscaler not to wait for node initialization (which may take several minutes), but to immediately place a load on it.
The value can be an absolute number (for example, 2) or a percentage of desired nodes (for example, 10%). If a percentage is specified, the absolute number is calculated based on the percentage of the maximum number of nodes (the maxPerZone parameter) rounded down, but not less than one.
Pattern:
^[0-9]+%?$ - objectspec.cloudInstances.standbyHolder
Amount of reserved resources.
Used to determine whether to order overprovisioned nodes.
- objectspec.cloudInstances.standbyHolder.notHeldResourcesDeprecated
Deprecated: the parameter is no longer used. Use the
overprovisioningRateparameter.Describes the resources that will not be held (consumed) by the standby holder.
- integer or stringspec.cloudInstances.standbyHolder.notHeldResources.cpu
Describes the amount of CPU that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of cpus (for example, 2) as well as a milli representation (for example, 1500m).
Pattern:
^[0-9]+m?$ - integer or stringspec.cloudInstances.standbyHolder.notHeldResources.memory
Describes the amount of memory that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of bytes (for example, 128974848) as well as a fixed-point number using one of memory suffixes: G, Gi, M, Mi.
Pattern:
^[0-9]+(\.[0-9]+)?(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$
- integerspec.cloudInstances.standbyHolder.overprovisioningRate
Percentage of reserved resources calculated from the capacity of a node of a
NodeGroup.Default:
50Allowed values:
1 <= X <= 80
- array of stringsspec.cloudInstances.zones
List of availability zones to create instances in.
The default value depends on the cloud provider selected and usually corresponds to all zones of the region being used.
Example:
zones: - Helsinki - Espoo - Tampere
- objectspec.cri
Container runtime parameters.
- objectspec.cri.containerd
Containerd runtime parameters.
If used,
cri.typemust be set toContainerd.- integerspec.cri.containerd.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- objectspec.cri.containerdV2
ContainerdV2 runtime parameters.
If used,
cri.typemust be set toContainerdV2.When using
ContainerdV2,CgroupsV2will be used (providing improved security and resource management).To use
ContainerdV2as a container runtime, the nodes in the group must meet the following requirements:- Support for
CgroupsV2. - Linux kernel version
5.8or newer. - Systemd version
244or newer. - Support for
erofskernel module.
- integerspec.cri.containerdV2.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- Support for
- objectspec.cri.dockerDeprecated
Docker settings for nodes.
- booleanspec.cri.docker.manage
Enable Docker maintenance from bashible.
Default:
true - integerspec.cri.docker.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- objectspec.cri.notManaged
Settings for not managed CRI for nodes.
- stringspec.cri.notManaged.criSocketPath
Path to CRI socket.
- stringspec.cri.type
Container runtime type.
If not specified, the
defaultCRIparameter value of ClusterConfiguration is used.Note. Docker support is deprecated.
Note. The CSE edition supports containerd v2 only.
Allowed values:
Docker,Containerd,ContainerdV2,NotManaged
- objectspec.disruptions
Disruptions settings for nodes.
Example:
disruptions: approvalMode: Automatic automatic: drainBeforeApproval: false windows: - from: '06:00' to: '08:00' days: - Tue - Sun- stringspec.disruptions.approvalMode
The approval mode for disruptive updates:
Manual— disable automatic disruption approval; the alert will be displayed if disruption is needed. Nodes are not drained automatically inManualmode. If necessary, manually drain nodes before setting theupdate.node.deckhouse.io/disruption-approved=annotation. Caution. Themasternode group update mode must beManualto avoid issues with draining.Automatic— automatically approve disruption-involving updates. Nodes could be drained automatically before reboot, as configured by the drainBeforeApproval option.RollingUpdate— in this mode, a new node with new settings will be created; then, the old node will be deleted. Available only for cloud nodes.
If the
RollingUpdatemode is not used, when updating, the node is first drained and then updated (rebooted) and put back into operation (uncordoned). Note that in this case, the cluster must have sufficient resources to accommodate the load while the node being updated is unavailable. In theRollingUpdatemode, the node is replaced by the updated node, i.e., an extra node appears in the cluster for the duration of the update. In cloud infrastructures, theRollingUpdatemode is convenient, for example, if there are no resources in the cluster to temporarily host the load from the node being updated.Default:
AutomaticAllowed values:
Manual,Automatic,RollingUpdate - objectspec.disruptions.automatic
Additional parameters for the
Automaticmode.- booleanspec.disruptions.automatic.drainBeforeApproval
Drain Pods from the nodes before approving disruption.
Caution. This setting ignores (nodes will be approved without draining Pods):
- for the nodeGroup
masterwith a single node; - for a single
readynode in a nodeGroup picked out for Deckhouse placement.
Default:
true - for the nodeGroup
- array of objectsspec.disruptions.automatic.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.automatic.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.automatic.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.automatic.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.disruptions.rollingUpdate
Additional parameters for the
RollingUpdatemode.- array of objectsspec.disruptions.rollingUpdate.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.rollingUpdate.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.rollingUpdate.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.rollingUpdate.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.fencing
Enable the fencing-controller for a node group.
- stringspec.fencing.mode
Required value
Specifies the operating mode of the fencing-controller.
Supported modes:
Watchdog: Uses the watchdog kernel module to automatically reboot nodes that lose connectivity with the cluster. In this mode, the fencing-agent also monitors node availability in the cluster.
When
fencingis enabled, the NodeGroupConfiguration script loads thesoftdogkernel module with thesoft_marginparameter set to the value ofspec.fencing.watchdog.timeout(60 seconds by default) andsoft_panic=1.How the fencing-agent works:
- The agent opens the
/dev/watchdogdevice and sets thenode-manager.deckhouse.io/fencing-enabledlabel on the node, as well as thenode-manager.deckhouse.io/fencing-modelabel with the valueWatchdog. - The fencing-agent joins a gossip cluster (
memberlist) with agents from the same node group. - The agent regularly checks quorum (availability of the majority of nodes in the group):
- If quorum is lost (
quorum=false), the agent performs an additional check of Kubernetes API availability. - If quorum is present or the Kubernetes API is reachable, the agent resets the watchdog timer.
- If neither quorum nor access to the Kubernetes API is available, the watchdog is no longer reset, the timer expires, and a kernel panic occurs.
- The agent respects maintenance annotations
node-manager.deckhouse.io/fencing-disable,update.node.deckhouse.io/approved, andupdate.node.deckhouse.io/disruption-approved, temporarily disabling the watchdog during planned operations.
When
fencingis enabled, automatic node reboot after a kernel panic is disabled at the OS level. This prevents a node from returning in an undefined state before it is properly handled (manually for static nodes, or via the cloud-provider-controller for cloud nodes).The fencing-controller takes the node type (
node.deckhouse.io/type) into account when handling a failed node:- For cloud nodes (
CloudEphemeral,CloudPermanent), the controller deletes the Node object, after which the cloud-provider-controller recreates the corresponding virtual machine. - For static nodes (
Static,CloudStatic), the controller only evicts workloads while keeping the Node object in the cluster.
For details on how fencing handles different node types, see FAQ.
Allowed values:
Watchdog - objectspec.fencing.watchdog
- stringspec.fencing.watchdog.timeout
Required value
Watchdog timeout duration. Should be specified in seconds, minutes or hours.
Default:
60sPattern:
^[0-9]+[smh]{1}$
- objectspec.gpu
Available in editions: Ultimate/EE
GPU parameters.
- objectspec.gpu.exclusive
Without GPU sharing.
- objectspec.gpu.mig
MIGsharing strategy parameters.- array of objectsspec.gpu.mig.customConfigs
Custom MIG partitioning by GPU index.
Used only when
partedConfig: customis set.Represents an array of devices (a map keyed by
index), where each entry refers to a GPU by its index and describes the slices to be created.Examples:
customConfigs: profile: 3g.40gb count: 2customConfigs: profile: 1g.10gb.me count: 1- integerspec.gpu.mig.customConfigs.index
Required value
GPU index on the node.
Allowed values:
0 <= X - array of objectsspec.gpu.mig.customConfigs.slices
Required value
List of MIG slices to create.
- integerspec.gpu.mig.customConfigs.slices.count
Required value
Number of slices in the selected profile.
Default:
1Allowed values:
1 <= X <= 7 - stringspec.gpu.mig.customConfigs.slices.profile
Required value
MIG profile name.
Pattern:
^[0-9]+g\.[0-9]+gb(\.me)?$Examples:
profile: 3g.40gbprofile: 1g.10gbprofile: 1g.10gb.me
- stringspec.gpu.mig.partedConfig
MIG configuration name.
Standard
all-*profiles are supported (the same partitioning applied to all GPUs), as well as thecustomvalue, which allows defining partitioning individually for each GPU.Default:
all-1g.5gb
- stringspec.gpu.sharing
GPU sharing strategy:
Exclusive— no sharing (each GPU is fully allocated to a single Pod).TimeSlicing— time-sliced sharing (multiple Pods can share one GPU concurrently by splitting GPU time).MIG— use NVIDIA Multi-Instance GPU (MIG) to split each GPU into multiple instances (if supported by hardware).
Allowed values:
TimeSlicing,MIG,Exclusive - objectspec.gpu.timeSlicing
TimeSlicingsharing strategy parameters.- numberspec.gpu.timeSlicing.partitionCount
Count of partition per GPU.
Default:
4Allowed values:
1 <= X <= 100
- objectspec.kubelet
Kubelet settings for nodes.
- integerspec.kubelet.containerLogMaxFiles
How many rotated log files to store before deleting them.
Default:
4Allowed values:
1 <= X <= 20 - stringspec.kubelet.containerLogMaxSize
Maximum log file size before it is rotated.
Default:
50MiPattern:
\d+[Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|k|m] - integerspec.kubelet.maxPods
Set the max count of pods per node for given
NodeGroup. When left unspecified, the system automatically determines this limit according to the value of the podSubnetNodeCIDRPrefix ClusterConfiguration parameter:120pods forpodSubnetNodeCIDRPrefix≥24;250pods forpodSubnetNodeCIDRPrefix=23;500pods forpodSubnetNodeCIDRPrefix=22;1000pods forpodSubnetNodeCIDRPrefix≤21.
- objectspec.kubelet.memorySwap
Configuration of swap memory usage for kubelet.
- objectspec.kubelet.memorySwap.limitedSwap
Configuration for the limited swap mode. Required when
swapBehavioris set toLimitedSwap.- stringspec.kubelet.memorySwap.limitedSwap.size
Required value
Size of the swap file to create, specified in GB (for example, “2G”, “4G”).
Pattern:
^\d+G$Example:
size: 1G
- stringspec.kubelet.memorySwap.swapBehavior
Defines how swap memory is handled on the node:
NoSwap: Swap is disabled. This is the traditional Kubernetes behavior.LimitedSwap: Kubelet can use swap memory up to the limit specified inlimitedSwap.size.
For details on swap memory usage on nodes, refer to Kubernetes documentation.
Allowed values:
NoSwap,LimitedSwap - integerspec.kubelet.memorySwap.swappiness
Defines the kernel’s tendency to use the swap.
0: Minimal swap usage (only to avoid OOM).60: Default balanced behavior.100: Aggressive swap usage.
This value is set via
vm.swappinesssysctl parameter.Default:
60Allowed values:
0 <= X <= 100
- objectspec.kubelet.resourceReservation
Management of resource reservation for system daemons on a node.
More info in the Kubernetes documentation.
- stringspec.kubelet.resourceReservation.mode
Defines the system resource reservation mode:
Off— disables resource reservation.Auto— reserves resources based on the Node capacity.Static— reserves resources based on the values provided by the user via thestaticparameter.
Note that currently we do not use a dedicated group
cgroupfor resource reservation (-system-reserved-cgroupis not used).Default:
Auto - objectspec.kubelet.resourceReservation.static
Resource reservation parameters for the ‘Static’ mode.
- integer or stringspec.kubelet.resourceReservation.static.cpu
Pattern:
\d+[m] - integer or stringspec.kubelet.resourceReservation.static.ephemeralStorage
Pattern:
\d+[Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|k|m] - integer or stringspec.kubelet.resourceReservation.static.memory
Pattern:
\d+[Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|k|m]
- stringspec.kubelet.rootDir
Directory path for managing kubelet files (volume mounts,etc).
Default:
/var/lib/kubelet - booleanspec.kubelet.seccompDefault
Use
RuntimeDefaultseccomp profile for workloads that don’t specify seccomp profile explicitly. - objectspec.kubelet.topologyManager
Controls the kubelet resource managers on NUMA nodes: the CPU manager, the memory manager and the topology manager.
With a policy other than
None, containers of Guaranteed pods with an integer CPU request get exclusive CPUs, and the memory of Guaranteed pods is bound to NUMA nodes. WithRestrictedandSingleNumaNode, they get whole physical cores. Deckhouse calculates NUMA-dependent kubelet settings on each node of the group: it splitsreservedMemorybetween NUMA nodes and setsmax-allowable-numa-nodeson nodes with more than 8 NUMA nodes.A policy other than
NonerequiresresourceReservation.modeAuto, orStaticwith a positivestatic.cpu. Changing the settings restarts the kubelet and can require a disruption on nodes with Guaranteed pods. See How do I give pods dedicated CPUs and NUMA alignment?For more information, see the Kubernetes documentation.
- booleanspec.kubelet.topologyManager.enabledDeprecated
Deprecated, has no effect. The resource managers are controlled by
policyalone. - stringspec.kubelet.topologyManager.policy
Resource alignment policy and the related kubelet settings:
None: no alignment. The CPU and memory managers are not used.BestEffort: Guaranteed pods get exclusive CPUs and NUMA-bound memory. Resources are aligned to NUMA nodes when possible; a pod is admitted even if they cannot be aligned, but it is rejected if its memory cannot be placed.Restricted: Guaranteed pods get exclusive whole physical cores and NUMA-bound memory. A pod is rejected if its resources cannot be aligned; when a pod needs several NUMA nodes, the closest ones are preferred.SingleNumaNode: asRestricted, but all resources of a pod (or of a container, seescope) must come from one NUMA node.
More information can be found in the Kubernetes documentation.
Default:
NoneAllowed values:
None,BestEffort,Restricted,SingleNumaNode - stringspec.kubelet.topologyManager.scope
Defines granularity with which resources are aligned:
Container: resources are aligned for each container separately.Pod: all containers of a pod are aligned together.
Default:
PodAllowed values:
Container,Pod
- integerspec.nodeDrainTimeoutSecond
Maximum duration (in seconds) for which the controller attempts to reschedule pods to a new machine during node draining.
When a machine is deleted, the
Drainoperation evicts the pods for this long. Then the machine is deleted anyway. In aStaticorCloudStaticNodeGroup without this field, theDrainof a deleted machine has no time limit.The range is the one the module’s own settings have always enforced. A value outside it used to be accepted here and then rejected when the module read it, which stopped node-manager reconciling anything at all.
Allowed values:
30 <= X <= 7200 - objectspec.nodeTemplate
Specification of some of the fields that will be maintained in all nodes of the group.
Example:
nodeTemplate: labels: environment: production app: warp-drive-ai annotations: ai.fleet.com/discombobulate: 'true' taints: - effect: NoExecute key: ship-class value: frigate- objectspec.nodeTemplate.annotations
Similar to the standard
metadata.annotationsfield.Example:
annotations: ai.fleet.com/discombobulate: 'true' - objectspec.nodeTemplate.labels
Similar to the standard
metadata.labelsfield.Example:
labels: environment: production app: warp-drive-ai - array of objectsspec.nodeTemplate.taints
Similar to the
.spec.taintsfield of the Node object.Available fields:
effect,key, andvalues.Example:
taints: - effect: NoExecute key: ship-class value: frigate- stringspec.nodeTemplate.taints.effect
Allowed values:
NoSchedule,PreferNoSchedule,NoExecute - stringspec.nodeTemplate.taints.key
- stringspec.nodeTemplate.taints.value
- stringspec.nodeType
Required value
The type of nodes this group provides:
CloudEphemeral— nodes for this group will be automatically created (and deleted) in the cloud of the specified cloud provider;CloudPermanent— nodes from ProviderClusterConfiguration will be created via dhctl;CloudStatic— a static node (created manually or using any external tools) hosted in the cloud integrated with one of the cloud providers. This node has the CSI running, and it is managed by the cloud-controller-manager: theNodeobject automatically gets the information about the zone and region based on the cloud data; if a node gets deleted from the cloud, its corresponding Node object will be deleted in Kubernetes;Static— a static node hosted on a bare metal or virtual machine. The cloud-controller-manager does not manage the node even if one of the cloud providers is enabled.
Allowed values:
CloudEphemeral,CloudPermanent,CloudStatic,Static - objectspec.operatingSystem
Operating System settings for nodes.
- booleanspec.operatingSystem.manageKernelDeprecated
This parameter has no effect. Earlier, it enabled kernel maintenance on behalf of bashible.
Default:
true
- stringspec.providerType
Cloud provider type of the node group.
Noneor an empty value — for a static node group. - objectspec.staticInstances
Parameter for provisioning static machines to the cluster.
- integerspec.staticInstances.count
Target number of StaticInstance resources (matching the
labelSelector) that DP bootstraps and adds into the cluster.In a NodeGroup with Static or CloudStatic nodes, this parameter sets the expected number of nodes. DP uses this value for state control and automation purposes.
Warning. Set this parameter explicitly. The default value is
0, which means DP won’t bootstrap any StaticInstance resource or add any node to the group unless this value is modified. To add static nodes, specify the required number here (greater than0).Default:
0Allowed values:
0 <= X - objectspec.staticInstances.labelSelector
Label selector for choosing the StaticInstance resources the node group uses.
If both
matchLabelsandmatchExpressionsare set, a StaticInstance resource must satisfy all the conditions at once.An empty selector (
{}) chooses every StaticInstance resource. If the selector is not set, the node group chooses no StaticInstance resources.Warning. A selector with at least one condition cannot be modified or removed. To change it, create a new node group and move the static nodes to it.
Adding a selector to a node group that already uses StaticInstance resources is possible only when the labels of all those resources satisfy the new selector. Otherwise the webhook rejects the change and lists the resources that do not match the selector in the error message.
After the selector is added, existing static nodes are not recreated and keep their previous configuration, but the platform applies the selector to every new node. A StaticInstance resource that does not match the selector cannot be reused, so the node group ends up with fewer nodes than the
countparameter specifies.To add a selector:
- Label all the StaticInstance resources of the node group with the
d8 k label staticinstance <STATIC_INSTANCE> <KEY>=<VALUE>command. - Set the selector in the
spec.staticInstancesparameter of the NodeGroup resource.
- array of objectsspec.staticInstances.labelSelector.matchExpressions
A list of label selector requirements. The requirements are ANDed.
A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
- stringspec.staticInstances.labelSelector.matchExpressions.key
key is the label key that the selector applies to.
- stringspec.staticInstances.labelSelector.matchExpressions.operator
operator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
- array of stringsspec.staticInstances.labelSelector.matchExpressions.values
values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
- stringElement of the array
Pattern:
[a-z0-9]([-a-z0-9]*[a-z0-9])?Length:
1..63
- objectspec.staticInstances.labelSelector.matchLabels
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is “key”, the operator is “In”, and the values array contains only “value”. The requirements are ANDed.
- Label all the StaticInstance resources of the node group with the
- stringspec.systemType
How the nodes of the group are managed.
Mutable: bashible configures the node on the fly. An unset field means the same.Immutable: The node agent brings the node to the state described in a NodeConfig object, without bashible. The machine must boot from a Deckhouse Engine image.
Immutableis supported for:Static: Machines must be added withd8 node add.staticInstancescannot be used.CloudEphemeral: Machines must be created by the cloud provider through Cluster API (CAPI).CloudPermanent: Machines are created by dhctl.
Immutableis not supported forCloudStaticgroups.A group can become
Immutableonly while bashible has configured none of its nodes.Immutablecannot be changed or removed.Allowed values:
Mutable,Immutable - objectspec.update
- integer or stringspec.update.maxConcurrent
Maximum number of concurrently updating nodes.
Can be set as absolute count or as a percent of total nodes.
Default:
1Pattern:
^[1-9][0-9]*%?$
- objectstatus
- objectstatus.conditionSummary
- stringstatus.conditionSummary.ready
Status of the condition summary.
Allowed values:
True,False - stringstatus.conditionSummary.statusMessage
Status message about group handling.
- array of objectsstatus.conditions
- stringstatus.conditions.lastTransitionTime
Last time the condition transit from one status to another.
- stringstatus.conditions.message
Human readable message indicating details about last transition.
- stringstatus.conditions.status
Required value
Status of the condition, one of True, False.
- stringstatus.conditions.type
Required value
Type of node group condition.
- objectstatus.deckhouse
- objectstatus.deckhouse.observed
Contains last timestamp when the resource change was noted by the operator and its checksum.
- stringstatus.deckhouse.observed.checkSum
The checksum of the last observed resource.
- stringstatus.deckhouse.observed.lastTimestamp
Last timestamp when a change of the resource was noted by the operator.
- objectstatus.deckhouse.processed
Contains last timestamp when the resource was applied in the cluster by the operator and its checksum.
- stringstatus.deckhouse.processed.checkSum
The checksum of the last applied resource.
- stringstatus.deckhouse.processed.lastTimestamp
Last timestamp when the resource was applied in the cluster.
- stringstatus.deckhouse.synced
True if last observed version of the resource was successfully applied in the cluster.
- integerstatus.desired
Number of desired machines in the group.
- stringstatus.engine
Machinery used to manage nodes in this group.
The field value indicates which component manages the nodes:
None— nodes in the group are not managed by Machine Controller Manager or CAPI.MCM— nodes in the group are managed by Machine Controller Manager.CAPI— nodes in the group are managed by Cluster API.
Allowed values:
None,MCM,CAPI - stringstatus.error
Error message about possible problems with the group handling.
- integerstatus.instances
Number of instances (in any state) in the group.
- stringstatus.kubernetesVersion
The current version of kubernetes on the nodes, or the version to which the nodes will be upgraded.
- array of objectsstatus.lastMachineFailures
- objectstatus.lastMachineFailures.lastOperation
- stringstatus.lastMachineFailures.lastOperation.description
Last operation’s description.
- stringstatus.lastMachineFailures.lastOperation.lastUpdateTime
Timestamp of last status update for operation.
- stringstatus.lastMachineFailures.lastOperation.state
Machine’s operation state.
- stringstatus.lastMachineFailures.lastOperation.type
Type of operation.
- stringstatus.lastMachineFailures.name
Machine’s name.
- stringstatus.lastMachineFailures.ownerRef
Machine owner’s name.
- stringstatus.lastMachineFailures.providerID
Machine’s ProviderID.
- integerstatus.max
Maximum amount of instances in the group.
- integerstatus.min
Minimal amount of instances in the group.
- integerstatus.nodes
Number of Kubernetes nodes (in any state) in the group.
- integerstatus.ready
Number of ready Kubernetes nodes in the group.
- integerstatus.standby
Number of overprovisioned instances in the group.
- integerstatus.upToDate
Number of up-to-date nodes in the group.
Describes the runtime parameters of the node group.
- objectmetadata
- stringmetadata.name
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Maximum length:
42
- objectspec
Required value
- objectspec.chaos
Chaos monkey settings.
Example:
chaos: mode: DrainAndDelete period: 24h- stringspec.chaos.mode
The chaos monkey mode:
DrainAndDelete— drains and deletes a node when triggered;Disabled— leaves this NodeGroup intact.
Default:
DisabledAllowed values:
Disabled,DrainAndDelete - stringspec.chaos.period
The time interval to use for the chaos monkey (can be specified in the Go format).
Default:
6hPattern:
^[0-9]+[mh]{1}$
- objectspec.cloudInstances
Parameter for provisioning the cloud-based VMs.
Caution. Can only be used together with
nodeType: CloudEphemeral.- objectspec.cloudInstances.classReference
Required value
The reference to the
InstanceClassobject. It is unique for eachcloud-provider-*module.- stringspec.cloudInstances.classReference.kind
The kind of the
InstanceClassobject (e.g.,OpenStackInstanceClass). Supported kinds are defined by the installed cloud provider modules and specified in their documentation. - stringspec.cloudInstances.classReference.name
The name of the required
InstanceClassobject (e.g.,finland-medium).
- integerspec.cloudInstances.maxPerZone
Required value
The maximum number of instances for the group in each zone.
This value is used as the upper bound in cluster-autoscaler.
Allowed values:
0 <= X - integerspec.cloudInstances.maxSurgePerZone
The maximum number of instances the platform creates in each zone above the desired number while it replaces the instances of the group.
Replacement happens when parameters that require recreating a virtual machine change, for example in the InstanceClass. The parameter does not limit the number of instances that the cluster autoscaler orders when it scales the group up. For details on what NodeGroup parameters affect, see NodeGroup parameters and their result.
The value
0is treated as if the parameter is not set, so the default value applies.Default:
1Allowed values:
0 <= X - integer
The maximum number of unavailable instances (during rollout) in the group in each zone.
Default:
0Allowed values:
0 <= X - integerspec.cloudInstances.minPerZone
Required value
The minimum number of instances for the group in each zone.
This value is used in the
MachineDeploymentobject and as a lower bound in cluster-autoscaler.Allowed values:
0 <= X - integer or stringspec.cloudInstances.standby
The summary number of overprovisioned nodes for this
NodeGroupin all zones.An overprovisioned node is a cluster node on which resources are reserved that are available at any time for scaling. The presence of such a node allows the cluster autoscaler not to wait for node initialization (which may take several minutes), but to immediately place a load on it.
The value can be an absolute number (for example, 2) or a percentage of desired nodes (for example, 10%). If a percentage is specified, the absolute number is calculated based on the percentage of the maximum number of nodes (the maxPerZone parameter) rounded down, but not less than one.
Pattern:
^[0-9]+%?$ - objectspec.cloudInstances.standbyHolder
Amount of reserved resources.
Used to determine whether to order overprovisioned nodes.
- objectspec.cloudInstances.standbyHolder.notHeldResources
Describes the resources that will not be held (consumed) by the standby holder.
- integer or stringspec.cloudInstances.standbyHolder.notHeldResources.cpu
Describes the amount of CPU that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of cpus (for example, 2) as well as a milli representation (for example, 1500m).
Pattern:
^[0-9]+m?$ - integer or stringspec.cloudInstances.standbyHolder.notHeldResources.memory
Describes the amount of memory that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of bytes (for example, 128974848) as well as a fixed-point number using one of memory suffixes: G, Gi, M, Mi.
Pattern:
^[0-9]+(\.[0-9]+)?(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$
- array of stringsspec.cloudInstances.zones
List of availability zones to create instances in.
The default value depends on the cloud provider selected and usually corresponds to all zones of the region being used.
Example:
zones: - Helsinki - Espoo - Tampere
- objectspec.cri
Container runtime parameters.
- objectspec.cri.containerd
Containerd runtime parameters.
If used,
cri.typemust be set toContainerd.- integerspec.cri.containerd.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- objectspec.cri.docker
Docker settings for nodes.
Note. the
Dockeris deprecated.- booleanspec.cri.docker.manage
Enable Docker maintenance from bashible.
Default:
true - integerspec.cri.docker.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- objectspec.cri.notManaged
Settings for not managed CRI for nodes.
- stringspec.cri.notManaged.criSocketPath
Path to CRI socket.
- stringspec.cri.type
Container runtime type.
Value
defaultCRIfrom the initial cluster configration (cluster-configuration.yamlparameter from thed8-cluster-configurationsecret in thekube-systemnamespace) is used if not specified.Note. Docker support is deprecated.
Allowed values:
Docker,Containerd,NotManaged
- objectspec.disruptions
Disruptions settings for nodes.
Example:
disruptions: approvalMode: Automatic automatic: drainBeforeApproval: false windows: - from: '06:00' to: '08:00' days: - Tue - Sun- stringspec.disruptions.approvalMode
The approval mode for disruptive updates:
Manual— disable automatic disruption approval; the alert will be displayed if disruption is needed. Caution. Themasternode group update mode must beManualto avoid issues with draining.Automatic— automatically approve disruption-involving updates.RollingUpdate— in this mode, a new node with new settings will be created; then, the old node will be deleted. Available only for cloud nodes.
If the
RollingUpdatemode is not used, when updating, the node is first drained and then updated (rebooted) and put back into operation (uncordoned). Note that in this case, the cluster must have sufficient resources to accommodate the load while the node being updated is unavailable. In theRollingUpdatemode, the node is replaced by the updated node, i.e., an extra node appears in the cluster for the duration of the update. In cloud infrastructures, theRollingUpdatemode is convenient, for example, if there are no resources in the cluster to temporarily host the load from the node being updated.Default:
AutomaticAllowed values:
Manual,Automatic,RollingUpdate - objectspec.disruptions.automatic
Additional parameters for the
Automaticmode.- booleanspec.disruptions.automatic.drainBeforeApproval
Drain Pods from the nodes before approving disruption.
Caution. This setting ignores (nodes will be approved without draining Pods):
- for the nodeGroup
masterwith a single node; - for a single
readynode in a nodeGroup picked out for Deckhouse placement.
Default:
true - for the nodeGroup
- array of objectsspec.disruptions.automatic.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.automatic.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.automatic.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.automatic.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.disruptions.rollingUpdate
Additional parameters for the
RollingUpdatemode.- array of objectsspec.disruptions.rollingUpdate.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.rollingUpdate.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.rollingUpdate.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.rollingUpdate.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.kubelet
Kubelet settings for nodes.
- integerspec.kubelet.containerLogMaxFiles
How many rotated log files to store before deleting them.
Warning. This parameter does nothing if CRI type is
Docker.Default:
4Allowed values:
1 <= X <= 20 - stringspec.kubelet.containerLogMaxSize
Maximum log file size before it is rotated.
Warning. This parameter does nothing if CRI type is
Docker.Default:
50MiPattern:
\d+[Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|k|m] - integerspec.kubelet.maxPods
Set the max count of pods per node for given
NodeGroup. When left unspecified, the system automatically determines this limit according to the value of the podSubnetNodeCIDRPrefix ClusterConfiguration parameter:120pods forpodSubnetNodeCIDRPrefix≥24;250pods forpodSubnetNodeCIDRPrefix=23;500pods forpodSubnetNodeCIDRPrefix=22;1000pods forpodSubnetNodeCIDRPrefix≤21.
- stringspec.kubelet.rootDir
Directory path for managing kubelet files (volume mounts,etc).
Default:
/var/lib/kubelet - booleanspec.kubelet.seccompDefault
Use
RuntimeDefaultseccomp profile for workloads that don’t specify seccomp profile explicitly.
- objectspec.nodeTemplate
Specification of some of the fields that will be maintained in all nodes of the group.
Example:
nodeTemplate: labels: environment: production app: warp-drive-ai annotations: ai.fleet.com/discombobulate: 'true' taints: - effect: NoExecute key: ship-class value: frigate- objectspec.nodeTemplate.annotations
Similar to the standard
metadata.annotationsfield.Example:
annotations: ai.fleet.com/discombobulate: 'true' - objectspec.nodeTemplate.labels
Similar to the standard
metadata.labelsfield.Example:
labels: environment: production app: warp-drive-ai - array of objectsspec.nodeTemplate.taints
Similar to the
.spec.taintsfield of the Node object.Available fields:
effect,key, andvalues.Example:
taints: - effect: NoExecute key: ship-class value: frigate- stringspec.nodeTemplate.taints.effect
Allowed values:
NoSchedule,PreferNoSchedule,NoExecute - stringspec.nodeTemplate.taints.key
- stringspec.nodeTemplate.taints.value
- stringspec.nodeType
Required value
The type of nodes this group provides.
Cloud— nodes for this group will be automatically created (and deleted) in the cloud of the specified cloud provider;Static— a static node hosted on a bare metal or virtual machine. The cloud-controller-manager does not manage the node even of one of the cloud providers is enabled;Hybrid— a static node (created manually or using any external tools) hosted in the cloud integrated with one of the cloud provider. This node has the CSI running, and it is managed by the cloud-controller-manager: the Node object automatically gets the information about the zone and region based on the cloud data; if a node gets deleted from the cloud, its corresponding Node object will be deleted in Kubernetes.
Allowed values:
Cloud,Static,Hybrid - objectspec.operatingSystem
Operating System settings for nodes.
- booleanspec.operatingSystem.manageKernel
Enable kernel maintenance from bashible.
Default:
true
- stringspec.providerType
Cloud provider type of the node group.
Noneor an empty value — for a static node group. - stringspec.systemType
How the nodes of the group are managed.
Mutable: bashible configures the node on the fly. An unset field means the same.Immutable: The node agent brings the node to the state described in a NodeConfig object, without bashible. The machine must boot from a Deckhouse Engine image.
Immutableis supported for:Static: Machines must be added withd8 node add.Cloud: Machines must be created by the cloud provider through Cluster API (CAPI).Hybrid: Machines must be created by dhctl (CloudPermanentindeckhouse.io/v1).
Immutableis not supported for otherHybridgroups (CloudStaticindeckhouse.io/v1).A group can become
Immutableonly while bashible has configured none of its nodes.Immutablecannot be changed or removed.Allowed values:
Mutable,Immutable
- objectstatus
- objectstatus.conditionSummary
- stringstatus.conditionSummary.ready
Status of the condition summary.
Allowed values:
True,False - stringstatus.conditionSummary.statusMessage
Status message about group handling.
- integerstatus.desired
Number of desired machines in the group.
- stringstatus.engine
Machinery used to manage nodes in this group.
The field value indicates which component manages the nodes:
None— nodes in the group are not managed by MCM or CAPI.MCM— nodes in the group are managed by machine-controller-manager.CAPI— nodes in the group are managed by Cluster API.
Allowed values:
None,MCM,CAPI - stringstatus.error
Error message about possible problems with the group handling.
- integerstatus.instances
Number of instances (in any state) in the group.
- stringstatus.kubernetesVersion
The current version of kubernetes on the nodes, or the version to which the nodes will be upgraded.
- array of objectsstatus.lastMachineFailures
- objectstatus.lastMachineFailures.lastOperation
- stringstatus.lastMachineFailures.lastOperation.description
Last operation’s description.
- stringstatus.lastMachineFailures.lastOperation.lastUpdateTime
Timestamp of last status update for operation.
- stringstatus.lastMachineFailures.lastOperation.state
Machine’s operation state.
- stringstatus.lastMachineFailures.lastOperation.type
Type of operation.
- stringstatus.lastMachineFailures.name
Machine’s name.
- stringstatus.lastMachineFailures.ownerRef
Machine owner’s name.
- stringstatus.lastMachineFailures.providerID
Machine’s ProviderID.
- integerstatus.max
Maximum amount of instances in the group.
- integerstatus.min
Minimal amount of instances in the group.
- integerstatus.nodes
Number of Kubernetes nodes (in any state) in the group.
- integerstatus.ready
Number of ready Kubernetes nodes in the group.
- integerstatus.standby
Number of overprovisioned instances in the group.
- integerstatus.upToDate
Number of up-to-date nodes in the group.
Defines the runtime parameters of a node group.
- objectmetadata
- stringmetadata.name
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Maximum length:
42
- objectspec
Required value
- objectspec.chaos
Chaos monkey settings.
Example:
chaos: mode: DrainAndDelete period: 24h- stringspec.chaos.mode
The chaos monkey mode:
DrainAndDelete— drains and deletes a node when triggered;Disabled— leaves this NodeGroup intact.
Default:
DisabledAllowed values:
Disabled,DrainAndDelete - stringspec.chaos.period
The time interval to use for the chaos monkey (can be specified in the Go format).
Default:
6hPattern:
^[0-9]+[mh]{1}$
- objectspec.cloudInstances
Parameter for provisioning the cloud-based VMs.
Caution. Can only be used together with
nodeType: CloudEphemeral.- objectspec.cloudInstances.classReference
Required value
The reference to the
InstanceClassobject. It is unique for eachcloud-provider-*module.- stringspec.cloudInstances.classReference.kind
The kind of the
InstanceClassobject (e.g.,OpenStackInstanceClass). Supported kinds are defined by the installed cloud provider modules and specified in their documentation. - stringspec.cloudInstances.classReference.name
The name of the required
InstanceClassobject (e.g.,finland-medium).
- integerspec.cloudInstances.maxPerZone
Required value
The maximum number of instances for the group in each zone.
This value is used as the upper bound in cluster-autoscaler.
With a value of 0, you need to set capacity for some
InstanceClass. Get more details in the description of the necessaryInstanceClass.Allowed values:
0 <= X - integerspec.cloudInstances.maxSurgePerZone
The maximum number of instances the platform creates in each zone above the desired number while it replaces the instances of the group.
Replacement happens when parameters that require recreating a virtual machine change, for example in the InstanceClass. The parameter does not limit the number of instances that the cluster autoscaler orders when it scales the group up. For details on what NodeGroup parameters affect, see NodeGroup parameters and their result.
The value
0is treated as if the parameter is not set, so the default value applies.Default:
1Allowed values:
0 <= X - integer
The maximum number of unavailable instances (during rollout) in the group in each zone.
Default:
0Allowed values:
0 <= X - integerspec.cloudInstances.minPerZone
Required value
The minimum number of instances for the group in each zone.
This value is used in the
MachineDeploymentobject and as a lower bound in cluster-autoscaler.Allowed values:
0 <= X - integer or stringspec.cloudInstances.standby
The summary number of overprovisioned nodes for this
NodeGroupall zones.An overprovisioned node is a cluster node on which resources are reserved that are available at any time for scaling. The presence of such a node allows the cluster autoscaler not to wait for node initialization (which may take several minutes), but to immediately place a load on it.
The value can be an absolute number (for example, 2) or a percentage of desired nodes (for example, 10%). If a percentage is specified, the absolute number is calculated based on the percentage of the maximum number of nodes (the maxPerZone parameter) rounded down, but not less than one.
Pattern:
^[0-9]+%?$ - objectspec.cloudInstances.standbyHolder
Amount of reserved resources.
Used to determine whether to order overprovisioned nodes.
- objectspec.cloudInstances.standbyHolder.notHeldResources
Describes the resources that will not be held (consumed) by the standby holder.
- integer or stringspec.cloudInstances.standbyHolder.notHeldResources.cpu
Describes the amount of CPU that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of cpus (for example, 2) as well as a milli representation (for example, 1500m).
Pattern:
^[0-9]+m?$ - integer or stringspec.cloudInstances.standbyHolder.notHeldResources.memory
Describes the amount of memory that will not be held by standby holder on Nodes from this NodeGroup.
The value can be an absolute number of bytes (for example, 128974848) as well as a fixed-point number using one of memory suffixes: G, Gi, M, Mi.
Pattern:
^[0-9]+(\.[0-9]+)?(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$
- array of stringsspec.cloudInstances.zones
List of availability zones to create instances in.
The default value depends on the cloud provider selected and usually corresponds to all zones of the region being used.
Example:
zones: - Helsinki - Espoo - Tampere
- objectspec.cri
Container runtime parameters.
- objectspec.cri.containerd
Containerd runtime parameters.
If used,
cri.typemust be set toContainerd.- integerspec.cri.containerd.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- stringspec.cri.type
Container runtime type.
If not specified, the
defaultCRIparameter value of ClusterConfiguration is used.Note. Docker support is deprecated.
Allowed values:
Docker,Containerd,NotManaged
- objectspec.disruptions
Disruptions settings for nodes.
Example:
disruptions: approvalMode: Automatic automatic: drainBeforeApproval: false windows: - from: '06:00' to: '08:00' days: - Tue - Sun- stringspec.disruptions.approvalMode
The approval mode for disruptive updates:
Manual— disable automatic disruption approval; the alert will be displayed if disruption is needed. Caution. Themasternode group update mode must beManualto avoid issues with draining.Automatic— automatically approve disruption-involving updates.RollingUpdate— in this mode, a new node with new settings will be created; then, the old node will be deleted. Available only for cloud nodes.
If the
RollingUpdatemode is not used, when updating, the node is first drained and then updated (rebooted) and put back into operation (uncordoned). Note that in this case, the cluster must have sufficient resources to accommodate the load while the node being updated is unavailable. In theRollingUpdatemode, the node is replaced by the updated node, i.e., an extra node appears in the cluster for the duration of the update. In cloud infrastructures, theRollingUpdatemode is convenient, for example, if there are no resources in the cluster to temporarily host the load from the node being updated.Default:
AutomaticAllowed values:
Manual,Automatic,RollingUpdate - objectspec.disruptions.automatic
Additional parameters for the
Automaticmode.- booleanspec.disruptions.automatic.drainBeforeApproval
Drain Pods from the nodes before approving disruption.
Caution. This setting ignores (nodes will be approved without draining Pods):
- for the nodeGroup
masterwith a single node; - for a single
readynode in a nodeGroup picked out for Deckhouse placement.
Default:
true - for the nodeGroup
- array of objectsspec.disruptions.automatic.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.automatic.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.automatic.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.automatic.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.disruptions.rollingUpdate
Additional parameters for the
RollingUpdatemode.- array of objectsspec.disruptions.rollingUpdate.windows
Time windows for node disruptive updates.
- array of stringsspec.disruptions.rollingUpdate.windows.days
Days of the week when node could be updated.
Examples:
days: Mondays: Wed- stringElement of the array
Day of the week.
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.disruptions.rollingUpdate.windows.from
Required value
Start time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
from: '13:00' - stringspec.disruptions.rollingUpdate.windows.to
Required value
End time of disruptive update window (UTC timezone).
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$Example:
to: '18:30'
- objectspec.docker
Docker settings for nodes.
If used,
cri.typemust be set toDocker.Note. the
Dockeris deprecated.- booleanspec.docker.manage
Enable Docker maintenance from bashible.
Default:
true - integerspec.docker.maxConcurrentDownloads
Set the max concurrent downloads for each pull.
Default:
3
- objectspec.kubelet
Kubelet settings for nodes.
- integerspec.kubelet.containerLogMaxFiles
How many rotated log files to store before deleting them.
Warning. This parameter does nothing if CRI type is
Docker.Default:
4Allowed values:
1 <= X <= 20 - stringspec.kubelet.containerLogMaxSize
Maximum log file size before it is rotated.
Warning. This parameter does nothing if CRI type is
Docker.Default:
50MiPattern:
\d+[Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|k|m] - integerspec.kubelet.maxPods
Set the max count of pods per node for given
NodeGroup. When left unspecified, the system automatically determines this limit according to the value of the podSubnetNodeCIDRPrefix ClusterConfiguration parameter:120pods forpodSubnetNodeCIDRPrefix≥24;250pods forpodSubnetNodeCIDRPrefix=23;500pods forpodSubnetNodeCIDRPrefix=22;1000pods forpodSubnetNodeCIDRPrefix≤21.
- stringspec.kubelet.rootDir
Directory path for managing kubelet files (volume mounts,etc).
Default:
/var/lib/kubelet - booleanspec.kubelet.seccompDefault
Use
RuntimeDefaultseccomp profile for workloads that don’t specify seccomp profile explicitly.
- stringspec.kubernetesVersion
The desired minor version of Kubernetes.
By default, it corresponds to the version selected for the cluster globally (see installation documentation) or to the current version of the control plane (if the global version is not defined).
Allowed values:
1.33,1.34,1.35,1.36,1.37Example:
kubernetesVersion: '1.33' - objectspec.nodeTemplate
Specification of some of the fields that will be maintained in all nodes of the group.
Example:
nodeTemplate: labels: environment: production app: warp-drive-ai annotations: ai.fleet.com/discombobulate: 'true' taints: - effect: NoExecute key: ship-class value: frigate- objectspec.nodeTemplate.annotations
Similar to the standard
metadata.annotationsfield.Example:
annotations: ai.fleet.com/discombobulate: 'true' - objectspec.nodeTemplate.labels
Similar to the standard
metadata.labelsfield.Example:
labels: environment: production app: warp-drive-ai - array of objectsspec.nodeTemplate.taints
Similar to the
.spec.taintsfield of the Node object.Available fields:
effect,key, andvalues.Example:
taints: - effect: NoExecute key: ship-class value: frigate- stringspec.nodeTemplate.taints.effect
Allowed values:
NoSchedule,PreferNoSchedule,NoExecute - stringspec.nodeTemplate.taints.key
- stringspec.nodeTemplate.taints.value
- stringspec.nodeType
Required value
The type of nodes this group provides.
Cloud— nodes for this group will be automatically created (and deleted) in the cloud of the specified cloud provider;Static— a static node hosted on a bare metal or virtual machine. The cloud-controller-manager does not manage the node even of one of the cloud providers is enabled;Hybrid— a static node (created manually or using any external tools) hosted in the cloud integrated with one of the cloud provider. This node has the CSI running, and it is managed by the cloud-controller-manager: the Node object automatically gets the information about the zone and region based on the cloud data; if a node gets deleted from the cloud, its corresponding Node object will be deleted in Kubernetes.
Allowed values:
Cloud,Static,Hybrid - objectspec.operatingSystemDeprecated
Operating System settings for nodes.
- booleanspec.operatingSystem.manageKernelDeprecated
Enable kernel maintenance from bashible.
Default:
true
- stringspec.providerType
Cloud provider type of the node group.
Noneor an empty value — for a static node group. - objectspec.static
Static node parameters
- array of stringsspec.static.internalNetworkCIDRs
Subnet CIDR
- stringspec.systemType
How the nodes of the group are managed.
Mutable: bashible configures the node on the fly. An unset field means the same.Immutable: The node agent brings the node to the state described in a NodeConfig object, without bashible. The machine must boot from a Deckhouse Engine image.
Immutableis supported for:Static: Machines must be added withd8 node add.Cloud: Machines must be created by the cloud provider through Cluster API (CAPI).Hybrid: Machines must be created by dhctl (CloudPermanentindeckhouse.io/v1).
Immutableis not supported for otherHybridgroups (CloudStaticindeckhouse.io/v1).A group can become
Immutableonly while bashible has configured none of its nodes.Immutablecannot be changed or removed.Allowed values:
Mutable,Immutable
- objectstatus
- objectstatus.conditionSummary
- stringstatus.conditionSummary.ready
Status of the condition summary.
Allowed values:
True,False - stringstatus.conditionSummary.statusMessage
Status message about group handling.
- integerstatus.desired
Number of desired machines in the group.
- stringstatus.engine
Machinery used to manage nodes in this group.
The field value indicates which component manages the nodes:
None— nodes in the group are not managed by Machine Controller Manager or CAPI.MCM— nodes in the group are managed by Machine Controller Manager.CAPI— nodes in the group are managed by Cluster API.
Allowed values:
None,MCM,CAPI - stringstatus.error
Error message about possible problems with the group handling.
- integerstatus.instances
Number of instances (in any state) in the group.
- stringstatus.kubernetesVersion
The current version of kubernetes on the nodes, or the version to which the nodes will be upgraded.
- array of objectsstatus.lastMachineFailures
- objectstatus.lastMachineFailures.lastOperation
- stringstatus.lastMachineFailures.lastOperation.description
Last operation’s description.
- stringstatus.lastMachineFailures.lastOperation.lastUpdateTime
Timestamp of last status update for operation.
- stringstatus.lastMachineFailures.lastOperation.state
Machine’s operation state.
- stringstatus.lastMachineFailures.lastOperation.type
Type of operation.
- stringstatus.lastMachineFailures.name
Machine’s name.
- stringstatus.lastMachineFailures.ownerRef
Machine owner’s name.
- stringstatus.lastMachineFailures.providerID
Machine’s ProviderID.
- integerstatus.max
Maximum amount of instances in the group.
- integerstatus.min
Minimal amount of instances in the group.
- integerstatus.nodes
Number of Kubernetes nodes (in any state) in the group.
- integerstatus.ready
Number of ready Kubernetes nodes in the group.
- integerstatus.standby
Number of overprovisioned instances in the group.
- integerstatus.upToDate
Number of up-to-date nodes in the group.
NodeConfig
Short names: nc
Scope: Cluster
Version: v1alpha1
NodeConfig is the desired state of one node and the node agent’s report on it.
The node agent (nodelet) applies spec.
- stringapiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- stringkind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- objectmetadata
- objectspec
Required value
Desired state of the node.
- array of stringsspec.apiServerEndpoints
Kubernetes API server URLs with scheme and port, for example
https://10.0.0.1:6443.- stringElement of the array
Pattern:
^https://(\[[0-9A-Fa-f:]+\]|[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?([.][A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})/?$Maximum length:
253
- objectspec.containerRuntime
ContainerRuntime holds containerd configuration.
- integerspec.containerRuntime.maxConcurrentDownloads
Maximum number of image layers downloaded in parallel.
0means no limit. Defaults to8when unset.Allowed values:
0 <= X - stringspec.containerRuntime.registryConfigOwner
Component that writes the containerd
registry.ddirectory.Nodelet: The node agent writes the configuration fromspec.registryto the directory and removes everything else in it.RegistryAgent: The registry agent static pod owns the directory.
Defaults to
Nodeletwhen unset. Set bynode-manager.Allowed values:
Nodelet,RegistryAgent - stringspec.containerRuntime.sandboxImage
The
pauseimage used for pod sandboxes.If not specified, the pause image imported by the containerd system extension is used.
Pattern:
^[^[:space:]]+$Maximum length:
1024
- array of objectsspec.extensions
Extensions the node installs, each pinned by digest.
On an Immutable node an entry is a signed dm-verity system extension image. On a Mutable node an entry is a registry package: the node agent runs the package’s own
installscript as root.An entry named
nodeletupdates the node agent itself.Extension is a signed verity sysext built from a release channel, fetched from the registry-packages-proxy by digest. Optional repository selects the proxy’s per-registry config; optional path is its “path” parameter.
- stringspec.extensions.digest
Required value
Digest is the sha256 digest of the sysext image.
Pattern:
^sha256:[a-f0-9]{64}$ - stringspec.extensions.name
Required value
Name is the extension name (also the sysext image basename).
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Length:
1..63 - stringspec.extensions.path
Path to the artifact inside the registry.
Maximum length:
512 - stringspec.extensions.repository
Repository optionally selects the proxy’s per-registry client config.
Pattern:
^[^[:space:]]+$Maximum length:
1024 - objectspec.extensions.requestedBy
Object that requested the extension.
Unset for an extension of the platform itself.
- stringspec.extensions.requestedBy.kind
Required value
Kind of the object.
Allowed values:
NodeExtensionRequest,NodeStaticPodRequest - stringspec.extensions.requestedBy.name
Required value
Name of the object.
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Length:
1..253
- objectspec.featureGates
Node agent features to switch on or off, keyed by feature name.
A feature missing from this map is on for an Immutable node if the node type supports it, and off for a Mutable node. A Mutable node runs only the features switched on here.
The node rejects a document that names an unknown feature or switches on a feature its node type does not support.
Set by node-controller.
- array of stringsspec.internalNetworkCIDRs
InternalNetworkCIDRs are the subnets the cluster’s own traffic runs on. The node picks the interface holding an address inside one of them and registers with that address; a node with one NIC needs none of this. The pattern is StaticClusterConfiguration’s own (candi/openapi/static_cluster_configuration.yaml): IPv4 only.
- stringElement of the array
Pattern:
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$Maximum length:
43
- objectspec.kernel
Kernel holds sysctl settings and kernel modules to load.
- array of objectsspec.kernel.modules
Kernel modules to load, in this order.
Dependencies are not loaded automatically: list each module after the modules it depends on. Do not list a driver built into the kernel:
KernelModulesLoadedbecomesFalse.A module added to the list is loaded only after the disruption is approved.
KernelModule is a module to load with optional parameters.
- stringspec.kernel.modules.name
Required value
Length:
1..64 - array of stringsspec.kernel.modules.params
- stringElement of the array
Maximum length:
256
- objectspec.kernel.sysctl
- objectspec.kubelet
Kubelet holds kubelet configuration parameters.
- stringspec.kubelet.bootstrapToken
BootstrapToken is the bootstrap token used by kubelet to obtain its client certificate on first boot.
Maximum length:
4096 - stringspec.kubelet.clusterCABundle
PEM bundle of the cluster CA.
Maximum length:
65536 - array of stringsspec.kubelet.clusterDNS
ClusterDNS is the list of DNS server IP addresses for the cluster.
- stringElement of the array
Maximum length:
45
- stringspec.kubelet.clusterDomain
ClusterDomain is the DNS domain for this cluster (e.g. “cluster.local”).
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Maximum length:
253 - integerspec.kubelet.containerLogMaxFiles
Number of rotated log files kept per container.
Defaults to
4when unset.Allowed values:
1 <= X <= 1000 - stringspec.kubelet.containerLogMaxSize
Maximum size of a container log file before it is rotated.
Defaults to
50Miwhen unset.Maximum length:
64 - booleanspec.kubelet.externalCloudProvider
ExternalCloudProvider enables –cloud-provider=external so the cloud-controller-manager manages the node (zone, region, providerID).
- stringspec.kubelet.kubernetesVersion
KubernetesVersion is the cluster’s minor version, e.g. “1.34”. It decides which feature gates kubelet is started with (bashible turns DRA gates on by version); without it DRA workloads cannot run on immutable nodes.
Pattern:
^[0-9]+\.[0-9]+$Maximum length:
16 - integerspec.kubelet.maxPods
Maximum number of pods on the node.
Defaults to
120when unset.Allowed values:
1 <= X <= 1000 - objectspec.kubelet.nodeLabels
NodeLabels are labels added to the node object when kubelet registers. A NodeGroup caps neither their number nor their shape (crds/node_group.yaml:1915), so neither does this.
- array of objectsspec.kubelet.registerWithTaints
RegisterWithTaints is a list of taints to add to the node object when kubelet registers itself. Only takes effect on initial registration.
Taint represents a Kubernetes taint applied to a node during registration. Key, value and effect take what a NodeGroup takes (crds/node_group.yaml:1944): bare strings and an optional effect, so a taint copied from one still fits.
- stringspec.kubelet.registerWithTaints.effect
Allowed values:
NoSchedule,PreferNoSchedule,NoExecute - stringspec.kubelet.registerWithTaints.key
Required value
- stringspec.kubelet.registerWithTaints.value
- objectspec.kubelet.resourceReservation
ResourceReservation controls how much CPU, memory and disk are held back from pods for the system itself (kubeReserved).
- stringspec.kubelet.resourceReservation.mode
Reservation policy.
Auto: Computed from the node’s capacity.Off: Nothing is reserved.
Defaults to
Autowhen unset.Allowed values:
Auto,Off
- booleanspec.kubelet.serverTLSBootstrap
ServerTLSBootstrap makes kubelet request a serving certificate from the cluster instead of signing its own. Default true. The zero master sets it to false: nothing approves serving CSRs until Deckhouse is installed.
- objectspec.network
Network holds hostname, DNS, NTP, interfaces and routes.
- objectspec.network.dns
DNS resolver configuration.
- array of stringsspec.network.dns.search
- stringElement of the array
Maximum length:
253
- array of stringsspec.network.dns.servers
Name server IP addresses.
- stringElement of the array
Maximum length:
45
- stringspec.network.hostname
Host name of the node.
Maximum length:
253 - array of objectsspec.network.interfaces
Network interfaces, keyed by name.
NetworkInterface describes a single NIC.
- array of stringsspec.network.interfaces.addresses
Static addresses in CIDR notation, used when
dhcpisfalse.- stringElement of the array
Maximum length:
43
- booleanspec.network.interfaces.cluster
Cluster names this NIC the one the cluster’s traffic runs on, for a machine whose addressing spec.internalNetworkCIDRs cannot tell apart.
- booleanspec.network.interfaces.dhcp
Required value
DHCP enables DHCPv4 on the interface.
- stringspec.network.interfaces.gateway
Default gateway IP address.
Maximum length:
45 - stringspec.network.interfaces.name
Required value
Length:
1..253
- objectspec.network.ntp
NTP time-sync configuration.
- array of stringsspec.network.ntp.servers
- stringElement of the array
Maximum length:
253
- array of objectsspec.network.routes
- stringspec.network.routes.gateway
Gateway IP address.
Maximum length:
45 - stringspec.network.routes.name
Maximum length:
253 - array of stringsspec.network.routes.networks
Destination networks in CIDR notation.
- stringElement of the array
Maximum length:
43
- stringspec.nodeName
Required value
Name of the Kubernetes node this configuration applies to.
Equals
metadata.nameand cannot be changed.Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Length:
1..253 - objectspec.osImage
Operating system image to use on the node.
To determine whether an update is required, the node compares the image
digestwith the value saved to/config/os-digestduring installation. The digest identifies a specific image publication and may change when the same content is republished.Required when
systemTypeisImmutable.- stringspec.osImage.digest
Required value
Operating system image digest.
Identifies a specific image and is used by the node to determine whether an update is required. During installation, the node saves the digest and compares it with the specified value during subsequent checks.
Pattern:
^sha256:[a-f0-9]{64}$ - stringspec.osImage.path
Path to the image inside the registry.
Maximum length:
512 - stringspec.osImage.repository
Address of the container registry from which the operating system image is downloaded.
The value is passed to
registry-packages-proxyas therepositoryparameter.If the parameter is not specified,
repositoryis not passed andregistry-packages-proxyuses its default container registry.Pattern:
^[^[:space:]]+$Maximum length:
1024 - stringspec.osImage.rootHash
Dm-verity root hash of the root filesystem inside the image, in ASCII hexadecimal format.
Used to determine whether the actual image content has changed. Unlike
digest, which may change when an image is republished,rootHashremains the same if the root filesystem content has not changed.Deckhouse Platform obtains the value from an image label. If the value cannot be obtained from the label, the node determines the root hash after downloading the image.
Pattern:
^[a-f0-9]{64}$
- objectspec.registry
Registry is the container registry the node talks to directly, without the registry-packages-proxy. A node bootstrapping a control plane has no proxy yet but must pull images and sysexts; workers leave this empty.
- stringspec.registry.address
Required value
Address is the registry host, optionally with a port, e.g. “registry.deckhouse.io” or “registry.example.com:5000”.
Pattern:
^[^[:space:]]+$Length:
1..1024 - stringspec.registry.auth
Auth is the base64-encoded “user:password” pair, as it appears in the “auth” field of a docker config.
Maximum length:
4096 - stringspec.registry.caBundle
PEM bundle of the CA certificates the registry is verified with.
Maximum length:
65536 - stringspec.registry.path
Path is the repository path within the registry, e.g. “/deckhouse/ce”.
Maximum length:
1024 - stringspec.registry.scheme
Protocol the node uses to connect to the registry.
Defaults to
HTTPSwhen unset.Allowed values:
HTTPS,HTTP
- objectspec.registryPackagesProxy
How the node reaches
registry-packages-proxy, which serves it extensions and operating system images.- stringspec.registryPackagesProxy.accessToken
Bearer token the node presents to the proxy.
Base64-encoded in the object.
Maximum length:
4096 - array of stringsspec.registryPackagesProxy.endpoints
registry-packages-proxyURLs with scheme and port.When unset, the node uses port
4219of theapiServerEndpointshosts. Set only in the initial configuration of the first master node.- stringElement of the array
Pattern:
^https?://(\[[0-9A-Fa-f:]+\]|[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?([.][A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})/?$Maximum length:
253
- array of objectsspec.staticPods
Manifests of static pods that kubelet runs without using the Kubernetes scheduler.
The node writes the manifests to
/etc/kubernetes/manifests. Static pods must obtain any other required resources on their own. For example, a pod can issue its own certificates, use the node’s kubeconfig, and mount directories for persistent state usinghostPathwith theDirectoryOrCreatetype.Control plane component manifests created by the node agent are not included in
spec.staticPodsand are not modified when this parameter is processed.Static pod.
- stringspec.staticPods.manifest
Required value
Complete pod manifest.
When the manifest is written to disk, the
$MY_IPsubstring is replaced with the node’s IP address, similarly to control plane component manifests.Length:
1..32768 - stringspec.staticPods.name
Required value
Manifest file name without an extension.
Used as the list item key and is independent of
metadata.nameof the pod in the manifest. Kubelet determines the mirror pod name from the manifest rather than the file name.Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Length:
1..63 - objectspec.staticPods.requestedBy
Object that requested the static pod.
Unset for a static pod of the platform itself.
- stringspec.staticPods.requestedBy.kind
Required value
Kind of the object.
Allowed values:
NodeExtensionRequest,NodeStaticPodRequest - stringspec.staticPods.requestedBy.name
Required value
Name of the object.
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Length:
1..253
- stringspec.statusToken
StatusToken is the bearer presented to the node’s :50000 status port. Whoever writes the document mints it (dhctl, or the NodeConfigTemplate render for a hand-installed machine); the cluster carries it over untouched, having no way to tell the node a new one. Deliberately not marked sensitive: the apiserver would answer “
" and the carry-over would write that back, destroying the token. Maximum length:
4096 - objectspec.storage
Disk the operating system is installed on, and additional filesystems.
The installation disk cannot be changed once set.
- stringspec.storage.device
Device is the whole-disk block device to install onto, e.g. “/dev/sda”, “/dev/nvme0n1”, or a stable “/dev/disk/by-id/…” path. Ignored when diskSelector is set.
Pattern:
^/dev/[A-Za-z0-9._/-]+$Maximum length:
1024 - objectspec.storage.diskSelector
Selects the installation disk by attributes instead of a fixed path.
All specified fields must match.
- stringspec.storage.diskSelector.busPath
BusPath matches the hardware bus path (glob).
Maximum length:
253 - stringspec.storage.diskSelector.model
Model matches the device model (glob), e.g. “Samsung*”.
Maximum length:
253 - stringspec.storage.diskSelector.name
Name matches the kernel device name (glob), e.g. “nvme0n1”.
Maximum length:
253 - booleanspec.storage.diskSelector.rotational
Rotational matches spinning (true) vs solid-state (false) disks.
- stringspec.storage.diskSelector.serial
Serial matches the disk serial number (glob).
Maximum length:
253 - stringspec.storage.diskSelector.size
Size matches the disk capacity, optionally with a comparison operator, e.g. “>=100Gi”, “>1Ti”, “512Gi”.
Maximum length:
253 - stringspec.storage.diskSelector.type
Type matches the disk kind.
Allowed values:
SSD,HDD,NVMe,SD - stringspec.storage.diskSelector.wwid
WWID matches the World Wide Identifier (glob).
Maximum length:
253
- array of objectsspec.storage.mounts
Mounts are additional filesystems the node makes available, at /mnt/
or wherever bindTo names. Nothing here is partitioned: only existing partitions and blank whole disks are formatted (when empty) and mounted. Mount is one additional filesystem, at /mnt/
unless bindTo says otherwise. Exactly one of device or partitionSelector names the partition; an empty one is formatted (label = name), an existing filesystem mounted as is. - stringspec.storage.mounts.bindTo
BindTo mounts the filesystem at this path instead of /mnt/
, for a directory something else knows by name (/var/lib/etcd). The directory must be empty: mounting over files hides them, and hidden etcd data is lost data. Pattern:
^/[A-Za-z0-9._/-]+$Maximum length:
1024 - stringspec.storage.mounts.device
Device is the partition to use, e.g. “/dev/sdb1” or a stable “/dev/disk/by-id/…-part1” path.
Pattern:
^/dev/[A-Za-z0-9._/-]+$Maximum length:
1024 - stringspec.storage.mounts.filesystem
Filesystem to create on an empty partition.
Defaults to
Ext4when unset.Allowed values:
Ext4 - stringspec.storage.mounts.mode
Mode is the mode of the filesystem root after mounting, as an octal string, e.g. “0700”. Left alone when unset. A freshly made ext4 has its root at 0755, which is a mode etcd refuses to start on.
Pattern:
^0[0-7]{3}$ - stringspec.storage.mounts.name
Required value
Name identifies the mount, and is both the mount point (/mnt/
) and the filesystem label written when this node formats the partition. Capped at 16 characters because that is the size of the ext4 volume label field. Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Length:
1..16 - objectspec.storage.mounts.partitionSelector
PartitionSelector picks the partition by attributes instead of a fixed path.
- booleanspec.storage.mounts.partitionSelector.blank
Blank makes whole disks selectable, and only ones that carry nothing: no partition table, no filesystem — a cloud disk never touched. Without it a selector sees partitions only; a whole disk is where somebody’s layout lives.
- stringspec.storage.mounts.partitionSelector.fsType
FSType matches the type of the filesystem already present (glob).
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.label
Label matches the filesystem label (glob).
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.name
Name matches the kernel device name (glob), e.g. “sdb1” or “nvme0n1p*”.
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.partLabel
PartLabel matches the GPT partition name (glob).
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.partUUID
PartUUID matches the GPT partition UUID exactly, ignoring case.
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.size
Size matches the size, optionally with a comparison operator, e.g. “>=100Gi”, “>1Ti”, “512Gi”. Without an operator the comparison is “>=”; “=” allows 1%, since a disk rarely reports an exact round size.
Maximum length:
253 - stringspec.storage.mounts.partitionSelector.uuid
UUID matches the filesystem UUID exactly, ignoring case.
Maximum length:
253
- booleanspec.storage.wipe
Wipe controls whether an already-provisioned disk is wiped and re-partitioned. Default false: only an unprovisioned (or non-matching) disk is set up, so an existing layout stays and a reboot never destroys data.
- stringspec.systemType
Required value
How the node is managed.
Immutable: a Deckhouse Engine node. The node agent configures the whole node.Mutable: a node configured by bashible. The node agent manages only whatfeatureGatesturn on.
Cannot be changed.
Allowed values:
Immutable,Mutable - objectspec.updatePolicy
UpdatePolicy controls how and when the node is updated.
- stringspec.updatePolicy.mode
Mode is the update mode.
Allowed values:
Manual,Automatic - array of objectsspec.updatePolicy.windows
Time windows in UTC when the node may download and apply updates.
An update is allowed if any window matches. Without windows, updates are allowed at any time.
One update window, in UTC.
- array of stringsspec.updatePolicy.windows.days
Days of the week the window applies to.
When empty, the window applies every day.
- stringElement of the array
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.updatePolicy.windows.from
Required value
Start of the window,
H:MMorHH:MM(24-hour, UTC).Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$ - stringspec.updatePolicy.windows.to
Required value
End of the window, same format as
from.A window whose end is before its start runs over midnight.
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$
- objectstatus
Status is reported by the on-node agent after each reconcile pass.
- objectstatus.agent
Node agent build that wrote this status.
- stringstatus.agent.version
Build version of the node agent.
- integerstatus.appliedGeneration
AppliedGeneration is the spec generation the node has applied.
The node has applied the current spec when AppliedGeneration equals metadata.generation and ConfigurationApplied is True at that generation. The value stays behind while a disruptive change waits for approval, and while a new agent build installed for this generation has not applied it yet.
- array of objectsstatus.conditions
Conditions of the node.
A
Falsecondition whose reason ends withPendingis a wait. Any otherFalsereason andUnknownmean a failure.AddressResolveddoes not affectphase.In
Ready,ConfigurationAppliedandDisruptionApproved,observedGenerationis the generation the node has processed. In the other conditions, it is the generation the node runs.Condition types:
Ready:Truewith reasonReconcileSucceededwhenphaseisReady. OtherwiseFalse, with the phase as the reason. The message names the condition that determined the phase.-
ConfigurationApplied:Truewhen the node runs the published configuration.With
True, the reason isReconcileSucceeded, orUnknownFieldswhen the object has fields unknown to this agent build. The message lists them.Reasons with
Falsethat mean a wait:DisruptionApprovalPendingPendingRestartPending
Reasons with
Falsethat mean a failure:RejectedRolledBackToLastKnownGoodRollbackFailedPartiallyAppliedFieldsNotApplicable
-
DisruptionApproved: Whether the interruption that the configuration of the node needs is approved.Reasons:
ApprovalPending(False): A configuration that interrupts the node waits for approval.AttemptsExhausted(False): The interruptionsnode-managerattempted failed, and it makes no new attempt for now.Approved(True): The interruption is approved.NoDisruptionPending(True): Nothing waits for approval.
-
AddressResolved: Whether the node has determined the address it registers with.Reasons with
False:NoneInCIDR,Ambiguous: The node cannot choose an address.AddressDrift: The node keeps the address it registered with, but that address is no longer on the machine or the configuration now selects another one.
-
Subsystem conditions, one per subsystem the pass ran or skipped:
APIEndpointsReachableSysctlAppliedKernelModulesLoadedMountsReadyExtensionsReadyContainerdReadyKubeletReadyStaticPodsReadyUnitsRunningOSImageUpToDateControlPlaneBootstrapped
Values of a subsystem condition:
True: The reason isReconcileSucceeded.False: The message gives the cause. The reason isPendingwhile the subsystem waits for something outside the node, otherwiseReconcileFailedor a more specific reason of the subsystem.Unknown: The subsystem did not run in this pass. The reason isReconcileSkipped.
Condition contains details for one aspect of the current state of this API Resource.
- stringstatus.conditions.lastTransitionTime
Required value
lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- stringstatus.conditions.message
Required value
message is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 - integerstatus.conditions.observedGeneration
observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
reason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
status of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
type of condition in CamelCase or in foo.example.com/CamelCase.
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- array of objectsstatus.extensions
Extensions is the outcome of each configured system extension, one entry per extension. Republished on every pass, empty when the pass checked nothing — never “the previous outcome still holds”.
ExtensionStatus is the reconcile outcome of one system extension.
- stringstatus.extensions.digest
Digest depends on State.
- Ready: the digest installed on the node.
- Pending: the digest being installed. For the agent’s own entry, the digest installed and waiting for the new build to start.
- Failed: the digest the node refused or could not install.
- stringstatus.extensions.message
Message carries the cause when State is Failed.
- stringstatus.extensions.name
Required value
Name is the extension name: a spec.extensions[].name, or the name of an extension removed from spec whose uninstall failed on a Mutable node.
- stringstatus.extensions.state
Required value
State of the extension.
- Ready: the extension is installed (on an Immutable node, also merged).
- Pending: the extension is being fetched or waits for the update window, or the agent restarts with a new build of itself (reason RestartPending).
- Failed: the cause is in Message.
Allowed values:
Ready,Pending,Failed
- array of stringsstatus.features
Features that ran on the node during its last reconciliation, sorted by name: the gates switched on in spec.featureGates plus the defaults of the node type.
On a Deckhouse Engine node spec.featureGates is usually empty because unset gates are on there. This list shows what actually runs on the node.
- stringstatus.lastReconcileTime
LastReconcileTime is when the node last finished a reconcile pass — the only thing in the status that ages, so it is what tells a dead agent from a healthy one. Republished coarsely: judge staleness in tens of minutes.
- stringstatus.maintenanceToken
MaintenanceToken is the bearer token an operator presents to the node’s :50000 config-push port once the node has lost the API. Root-equivalent, so the apiserver keeps it out of every answer without the sensitive subresource, which nodes are not granted.
- objectstatus.network
Network is what the node resolved for itself: the interface it took its cluster address from, and that address. Written by the node alone.
- stringstatus.network.address
Address is the address kubelet registered the node with.
- stringstatus.network.clusterInterface
ClusterInterface is the NIC the address was taken from.
- integerstatus.observedGeneration
ObservedGeneration is the latest spec generation the node has processed: it reaches the newest generation as soon as the node has looked at it, even while it is still held for approval (see AppliedGeneration).
- objectstatus.osImage
Status of the operating system image on the node. Filled in by the node.
- integerstatus.osImage.attemptsLeft
Number of remaining boot attempts with the image being verified before initramfs automatically rolls back to the previous image.
- stringstatus.osImage.digest
Digest of the operating system image currently used by the node. The value is read from the node configuration partition.
May be absent on nodes installed before the digest persistence mechanism was introduced.
- stringstatus.osImage.failedDigest
Digest of an image that caused the node to roll back after booting. No further attempts are made to boot this image.
Because a digest uniquely identifies immutable image content, a fixed version of the image has a different digest.
- stringstatus.osImage.rootHash
Dm-verity root hash of the image currently used by the node. The value is read from the active A/B slot.
Used to identify the actual root filesystem content independently of the image digest. For example, the digests of the desired and currently used images may differ after republishing, while identical
rootHashvalues indicate that the root filesystem content has not changed. - stringstatus.osImage.slot
A/B slot (
aorb) containing the image currently used by the node. - stringstatus.osImage.trialDigest
Digest of the image prepared for the next boot or being verified during the current boot.
Set only during an update, while
digeststill contains the digest of the previous image.
- stringstatus.phase
Summary of the node.
Ready: The node runs the published configuration and every subsystem is healthy.Pending: The node is healthy but does not run the published configuration yet.Degraded: At least one condition other thanAddressResolvedreports a failure.
Allowed values:
Ready,Pending,Degraded - array of objectsstatus.staticPods
Results of processing static pods. A separate entry is created for each pod.
Value is regenerated on each reconciliation and remains empty if no static pods were checked during the reconciliation.
Processing result for a single static pod.
- stringstatus.staticPods.manifestDigest
sha256 of the manifest as published in
spec, in the formsha256:<hex>.Set when
stateisWritten. - stringstatus.staticPods.message
Detailed information about the error when
stateisFailed. - stringstatus.staticPods.name
Required value
Static pod name corresponding to
spec.staticPods[].name. - stringstatus.staticPods.reason
Reason for the
Failedstate.Possible values:
ManifestRejected: Node rejected the manifest. The manifest in the resource must be corrected.WriteFailed: Manifest file could not be written to the node. Check the node state.RemoveFailed: Static pod was removed fromspec, but the corresponding manifest file could not be removed from the node. The pod continues to run.
Allowed values:
ManifestRejected,WriteFailed,RemoveFailed - stringstatus.staticPods.state
Required value
Manifest processing state.
Possible values:
Written: File on disk matches the manifest fromspec.Failed: File does not match the manifest fromspec, or the required operation could not be completed. The reason is specified inreason.
Allowed values:
Written,Failed
- array of objectsstatus.units
Units is the outcome of each managed systemd unit (containerd, kubelet and every unit an extension ships), one entry per unit. Republished on every pass like Extensions, and empty when the pass checked nothing.
UnitStatus is the reconcile outcome of one managed systemd unit.
- stringstatus.units.message
Message carries the cause when State is Failed.
- stringstatus.units.name
Required value
Name is the systemd unit name (e.g. containerd.service).
- stringstatus.units.state
Required value
State is Active when the unit is running, Pending when it is queued to be started later this pass, or Failed with the cause in Message.
Allowed values:
Active,Pending,Failed
NodeExtensionRequest
Short names: ner
Scope: Cluster
Version: v1alpha1
Request to install an extension on the selected nodes: a system extension (a sysext image, optionally with kernel modules) or a registry package.
The requester sets the kind in spec.extension.kind. A registry package (Package) is installed on the selected nodes that bashible configures. A system extension (SystemExtension) is installed on the selected Deckhouse Engine nodes. The kind is never inferred from the image. If none of the selected groups installs extensions of this kind, the Accepted condition reports the NotDeliverable reason.
The image is addressed the same way as any package in the registry-packages-proxy: a name, a digest, and an optional repository and path. node-controller copies these fields unchanged into spec.extensions of the NodeConfig, and the node agent installs the extension. node-controller does not look up the image by module or ModuleSource.
Example:
# A system extension with kernel modules, fetched from the registry of a ModuleSource.
apiVersion: deckhouse.io/v1alpha1
kind: NodeExtensionRequest
metadata:
name: drbd
spec:
extension:
name: drbd
digest: sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
kind: SystemExtension
repository: registry.example.com/deckhouse/modules
path: drbd/extensions
kernelModules:
- name: drbd
params:
- usermode_helper=disabled
- name: drbd_transport_tcp
nodeGroupSelector:
matchNames:
- worker
---
# A registry package from the cluster's main registry, on the nodes of every
# group bashible configures that carry the label.
apiVersion: deckhouse.io/v1alpha1
kind: NodeExtensionRequest
metadata:
name: nvme-cli
spec:
extension:
name: nvme-cli
digest: sha256:9b2a6f2bb7e3c5f6d1a0e4c8b7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8
kind: Package
nodeSelector:
matchLabels:
storage.example.com/nvme: "true"
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- objectspec.extension
Required value
Image to install and its kind. The image is addressed the same way as any package in the registry-packages-proxy.
- stringspec.extension.digest
Required value
Image manifest digest.
Pattern:
^sha256:[a-f0-9]{64}$ - array of objectsspec.extension.kernelModules
Kernel modules the node agent loads after merging the system extension, in the listed order. Allowed only with the
SystemExtensionkind. Each module is listed once.Dependencies are not loaded automatically: list every module the extension needs, each one after the modules it depends on.
Adding a module interrupts each selected node: the node waits for an approved
DisruptionNodeOperation.- stringspec.extension.kernelModules.name
Required value
Kernel module name.
Pattern:
^[a-zA-Z0-9][a-zA-Z0-9_-]*$Length:
1..64 - array of stringsspec.extension.kernelModules.params
Module parameters, passed as
key=valuestrings.- stringElement of the array
Maximum length:
256
- stringspec.extension.kind
Required value
Image kind.
Package: a registry package. The node agent installs it on the selected nodes that bashible configures.SystemExtension: a system extension. The node agent merges it on the selected Deckhouse Engine nodes.
Nodes of groups of the other type do not receive the image. If none of the selected groups installs extensions of this kind, the
Acceptedcondition reports theNotDeliverablereason.Cannot be changed after creation. To change the kind, delete the request and create it again.
Allowed values:
Package,SystemExtension - stringspec.extension.name
Required value
Extension name.
The image of a system extension must contain the extension-release file for this name.
The names
containerd,kubelet,kubernetes-cni,nodeletandqemu-guest-agentbelong to platform extensions and are not accepted.Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Length:
1..63 - stringspec.extension.path
The image’s path within the repository (the proxy’s
--rpp-path). Left empty, the repository root is used.Maximum length:
512 - stringspec.extension.repository
The key the registry-packages-proxy resolves credentials by (its
--rpp-repository), for example a ModuleSource’sspec.registry.repo. Left empty, the image is pulled from the cluster’s main registry.Pattern:
^[^[:space:]]+$Maximum length:
1024
- objectspec.nodeGroupSelector
Narrows the extension to nodes of the named NodeGroups.
- array of stringsspec.nodeGroupSelector.matchNames
The set of NodeGroup names the extension applies to.
- stringElement of the array
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Maximum length:
63
- objectspec.nodeSelector
Narrows the extension to nodes carrying the given labels.
- objectspec.nodeSelector.matchLabels
The set of node labels a node must carry to be selected.
- objectstatus
- integerstatus.appliedNodes
Number of selected nodes that report the extension installed at the digest of this request.
Allowed values:
0 <= X - array of objectsstatus.conditions
Conditions of the request:
AcceptedandReady.Acceptedshows whethernode-manageraccepted the request. It isTruewith theAcceptedreason orFalsewith one of these reasons:InvalidExtension: The extension has no name or no digest.ReservedName: The name belongs to a platform extension.Conflict: An older request of the same kind already uses this name or digest, or the platform installs a registry package with this name or digest on the same nodes.KernelModuleConflict: An older request already loads one of the kernel modules with different parameters.NotDeliverable: None of the selected NodeGroups installs extensions of this kind.
Readyshows whether the selected nodes run the request’s digest:Truewith theAllNodesAppliedreason: Every selected node runs it.Truewith theNoNodesSelectedreason: The request selects no node. The selected NodeGroups do not exist, have no nodes, or have no nodes that matchnodeSelector.Falsewith theRolloutInProgressreason: Some selected nodes do not run it yet.Falsewith theRefusedByNodesreason: At least one node refused the extension.Falsewith theNotAcceptedreason: TheAcceptedcondition isFalse.
- stringstatus.conditions.lastTransitionTime
Required value
- stringstatus.conditions.message
Required value
Maximum length:
32768 - integerstatus.conditions.observedGeneration
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- integerstatus.failedNodes
Number of selected nodes that refused the extension at the request’s digest.
Allowed values:
0 <= X - array of stringsstatus.matchedNodeGroups
The selected NodeGroups whose nodes install this kind of image: Deckhouse Engine groups for a system extension, groups bashible manages for a registry package.
- integerstatus.matchedNodes
Number of nodes in
matchedNodeGroupsthat the selectors pick.Allowed values:
0 <= X - array of objectsstatus.nodes
Selected nodes that have not applied the request, at most 32.
- stringstatus.nodes.message
Why the node refused the request or what it waits for.
Maximum length:
4096 - stringstatus.nodes.name
Required value
Node name.
- stringstatus.nodes.state
Required value
Failedif the node refused the request orPendingif it has not answered yet.Allowed values:
Pending,Failed
- integerstatus.observedGeneration
The generation of the spec this status reflects.
Allowed values:
0 <= X - integerstatus.pendingNodes
Number of selected nodes that have reported neither the extension installed at the request’s digest nor a refusal yet.
Allowed values:
0 <= X - stringstatus.phase
Summary of the conditions.
Pending: The selected nodes are still installing the extension (theReadycondition has theRolloutInProgressreason).Ready: TheReadycondition isTrue.Degraded:node-managerdid not accept the request (theAcceptedcondition isFalse), or nodes refused the extension (theReadycondition has theRefusedByNodesreason).
Allowed values:
Pending,Ready,Degraded
NodeGroupConfiguration
Short names: ngc
Scope: Cluster
Version: v1alpha1
Executes bash scripts on nodes.
Read more in the module documentation.
- objectspec
Required value
- array of stringsspec.bundles
Required value
Bundles for step execution. You can set
'*'for selecting all bundles.Examples:
bundles: - ubuntu-lts - centos-7bundles: - ubuntu-ltsbundles: - "*"- stringElement of the array
Allowed values:
ubuntu-lts,centos,debian,redos,rosa,astra,altlinux,opensuse,*
- stringspec.content
Required value
A bash script that does the same things you would do in a configuration step.
You can use Go Template to generate a script.
The list of parameters available for use in templates can be retrieved from the
bashible-apiserver-contextSecret as follows:d8 k -n d8-cloud-instance-manager get secrets bashible-apiserver-context -o jsonpath='{.data.input\.yaml}'| base64 -dFor example:
{{- range .nodeUsers }} echo 'Tuning environment for user {{ .name }}' # Some code for tuning user environment {{- end }}You can also use the pre-defined bashbooster commands in the script. For example:
bb-event-on 'bb-package-installed' 'post-install' post-install() { bb-log-info "Setting reboot flag due to kernel was updated" bb-flag-set reboot }Example of using the proxy parameters of ClusterConfiguration resource:
bb-set-proxy curl -I https://google.com bb-unset-proxytest-function-with-proxy() { bb-set-proxy trap bb-unset-proxy RETURN curl -I https://google.com } test-function-with-proxy - array of stringsspec.nodeGroups
Required value
List of NodeGroups to apply the step for. You can set
'*'for selecting all NodeGroups.Examples:
nodeGroups: - master - workernodeGroups: - workernodeGroups: - "*" - integerspec.weight
Order of the step execution.
Default:
100
NodeOperation
Short names: nop
Scope: Cluster
Version: v1alpha1
Describes an operation on a node that interrupts its work.
The spec of an existing operation cannot be changed, except .spec.approved. To approve a Disruption operation, run:
d8 k patch nodeoperation <OPERATION_NAME> --type=merge -p '{"spec":{"approved":true}}'
In the command, replace <OPERATION_NAME> with the name of the operation.
Operations for a deleted Cluster API Machine carry the label node-manager.deckhouse.io/machine-uid. Only node-manager can set it.
Example:
# Reboot a node.
apiVersion: deckhouse.io/v1alpha1
kind: NodeOperation
metadata:
name: reboot-worker-1
spec:
type: Reboot
nodeName: worker-1
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- booleanspec.approved
Whether the interruption may go ahead. If the field is not set, the operation is not approved.
Only meaningful for
Disruption.RebootandDrainignore it.In the
Manualapproval mode of the NodeGroup (spec.disruptions.approvalMode),node-managersets it tofalse, and an operator sets it totrue. In the other modes,node-managersets it totrueon creation. An approval cannot be withdrawn. - stringspec.cause
Why the node is interrupted.
For a
Disruption,node-managersets it on creation. ForRebootandDrain, an operator may set it.Maximum length:
1024 - integerspec.configGeneration
Revision of the node’s NodeConfig this disruption is for (
.metadata.generationof the NodeConfig object).Allowed only for
Disruption. The API server rejects the field for other types. If the NodeConfig moves to a newer generation before the operation is approved,node-managerdeletes the operation.Allowed values:
1 <= X - objectspec.drain
How to evict the workload before the node is interrupted.
Allowed for
RebootandDisruption. The API server rejects the field forDrain.- booleanspec.drain.skip
Interrupt the node without evicting its workload first.
When
node-managercreates aDisruption, it sets the field totruefor these nodes:- The single node of the
masterNodeGroup - The node of the Deckhouse pod, while fewer than two nodes of its group are
Ready - Every node of a NodeGroup with
spec.disruptions.automatic.drainBeforeApproval: false
Default:
false - The single node of the
- stringspec.nodeConfigUID
NodeConfig object this disruption is for (
.metadata.uidof the node’s NodeConfig).Only meaningful for
Disruption. Other types ignore it.Maximum length:
36 - stringspec.nodeName
Required value
The name of the node the operation applies to.
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Length:
1..253 - stringspec.type
Required value
Operation to perform on the node.
Reboot: Reboot the node. Only the nodes of a NodeGroup withsystemType: Immutableperform this operation. A node that bashible manages refuses it, and the operation fails with the reasonNodeRefused.-
Drain: Evict the workload from the node. The node stays unschedulable until an operator makes it schedulable again.node-manageralso creates aDrainfor the node of a deleted Cluster API Machine..spec.causenames the machine.To cancel a running
Drain, delete it.node-managerwithdraws its eviction request from the node before the object is gone. The cordon the eviction placed stays: make the node schedulable again yourself. Disruption: Interrupt the node’s work so that the node can apply a new configuration.
node-managercreatesDisruptionoperations. Creating one by hand is refused.RebootandDrainare meant for an operator.Allowed values:
Reboot,Drain,Disruption
- objectstatus
- stringstatus.bootID
Boot ID of the node (
status.nodeInfo.bootIDof the Node object) when the reboot started.Maximum length:
64 - array of objectsstatus.conditions
Latest details of the operation’s progress:
Drained: Written bynode-manager. While the workload is being evicted, the condition isFalsewith the reasonDraining. Once the workload has left, it isTruewith the reasonDrained. When the operation skips the eviction, it isTruewith the reasonDrainSkipped.EvictionBlocked: Written bynode-managerwhile evictions of the workload are refused, for example by a PodDisruptionBudget. The condition isTruewith the reasonEvictionRefused, and itsmessagelists the refusals as the eviction reports them, one per pod. The same text is in the operation’smessage. The condition is removed once the refusals stop or the eviction ends. A finished operation keeps the refusals it ended on.NodeReported: Written by the node. The condition isTruewith the reasonSucceeded,Released,Failed,RefusedorRebootStarted.Retry: Written bynode-manageron a failedDisruption. The condition says whethernode-managermakes another attempt for the same NodeConfig revision.
Reasons of the
Retrycondition:Created(True): The next attempt exists, andmessagenames it.Scheduled(True):node-managercreates the next attempt at the time given inmessage.AttemptsExhausted(False): 3 attempts for the same revision have failed.node-managermakes no new attempt until the NodeConfig changes or the oldest failed attempt is deleted.Superseded(False): The NodeConfig has moved to another generation or has been recreated.NotRequested(False): The node no longer asks to be interrupted for this revision.
- stringstatus.conditions.lastTransitionTime
Required value
- stringstatus.conditions.message
Required value
Maximum length:
32768 - integerstatus.conditions.observedGeneration
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- stringstatus.deadline
Time when the current stage of the operation times out and the operation fails.
The node gets 30 minutes from
startedAtto report the result or to come back after a reboot. The eviction gets the drain timeout of the NodeGroup (nodeDrainTimeoutSecond) plus 30 minutes. - stringstatus.drainDeadline
When the eviction this operation asked for runs out of the time it was given.
On the
Drainof a deleted machine, the operation fails withPreparationTimedOutat this moment, and the machine is deleted with the pods that did not leave. The field is not set for aStaticorCloudStaticNodeGroup withoutnodeDrainTimeoutSecond, and such aDrainhas no time limit.It is pinned at the moment the eviction is requested, from the NodeGroup’s
nodeDrainTimeoutSecondas it stood then, because that is the bound the draining controller itself started running to. Deriving it again later would let a change to the NodeGroup cut short a drain that is still running. - stringstatus.finishedAt
When the operation reached a terminal phase. A finished operation is kept as the record of what was done to the node and is collected once it is a day old.
- stringstatus.message
Human-readable explanation of
reason.Maximum length:
32768 - booleanstatus.nodeWasUnschedulable
Whether the node was already out of the scheduler when the operation reached it.
Releasing the node at the end of the operation restores this value instead of making the node schedulable, so an operation does not quietly undo a cordon an operator put there by hand.
- stringstatus.phase
Current phase of the operation, set by
node-manager.Pending: The operation is queued or waits for approval.Approved: The operation may go ahead. The workload is being evicted from the node before the node receives the operation.InProgress: ForDrain, the workload is being evicted. For the other types, the node has been prepared and can perform the operation.Completed: The operation finished successfully.Failed: The operation failed.
Allowed values:
Pending,Approved,InProgress,Completed,Failed - stringstatus.reason
Reason for the current phase of the operation.
Pending:Queued(nothing has been done yet),WaitingForApproval.Approved:Draining(the workload is being evicted from the node),WaitingForOperation(another eviction of the node is running, andmessagenames who requested it).InProgress:DrainingandWaitingForOperation(forDrain),WaitingForNode(the node has received the operation and has not reported yet),Rebooting(the node is rebooting and has not come back yet).Completed:Succeeded,Released(the node gave up on the NodeConfig revision theDisruptionis for),Drained(forDrain).Failed:NodeFailedandNodeRefused(reported by the node),PreparationTimedOut(the workload did not leave the node in time),NodeTimedOut(the node did not report back or did not come back after a reboot in time),NodeNotFound,NodeGroupMissing,MachineDeleted(the machine of the node is being deleted).
Pattern:
^[A-Za-z][A-Za-z0-9]*$Maximum length:
128 - stringstatus.startedAt
When the node was handed the operation. The wait for the node is measured from here.
NodeStaticPodRequest
Short names: nspr
Scope: Cluster
Version: v1alpha1
Request to run a static pod on the selected nodes without using the Kubernetes scheduler.
node-manager adds the manifest to spec.staticPods of the NodeConfig of each selected node. The node writes the manifest to disk, and kubelet runs the pod from it. The request reports whether the nodes wrote the manifest. It does not report whether the pod runs.
A user with permission to create NodeStaticPodRequests can run arbitrary manifests with root privileges on all selected nodes.
Example:
# A node-local agent on the nodes of the worker NodeGroup.
apiVersion: deckhouse.io/v1alpha1
kind: NodeStaticPodRequest
metadata:
name: node-local-agent
spec:
nodeGroupSelector:
matchNames:
- worker
manifest: |
apiVersion: v1
kind: Pod
metadata:
name: node-local-agent
namespace: kube-system
spec:
hostNetwork: true
priorityClassName: system-node-critical
containers:
- name: agent
image: deckhouse.local/images:node-local-agent
args:
- --listen-address=$MY_IP:5002
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- name: state
mountPath: /var/lib/node-local-agent
volumes:
- name: state
hostPath:
path: /var/lib/node-local-agent
type: DirectoryOrCreate
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- stringspec.manifest
Required value
Complete pod manifest.
Requirements for the manifest:
metadata.nameis a DNS subdomain (RFC 1123),metadata.namespaceis a DNS label (RFC 1123).- The namespace is
kube-systemor starts withd8-. spec.nodeNameis not set.- The pod does not reference API objects. Not allowed:
spec.serviceAccountName, volumes of thesecret,configMap,persistentVolumeClaimandprojectedtypes,envFromandenv[].valueFromwithsecretKeyReforconfigMapKeyRefin containers and init containers.
A manifest that does not meet these requirements is rejected on creation and update.
When the manifest is written to disk, the
$MY_IPsubstring is replaced with the node’s IP address.Maximum manifest size is 32 KiB. A node can run no more than 16 static pods defined by NodeStaticPodRequests.
Length:
1..32768 - objectspec.nodeGroupSelector
Restricts the pod to nodes in the specified NodeGroups. If no groups are specified, all NodeGroups are selected.
The node agent writes the manifest from the NodeConfig of each selected node. On nodes managed by bashible, a resource named
registry-agentor describing thekube-system/registry-agentpod is not applied, because bashible writes that manifest itself. If the resource reaches no other node, theReadycondition reports theServedByBashiblereason.- array of stringsspec.nodeGroupSelector.matchNames
Names of NodeGroups on whose nodes the pod must run.
- stringElement of the array
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Maximum length:
63
- objectstatus
- integerstatus.appliedNodes
Number of selected nodes that reported the current manifest written.
Allowed values:
0 <= X - array of objectsstatus.conditions
Conditions of the request:
AcceptedandReady.Acceptedshows whethernode-manageraccepted the request. It isTruewith theAcceptedreason orFalsewith one of these reasons:InvalidName: The request name is not a DNS label (RFC 1123) of at most 63 characters.ReservedName: The request name, or themetadata.namespaceandmetadata.nameof the pod, is already used by a static pod of the platform.InvalidManifest: The manifest does not meet the requirements ofspec.manifest.Conflict: An older request already defines a pod with the samemetadata.namespaceandmetadata.name.LimitExceeded: At least one selected NodeGroup already has 16 static pods from older requests. Only the nodes of the other selected NodeGroups get the manifest.
Readyshows whether the selected nodes wrote the current manifest:Truewith theAllNodesAppliedreason: Every selected node wrote it.Truewith theNoNodesSelectedreason: The selector matches no existing NodeGroup, or the selected NodeGroups have no nodes.Truewith theServedByBashiblereason: The selected NodeGroups are managed by bashible, which writes theregistry-agentmanifest on their nodes itself.Falsewith theRolloutInProgressreason: Some selected nodes have not written the current manifest yet.Falsewith theRefusedByNodesreason: At least one node refused the manifest.Falsewith theNotAcceptedreason: TheAcceptedcondition isFalse.
- stringstatus.conditions.lastTransitionTime
Required value
- stringstatus.conditions.message
Required value
Maximum length:
32768 - integerstatus.conditions.observedGeneration
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- integerstatus.failedNodes
Number of selected nodes that refused the manifest.
Allowed values:
0 <= X - array of stringsstatus.matchedNodeGroups
NodeGroups that match the current selector.
- integerstatus.matchedNodes
Number of nodes in the selected NodeGroups to which the node agent writes the manifest. Nodes of NodeGroups on which bashible writes the manifest itself are not counted.
Allowed values:
0 <= X - array of objectsstatus.nodes
Selected nodes that have not written the current manifest, at most 32.
- stringstatus.nodes.message
Why the node refused the manifest or what it waits for.
Maximum length:
4096 - stringstatus.nodes.name
Required value
Node name.
- stringstatus.nodes.state
Required value
Failedif the node refused the manifest orPendingif it has not answered yet.Allowed values:
Pending,Failed
- integerstatus.observedGeneration
Generation of
specthat corresponds to the currentstatus.Allowed values:
0 <= X - integerstatus.pendingNodes
Number of selected nodes that have not yet reported either the current manifest written or a failure.
Allowed values:
0 <= X - stringstatus.phase
Summary of the conditions.
Pending: The selected nodes are still writing the manifest (theReadycondition has theRolloutInProgressreason).Ready: TheReadycondition isTrue.Degraded:node-managerdid not accept the request (theAcceptedcondition isFalse), or nodes refused the manifest (theReadycondition has theRefusedByNodesreason).
Allowed values:
Pending,Ready,Degraded
NodeUser
Scope: Cluster
- v1
- v1alpha1
Defines the linux users to create on all nodes.
The user’s home directory is created in the /home/deckhouse/ directory.
- objectspec
Required value
- array of stringsspec.extraGroups
Node user additional system groups.
Examples:
extraGroups: - dockerextraGroups: - docker - ftp - booleanspec.isSudoer
Persistence of node user in sudo group.
Default:
falseExample:
isSudoer: true - array of stringsspec.nodeGroups
List of NodeGroups to apply the user for.
Default:
["*"]Examples:
nodeGroups: - master - workernodeGroups: - workernodeGroups: - "*" - stringspec.passwordHash
Hashed user password.
The format corresponds to the password hashes in
/etc/shadow. You can get it using the following command:openssl passwd -6.Example:
passwordHash: "$2a$10$F9ey7zW.sVliT224RFxpWeMsgzO.D9YRG54a8T36/K2MCiT41nzmC" - stringspec.sshPublicKeyDeprecated
Node user SSH public key.
Either
sshPublicKeyorsshPublicKeysmust be specified.Example:
sshPublicKey: ssh-rsa AAABBB - array of stringsspec.sshPublicKeys
Node user SSH public keys.
Either
sshPublicKeyorsshPublicKeysmust be specified.Example:
sshPublicKeys: - ssh-rsa AAABBB - cert-authority,principals="name" ssh-rsa BBBCCC - numberspec.uid
Required value
Node user ID.
We recommend using the values
>= 1100to avoid conflicts with manually created users.This parameter does not change during the entire resource life.
Allowed values:
1001 <= XExample:
uid: 1100
- objectstatus
User creation status information
- objectstatus.errors
List of user creation errors on each node
Deprecated resource. Support for the resource might be removed in a later release.
Defines the linux users to create on all nodes.
The user’s home directory is created in the /home/deckhouse/ directory.
- objectspec
Required value
- array of stringsspec.extraGroups
Node user additional system groups.
Examples:
extraGroups: - dockerextraGroups: - docker - ftp - booleanspec.isSudoer
Persistence of node user in sudo group.
Default:
falseExample:
isSudoer: true - array of stringsspec.nodeGroups
List of NodeGroups to apply the user for.
Default:
["*"]Examples:
nodeGroups: - master - workernodeGroups: - workernodeGroups: - "*" - stringspec.passwordHash
Hashed user password.
The format corresponds to the password hashes in
/etc/shadow. You can get it using the following command:openssl passwd -6.Example:
passwordHash: "$2a$10$F9ey7zW.sVliT224RFxpWeMsgzO.D9YRG54a8T36/K2MCiT41nzmC" - stringspec.sshPublicKeyDeprecated
Node user SSH public key.
Either
sshPublicKeyorsshPublicKeysmust be specified.Example:
sshPublicKey: ssh-rsa AAABBB - array of stringsspec.sshPublicKeys
Node user SSH public keys.
Either
sshPublicKeyorsshPublicKeysmust be specified.Example:
sshPublicKeys: - ssh-rsa AAABBB - cert-authority,principals="name" ssh-rsa BBBCCC - numberspec.uid
Required value
Node user ID.
We recommend using the values
>= 1100to avoid conflicts with manually created users.This parameter does not change during the entire resource life.
Allowed values:
1001 <= XExample:
uid: 1100
SSHCredentials
Scope: Cluster
- v1alpha2
- v1alpha1
Contains credentials required by Cluster API Provider Static (CAPS) to connect over SSH. CAPS connects to the server (virtual machine) defined in the StaticInstance custom resource to manage its state.
A reference to this resource is specified in the credentialsRef parameter of the StaticInstance resource.
- stringapiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- stringkind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- objectmetadata
- objectspec
SSHCredentialsSpec defines the desired state of SSHCredentials.
- stringspec.privateSSHKey
Private SSH key in PEM format encoded as base64 string.
If the user does not have permission to view sensitive SSHCredentials data, the API returns
instead of the actual value. - stringspec.sshExtraArgs
A list of additional arguments to pass to the openssh command.
Examples:
sshExtraArgs: "-vvv"sshExtraArgs: "-c chacha20-poly1305@openssh.com"sshExtraArgs: "-c aes256-gcm@openssh.com"sshExtraArgs: "-m umac-64-etm@openssh.com"sshExtraArgs: "-m hmac-sha2-512-etm@openssh.com" - integerspec.sshPort
A port to connect to the host via SSH.
Default:
22Allowed values:
1 <= X <= 65535 - stringspec.sudoPasswordEncoded
Base64 encoded sudo password for the user.
If the user does not have permission to view sensitive SSHCredentials data, the API returns
instead of the actual value. - stringspec.user
Required value
A username to connect to the host via SSH.
Contains credentials required by Cluster API Provider Static (CAPS) to connect over SSH. CAPS connects to the server (virtual machine) defined in the StaticInstance custom resource to manage its state.
A reference to this resource is specified in the credentialsRef parameter of the StaticInstance resource.
- stringapiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- stringkind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- objectmetadata
- objectspec
SSHCredentialsSpec defines the desired state of SSHCredentials.
- stringspec.privateSSHKey
Private SSH key in PEM format encoded as base64 string.
If the user does not have permission to view sensitive SSHCredentials data, the API returns
instead of the actual value. - stringspec.sshExtraArgs
A list of additional arguments to pass to the openssh command.
Examples:
sshExtraArgs: "-vvv"sshExtraArgs: "-c chacha20-poly1305@openssh.com"sshExtraArgs: "-c aes256-gcm@openssh.com"sshExtraArgs: "-m umac-64-etm@openssh.com"sshExtraArgs: "-m hmac-sha2-512-etm@openssh.com" - integerspec.sshPort
A port to connect to the host via SSH.
Default:
22Allowed values:
1 <= X <= 65535 - stringspec.sudoPassword
A sudo password for the user.
If the user does not have permission to view sensitive SSHCredentials data, the API returns
instead of the actual value. - stringspec.user
Required value
A username to connect to the host via SSH.
StaticInstance
Scope: Cluster
- v1alpha2
- v1alpha1
StaticInstance describes a machine for the Cluster API Provider Static.
- stringapiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- stringkind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- objectmetadata
- objectspec
StaticInstanceSpec defines the desired state of StaticInstance.
- stringspec.address
Required value
The IP address of the host.
Pattern:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ - objectspec.credentialsRef
Required value
The reference to the
SSHCredentialsobject.- stringspec.credentialsRef.apiVersion
API version of the referent.
- stringspec.credentialsRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringspec.credentialsRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringspec.credentialsRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringspec.credentialsRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringspec.credentialsRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringspec.credentialsRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
- objectstatus
StaticInstanceStatus defines the observed state of StaticInstance.
- array of objectsstatus.conditions
Conditions defines current service state of the StaticInstance.
Condition contains details for one aspect of the current state of this API Resource.
- stringstatus.conditions.lastTransitionTime
Required value
lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- stringstatus.conditions.message
Required value
message is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 - integerstatus.conditions.observedGeneration
observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
reason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
status of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
type of condition in CamelCase or in foo.example.com/CamelCase.
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- objectstatus.currentStatus
- stringstatus.currentStatus.lastUpdateTime
- stringstatus.currentStatus.phase
Allowed values:
Error,Pending,Bootstrapping,Running,Cleaning
- objectstatus.machineRef
The reference to the
StaticMachineobject.- stringstatus.machineRef.apiVersion
API version of the referent.
- stringstatus.machineRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringstatus.machineRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringstatus.machineRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringstatus.machineRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringstatus.machineRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringstatus.machineRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
- objectstatus.nodeRef
The reference to the
Nodeobject.- stringstatus.nodeRef.apiVersion
API version of the referent.
- stringstatus.nodeRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringstatus.nodeRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringstatus.nodeRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringstatus.nodeRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringstatus.nodeRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringstatus.nodeRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
StaticInstance describes a machine for the Cluster API Provider Static.
- stringapiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- stringkind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- objectmetadata
- objectspec
StaticInstanceSpec defines the desired state of StaticInstance.
- stringspec.address
Required value
The IP address of the host.
Pattern:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ - objectspec.credentialsRef
Required value
The reference to the
SSHCredentialsobject.- stringspec.credentialsRef.apiVersion
API version of the referent.
- stringspec.credentialsRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringspec.credentialsRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringspec.credentialsRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringspec.credentialsRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringspec.credentialsRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringspec.credentialsRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
- objectstatus
StaticInstanceStatus defines the observed state of StaticInstance.
- array of objectsstatus.conditions
Conditions defines current service state of the StaticInstance.
Condition contains details for one aspect of the current state of this API Resource.
- stringstatus.conditions.lastTransitionTime
Required value
lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- stringstatus.conditions.message
Required value
message is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 - integerstatus.conditions.observedGeneration
observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X - stringstatus.conditions.reason
Required value
reason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Length:
1..1024 - stringstatus.conditions.status
Required value
status of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown - stringstatus.conditions.type
Required value
type of condition in CamelCase or in foo.example.com/CamelCase.
Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Maximum length:
316
- objectstatus.currentStatus
- stringstatus.currentStatus.lastUpdateTime
- stringstatus.currentStatus.phase
Allowed values:
Error,Pending,Bootstrapping,Running,Cleaning
- objectstatus.machineRef
The reference to the
StaticMachineobject.- stringstatus.machineRef.apiVersion
API version of the referent.
- stringstatus.machineRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringstatus.machineRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringstatus.machineRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringstatus.machineRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringstatus.machineRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringstatus.machineRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
- objectstatus.nodeRef
The reference to the
Nodeobject.- stringstatus.nodeRef.apiVersion
API version of the referent.
- stringstatus.nodeRef.fieldPath
If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: “spec.containers{name}” (where “name” refers to the name of the container that triggered the event) or if no container name is specified “spec.containers[2]” (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.
- stringstatus.nodeRef.kind
Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- stringstatus.nodeRef.name
Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- stringstatus.nodeRef.namespace
Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- stringstatus.nodeRef.resourceVersion
Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- stringstatus.nodeRef.uid
UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids