跳到主要内容

安装

Testudo 推荐通过 testudo-chart Helm Chart 一次性安装控制面。Chart 会部署三类组件:

  • disaster-operator:监听 CRD 并执行容灾调谐。
  • disaster-server:提供 REST API、Watch API、认证、统计和事件聚合。
  • disaster-web:提供平台控制台,并通过集群内地址代理访问 server。

默认拓扑是 disaster-webNodePort 暴露,端口为 30087disaster-serverClusterIP 暴露,端口为 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/install
  • disasterctl license install

如果必须通过 Helm 预置 License,只能在私有 values 文件中设置 license.secret.create=true 并写入正式签发的 License JSON。不要把 License 内容提交到公开仓库。

下一步

继续阅读 注册集群配置存储创建第一个容灾实例