진단 코드
실행 결과의 코드로 아래 표에서 진단 내용을 찾으십시오. PF-*는 사전 점검,
EX-*는 실행 오류, UP-*는 업그레이드 관련 코드입니다.
이 표는 코드에서 생성한 공통 레지스트리입니다. 진단 메시지 원문은 영어로
유지하여 CLI 로그와 정확하게 대조할 수 있게 했습니다. 표의 block은 진행을
막는 조건, warn은 검토할 경고를 뜻합니다. 폐기된 번호는 재사용하지 않습니다.
malmok — diagnostic code registry
Generated from internal/codes/, which is the single source of truth.
Editing this file has no effect; change the Go definitions and re-run
go generate ./internal/codes/.
Codes are stable identifiers. They are never translated and never reused:
a retired number stays retired, because audit reports and customer tickets
outlive releases.
Summary
| Family |
Codes |
block |
degrade |
warn |
info |
PF |
70 |
37 |
11 |
18 |
4 |
PV |
8 |
4 |
— |
3 |
1 |
UP |
8 |
6 |
— |
1 |
1 |
EX |
9 |
8 |
— |
1 |
— |
MC |
42 |
— |
— |
— |
— |
DG |
5 |
— |
— |
— |
— |
Total: 142 codes.
PF · Preflight
Source: internal/codes/preflight.go
Base
| ID |
Severity |
Check |
Default message |
PF-101 |
block |
OS family and version are supported |
Unsupported OS family or version; no validated profile covers this distribution |
PF-102 |
block |
CPU architecture is amd64 or arm64 |
Unsupported CPU architecture; only amd64 and arm64 are supported |
PF-103 |
info |
Kernel version |
Kernel version recorded for the audit report |
PF-104 |
degrade |
cgroup v2 unified hierarchy is active |
cgroup v2 unified hierarchy is not active |
PF-105 |
warn |
Swap is disabled |
Swap is active; apply disables it unless os.disableSwap is false |
PF-106 |
block |
systemd version is 245 or newer |
systemd is older than the required version 245 |
PF-107 |
warn |
CPU and memory meet the minimum |
Node is below the recommended minimum of 2 cores and 4 GB of memory |
PF-108 |
warn |
Node architectures are homogeneous |
Nodes report differing CPU architectures; images must exist for every one of them |
PF-109 |
info |
Machine UUID |
Machine UUID recorded for the handoff; it is the node's durable identity across reinstalls |
eBPF / dataplane capability
| ID |
Severity |
Check |
Default message |
PF-201 |
degrade |
Kernel exposes CONFIG_BPF_SYSCALL |
Kernel was built without CONFIG_BPF_SYSCALL |
PF-202 |
degrade |
Kernel BTF is present |
Kernel BTF is absent at /sys/kernel/btf/vmlinux |
PF-203 |
degrade |
bpffs can be mounted |
bpffs is neither mounted nor mountable at /sys/fs/bpf |
PF-204 |
degrade |
A minimal eBPF program actually loads |
Loading a minimal eBPF program failed; this node cannot run an eBPF dataplane |
PF-205 |
degrade |
Kernel lockdown and Secure Boot permit eBPF |
Kernel lockdown or Secure Boot restricts eBPF program loading |
PF-206 |
warn |
Active LSM stack |
A third-party LSM is active and may interfere with the eBPF dataplane |
PF-207 |
degrade |
netfilter modules required by the Canal fallback are available |
Required netfilter modules are unavailable; the canal-traefik fallback cannot run |
PF-208 |
warn |
conntrack table size |
nf_conntrack_max is low for the expected connection volume |
PF-209 |
degrade |
Kernel modules can be loaded |
Loading kernel modules is not permitted on this node |
Security posture
| ID |
Severity |
Check |
Default message |
PF-301 |
info |
SELinux mode |
SELinux mode recorded for the audit report |
PF-302 |
block |
rke2-selinux package is obtainable |
SELinux is enforcing on an RHEL-family node but the rke2-selinux package is not available |
PF-303 |
warn |
AppArmor profiles |
AppArmor profiles are active and may constrain container runtimes |
PF-304 |
warn |
Host firewall state |
firewalld or ufw is active; the cluster ports have to be opened in it (PF-601 measures whether they are) |
PF-305 |
info |
CIS profile prerequisites |
CIS prerequisites recorded; missing items become degrade only when the CIS profile is requested |
Storage
| ID |
Severity |
Check |
Default message |
PF-401 |
warn |
/var/lib/rancher is a separate mount |
/var/lib/rancher sits on the root filesystem; image accumulation will eventually fill / |
PF-402 |
block |
Free disk capacity |
Free capacity is below the 20 GB hard minimum (50 GB recommended) |
PF-403 |
warn |
Free inodes |
Free inode count is low for a container image store |
PF-404 |
block |
Longhorn prerequisite: iscsid |
Storage driver longhorn requires iscsid, which is absent or inactive |
PF-405 |
degrade |
Longhorn prerequisite: NFS client |
nfs-common/nfs-utils is absent; Longhorn RWX volumes will be unavailable |
PF-406 |
block |
multipathd does not claim Longhorn devices |
multipathd is active and will claim Longhorn block devices, causing volume attach to fail; blacklist them first |
PF-407 |
warn |
Filesystem type |
Filesystem is neither ext4 nor xfs |
Time
| ID |
Severity |
Check |
Default message |
PF-501 |
block |
Clock is NTP-synchronised |
System clock is not synchronised to any time source |
PF-502 |
block |
Clock skew between nodes |
Clock skew between nodes exceeds 5 seconds |
PF-503 |
block |
Configured NTP servers are reachable |
None of the configured NTP servers is reachable; required in airgap where no public pool exists |
PF-504 |
warn |
Timezones are consistent across nodes |
Nodes report differing timezones; correlating logs across them will be error-prone |
Network
| ID |
Severity |
Check |
Default message |
PF-601 |
block |
Inter-node port matrix |
A required inter-node port is unreachable (6443, 9345, 2379-2380, 10250, 4240, 8472/udp, 51871/udp) |
PF-602 |
degrade |
Path MTU between nodes |
Path MTU is smaller than expected; overlay MTU must be adjusted |
PF-603 |
block |
registrationAddress resolves |
registrationAddress does not resolve from this node |
PF-604 |
block |
Hostnames are unique and fully qualified |
Duplicate or unqualified hostname; nodes would collide on join |
PF-605 |
warn |
Required sysctl values |
Required sysctl values are unset; apply will configure them |
PF-606 |
block |
VIP address is unused |
The configured VIP already answers ARP; another host holds this address |
PF-607 |
degrade |
VIP interface can be determined automatically |
No interface matches the VIP subnet; specify topology.vip.interface explicitly |
PF-608 |
block |
Proxy passes CONNECT |
The configured proxy did not complete a CONNECT to the required endpoints |
PF-609 |
warn |
nodeIP is unambiguous on multi-homed nodes |
Node has two or more NICs and no nodeIP is pinned; the advertised address may be the wrong one |
PF-610 |
warn |
systemd-resolved stub resolver |
/etc/resolv.conf points at the 127.0.0.53 stub resolver |
PF-611 |
block |
Pod and service CIDRs do not collide |
Pod or service CIDR overlaps a node subnet or an existing route |
PF-612 |
warn |
Gateway external address is pinned |
A customer-facing profile leaves gateways[].address unset; the DNS record cannot be requested before install |
Registry / PKI
| ID |
Severity |
Check |
Default message |
PF-701 |
block |
Registry is reachable |
systemDefaultRegistry did not answer on TCP or did not serve /v2/ |
PF-702 |
block |
Registry TLS verifies against the supplied CA |
Registry TLS certificate does not verify against the supplied CA |
PF-703 |
block |
Registry credentials authenticate |
Registry login failed with the supplied credentials |
PF-704 |
block |
Intermediate certificate is valid |
Intermediate certificate does not chain to the supplied root, or expires too soon |
PF-705 |
block |
Certificate notBefore is not in the node's future |
Certificate notBefore is later than the node clock; cross-check PF-501 |
PF-706 |
block |
No root private key in the supplied PKI material |
A root private key was found in the supplied material; the offline root key must never leave its custody |
PF-708 |
block |
ACME prerequisites |
ACME DNS-01 token is invalid or the zone is not writable |
PF-709 |
block |
RKE2 release artifacts on the node |
kubernetes.artifactPath does not hold the release artifacts for the version this document asks for |
PF-710 |
block |
Chart archives present for an air-gapped install |
registry.chartDir does not hold the chart archives this document installs |
Residue / conflict
| ID |
Severity |
Check |
Default message |
PF-801 |
warn |
Pre-existing docker or containerd |
An existing docker or containerd installation was found |
PF-802 |
block |
Pre-existing k3s or RKE2 installation |
An existing k3s or RKE2 installation was found; clean it up explicitly before proceeding |
PF-803 |
block |
Control-plane ports are free |
Port 6443 or 9345 is already bound by another process |
PF-804 |
warn |
No leftover CNI interfaces |
Leftover CNI interfaces are present (cni0, flannel.1, cilium_host) |
PF-805 |
warn |
No leftover packet filter rules |
Leftover iptables or nftables rules from a previous installation are present |
PF-806 |
block |
An existing etcd member matches the address this document advertises |
A previous installation registered this node in etcd under a different address; rke2 will not start until the datastore is reset |
Certificate material
| ID |
Severity |
Check |
Default message |
PF-901 |
block |
Private key matches the leaf certificate |
Private key does not match the leaf certificate's public key |
PF-902 |
block |
Certificate chain is complete |
Chain is incomplete; an issuer certificate is missing and cannot be fetched over AIA in an airgap |
PF-903 |
block |
Listener hostname is covered by the leaf SAN |
No leaf certificate covers the listener hostname under RFC 6125 wildcard rules |
PF-904 |
block |
Certificate is not expired or expiring |
Certificate has expired, or expires within expiryWarningDays |
PF-905 |
block |
Key algorithm and size are supported by the GatewayClass |
Key algorithm or size falls outside what the selected GatewayClass supports |
PF-906 |
block |
Encrypted private key can be decrypted |
Private key is encrypted and the supplied passphrase did not decrypt it |
PF-910 |
block |
No root private key in the certificate bundle |
A root private key was found in the certificate bundle and the input is rejected |
PF-911 |
block |
Certificate notBefore is not in the node's future |
Certificate notBefore is later than the node clock; cross-check PF-501 |
PF-912 |
block |
No duplicate leaf claiming the same SAN |
Two or more leaf certificates claim the same SAN; the correct one cannot be chosen automatically |
Sub-codes
| ID |
Reasons |
PF-204 |
EBPF_LOAD_DENIED, EBPF_NO_BTF, EBPF_VERIFIER_REJECT, EBPF_PERM |
PF-902 |
CHAIN_INCOMPLETE |
PF-904 |
CERT_EXPIRED, CERT_EXPIRING |
PV · Post-apply verification
Source: internal/codes/verify.go
TLS wire verification
| ID |
Severity |
Check |
Default message |
PV-001 |
block |
Served chain is captured |
Could not capture the certificate chain the server actually sends |
PV-002 |
block |
Chain verifies without AIA fetching |
Served chain does not reach a trust anchor on its own; browsers pass by fetching the missing issuer over AIA, JSSE, Go and curl fail |
PV-003 |
block |
No expired certificate in the served chain |
Served chain contains an expired certificate, possibly a leftover cross-signed intermediate |
PV-004 |
warn |
Revocation distribution points are reachable |
OCSP or CRL distribution points are unreachable; expected in an airgap, but it must be stated in the audit report and the handover |
PV-005 |
warn |
Certificate returned when SNI is absent |
The default certificate returned for connections without SNI is unexpected |
PV-006 |
info |
Behaviour on direct IP access |
Response to direct IP access recorded for the audit report |
PV-007 |
block |
Each listener hostname returns its own certificate |
A listener hostname returns a certificate that does not match it |
PV-008 |
warn |
Negotiable TLS versions and cipher suites |
Supported TLS versions or cipher suites may exclude older JDK clients still in use at the site |
Sub-codes
| ID |
Reasons |
PV-002 |
CHAIN_NOT_SELF_SUFFICIENT, ROOT_NOT_TRUSTED |
Source:
These codes carry no severity — see internal/codes/codes.go.
Version skew
| ID |
Item |
Default message |
UP-001 |
Target version is well formed |
The target version is not an RKE2 version. It has the form v..+rke2r |
UP-002 |
Target is newer than what runs |
The target is not newer than the version already running. Kubernetes and etcd have no supported downgrade: the API server writes storage the older one cannot read, and restoring a snapshot is the only way back |
UP-003 |
One minor version at a time |
The target skips a minor version. The control plane supports one minor step, and skipping one leaves API objects stored in a version the new server never learned to convert |
UP-004 |
No node is ahead of the target |
A node already runs a version newer than the target, so the upgrade would move it backwards |
UP-005 |
No agent leads its servers |
An agent runs a newer version than the servers. A kubelet may lag its API server and must never lead it; this cluster is already outside the supported skew and the servers have to be brought up first |
Cluster readiness
| ID |
Item |
Default message |
UP-101 |
Every node is Ready before starting |
A node is not Ready. An upgrade restarts each node in turn, and starting one while another is already down is how a cluster loses quorum during a maintenance window |
UP-102 |
Workloads have somewhere to go |
There is one node, so there is nowhere to drain to. Its workloads restart in place while it is upgraded |
UP-103 |
etcd has a recent snapshot |
No etcd snapshot was taken recently. A failed control plane upgrade is recovered by restoring one, and the time to find out there is none is not afterwards |
EX · Execution failures
Source: internal/codes/execution.go
Step execution
| ID |
Severity |
Check |
Default message |
EX-001 |
block |
Step observation failed |
Could not observe the step's current state; the target state is unknown |
EX-002 |
block |
Step application failed |
The step ran and returned an error |
EX-003 |
block |
Target state not reached after applying |
The step reported success but re-observation shows the target state was not reached |
EX-004 |
block |
Retry budget exhausted |
The step failed on every attempt allowed by its retry budget |
EX-005 |
block |
One-shot step needs explicit confirmation |
A one-shot step was left in a non-successful state; re-running it is not automatically safe |
Phase and run control
| ID |
Severity |
Check |
Default message |
EX-101 |
block |
Phase halted by a failed step |
The phase stopped because one of its steps failed |
EX-102 |
block |
Node traversal halted |
A node failed, so the remaining nodes in this phase were not attempted |
EX-103 |
block |
Run halted by a failed phase |
The run stopped; later phases were not entered |
EX-104 |
warn |
Run cancelled |
The run was cancelled before completing |
MC · Maintenance checks
Source: internal/codes/maintenance.go
These codes carry no severity — see internal/codes/codes.go.
Certificates
| ID |
Item |
Default message |
MC-101 |
Series A: days remaining, per listener |
Service domain certificate is approaching expiry |
MC-102 |
Series A: served chain still complete |
Served chain no longer verifies without AIA fetching; re-run of PV-002 |
MC-111 |
Series B: days remaining, per node and service |
RKE2 internal certificate is approaching expiry on one or more nodes |
MC-112 |
Series B: renewal window entered |
RKE2 internal certificates are inside the 120-day renewal window; a restart will now rotate them |
MC-113 |
Series B: on-disk certificate matches the rke2-serving Secret |
On-disk certificate and the rke2-serving Secret disagree; a node restart can fail in this state |
MC-121 |
Series C: days remaining on the RKE2 CA |
RKE2 CA expiry recorded; ten years usually outlives the contract, so it must appear in every report and in the handover |
MC-131 |
Series D: days remaining on the private intermediate |
Private CA intermediate is approaching expiry |
Cluster state
| ID |
Item |
Default message |
MC-201 |
Node readiness and last restart |
A node is NotReady, or restarted unexpectedly during the period |
MC-202 |
System pod health |
System pods are in CrashLoopBackOff or Pending |
MC-203 |
Top pod restart counts for the period |
Pod restart counts increased notably during the period |
MC-204 |
Node conditions |
A node reports DiskPressure, MemoryPressure or PIDPressure |
MC-205 |
Workload replicas: desired versus actual |
Actual replica count differs from the desired count |
MC-206 |
Kubernetes and RKE2 version, EOL horizon |
The running version is approaching or past end of life |
etcd
| ID |
Item |
Default message |
MC-301 |
Snapshot freshness |
The most recent successful etcd snapshot is older than the agreed maximum age |
MC-302 |
Snapshot retention and off-cluster copy |
Snapshot retention is below target, or no copy exists outside the cluster |
MC-303 |
Database size against quota |
etcd database size is approaching its quota |
MC-304 |
Defragmentation needed |
etcd fragmentation is high enough to warrant a defragmentation |
MC-305 |
Member health and leader changes |
An etcd member is unhealthy, or leader elections are unexpectedly frequent |
MC-306 |
Date of the last restore rehearsal |
No restore rehearsal within the agreed interval; an untested backup is not a backup |
Resources / storage
| ID |
Item |
Default message |
MC-401 |
CPU and memory usage per node, mean and peak |
Node CPU or memory usage exceeded the agreed threshold during the period |
MC-402 |
/var/lib/rancher usage |
/var/lib/rancher usage exceeded its threshold; this is the most frequent on-prem outage cause and carries its own limit |
MC-403 |
Free disk and inodes |
Free disk space or inode count is below the agreed threshold |
MC-404 |
PersistentVolume usage |
One or more PersistentVolumes exceed their usage threshold |
MC-405 |
Longhorn volume and replica health |
A Longhorn volume is degraded or has fewer healthy replicas than configured |
MC-406 |
Longhorn backup freshness |
The most recent Longhorn backup is older than the agreed maximum age |
MC-407 |
Image cache growth and garbage collection |
Container image cache keeps growing; garbage collection may not be running |
Network / access
| ID |
Item |
Default message |
MC-501 |
Gateway and HTTPRoute acceptance |
A Gateway or HTTPRoute is not in the Accepted state |
MC-502 |
Load balancer IP reachability |
A load balancer address is unreachable |
MC-503 |
Service domain DNS resolution |
A service domain no longer resolves |
MC-504 |
End-to-end HTTPS response per service |
A service did not return a healthy HTTPS response end to end |
MC-505 |
Inter-node port matrix versus build time |
The inter-node port matrix changed since the cluster was built; a firewall policy may have been altered |
MC-506 |
Registry reachability and authentication |
The registry is unreachable, or the stored credentials no longer authenticate |
Workload / service
| ID |
Item |
Default message |
MC-601 |
Per-service health endpoint |
A service health endpoint reported unhealthy |
MC-602 |
Response time P50 and P95 for the period |
P95 response time exceeded the agreed threshold |
MC-603 |
5xx rate for the period |
The 5xx rate exceeded the agreed threshold |
MC-604 |
Alerts raised during the period |
Alerts were raised during the period and are summarised in the report |
MC-605 |
Deployment and change history for the period |
Deployments and changes applied during the period, by GitOps revision and Helm release |
Security / configuration
| ID |
Item |
Default message |
MC-701 |
CIS scan delta since build |
CIS scan results regressed relative to the build-time baseline |
MC-702 |
Secrets and tokens nearing expiry |
A Secret or token is approaching expiry |
MC-703 |
Image vulnerability scan |
Image vulnerability findings; in an airgap the scanner database must be refreshed for this to mean anything |
MC-704 |
Drift from the cluster.yaml used at build time |
The live cluster has drifted from the cluster.yaml it was built from |
MC-705 |
RBAC change history |
RBAC bindings changed during the period |
DG · Downgrade reasons
Source: internal/codes/downgrade.go
These codes carry no severity — see internal/codes/codes.go.
Downgrade reasons
| ID |
Item |
Default message |
DG-001 |
CNI downgraded because eBPF is unusable |
Requested Cilium dataplane replaced by the fallback preset; record the triggering probe IDs and the affected nodes |
DG-002 |
Gateway implementation downgraded |
Cilium Gateway replaced by Traefik; record the triggering probe IDs and the affected nodes |
DG-003 |
Requested configuration kept by excluding nodes |
The requested configuration is retained by excluding the nodes that cannot support it; record which nodes and why |
DG-010 |
No load balancer IP source available |
No LB-IPAM pool and no external load balancer; the Gateway will not obtain an external address without manual action |
DG-020 |
Storage driver downgraded |
Requested storage driver replaced by local-path; replicated volumes are lost and the customer must be told |