Repository navigation
chore(deps): update talos to v1.15.0-beta.0 - #778
Conversation
|
Claude finished @doa-renovate[bot]'s task in 30s —— View job レビュー結果変更: 指摘1. 要確認: ノードの版が alpha.2 のまま(版の食い違い)
2. リリースノート確認(1.15.0-beta.0) このリポジトリで影響しうる項目だけを挙げます。
3. セキュリティ / テスト
結論コードの不具合はありません。ただしノード側が alpha.2 のままなので、ノードや |
|
Claude finished @doa-renovate[bot]'s task in 25s —— View job レビュー結果変更は 要確認: ノードの Talos の版とずれる
リリースノートとの突き合わせ(1.15.0-beta.0)このリポジトリに影響しそうな項目を grep で確認しました。
その他
結論: 内容に問題はありません。ノード側の版更新と合わせてマージしてください。 |
0769483 to
443b7db
Compare
|
Claude finished @doa-renovate[bot]'s task in 28s —— View job レビュー結果変更: Talos の版を
不具合・設計問題ありません。以前のレビューで指摘された「ノードの版とクライアントの版のずれ」は、今回の同期で 3 か所が揃ったため解消しています。 要確認(マージ後の作業)
リリースノート(v1.15.0-beta.0)と、このリポジトリの設定の突き合わせ
セキュリティ・テスト
結論コードの問題はありません。マージして問題ありません。ただしノードへの適用前に、beta.0 の Factory イメージが取れることを確認してください(要確認)。 |
443b7db to
1bf20c1
Compare
|
Claude finished @doa-renovate[bot]'s task in 24s —— View job レビュー結果変更: Talos の版を
3 か所は揃っており、 要確認(マージ後・適用前)
リリースノート(v1.15.0-beta.0)とこのリポジトリの突き合わせ
セキュリティ・テスト
結論コードの問題はありません。マージして問題ありません。ノードへの適用前に、beta.0 の Factory イメージが取れることを確認してください(要確認)。 |
talosctl v1.15.0-beta.0 から、inline の manifest が 1 行のエスケープ文字列ではなく ブロックで書き出されるようになり、エスケープした引用符と改行を探していた確かめが落ちた (#778 の boot)。エスケープを戻して字下げを落としたものを見るようにして、どちらの書き方でも通す。 Namespace の 3 行は grep では行をまたげないので awk で見る。 Claude-Session: https://claude.ai/code/session_01T8TqVdo6LUrWKdVQgbScVU Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @5ym's task in 16s —— View job レビュー結果変更: Talos の版を
3 か所は揃っており、 要確認(マージ後・適用前)
リリースノート(v1.15.0-beta.0)とこのリポジトリの突き合わせ
セキュリティ・テスト
結論コードの問題はありません。マージして問題ありません。ノードへの適用前に、beta.0 の Factory イメージが取れることを確認してください(要確認)。 |
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
v1.15.0-alpha.2→v1.15.0-beta.0v1.15.0-alpha.2→v1.15.0-beta.0Release Notes
siderolabs/talos (ghcr.io/siderolabs/talosctl)
v1.15.0-beta.0Talos 1.15.0-beta.0 (2026-11-10)
Welcome to the v1.15.0-beta.0 release of Talos!
This is a pre-release of Talos
Please try out the release binaries and report any issues at
https://github.com/siderolabs/talos/issues.
Allow filtering incoming packets by the destination IP and link
A new
NetworkLinkIngressConfigallows filtering incoming packets by link and the destination IP.If
destinationAddressesis left empty, it defaults to the node addresses, plus the broadcast, multicast and IPv6 link-local addresses.NetworkLinkIngressConfigshould not be used in the following scenarios:kube-proxyreplacementBGP MD5 Authentication
BGPInstanceConfigneighbors now accept anauthPasswordto enable TCP MD5 signature authentication (RFC 2385) of the BGP session,including for VRF-bound BGP instances:
The password is redacted from the machine configuration output. The
BGPInstanceConfigsresource is now sensitive: theos:adminrole reads it in full, while the other roles get it with the password replaced byREDACTED.Boot Partition Wait
Talos now waits for the partition it was booted from to be discovered before declaring the system volumes (
META,STATE) missingand entering maintenance mode, so that disks enumerated late (SD cards, USB, some RAID controllers) are not mistaken for a fresh machine.
On UEFI systems booted via
systemd-bootthe boot partition comes from theLoaderDevicePartUUIDEFI variable, while the GRUB configurationnow passes the
talos.boot.partuuid=<UUID>kernel argument (probed by GRUB at boot). The detected boot partition is published as thebootpartitionresource.containerd Configuration Version 4
Talos now generates
containerdconfiguration withversion = 4(previouslyversion = 3).containerdonly migrates configuration from older versions, so any custom CRI configuration provided viaCRICustomizationConfigdocuments (or shipped by system extensions) is now interpreted as version 4, and settingswhich moved in version 4 are silently ignored (only a
Ignoring unknown key in TOMLwarning is logged bycontainerd).In version 4, the top-level server sections moved into plugin configuration blocks, so the following patches need to be adjusted:
[metrics]address[plugins."io.containerd.server.v1.metrics"]address[metrics]grpc_histogram[plugins."io.containerd.metrics.v1.grpc-prometheus"]grpc_histogram[grpc]address,uid,gid,max_recv_message_size,max_send_message_size[plugins."io.containerd.server.v1.grpc"](same keys)[grpc]tcp_address,tcp_tls_ca,tcp_tls_cert,tcp_tls_key,tcp_tls_common_name[plugins."io.containerd.server.v1.grpc-tcp"]address,tls_ca,tls_cert,tls_key,tls_common_name[ttrpc]address,uid,gid[plugins."io.containerd.server.v1.ttrpc"](same keys)[debug]address,uid,gid[plugins."io.containerd.server.v1.debug"](same keys)For example, the
containerdmetrics customization documented for previous versions of Talos:should now be written as:
Note that
[debug]level,formatandlog_trace_idstay at the top level, and that thettrpcaddress is no longerderived from the
grpcaddress: if thegrpcaddress is customized, thettrpcplugin address has to be set explicitly.CPU Scaling Configuration
CPU frequency scaling can now be configured declaratively with the
CPUScalingConfigdocument, instead of through kernel argumentsor raw
SysfsConfigkeys:Settings apply to the cpufreq policies matched by the selector, which targets cores by property rather than by index, so a machine
whose cores are not uniform can be configured without hardcoding how many it has:
core_typeis reported on Intel hybrid CPUs, and on Arm systems mixing core designs (big.LITTLE) whose firmware rates thecapacity of each core; it is empty on uniform machines.
The selector matches against the fields of the
CPUScalingStatusresource, and may also setenergyPerformancePreference,minFrequencyKhzandmaxFrequencyKhz. Where several documents match the same policy, the one whose name sorts first wins, and thedocument which claimed a policy is reported on the resulting
CPUScalingSpecresource. Removing the configuration restores thevalues the machine booted with.
Setting a cpufreq attribute through both
CPUScalingConfigandSysfsConfigis rejected, as the two would otherwise overwrite eachother continuously.
Kubelet Credential Provider Config Files
The
KubeCredentialProviderConfigdocument supports a newconfigFilesfield to provide configuration files for the credential provider plugins.Each file is written to the
/etc/kubernetes/credentialprovidersdirectory, so it can be referenced in theargsof a credential provider:Disk SMART Status
Talos can now collect SMART (Self-Monitoring, Analysis and Reporting Technology) health information from disks,
exposed via the new
SMARTStatusresource (one per disk, keyed by the disk device name).Collection is controlled by the presence of the new
DiskSMARTConfigdocument: while the document is part ofthe machine configuration SMART status is collected, and removing the document disables collection (any
SMARTStatusresources already produced are removed as well). There is noenabledfield.talosctl gen configandtalosctl cluster createemit this document by default, so SMART status collectionis enabled by default for machine configurations generated by Talos 1.15. Clusters upgraded from an earlier
version keep their existing machine configuration, which carries no
DiskSMARTConfigdocument, so SMARTstatus collection stays off there until the document is added.
Rotational disks are never spun up just to be probed: a disk in standby is detected via ATA
CHECK POWER MODEand its SMART data is left untouched until it is active again.To retrieve SMART statuses:
The resource reports an overall health verdict, temperature, power-on hours and power cycles, NVMe wear
indicators (percent used, available spare, critical warning, media errors) and, for ATA/SATA disks, the raw
SMART attribute table with per-attribute thresholds.
Disk Free
A new
talosctl diskfreecommand (aliased todf) reports storage and inode usage for mounted volumes.Ethernet Flow Control
The
EthernetConfigdocument now supports configuring Ethernet link flow control (802.3x pause frames)with the new
flowControlfield, similar to theethtool -Acommand:Omitting the
flowControlfield leaves the link's flow control configuration unchanged.Current flow control settings are reported on the
EthernetStatusresource.Extension Service Configuration
ExtensionServiceConfigis supported only for extension services whose service manifest explicitly declares a configuration dependency:Using
ExtensionServiceConfigwith a service that does not declare this dependency is unsupported and has undefined startup behavior.The service might start before its configuration is rendered, leaving config files or environment variables unavailable until a later service restart.
Extension authors must declare the dependency before documenting
ExtensionServiceConfigsupport.talosctl gen removed subcommands
The following
talosctl gensubcommands have been removed:talosctl gen catalosctl gen crttalosctl gen csrtalosctl gen keytalosctl gen keypairThese commands where historically used to generate pieces of Talos PKI, but they are no longer needed
as
talosctl gen configandtalosctl gen secretsnow generate all required PKI material automatically.Blank Virtual Machine Disks
A virtual machine disk can now be provisioned as an empty volume in a storage pool, rather than only
as a CD-ROM attached from a content library:
The pool must be declared by a
StoragePoolConfigdocument in the same machine configuration; a disknaming an undeclared pool is now a configuration error rather than a virtual machine that silently
never starts.
Four behaviours are worth knowing before you rely on this:
machine and the disk, so removing the disk from the configuration leaves the data in place, and
re-declaring the same virtual machine and disk names in the same pool reattaches it. Reclaiming
the space is a deliberate, out-of-band act.
talosctl get storagepoolvolumestatuseslistsmanaged volumes, not retained orphan files: their statuses disappear when their requests and
consumers are gone. Inspect the pool's backing directory to discover retained files before
reclaiming space; confirm a file is no longer in use before deleting it.
sizegrows the volume the next time no virtual machine has it open,because growing one underneath a running guest corrupts qcow2 metadata and is invisible to the
guest for raw. The pending growth is reported on the volume's status.
sizeis reported and ignored. Shrinking would truncate a filesystem the guest laidout, so it is refused rather than applied; the disk stays attachable and the virtual machine keeps
running.
StoragePoolConfigdocument. Removing areferenced pool alone is rejected by configuration validation. Remove or update every virtual
machine referencing it in the same configuration change. During teardown, consumers release
the pool before it is undefined and its backing directory can be unmounted. The volume files
survive.
Provisioning a disk from a content library image is not implemented yet;
provision.fromImageisstill only supported on a
cdrom.Ignore Ctrl-Alt-Delete
Setting
ignoreCtrlAltDelete: truein theSecurityProfileConfigdocument makes Talos log and ignore Ctrl-Alt-Delete instead of rebooting the machine.Ctrl-Alt-Delete still reboots the machine until a configuration with this option is applied.
Image Layers Synced to Disk
The CRI containerd now syncs each unpacked image layer to disk (
syncfs) before committing the snapshot.Previously, a power loss or a hard reset shortly after an image pull could leave a committed layer with zero-length files:
containers using the image failed with
exec format error, and the broken snapshot was reused until the image was removed by hand.This applies to all image layers unpacked by the CRI containerd: images pulled by the kubelet, the
kubeletandetcdimages pulled by Talos,and images imported into the CRI containerd with
talosctl image import.Each synced layer flushes all dirty data of the
EPHEMERALfilesystem, which can slow down image pulls and add I/O latency on write-heavy nodes.If image pull performance matters more than crash consistency, the sync can be disabled with a machine configuration patch:
Snapshots already broken by an earlier crash are not repaired: remove the affected image (e.g.
talosctl image rm) so that it is pulled again.IPVS Support
Following Kubernetes deprecation of IPVS support (
kube-proxy), Talos Linux now ships IPVS as kernel modules which are not loaded by default.If you require IPVS support, you can enable it by loading the following kernel modules:
ip_vs(core)ip_vs_rr,ip_vs_wrr,ip_vs_lc,ip_vs_shorip_vs_mh(scheduling algorithms)xt_ipvs(nftables/iptables match)On-demand Kernel Module Loading
The kernel can once again ask Talos to load a module on demand (
request_module()), e.g. when a driver loads a helper module while probing a device,or when DRBD loads its transport module.
Talos handles the kernel's
modprobeusermode helper call and loads the module (shipped with Talos or a system extension) by the requested name,applying the parameters from
KernelModuleConfigif the module is listed in the machine config.Such modules no longer need to be listed in the machine config, and the order of the listed modules is not important.
Requests via subsystem aliases (e.g.
fs-*,net-pf-*,crypto-*), which userspace can trigger via mounts, sockets, etc., are refused,so on-demand loading can't be used to load arbitrary modules from workloads.
The outcome of each request is logged to the kernel log (
talosctl dmesg).Kernel Log Extra Tags
The
KmsgLogConfigdocument now supports anextraTagsfield which attaches additional key-value pairsto every kernel log message sent to that destination:
Tags are scoped to the destination they are configured on, so different endpoints can receive different tags.
The keys
facility,seq,clock,priority,msg,talos-timeandtalos-levelare reserved and rejected,as they are set by Talos itself.
kube-apiserver Webhook Kubeconfigs
Webhook authorization and webhook token authentication can now be configured with the Kubernetes configuration documents,
without the
.cluster.apiServer.extraVolumesof the legacyv1alpha1configuration.Talos renders the webhook kubeconfig into the kube-apiserver static pod, and sets the kube-apiserver configuration to point to it.
KubeAuthorizerConfighas a newkubeconfigfield for theWebhookauthorizer type, and Talos sets thewebhook.connectionInfofor it:The new
KubeAuthenticationWebhookConfigdocument configures webhook token authentication (e.g. foraws-iam-authenticator),and Talos sets the
--authentication-token-webhook-*flags of kube-apiserver accordingly:The kubeconfig should be self-contained, as kube-apiserver can't access files on the host: certificates and keys should be specified inline
(
*-datafields), andtokenFile,execandauth-providerare not supported.If no certificate authority is specified, kube-apiserver trusts the root CAs of the machine (including
TrustedRootsConfig).Kubeconfigs are redacted from the machine configuration the same way as other secrets.
As kube-apiserver can't read files from the host, a
KubeAuthorizerConfigwithwebhook.connectionInfo.type: KubeConfigFileis now rejected,as well as
authentication-token-webhook-*flags inKubeAPIServerConfigextraArgs.The authorizer name should be a valid DNS-1123 subdomain, as required by kube-apiserver.
kube-network-policies Arguments
The
KubeFlannelCNIConfigdocument has a newkubeNetworkPoliciesArgsfield which replaces the default command-line arguments of kube-network-policies(
--hostname-override=$(MY_NODE_NAME)and--v=2), e.g. to change log verbosity or format.kube-network-policies serves metrics on
:9080on all node addresses by default; use--metrics-bind-address=127.0.0.1:9080to restrict it to the loopback interface.Kubelet Image GC Thresholds
Talos now defaults kubelet
imageGCHighThresholdPercentto 75 andimageGCLowThresholdPercentto 65 (upstream defaults are 85 and 80).The upstream image GC high threshold matches the default
imagefs.available<15%hard eviction threshold, so the node was putinto
DiskPressure(and tainted forevictionPressureTransitionPeriod) before image GC had a chance to run.The defaults are applied only if neither of the thresholds is set in
machine.kubelet.extraConfig.On upgrade, nodes with disk usage above 75% will garbage collect unused images.
Kubelet Resource Manager State
Talos now validates the kubelet CPU manager and memory manager state files (
/var/lib/kubelet/cpu_manager_state,/var/lib/kubelet/memory_manager_state)the same way kubelet does on startup, and removes a state file kubelet would refuse to load before starting kubelet.
Previously only a change of the manager policy was detected, so changing e.g.
reservedSystemCPUsorreservedMemory, ora change of the CPU/NUMA topology of the machine, left kubelet unable to start until the state file was removed manually.
Only the rendered
KubeletConfiguration(machine.kubelet.extraConfig) is checked: the resource manager settings passed as kubeletcommand line flags via
machine.kubelet.extraArgs(e.g.--cpu-manager-policy,--reserved-cpus) are not taken into account.KubePrism Readiness Check
KubePrism can now check the health of the Kubernetes API server upstreams via the readiness endpoint (
/readyz), instead of a TCP connection attempt.This allows KubePrism to stop routing new connections to an API server which accepts TCP connections, but is not ready to serve requests
(e.g. it lost connection to etcd, or it is shutting down).
The readiness check is enabled with the
readinessCheckfield of theKubePrismConfigdocument, and it is enabled by default for machine configuration generated for Talos 1.15+.The readiness check requires unauthenticated access to the
/readyzendpoint of the API server (the default since Talos 1.14, seeKubeAuthenticationConfig).KubeSpan Peer Endpoint Filters
KubeSpan now supports filtering the endpoints received from other peers via
filters.peerEndpointsin theKubeSpanConfigdocument.While
filters.endpointsfilters the addresses a node advertises to the whole cluster,filters.peerEndpointsfilters the endpointsreceived from other peers before the node connects to them, affecting only that node. This allows excluding peer-advertised endpoints
which are known to be unreachable from a node (e.g., addresses of a private network the node is not connected to), so that KubeSpan
endpoint rotation never attempts them.
Live Volume Growth
Talos now supports live growth of partition and disk volumes with
xfs,ext4andbtrfsfilesystems, without unmounting the volume or stopping workloads.The partition should be the last one on the disk to be grown, and the filesystem should be grown after the partition is resized. Talos does not support shrinking volumes.
The
UserVolumeConfigoftype: disknow supports agrowfield, which can be set totrueto allow the volume to grow when the underlying disk is resized.LLDP Neighbor Discovery
Talos now listens for LLDP on physical Ethernet interfaces and reports neighbors through the
LLDPNeighborStatusresource.Reported information includes chassis and port IDs, system and port descriptions, system names, management addresses, and VLANs.
The built-in listener does not transmit advertisements; use the
lldpdsystem extension when advertising is required.Secure Boot images no longer have lockdown=confidentiality enabled by default
Secure Boot images no longer have
lockdown=confidentialityenabled by default.This change was made to improve compatibility with eBPF tooling under default schematic.
This means that Secure Boot images will now have
lockdown=integrityenabled by default (implicitly), which is the recommended setting for most users.Users can override it by adding
lockdown=confidentialityto the kernel command line through Image Factory if they require it.MACVLAN Links
Talos Linux now supports creating MACVLAN links with a new
MacVLANConfigdocument:The
sourcemode is not supported yet, as it requires a list of allowed source MAC addresses.Memory Protection on Small Machines
Talos protects the memory of its own processes (machined, system services, CRI, kubelet) from reclaim via cgroup
memory.minandmemory.low.On machines with less than ~1.6 GiB of memory these protections are now scaled down proportionally, so that at most one third of the memory is hard-protected.
Previously, on 1 GiB machines more than half of the memory (including page cache) was protected, so workloads could be OOM-killed with plenty of page cache still in memory.
Multipath Configuration
The
multipath-toolssystem extension now reads/etc/multipath.conffrom the Talos host instead of usingExtensionServiceConfig.The
multipathdservice waits for this file and bind-mounts it read-only into its service container.Before updating the extension, apply a machine config patch that deletes the existing
ExtensionServiceConfigdocument and adds anEtcFileConfigdocument:The extension does not provide a default configuration, so
multipathdremains waiting until/etc/multipath.confis present.NFS External Volumes
Talos now supports NFS as an
ExternalVolumeConfigfilesystem type alongsidevirtiofs, allowing nodes to mount network exports at/var/mnt/<name>through the existing block volume machinery.Supported
versionvalues are3,4,4.1, and4.2.The
mount.nfsspec configures the kernel NFS client:server(hostname or IP; IPv6 is bracketed automatically) and absolutepathare required; optionalport,transport(tcp/udp), and NFSv3-onlymountPort/mountTransport(otherwiserpcbinddiscovery is used).locking(localdefault /remote) controlsnolock/lock; Talos does not runrpc.statd, solocal(nolock) is the safe default. You needrpc.statdextension for remote locking.recovery(hard/soft/soft-error) maps tohard/soft/softerr.timeout(timeo, deciseconds),retransmissions(retrans),readSize/writeSize(rsize/wsize, 1024–1048576 multiples of 1024),connections(nconnect, 1–16, TCP only),reservedPort(resvport/noresvport), andsecurity(none/sys; Kerberos flavors are unsupported as Talos does not runrpc.gssd).tcptransport.Common
mountflags (readOnly,disableAccessTime,secure) apply as with other volume types.Validation rejects
mountPort/mountTransport/lockingoutside NFSv3 andudpfor NFSv4.NUMA Topology and VM Placement Validation
Talos reports host NUMA nodes, CPU membership and total node memory through the
NUMATopologyresource.Explicit VM CPU pins and memory-node selections are checked against the host before starting or replacing a guest.
Invalid placement leaves an existing guest running; CPUs and guest memory may intentionally use different nodes.
This validates placement, not available memory capacity or reservations. Host inventory is not exposed in container mode.
Redacted Resources
Resources which might carry secrets are marked sensitive, and reading them used to require the
os:adminrole.Such a resource can now be read with the
os:readerandos:operatorroles as well, with the sensitive valuesof the spec replaced by
REDACTED; the resource carries thetalos.dev/redactedannotation to say so.talosctl getasks for this automatically, so with a reduced-roletalosconfigit now prints resourceswhich previously came back as
PermissionDenied:$ talosctl -n 172.20.0.2 get linkspecs kubespan -o yaml node: 172.20.0.2 metadata: namespace: network type: LinkSpecs.net.talos.dev id: kubespan annotations: talos.dev/redacted: "true" spec: name: kubespan wireguard: privateKey: REDACTEDWith the
os:adminrole nothing is redacted, and thetalosctl getoutput is unchanged.A resource which has nothing left to read once redacted - the Kubernetes secrets, for one - is not served in a
redacted form at all, and still requires the
os:adminrole.More resource types are now marked sensitive, as they carry the extra arguments, the environment variables and
the manifests of the machine configuration verbatim:
StaticPod,Manifest,ExtraManifestsConfig,ControllerManagerConfig,SchedulerConfig,AdmissionControlConfig,ContainerSpec,ContainerInstanceSpec,Environment,MetaKey,UniqueMachineTokenandPlatformConfig. All of themsupport redaction, so they stay readable with any role, but a client which doesn't ask for redaction
(including a
talosctlolder than this release) needs theos:adminrole to read them.Route Updates
RouteSpecresource IDs now match the key the Linux kernel uses for routes: routing table, address family, destination and priority (metric),e.g.
inet4/10.0.0.0/8/1024instead ofinet4/10.0.0.1/10.0.0.0/8/1024.The gateway, the output link and the multipath next-hops are no longer part of the ID, so changing them updates the route in place
(
RTM_NEWROUTEwithNLM_F_REPLACE) without the route ever being missing, e.g. when a BGP route switches between a single next-hop and ECMP.Routes which differ only in the next-hops (which can't be installed into the kernel at the same time) are now merged into a single route,
with the higher configuration layer taking precedence.
RouteStatusresource IDs are not changed.SeccompProfileConfig
Seccomp profiles are now declared with the new
SeccompProfileConfigdocument, one document per profile:As before, every profile is written to
/var/lib/kubelet/seccomp/profiles/<name>, so Kubernetes pods can use it withsecurityContext.seccompProfile.type: LocalhostandlocalhostProfile: profiles/<name>.The
.machine.seccompProfilesfield is deprecated in favor ofSeccompProfileConfigdocuments. It keeps working, but a document may not reuse the name of a profile declared there.Permissions of the Generated Files
talosctlnow writes every file which might contain secrets with0600permissions (owner read/write only),and it restricts the permissions of the files it overwrites as well.
This affects the machine configuration (
talosctl gen config,talosctl machineconfig patch,talosctl cluster create --skip-injecting-config),talosconfigandkubeconfig.SELinux Workload Categories
A new
selinuxCategoriesfield of theSecurityProfileConfigdocument labels workloads with SELinux MCS categories,so that workloads sharing an SELinux type still cannot access each other's processes and files. The categories are disabled
by default, and have to be enabled explicitly by setting
selinuxCategories: true.The categories are split three ways: the CRI labels pods with a random pair from
c0-c767, containers declared viaContainerConfigget a stable pair fromc768-c1007derived from their name, andc1008-c1023are reserved for Talos(the kube-apiserver static pod runs at
s0:c1022,c1023, so that it keeps access to its audit log across reboots).Pods run as
pod_t, and privileged containers aspod_privileged_t, which reads the host files and/procand ignores thecategories.
spc_tis an alias of it, so charts written for Fedora and RHEL keep working. The kubelet gets/sys/fs/selinuxand the containers contexts file, so that it labels volumes and its plugin directories.A pod writing files which outlive it, to a hostPath or a local volume, needs a fixed
securityContext.seLinuxOptions.level,else the pod of the next start cannot read them. The CRI skips the pairs of running containers when it draws one, so
the pair is exclusive only while the pod runs.
With the categories enabled, the CRI passes an SELinux label to every container runtime, so the runtimes which do not support
SELinux labels (e.g. gVisor, youki, Spin) fail to start pods.
Static Control Plane Endpoints
The new
StaticEndpointsConfigdocument provides a static list of control plane node addresses and hostnames:The list is merged with the control plane endpoints discovered via the discovery service, the Kubernetes API server endpoints, and the cluster control plane endpoint.
Worker nodes use these endpoints to reach trustd, and control plane nodes use them to join etcd.
Distributing the list to all machines in the cluster makes these operations independent of the discovery service and Kubernetes.
Every connection to the endpoints is authenticated with TLS, and unreachable endpoints are skipped, so a stale list doesn't break the cluster.
Talos Containers
Talos can now run OCI containers independently of Kubernetes. Containers are declared with
ContainerConfigdocuments.They are managed through the
taloscontainerscontainerd namespace, and their state is reported in the correspondingContainerStatusresources.Also,
talosctl dashboardships a newContainerstab.talosctl containers,logs,statsandrestartselect these containers with--namespace taloscontainers.Lifecycle
lifecycle.restart.policysets when a container is run again after it exits:always(the default) after every exit,on-failureafter a non-zero exit code or a failure to start, up tomaxRetriestimes, andnevernot at all.The restart waits
delay(5s by default), which doubles with each restart of a container which ran for less thanmaxDelay, up tomaxDelay.A container which is not restarted reports
completedorfailedinContainerStatusuntil its configuration changes or it is removed.Changing the configuration of a container runs it again, and changing its policy starts the
maxRetriescount over.Containers run again after a reboot or a restart of machined, so a container which runs once has to be safe to run again;
talosctl restartonly signals the container.lifecycle.dependsOn.containersdelays the start of a container until the containers it depends on are running and healthy,or, with
condition: succeeded, have exited with code 0 and are not restarted, e.g. to migrate a database schema or prepare a directory first.A container depended on as
succeededmust use theon-failureorneverrestart policy.lifecycle.dependsOnalso waits for thenetworkto be ready and thetimeto be synchronized.lifecycle.stopTimeoutsets how long a container gets to exit afterSIGTERMbefore it is killed (10s by default, at most 4m).On shutdown, reboot and upgrade, containers are stopped in the reverse order of their dependencies.
Storage and Devices
mountsaccept host paths,tmpfs, and withvolumeaUserVolumeConfig,ExistingVolumeConfigorExternalVolumeConfigby name.devices.rawVolumehands aRawVolumeConfigto a single container as a block device, without theprivilegedprofile.Security and Resources
When SELinux is enabled, Talos Containers use a dedicated SELinux domain; the
privilegedprofile gets a writable/sysand is excluded from the per-container MCS categories.security.seccompProfile.typeselects thedefaultseccomp profile,unconfined, or alocalhostprofile declared by aSeccompProfileConfigdocument.runAssets the user and group, and an image declaring a non-numericUSERis rejected unlessrunAsoverrides it.resources.limitscaps the CPU, memory and swap of a container; see "Workload Memory Limits" for the aggregate limit of all containers and "SELinux Workload Categories" for their isolation.Changes from 1.14
Talos 1.14 shipped an early version of
ContainerConfig. Configurations written for it keep working, with these changes:dependsOnmoved tolifecycle.dependsOn; the top-level key is deprecated, and setting both is rejected.dependsOn.networksis renamed todependsOn.network, andmounts.userVolumetomounts.volume; the old keys are deprecated and ignored when the new ones are set.dependsOn.containersis now enforced.USERis rejected instead of running as root.ContainerSpecresource no longer carryvolumeID; the resolved volume ID is reported onContainerMountStatus.talosctl Legacy Image APIs
talosctl image list,talosctl image pullandtalosctl debugno longer fall back to the legacyMachineService.ImageListandMachineService.ImagePullAPIs.They now require the
ImageServiceAPI, which is available in Talos 1.13 and later.Talosctl upgrade improvements
For nodes running Talos 1.14 and newer the upgrade image is now automatically detected for each node.
Each node keeps its own Image Factory host, schematic, platform and SecureBoot setting, so nodes with different images can be upgraded with a single command.
Any of these, except the platform, can be changed with the CLI flags.
Upgrade to a new Talos version, keeping everything else as it is:
Upgrade to a different schematic, e.g. to add a system extension:
--talos-versiondefaults to the version oftalosctl, so set it explicitly to stay on the Talos version the nodes are running.Upgrade to an exact installer image (it can't be combined with the flags above):
The
--imageflag is now mandatory when upgrading nodes running Talos versions before 1.14.Time Check API
The
TimeService/TimeCheckAPI (talosctl time --check) is no longer available to theos:readerrole, as it allows queryingarbitrary time servers from the node. The
TimeService/TimeAPI (querying the configured time server) is still available toos:reader.PTP device paths are now strictly validated both in the machine configuration and in the API: the path should be directly under
/dev,the name should start with
ptp(e.g./dev/ptp0,/dev/ptp_kvm), and the device should be a PTP character device.Filesystem Trim Chunking
The
FilesystemTrimConfigdocument (and the per-volumetrimsettings) now supportchunkSize,chunkDelayandminLengthoptions.By default, the whole filesystem is trimmed at once (same as the
fstrimcommand), which issues discards for all free space back-to-backand might cause latency spikes for other workloads on the same disk (e.g. etcd).
Setting
chunkSizesplits the trim into multiple operations withchunkDelayin between, whileminLengthskips free ranges smaller than the specified size.trustd Server Certificate Verification
trustd server certificates are now issued with a trustd-specific extended key usage.
The new
.machine.features.trustdCheckExtKeyUsagesetting makes worker nodes accept only trustd server certificates with this extended key usage.The setting is enabled by default for worker machine configuration generated for Talos 1.15+.
For existing clusters, enable the setting on worker nodes once all control plane nodes run Talos 1.15+:
worker nodes with the setting enabled fail to refresh the Talos API certificate if trustd runs an older version of Talos.
Component Updates
Linux: 7.3.1
Kubernetes: 1.38.0-beta.0
containerd: 2.3.7
runc: 1.5.2
CoreDNS: 1.14.7
systemd-udevd: 262
etcd: 3.7.3
Flannel CNI: 0.28.10
Talos is built with Go 1.27.3.
Virtual Machine Power Control
New
talosctl hypervisor start|stop|reboot <vm-name>commands control the power state of Talos-managed virtual machines.startandstopoverride the virtual machine's power state until the node reboots, without changing the machine configuration.After a reboot, the virtual machine follows the
powerStateof itsVirtualMachineConfigagain.rebootrestarts a running guest and leaves the power state unchanged.stopandrebootask the guest to shut down or restart by default. Pass--graceful=falseto destroy the domain instead.The commands require the
os:adminoros:operatorrole.Virtual Machine Hardware Profiles
VirtualMachineConfignow accepts aprofilefield selecting the guest-visible CPU and machine type.Talos ships three builtin profiles on amd64:
host(default whenprofileis omitted):q35machine,host-modelCPU.passthrough:q35machine,host-passthroughCPU.legacy:pc-i440fx-9.2machine,kvm64CPU, for guests that need a traditional PC chipset.Custom profiles are defined with the new
VirtualMachineProfileConfigdocument:machineacceptsq35,pc,pc-q35-*orpc-i440fx-*.cpu.modeishost-model,host-passthroughorcustom;model,fallback(forbidby default, orallow) andfeatures(policiesrequire,disable,optional,force,forbid)are only allowed with
custom. The nameshost,legacy,passthroughand thecompat-prefix are reserved.Profiles are validated structurally only: Talos does not check that the host CPU supports the model, nor guarantee migration compatibility.
Profile changes, including switching a VM to a different profile, are not applied to running guests;
they take effect on the next deliberate stop and start of the virtual machine.
Hardware profiles are currently available only on amd64.
Virtual Machine Serial Console
Talos-managed virtual machines now expose their serial console over the Talos API, with no host shell access required.
talosctl hypervisor console <vm-name>attaches to the live serial console of a running VM.Press
Ctrl-]to detach without stopping the VM;Ctrl-Cis forwarded to the guest.Only one session can be attached to a VM at a time, and previous output is not replayed.
The command is supported on Unix clients only.
Serial output is also persisted on the host (with bounded retention), and can be read with
talosctl logs --kind=vm <vm-name>,including
--tailand--follow. The new--kindflag (container,vmorservice) selects the log source explicitly;omitting it keeps the previous service/container routing.
Both the console and the VM logs require the
os:adminrole and a single target node.Virtual Machine VNC Console
The new
talosctl hypervisor vnc <vm-name>command forwards a virtual machine's graphical console to a local loopback TCP port.Enable
console.vnc.enabledin itsVirtualMachineConfig; access requires theos:adminrole and exactly one target node.The listener accepts one viewer at a time and supports reconnecting without restarting the command.
Use a viewer that supports unauthenticated RFB.
Talos authenticates the tunnel, and no VNC TCP port is opened on the node.
VXLAN Links
Talos Linux now supports creating VXLAN links with a new
VXLANConfigdocument:Workload Memory Limits
The new
WorkloadResourceConfigdocument sets independent aggregate memory limits for Kubernetes pods, Talos containers and virtual machines:Each root is optional. Limits are ceilings, not reservations, and do not cover swap or HugeTLB memory.
For
kubepods, Talos derivessystemReserved.memoryso kubelet enforces the cap and adjusts Node Allocatable;an explicit
systemReserved.memory, conflicting kubelet flags or the Static memory manager cannot be combined with this limit.Changing the Kubernetes cap restarts kubelet. Without Kubernetes, only the container and virtual machine limits apply.
Lowering a limit can OOM-kill workloads in that group, including QEMU guests or Kubernetes control-plane pods.
Talos exclusively owns
memory.maxon/taloscontainersand/virtualmachines.partition, even without this document.Omitting their limits means unlimited aggregate memory; individual child limits still apply.
Kubelet system-reserved or kube-reserved memory enforcement on these roots is rejected regardless of this document;
CPU-only or compressible enforcement and reservations on unrelated roots remain supported.
Kubelet drop-in directories are rejected while any cap is active; without caps, their contents remain the operator's responsibility.
Removing the Kubernetes cap restores the original kubelet configuration. The document has no effect in container mode.
Contributors
Changes
478 commits
3e36becrelease(v1.15.0-beta.0): prepare release8d97c04test: wait for container volumes to be unmounted on cleanup7fcafd4fix: keep container-held volume mounts secure94a8028fix: add new edge type to the controller dependencies APIa989a97fix: allow CPU-only kube-reserved enforcement with a kubepods limit171a6befix: warn when the kubepods memory limit exceeds host memorycd490a2fix: parse VM host ID lists the way libvirt doesbeae0dd](https://redirect.github.cConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate CLI.