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.).- 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 to rollout simultaneously in the group in each zone.
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 a topology manager.
The topology manager allows the Kubernetes scheduler to take resource topology data into account when scheduling pods.
In a cluster with NUMA nodes, the topology manager can improve application performance by aligning workloads with NUMA nodes that are more resource-efficient.
For more information, see the Kubernetes documentation.
- booleanspec.kubelet.topologyManager.enabled
Enables Topology Management on a node.
If the topology manager is enabled, strict resource allocation modes are activated for containers in Guaranteed pods. The following parameter values are set in the kubelet configuration:
cpuManagerPolicy: static: The kubelet exclusively assigns whole physical cores to a container with an integer CPU request.memoryManagerPolicy: Static: The kubelet assigns the container’s memory to a minimum number of NUMA nodes (preferably one).
Default:
false - stringspec.kubelet.topologyManager.policy
Resource/topology alignment policy to use when scheduling a pod.
There are four supported policies:
None— no resource alignment (default).BestEffort— a preferred NUMA node is defined for each container. If there are no preferred nodes for the pod available, it will be scheduled to a node without taking topology manager data into account, while the already running pod will keep running.Restricted— a preferred NUMA node is defined for each pod container. If there are no preferred nodes available, a new pod will not be scheduled to a node while an already running pod will be stopped.SingleNumaNode— a preferred NUMA node is defined for each pod container. If there is no NUMA node available that suits all pod containers, a new pod will not be scheduled while an already running pod will be stopped.
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. The preferred resources are computed for a container. The computation does not take into account that multiple containers may belong to the same pod.Pod. The preferred resources are computed for the pod. All containers in the pod are treated as a whole in the computation.
Default:
ContainerAllowed values:
Container,Pod
- integerspec.nodeDrainTimeoutSecond
Maximum duration (in seconds) for which the controller attempts to reschedule pods to a new machine during node draining.
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
A label selector is a label query over a set of
staticInstancesresources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.- 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.
- stringspec.systemType
How the node is managed.
Possible values:
Mutable— the classic node configured on the fly by bashible. This is what an unset field means.Immutable— an agent on the node brings it to the state described in a NodeConfig object. bashible is not used.
Once the field names a value, that value can no longer be changed or removed. A NodeGroup that names none can still record one — but not
Immutablewhile it holds nodes bashible has already configured, since those nodes cannot be handed over to the on-node agent.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 to rollout simultaneously in the group in each zone.
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 node is managed.
Possible values:
Mutable— the classic node configured on the fly by bashible. This is what an unset field means.Immutable— an agent on the node brings it to the state described in a NodeConfig object. bashible is not used.
Once the field names a value, that value can no longer be changed or removed. A NodeGroup that names none can still record one — but not
Immutablewhile it holds nodes bashible has already configured, since those nodes cannot be handed over to the on-node agent.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 to rollout simultaneously in the group in each zone.
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.32,1.33,1.34,1.35,1.36Example:
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 node is managed.
Possible values:
Mutable— the classic node configured on the fly by bashible. This is what an unset field means.Immutable— an agent on the node brings it to the state described in a NodeConfig object. bashible is not used.
Once the field names a value, that value can no longer be changed or removed. A NodeGroup that names none can still record one — but not
Immutablewhile it holds nodes bashible has already configured, since those nodes cannot be handed over to the on-node agent.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 a Deckhouse Engine node, stored at /config/nodeconfig.yaml and as a cluster CRD (crds/nodeconfig.yaml, generated). Keep identical with nodelet’s internal/config/types.go and dhctl’s spec-only mirrors.
- objectspec
Required value
NodeSpec is the desired state of the node.
- array of stringsspec.apiServerEndpoints
APIServerEndpoints is the list of API server URLs the node connects to (via the node-local API proxy).
- 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})/?$
- objectspec.containerRuntime
ContainerRuntime holds containerd configuration.
- integerspec.containerRuntime.maxConcurrentDownloads
MaxConcurrentDownloads limits parallel image layer downloads. Zero is containerd’s “no limit”, and a NodeGroup takes any integer (crds/node_group.yaml:1638): a value it accepts must be accepted here. The default is bashible’s (candi/bashible/common-steps/all/032_configure_containerd.sh.tpl).
Default:
8Allowed values:
0 <= X - stringspec.containerRuntime.registryOwner
Component that manages the containerd
registry.ddirectory.Possible values:
nodelet: Node agent generates configuration in the directory based onspec.registryand removes configuration that should not be present.agent: Directory is managed by the registry agent static pod. The node agent does not write configuration to or remove configuration from the directory, including configuration fromspec.registry. This allows the_defaultconfiguration created by the registry agent to be used for accessing the platform container registry.
Value is set by node-controller depending on the
registrymodule operating mode.Default:
nodeletAllowed values:
nodelet,agent - 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:]]+$
- array of objectsspec.extensions
Extensions are the signed verity sysext images to merge onto the root.
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 additionalPath is its “path” parameter.
- stringspec.extensions.additionalPath
AdditionalPath is forwarded to the proxy as the “path” query 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.repository
Repository optionally selects the proxy’s per-registry client config.
- stringspec.extensions.requestedBy
RequestedBy records who requested the extension (e.g. “node-manager”).
- 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]))$
- objectspec.kernel
Kernel holds sysctl settings and kernel modules to load.
- array of objectsspec.kernel.modules
- stringspec.kernel.modules.name
Required value
- array of stringsspec.kernel.modules.params
- 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.
- stringspec.kubelet.caCert
CACert is the base64-encoded cluster CA certificate used in the bootstrap-kubelet.conf to verify the API server.
- 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
ContainerLogMaxFiles is the number of rotated log files to retain.
Default:
4Allowed values:
1 <= X <= 1000 - stringspec.kubelet.containerLogMaxSize
ContainerLogMaxSize is the maximum log file size before rotation (e.g. “50Mi”).
Default:
50Mi - 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
MaxPods is the maximum number of pods per node.
Default:
120Allowed 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
Mode is the reservation policy.
Possible values:
Auto— compute the reservation from the node’s capacity.Off— reserve nothing.
Default:
AutoAllowed 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
- array of stringsspec.network.dns.servers
- stringspec.network.hostname
- array of objectsspec.network.interfaces
- array of stringsspec.network.interfaces.addresses
Addresses are static CIDR addresses (used when DHCP is false).
- 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
- stringspec.network.interfaces.name
Required value
- objectspec.network.ntp
NTP time-sync configuration.
- array of stringsspec.network.ntp.servers
- array of objectsspec.network.routes
- stringspec.network.routes.gateway
- stringspec.network.routes.name
- array of stringsspec.network.routes.networks
- stringspec.nodeName
Required value
NodeName is the Kubernetes node name this config applies to.
Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$Length:
1..253 - objectspec.osImage
Required value
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.- stringspec.osImage.additionalPath
Additional path to the image passed to
registry-packages-proxyas thepathparameter.For Deckhouse images, the parameter can be left empty because the repository path is already specified in
spec.registry.path. - 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.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. - 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:
^\S+$ - stringspec.registry.auth
Auth is the base64-encoded “user:password” pair, as it appears in the “auth” field of a docker config.
Pattern:
^[A-Za-z0-9+/]+={0,2}$ - stringspec.registry.ca
CA is a PEM certificate bundle to verify the registry with, for registries signed by a private CA. The image carries the Mozilla bundle and nothing else, so without this a self-signed registry is unreachable.
- stringspec.registry.path
Path is the repository path within the registry, e.g. “/deckhouse/ce”.
- stringspec.registry.scheme
Scheme is HTTPS (default) or HTTP.
Default:
HTTPSAllowed values:
HTTPS,HTTP
- stringspec.registryPackagesProxyAccessTokenB64
RegistryPackagesProxyAccessTokenB64 is a base64-encoded token used to authenticate against the registry packages proxy. Deliberately not marked sensitive: nodelet must read it, and the token is identical on every node.
Pattern:
^(([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)?$ - 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
- 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. - objectspec.storage
Storage selects the target disk for the OS install. The partition layout is fixed (boot/config/data), so only the whole-disk device is needed.
- 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._/-]+$ - objectspec.storage.diskSelector
DiskSelector picks the target disk by attributes instead of a fixed path. It takes priority over device (matching Talos semantics). All specified conditions must match; the first disk that matches is used.
- stringspec.storage.diskSelector.busPath
BusPath matches the hardware bus path (glob).
- stringspec.storage.diskSelector.model
Model matches the device model (glob), e.g. “Samsung*”.
- stringspec.storage.diskSelector.name
Name matches the kernel device name (glob), e.g. “nvme0n1”.
- booleanspec.storage.diskSelector.rotational
Rotational matches spinning (true) vs solid-state (false) disks.
- stringspec.storage.diskSelector.serial
Serial matches the disk serial number (glob).
- stringspec.storage.diskSelector.size
Size matches the disk capacity, optionally with a comparison operator, e.g. “>=100Gi”, “>1Ti”, “512Gi”.
- 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).
- 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._/-]+$ - 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._/-]+$ - stringspec.storage.mounts.filesystem
Filesystem is what to create when the partition is empty. It says what to create and is not a matching condition.
Default:
ext4Allowed 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).
- stringspec.storage.mounts.partitionSelector.label
Label matches the filesystem label (glob).
- stringspec.storage.mounts.partitionSelector.name
Name matches the kernel device name (glob), e.g. “sdb1” or “nvme0n1p*”.
- stringspec.storage.mounts.partitionSelector.partLabel
PartLabel matches the GPT partition name (glob).
- stringspec.storage.mounts.partitionSelector.partUUID
PartUUID matches the GPT partition UUID exactly, ignoring case.
- 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.
- stringspec.storage.mounts.partitionSelector.uuid
UUID matches the filesystem UUID exactly, ignoring case.
- 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.
- objectspec.updatePolicy
UpdatePolicy controls how and when the node is updated.
- stringspec.updatePolicy.mode
Mode is the update mode.
Allowed values:
Automatic,Manual - objectspec.updatePolicy.window
Window is the maintenance window for updates.
- array of stringsspec.updatePolicy.window.days
Days are the weekdays the window applies to.
- stringElement of the array
Allowed values:
Mon,Tue,Wed,Thu,Fri,Sat,Sun
- stringspec.updatePolicy.window.from
From is the window start time, “H:MM” or “HH:MM” (24h). The pattern is the NodeGroup one (crds/node_group.yaml:432), which takes a one-digit hour.
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$ - stringspec.updatePolicy.window.to
To is the window end time, same format as From.
Pattern:
^(?:\d|[01]\d|2[0-3]):[0-5]\d$
- objectstatus
Status is reported by the on-node agent after each reconcile pass.
- integerstatus.appliedGeneration
AppliedGeneration is the spec generation the node is actually running; it lags ObservedGeneration while a disruptive config is held for approval. “This node has converged” means AppliedGeneration == metadata.generation.
- array of objectsstatus.conditions
Conditions are the node-level reconcile outcomes (ConfigurationApplied, DisruptionRequired) plus the gate subsystems (APIEndpointsReachable, SysctlApplied); per-extension and per-unit outcomes live in Extensions and Units.
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 is the image digest the node installed for it.
- stringstatus.extensions.message
Message carries the cause when State is Failed.
- stringstatus.extensions.name
Required value
Name is the extension name, matching spec.extensions[].name.
- stringstatus.extensions.state
Required value
State is Ready when the extension is installed and merged, Pending while it is being fetched or waiting for the update window, or Failed with the cause in Message.
Allowed values:
Ready,Pending,Failed
- 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
Phase summarises the node. Ready: running the published config, healthy. Pending: healthy but not yet running the published config (held for approval). Degraded: a subsystem failed, config rejected, or rolled back.
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.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
Asks for a system extension (a sysext image, optionally with kernel modules) to be merged onto the nodes it selects.
The image is addressed the way the registry-packages-proxy addresses any package: a name, a digest, and an optional repository and path. node-controller forwards these straight into the NodeConfig extension the on-node agent pulls; it resolves no module or ModuleSource.
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- array of objectsspec.kernelModules
The modules to load once the extension is merged.
- stringspec.kernelModules.name
Required value
The kernel module name.
Pattern:
^[a-zA-Z0-9][a-zA-Z0-9_-]*$ - array of stringsspec.kernelModules.params
The module parameters, passed as
key=valuestrings.
- 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.
- 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.
- objectspec.sysext
Required value
Locates the system-extension image to merge, the way the registry-packages-proxy locates any package.
- stringspec.sysext.digest
Required value
The sysext image manifest digest.
Pattern:
^sha256:[a-f0-9]{64}$ - stringspec.sysext.name
Required value
The sysext name: it is matched against the image’s extension-release and installed on the node as
<name>.raw. Copied verbatim into the NodeConfig extension name, so it must be a DNS-label-like token.Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$Length:
1..63 - stringspec.sysext.path
The image’s path within the repository (the proxy’s
--rpp-path). Left empty, the repository root is used. - stringspec.sysext.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.
- objectstatus
- integerstatus.appliedNodes
How many of the selected nodes report the sysext installed and merged. Reported by the nodes themselves: a request can resolve here and still be refused by every node it reaches.
Allowed values:
0 <= X - array of objectsstatus.conditions
The latest details of the request’s progress.
- 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
How many of the selected nodes report the sysext refused.
Allowed values:
0 <= X - stringstatus.failureMessage
What the nodes say about the refusal, taken from one of them.
- array of stringsstatus.matchedNodeGroups
The NodeGroups the selectors currently match.
- integerstatus.matchedNodes
Number of nodes in the selected NodeGroups.
Allowed values:
0 <= X - integerstatus.observedGeneration
The generation of the spec this status reflects.
Allowed values:
0 <= X - integerstatus.pendingNodes
Number of selected nodes that have not yet reported either successful manifest application or a failure.
Allowed values:
0 <= X - stringstatus.phase
Readywhen the sysext resolves to an image the selected nodes can pull,Degradedwhen it cannot (theReadycondition carries the reason).Allowed values:
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 (a disruptive operation): a reboot, an eviction of its workload, or the permission a node needs before applying a configuration that cannot be applied without interrupting the node.
An operation is a record of intent, not a switch: it is created once, carried through its phases by node-manager and the on-node agent, and kept afterwards as the history of what was done to the node and why. Editing the spec of an existing operation is rejected — create a new one if needed.
Operations are how disruptive work is coordinated for the nodes of a NodeGroup with systemType: Immutable. The same resource is available to an operator who needs to reboot or drain such a node by hand.
Every operation carries the label node-manager.deckhouse.io/node with the value of .spec.nodeName. node-manager stamps it on operations that reach it without one. It is how operations on the same node find each other, which is what keeps two of them from disagreeing about the state the node was in before either started.
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- integerspec.configGeneration
The revision of the node’s NodeConfig this permission covers (
.metadata.generationof the NodeConfig object).The permission is deliberately narrow: it authorises the interruption of the node’s work that one particular configuration needs, so the next published configuration asks for permission again. Only meaningful for
ApproveDisruption.Allowed values:
1 <= X - objectspec.drain
How to evict the workload before the node is interrupted.
The eviction is carried out by a
Drainoperation of its own, created for and owned by this one. It can be watched like any other operation and is removed together with its parent.- booleanspec.drain.skip
Interrupt the node without evicting its workload first.
The workload is then cut off by the interruption instead of being moved, so this is for nodes whose pods must not be evicted (a single-node group, a node running the only replica of something that cannot be moved).
Default:
false
- 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
The operation to perform on the node.
Possible values:
Reboot— reboot the node.Drain— evict the workload from the node and keep it unschedulable. The operation is complete once the workload has been removed from the node. The node stays out of the scheduler until an operator returns it.ApproveDisruption— allow the node to apply a configuration whose application interrupts it (restarting kubelet or the container runtime, rebuilding the system extensions layer, changing the system image).
An
ApproveDisruptionoperation is normally created bynode-managerin answer to a node that asked for it. The other two are meant for an operator.Allowed values:
Reboot,Drain,ApproveDisruption
- objectstatus
- array of objectsstatus.conditions
The latest details of the operation’s progress.
- 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.drainDeadline
When the eviction this operation asked for runs out of the time it was given.
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.
- 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
The current phase of the operation:
Pending— the operation is queued and node-manager has not started it yet;InProgress— the node has been prepared (drained, unless the drain was skipped) and is carrying the operation out;Completed— the operation finished successfully;Failed— the operation failed. Seeconditionsand the events for the reason.
Allowed values:
Pending,InProgress,Completed,Failed - 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
Resource for running a static pod on selected nodes without using the Kubernetes scheduler.
Kubelet starts a static pod from a manifest stored on the node’s disk. This allows the pod to run before the API server becomes available and before CNI is initialized. This can be used for components required to pull container images.
Node-controller adds the manifest to spec.staticPods of the NodeConfig resource for each matching node and tracks the results of applying the manifest on the nodes.
Resource contains only the pod manifest. The node ensures that the image is available in containerd and that the manifest file is present on disk. The pod must obtain any other required resources on its own. For example, the pod can issue its own certificates, use the node’s kubeconfig, and mount directories for persistent state using hostPath with the DirectoryOrCreate type.
A user with permission to create NodeStaticPodRequest resources can run arbitrary manifests with root privileges on all selected nodes. By default, permission to create these resources is granted only to platform components.
- stringapiVersion
- stringkind
- objectmetadata
- objectspec
Required value
- stringspec.manifest
Required value
Complete pod manifest.
The
metadata.nameandmetadata.namespacefields must not be empty and are independent of the NodeStaticPodRequest resource name. The resource name is used as the manifest file name on the node, while kubelet determines the mirror pod name from the 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.Multiple NodeStaticPodRequest resources cannot define a pod with the same
metadata.namespaceandmetadata.name. If a conflict is detected, the resource created later is rejected with theConflictreason in theReadycondition. This ensures that the manifest being applied does not depend on the order of entries in NodeConfig.Maximum manifest size is 32 KiB. A node can run no more than 16 static pods defined using NodeStaticPodRequest resources. In addition, the resulting NodeConfig must not exceed the API server request size limit.
Length:
1..32768 - objectspec.nodeGroupSelector
Restricts the pod to nodes in the specified NodeGroups. If no groups are specified, all NodeGroups with
systemType: Immutableare selected.For these groups, the node agent writes the manifest from the corresponding node’s NodeConfig. NodeGroups that use bashible are not selected because they do not use NodeConfig.
- array of stringsspec.nodeGroupSelector.matchNames
Names of NodeGroups on whose nodes the pod must run.
- objectstatus
- integerstatus.appliedNodes
Number of selected nodes that reported that the manifest was successfully written.
Allowed values:
0 <= X - array of objectsstatus.conditions
Detailed information about the static pod application status.
- 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 reported a failure to apply the manifest.
Allowed values:
0 <= X - stringstatus.failureMessage
Error message received from one of the nodes on which the manifest could not be applied.
- array of stringsstatus.matchedNodeGroups
NodeGroups that match the current selector.
- integerstatus.matchedNodes
Number of nodes in the selected NodeGroups.
Allowed values:
0 <= X - 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 successful manifest application or a failure.
Allowed values:
0 <= X - stringstatus.phase
Current phase of static pod application.
Possible values:
Ready: Manifest was successfully processed and accepted by the selected nodes.Degraded: Manifest cannot be applied. The reason is specified in theReadycondition:InvalidName,ReservedName,InvalidManifest,Conflict,LimitExceeded, orRefusedByNodes.
The
InvalidNamereason indicates that the NodeStaticPodRequest resource name does not conform to the DNS label format with a maximum length of 63 characters, which is required for using the name in the node configuration.The
ReservedNamereason indicates that either the NodeStaticPodRequest resource name or the combination ofmetadata.namespaceandmetadata.namefrom the pod manifest is already used by a manifest created by the node agent or a bashible step.The
LimitExceededreason indicates that the limit of 16 static pods has been exceeded for at least one selected NodeGroup. In this case, this resource, as one of the resources created later, is not added to the node configuration.Allowed values:
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