From 312dc3f9ae54a120b6c068f20908c36cc2f9c5f8 Mon Sep 17 00:00:00 2001 From: Shiv Tyagi Date: Tue, 2 Jun 2026 13:12:58 +0000 Subject: [PATCH] refactor(k8s): rename spur.ai domain prefix to spur.amd.com spur.ai is not a domain we own. Kubernetes best practices require that CRD API groups, label prefixes, and RBAC apiGroups use a domain controlled by the organization. Switch to spur.amd.com across CRD definitions, labels, RBAC rules, and documentation. --- README.md | 4 ++-- crates/spur-cloud-api/src/routes/ws.rs | 2 +- crates/spur-cloud-api/src/spur_client.rs | 9 ++++++--- deploy/k8s/gpuaas-api.yaml | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ad98fec..f658810 100644 --- a/README.md +++ b/README.md @@ -190,8 +190,8 @@ kubectl apply -f deploy/k8s/gpuaas-frontend.yaml Ensure GPU nodes are labeled for Spur: ```bash -kubectl label node gpu-node-01 spur.ai/managed=true -kubectl label node gpu-node-01 spur.ai/gpu-type=mi300x +kubectl label node gpu-node-01 spur.amd.com/managed=true +kubectl label node gpu-node-01 spur.amd.com/gpu-type=mi300x ``` ## API diff --git a/crates/spur-cloud-api/src/routes/ws.rs b/crates/spur-cloud-api/src/routes/ws.rs index 557ca08..ac9e3e6 100644 --- a/crates/spur-cloud-api/src/routes/ws.rs +++ b/crates/spur-cloud-api/src/routes/ws.rs @@ -49,7 +49,7 @@ pub async fn terminal_upgrade( // the status watcher does not capture when it writes pod_name to the DB. let pods: Api = Api::namespaced(kube_client.clone(), &namespace); let lp = ListParams::default() - .labels(&format!("spur.ai/job-id={}", job_id)) + .labels(&format!("spur.amd.com/job-id={}", job_id)) .limit(1); let pod_name = match pods.list(&lp).await { Ok(list) => match list.items.into_iter().next().and_then(|p| p.metadata.name) { diff --git a/crates/spur-cloud-api/src/spur_client.rs b/crates/spur-cloud-api/src/spur_client.rs index e391b78..d6e4495 100644 --- a/crates/spur-cloud-api/src/spur_client.rs +++ b/crates/spur-cloud-api/src/spur_client.rs @@ -36,7 +36,7 @@ pub struct SpurJobStatus { /// SpurJob CRD spec — matches the operator's SpurJobSpec. #[derive(CustomResource, Debug, Clone, Serialize, Deserialize, JsonSchema)] #[kube( - group = "spur.ai", + group = "spur.amd.com", version = "v1alpha1", kind = "SpurJob", namespaced, @@ -95,10 +95,13 @@ pub async fn create_spurjob_crd(params: CreateSpurJobCrdParams<'_>) -> anyhow::R let mut labels = BTreeMap::new(); labels.insert( - "spur.ai/session-id".to_string(), + "spur.amd.com/session-id".to_string(), params.session_id.to_string(), ); - labels.insert("spur.ai/managed-by".to_string(), "spur-cloud".to_string()); + labels.insert( + "spur.amd.com/managed-by".to_string(), + "spur-cloud".to_string(), + ); let mut env = HashMap::new(); env.insert( diff --git a/deploy/k8s/gpuaas-api.yaml b/deploy/k8s/gpuaas-api.yaml index 4c4642a..3d2e3b7 100644 --- a/deploy/k8s/gpuaas-api.yaml +++ b/deploy/k8s/gpuaas-api.yaml @@ -85,7 +85,7 @@ rules: resources: ["services"] verbs: ["get", "list", "create", "delete"] # For SpurJob CRDs - - apiGroups: ["spur.ai"] + - apiGroups: ["spur.amd.com"] resources: ["spurjobs"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] ---