MetalNode
inference.llmkube.dev / v1alpha1
apiVersion: inference.llmkube.dev/v1alpha1
kind: MetalNode
metadata:
name: example
apiVersion
string
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
kind
string
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
metadata
object
spec object required
MetalNodeSpec is written by the cluster admin (llmkube metal token create).
The agent has no write access to it.
hostIP
string
HostIP is an address the admin knows reaches this Mac. It is tried
before the agent's own candidates and is still verified by the
dial-back; it is never trusted on its own.
The controller validates it (Reachable=False, reason InvalidSpec, when
it is not an IP address) rather than a CEL rule, whose isIP() would
need Kubernetes 1.31.
maxLength:
45
leaseName
string required
LeaseName is the coordination.k8s.io Lease, in this namespace, that the
agent renews as its heartbeat and annotates with its report.
pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$minLength:
1maxLength:
253
serviceAccountName
string required
ServiceAccountName is the ServiceAccount the Mac's agent authenticates
as. Deleting that ServiceAccount revokes every token the agent holds.
pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$minLength:
1maxLength:
253verifier object
Verifier places the dial-back verifier pod. Point it at the nodes the
relay pods for this Mac run on, so the check tests the network path
the relay will use.
nodeSelector
object
NodeSelector is copied to the verifier pod.
tolerations []object
Tolerations are copied to the verifier pod.
effect
string
Effect indicates the taint effect to match. Empty means match all taint effects.
When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
key
string
Key is the taint key that the toleration applies to. Empty means match all taint keys.
If the key is empty, operator must be Exists; this combination means to match all values and all keys.
operator
string
Operator represents a key's relationship to the value.
Valid operators are Exists, Equal, Lt, and Gt. Defaults to Equal.
Exists is equivalent to wildcard for value, so that a pod can
tolerate all taints of a particular category.
Lt and Gt perform numeric comparisons (requires feature gate TaintTolerationComparisonOperators).
tolerationSeconds
integer
TolerationSeconds represents the period of time the toleration (which must be
of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
it is not set, which means tolerate the taint forever (do not evict). Zero and
negative values will be treated as 0 (evict immediately) by the system.
format:
int64
value
string
Value is the taint value the toleration matches to.
If the operator is Exists, the value should be empty, otherwise just a regular string.
status object
MetalNodeStatus is written only by the controller.
agentVersion
string
AgentVersion is the version the agent reports.
candidates []object
Candidates are the addresses tried, in preference order, with the last
dial-back result for each.
maxItems:
17
address
string required
Address is an IP address.
checkedAt
string
CheckedAt is when the verifier finished the check that produced Result.
format:
date-time
result
string required
Result is the dial-back outcome.
enum:
Pending, Reachable, Timeout, Refused, PinMismatch, CertificateMismatch, NotAllowed, Error
source
string
Source says where the address came from: override (spec.hostIP or the
agent's --host-ip), tailnet, lan or docker-host.
capacity object
Capacity is the hardware the agent reports.
chip
string
Chip is the CPU brand string (for example "Apple M5 Max").
gpuCores
integer
GPUCores is the GPU core count.
format:
int32
memory
string
Memory is MemoryBytes as a quantity (for example 128Gi), for display.
memoryBytes
integer
MemoryBytes is the Mac's unified memory in bytes.
format:
int64
metalVersion
string
MetalVersion is the Metal family the GPU supports (for example "Metal 4").
conditions []object
Conditions: AgentConnected and Reachable.
lastTransitionTime
string required
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.
format:
date-time
message
string required
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength:
32768
observedGeneration
integer
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.
format:
int64minimum:
0
reason
string required
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_])?$minLength:
1maxLength:
1024
status
string required
status of the condition, one of True, False, Unknown.
enum:
True, False, Unknown
type
string required
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])$maxLength:
316
hostIP
string
HostIP is the first candidate the dial-back verified. It is set only
while Reachable is True.
ingressPort
integer
IngressPort is the agent's TLS ingress port.
format:
int32
ingressSPKI
string
IngressSPKI is the base64 SHA-256 digest of the agent ingress
certificate's public key, as the agent reports it. The dial-back and
the relay complete TLS only against this key; the dial-back also
requires the certificate the agent reports, which must name this
MetalNode's UID.
lastHeartbeatTime
string
LastHeartbeatTime is the Lease's renewTime, accurate to about a
minute: it advances when AgentConnected changes or when it is more
than 60 seconds behind. The Lease holds the exact time.
format:
date-time
observedGeneration
integer
ObservedGeneration is the spec generation this status reflects.
format:
int64verification object
Verification is the dial-back bookkeeping.
consecutiveFailures
integer
ConsecutiveFailures counts checks in a row that verified no address;
it sets the retry backoff.
format:
int32
inputHash
string
InputHash identifies the pin, ingress certificate, port, candidate
list and verifier placement the last completed check ran against. A
change starts a new check.
lastCheckTime
string
LastCheckTime is when the last completed check finished.
format:
date-time
lastStartTime
string
LastStartTime is when the controller last started a verifier pod.
Starts are at least 30 seconds apart, whatever the Mac reports.
format:
date-time
podUID
string
PodUID is the UID of the verifier pod the controller last created.
Only that pod's results are read.
No matches. Try .spec.hostIP for an exact path