feat: support multiple ACR registries (openclawacr)

This commit is contained in:
zhanggangyong
2026-02-02 16:42:05 +00:00
parent 1e07e855d8
commit 749e97cbe2
+41 -32
View File
@@ -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
)
# 构建标签(合并默认标签和用户自定义标签)