安装
Testudo 推荐通过 testudo-chart Helm Chart 一次性安装控制面。Chart 会部署三类组件:
disaster-operator:监听 CRD 并执行容灾调谐。disaster-server:提供 REST API、Watch API、认证、统计和事件聚合。disaster-web:提供平台控制台,并通过集群内地址代理访问 server。
默认拓扑是 disaster-web 以 NodePort 暴露,端口为 30087;disaster-server 以 ClusterIP 暴露,端口为 30081;控制台访问后端的默认地址为 http://disaster-server:30081。
前置条件
- Kubernetes 集群可用,
kubectl已指向管理集群。 - Helm v3 已安装。
- 目标节点可以拉取默认 Docker Hub 公共镜像,或已经提前导入镜像。
- 如果默认启用 webhook,集群中需要有 cert-manager;没有 cert-manager 时应关闭
webhook.certManager.enabled并按生产要求提供 webhook TLS 证书和 CA bundle。 - 使用私有镜像仓库时,需要提前准备镜像拉取 Secret;默认 Docker Hub 公共镜像不需要 Secret。
一条命令安装
添加 Helm 仓库并安装:
helm repo add testudo https://github.com/Softcdata/testudo-chart/releases/download/helm-repo
helm repo update
helm upgrade --install testudo testudo/testudo-chart \
-n disaster-system \
--create-namespace
默认安装会从 Docker Hub 拉取公共镜像。国内网络可以使用随 Helm release 一起发布的阿里云 ACR 公共镜像 values 文件加速拉取:
helm upgrade --install testudo testudo/testudo-chart \
-n disaster-system \
--create-namespace \
-f https://github.com/Softcdata/testudo-chart/releases/download/helm-repo/values-aliyun.yaml
安装完成后通过任意 Kubernetes 节点访问控制台:
http://<NodeIP>:30087
进入平台后可以看到首页总览、任务状态、备份/恢复任务和存储用量等信息。

私有镜像仓库
默认安装使用公开镜像,不需要镜像拉取 Secret。如果你把镜像同步到了私有仓库,先创建私有仓库凭据:
kubectl create namespace disaster-system
kubectl -n disaster-system create secret docker-registry default-secret \
--docker-server=<registry.example.com> \
--docker-username=<username> \
--docker-password='<password>' \
--docker-email=<email@example.com>
安装时复用该 Secret,并覆盖镜像仓库地址:
helm upgrade --install testudo testudo/testudo-chart \
-n disaster-system \
--create-namespace \
--set imagePullSecret.existingSecret=default-secret \
--set images.operator.repository=<registry.example.com>/softcdata/testudo-operator \
--set images.server.repository=<registry.example.com>/softcdata/testudo-server \
--set images.web.repository=<registry.example.com>/softcdata/testudo-web
在 CI 或生产环境中,建议把 Secret 创建交给集群凭据管理流程,不要把账号密码提交到 Git 仓库。
自定义命名空间
Chart 中资源的 metadata.namespace 来自 global.namespace。如果 Helm release 安装到自定义命名空间,必须同时设置 global.namespace:
helm upgrade --install testudo testudo/testudo-chart \
-n demo \
--create-namespace \
--set global.namespace=demo
常用 values
生产环境通常会把可变配置写入私有 values 文件:
global:
namespace: disaster-system
web:
service:
type: NodePort
port: 80
nodePort: 30087
server:
service:
type: ClusterIP
port: 30081
webhook:
enabled: true
certManager:
enabled: true
license:
enabled: true
secret:
create: false
如果目标集群没有 cert-manager,可以先关闭 cert-manager 集成:
helm upgrade --install testudo testudo/testudo-chart \
-n disaster-system \
--create-namespace \
--set webhook.certManager.enabled=false
关闭 cert-manager 后,webhook TLS Secret 和 webhook.caBundle 需要由运维流程显式提供;生产环境不建议长期跳过 webhook 证书治理。
验证安装
检查 Helm release:
helm ls -n disaster-system
检查 Pod、Service 和默认端口:
kubectl get pods,svc -n disaster-system
检查 CRD 是否注册:
kubectl api-resources | grep testudo.softcdata.com
检查控制台访问:
curl -I http://<NodeIP>:30087
如果使用本地端口转发,也可以临时访问:
kubectl -n disaster-system port-forward svc/disaster-web 8087:80
然后打开:
http://127.0.0.1:8087
License
默认安装不会通过 Helm 创建真实 License Secret。推荐在安装完成后通过平台接口或配套 CLI 安装正式 License:
POST /apis/v1/platform-license/installdisasterctl license install
如果必须通过 Helm 预置 License,只能在私有 values 文件中设置 license.secret.create=true 并写入正式签发的 License JSON。不要把 License 内容提交到公开仓库。