diff --git a/k8s_manager.py b/k8s_manager.py index 5f77f31..eb23045 100644 --- a/k8s_manager.py +++ b/k8s_manager.py @@ -132,41 +132,45 @@ class K8sManager: raise def _copy_acr_secret_to_namespace(self, target_namespace: str): - """复制 ACR secret 到目标命名空间 + """复制所有 ACR secrets 到目标命名空间 Args: target_namespace: 目标命名空间 """ - try: - # 从 agent-manager 命名空间读取 acr-secret - source_secret = self.v1.read_namespaced_secret( - name="acr-secret", - namespace="agent-manager" - ) - - # 创建新的 secret(去除自动生成的字段) - new_secret = client.V1Secret( - metadata=client.V1ObjectMeta( - name="acr-secret", - namespace=target_namespace - ), - data=source_secret.data, - type=source_secret.type - ) - - # 在目标命名空间创建 secret - self.v1.create_namespaced_secret( - namespace=target_namespace, - body=new_secret - ) - logger.info(f"✅ 已复制 ACR secret 到命名空间 {target_namespace}") - except ApiException as e: - if e.status == 404: - logger.warning(f"⚠️ 源 ACR secret 不存在,跳过复制") - elif e.status == 409: - logger.info(f"ACR secret 已存在于命名空间 {target_namespace}") - else: - logger.error(f"❌ 复制 ACR secret 失败: {e}") + # 需要复制的 ACR secrets 列表 + acr_secrets = ["acr-secret", "openclaw-acr-secret"] + + for secret_name in acr_secrets: + try: + # 从 agent-manager 命名空间读取 secret + source_secret = self.v1.read_namespaced_secret( + name=secret_name, + namespace="agent-manager" + ) + + # 创建新的 secret(去除自动生成的字段) + new_secret = client.V1Secret( + metadata=client.V1ObjectMeta( + name=secret_name, + namespace=target_namespace + ), + data=source_secret.data, + type=source_secret.type + ) + + # 在目标命名空间创建 secret + self.v1.create_namespaced_secret( + namespace=target_namespace, + body=new_secret + ) + logger.info(f"✅ 已复制 {secret_name} 到命名空间 {target_namespace}") + except ApiException as e: + if e.status == 404: + logger.warning(f"⚠️ 源 {secret_name} 不存在,跳过复制") + elif e.status == 409: + logger.info(f"{secret_name} 已存在于命名空间 {target_namespace}") + else: + logger.error(f"❌ 复制 {secret_name} 失败: {e}") def create_service(self, service_name: str, namespace: str, pod_selector: Dict[str, str], service_port: int, target_port: int) -> Dict: @@ -723,10 +727,15 @@ class K8sManager: ports=container_ports ) + # 根据镜像来源选择合适的 imagePullSecrets + image_pull_secrets = [client.V1LocalObjectReference(name="acr-secret")] + if "openclawacr" in image: + image_pull_secrets.append(client.V1LocalObjectReference(name="openclaw-acr-secret")) + pod_spec = client.V1PodSpec( containers=[container], restart_policy="Always", - image_pull_secrets=[client.V1LocalObjectReference(name="acr-secret")] + image_pull_secrets=image_pull_secrets ) # 构建标签(合并默认标签和用户自定义标签)