在 Amazon EKS 上部署 OpenClaw Operator 和 AI Agent 实例。支持 AWS 全球区域(us-west-2、us-east-1 等)和 AWS 中国区域(cn-northwest-1、cn-north-1)。
| 工具 | 版本要求 | 验证命令 |
|---|---|---|
| AWS CLI | >= 2.27 | aws --version |
| kubectl | >= 1.28 | kubectl version --client |
| Terraform | >= 1.3 | terraform --version |
| Docker | >= 20.0 | docker --version |
| Helm | >= 3.12 | helm version |
使用 EKS Pod Identity(非 IRSA)进行 AWS 权限管理。Terraform 会作为 Managed Addon 自动安装。
AWS 中国区域(cn-northwest-1、cn-north-1)存在网络限制:
| 要求 | 原因 | 处理方式 |
|---|---|---|
| 镜像同步至中国区 ECR | ghcr.io、Docker Hub 不可访问 |
运行 china-image-mirror.sh 在 terraform apply 之前 |
| 第三方模型提供商 | Amazon Bedrock 不在中国区域运营 | 使用 LiteLLM 代理或直接 API Key |
| AWS 中国账户 | 独立分区(aws-cn) |
需要单独的 IAM 凭证 |
| AWS CLI Profile | 中国账户需要独立的 Profile | aws configure --profile china |
以下表格列出所有被中国区域防火墙阻断或受影响的外部网络依赖:
| 依赖类型 | 来源地址 | 用途 | 阻断级别 | 解决方案 |
|---|---|---|---|---|
| Helm Chart (OCI) | oci://ghcr.io/openclaw-rocks/charts |
OpenClaw Operator | 完全阻断 | china-image-mirror.sh 同步至 ECR,TF 自动使用 chart_repository |
| Helm Chart (OCI) | oci://ghcr.io/kata-containers/kata-deploy-charts |
Kata Containers(可选) | 完全阻断 | 同上 |
| Helm Chart (OCI) | oci://ghcr.io/berriai/litellm-helm |
LiteLLM 代理(可选) | 完全阻断 | 同上 |
| Helm Chart (HTTPS) | https://aws.github.io/eks-charts |
ALB Controller(可选) | 间歇性慢 | GitHub Pages 通常可达;超时则需 VPN |
| 容器镜像 | ghcr.io/* |
OpenClaw、Operator、uv、Tailscale | 完全阻断 | china-image-mirror.sh 同步 + spec.registry 重写 |
| 容器镜像 | Docker Hub (docker.io) |
nginx、OTel、chromium、ollama、ttyd、rclone、busybox | 完全阻断 | 同上 |
| 容器镜像 | quay.io |
Kata Containers 默认镜像 | 完全阻断 | TF 模块已重写至 public.ecr.aws |
| 容器镜像 | public.ecr.aws |
监控栈、Karpenter、LiteLLM、Kata、ALB Controller 镜像 | 可访问(AWS 服务) | 无需额外操作 |
| EKS Managed Addons | AWS 内部 | EBS/EFS CSI、Pod Identity Agent | 可访问 | 无需额外操作 |
| Terraform Registry | registry.terraform.io |
Provider 下载 | 可访问 | 无需额外操作 |
| npm Registry | registry.npmjs.org |
Operator init-skills(运行时) | 完全阻断 | 避免在 CRD 中使用 spec.skills(npm 前缀);或预装至镜像 |
| GitHub API | api.github.com |
Operator init-skills(pack: 前缀) | 完全阻断 | 避免使用 pack: 前缀的 skills |
重要:
terraform apply需要拉取 Helm Chart。在中国区域运行 Terraform 时,必须先执行china-image-mirror.sh将 Helm Chart 同步至 ECR,Terraform 会自动使用 ECR 作为 Chart 仓库。在全球区域运行 Terraform(远程连接中国 EKS API Server)则无此限制。
以下列出所有 Terraform 模块安装的 Helm Chart 及其使用的容器镜像。public.ecr.aws 上的镜像可从中国区域直接拉取(AWS 全球服务),无需额外同步。
| Helm Chart | Chart 来源 | 容器镜像(上游) | 镜像来源 | 中国可用 |
|---|---|---|---|---|
| openclaw-operator | oci://ghcr.io/openclaw-rocks/charts |
ghcr.io/openclaw-rocks/openclaw-operator:v0.26.2 |
ghcr.io | 需同步 |
| aws-load-balancer-controller | https://aws.github.io/eks-charts |
public.ecr.aws/eks/aws-load-balancer-controller:v3.2.1 |
ECR Public | 可直接拉取 |
| kube-prometheus-stack | https://prometheus-community.github.io/helm-charts |
quay.io/prometheus/prometheus:v2.54.1 |
quay.io | 需同步 |
quay.io/prometheus-operator/prometheus-operator:v0.77.1 |
quay.io | 需同步 | ||
quay.io/prometheus-operator/prometheus-config-reloader:v0.77.1 |
quay.io | 需同步 | ||
registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20221220-... |
registry.k8s.io | 需同步 | ||
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.13.0 |
registry.k8s.io | 需同步 | ||
quay.io/prometheus/node-exporter:1.8.2 |
quay.io | 需同步 | ||
| grafana | https://grafana.github.io/helm-charts |
docker.io/grafana/grafana:11.2.1 |
Docker Hub | 需同步 |
quay.io/kiwigrid/k8s-sidecar:1.27.4 |
quay.io | 需同步 | ||
| karpenter | oci://public.ecr.aws/karpenter |
public.ecr.aws/karpenter/controller:1.7.4 |
ECR Public | 可直接拉取 |
| kata-deploy | oci://ghcr.io/kata-containers/kata-deploy-charts |
quay.io/kata-containers/kata-deploy:3.27.0 |
quay.io | 需同步 |
| litellm | oci://ghcr.io/berriai/litellm-helm |
docker.litellm.ai/berriai/litellm:main-latest |
docker.litellm.ai | 需同步 |
public.ecr.aws/bitnami/postgresql:latest |
ECR Public | 可直接拉取 |
结论:
china-image-mirror.sh会将所有上游镜像同步至中国区私有 ECR,Terraform 自动为中国区域使用 ECR 镜像。仅public.ecr.aws上的镜像(ALB Controller、Karpenter、PostgreSQL)无需额外同步。
Amazon Bedrock 不在 AWS 中国区域运营。两种替代方案:
-
LiteLLM 代理(推荐):在同一集群部署(Terraform 设置
enable_litellm = true)。提供 OpenAI 兼容接口,可路由至任意模型提供商。 -
直接 API Key:创建 Kubernetes Secret 并在 OpenClawInstance CRD 中引用:
kubectl -n openclaw create secret generic model-api-keys \
--from-literal=ANTHROPIC_API_KEY=sk-ant-...
kubectl -n openclaw patch openclawinstance AGENT名称 --type=merge \
-p '{"spec":{"envFrom":[{"secretRef":{"name":"model-api-keys"}}]}}'在具有良好国际网络的机器上运行(如全球区域的 EC2 实例):
bash eks/scripts/china-image-mirror.sh \
--region cn-northwest-1 \
--name openclaw-cn \
--profile china该脚本同步全部容器镜像至中国区 ECR,并同步 Helm Chart OCI 制品:
容器镜像(11 个):
| 镜像 | 用途 | 来源 |
|---|---|---|
ghcr.io/openclaw/openclaw:2026.4.2 |
OpenClaw 主容器 + init 容器 | ghcr.io |
ghcr.io/astral-sh/uv:0.6-bookworm-slim |
Python 依赖安装 Init 容器 | ghcr.io |
busybox:1.37 |
配置文件复制 Init 容器(overwrite 模式) | Docker Hub |
nginx:1.27-alpine |
Gateway 代理 Sidecar | Docker Hub |
otel/opentelemetry-collector:0.120.0 |
可观测性 Sidecar | Docker Hub |
chromedp/headless-shell:stable |
浏览器自动化 Sidecar | Docker Hub |
ghcr.io/tailscale/tailscale:latest |
Tailscale VPN Sidecar | ghcr.io |
ollama/ollama:latest |
本地 LLM 推理 Sidecar | Docker Hub |
tsl0922/ttyd:latest |
Web 终端 Sidecar | Docker Hub |
rclone/rclone:1.68 |
S3 备份/恢复 Job | Docker Hub |
ghcr.io/openclaw-rocks/openclaw-operator:v0.26.2 |
Operator 本身 | ghcr.io |
Helm Chart OCI 制品(1-3 个):
| Chart | 用途 | 来源 |
|---|---|---|
oci://ghcr.io/openclaw-rocks/charts/openclaw-operator |
Operator 部署(必需) | ghcr.io |
oci://ghcr.io/kata-containers/kata-deploy-charts/kata-deploy |
Kata Containers(可选) | ghcr.io |
oci://ghcr.io/berriai/litellm-helm/litellm-helm |
LiteLLM 代理(可选) | ghcr.io |
创建完整基础设施:VPC、EKS 集群、EFS 存储、OpenClaw Operator,以及可选的 ALB Controller、Kata Containers、监控栈和 LiteLLM。
中国区域必须在
terraform apply之前执行此步骤。 所有上游镜像仓库(ghcr.io、quay.io、Docker Hub、registry.k8s.io)均被阻断。脚本会将所有镜像和 Helm Chart 同步至 ECR。跳过此步骤将导致terraform apply失败。
bash eks/scripts/china-image-mirror.sh --region cn-northwest-1 --name openclaw-cn --profile china全球区域直接从上游拉取,无需同步。
全球区域:
cd eks/terraform
terraform init
terraform apply \
-var="name=openclaw-prod" \
-var="region=us-west-2" \
-var="architecture=arm64" \
-var="enable_efs=true"中国区域:
cd eks/terraform
terraform workspace new china
terraform init
AWS_PROFILE=china terraform apply \
-var="name=openclaw-cn" \
-var="region=cn-northwest-1" \
-var="architecture=arm64" \
-var="enable_efs=true"# 全球区域
aws eks --region us-west-2 update-kubeconfig --name openclaw-prod
# 中国区域
AWS_PROFILE=china aws eks --region cn-northwest-1 update-kubeconfig --name openclaw-cn| 变量 | 默认值 | 说明 |
|---|---|---|
name |
openclaw-eks |
集群和资源名称前缀 |
region |
us-west-2 |
AWS 区域(自动检测 cn- 前缀为中国区) |
architecture |
arm64 |
arm64(Graviton)或 x86 |
enable_efs |
true |
启用 EFS 持久化存储(设为默认 StorageClass) |
enable_alb_controller |
false |
启用 AWS Load Balancer Controller(ALB Ingress) |
enable_kata |
false |
启用 Kata Containers(Firecracker 虚拟机隔离) |
enable_monitoring |
false |
启用 Prometheus + Grafana 监控栈 |
enable_litellm |
false |
启用 LiteLLM 代理(中国区域必需) |
Terraform 完成后,通过 kubectl 部署 AI Agent 实例。
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: my-agent
namespace: openclaw
spec:
image:
tag: "2026.4.2"
config:
raw:
models:
providers:
amazon-bedrock:
baseUrl: "https://bedrock-runtime.us-west-2.amazonaws.com"
models:
- id: us.amazon.nova-2-lite-v1:0
name: Nova 2 Lite
contextWindow: 300000
maxTokens: 5120
agents:
defaults:
model:
primary: amazon-bedrock/us.amazon.nova-2-lite-v1:0
gateway:
enabled: true
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
storage:
persistence:
size: 5Gikubectl apply -f my-agent.yaml
kubectl get pods -n openclaw -w添加 spec.registry 将所有镜像地址重写到中国区 ECR:
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: my-agent
namespace: openclaw
spec:
image:
tag: "2026.4.2"
registry: "ACCOUNT.dkr.ecr.cn-northwest-1.amazonaws.com.cn"
config:
raw:
models:
providers:
amazon-bedrock:
baseUrl: "https://bedrock-runtime.us-west-2.amazonaws.com"
models:
- id: us.amazon.nova-2-lite-v1:0
name: Nova 2 Lite
contextWindow: 300000
maxTokens: 5120
agents:
defaults:
model:
primary: amazon-bedrock/us.amazon.nova-2-lite-v1:0
gateway:
enabled: true
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
storage:
persistence:
size: 5Gikubectl apply -f my-agent.yaml
kubectl get pods -n openclaw -w如果部署了 LiteLLM(enable_litellm = true),将 Agent 指向集群内端点:
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: my-agent
namespace: openclaw
spec:
image:
tag: "2026.4.2"
registry: "ACCOUNT.dkr.ecr.cn-northwest-1.amazonaws.com.cn"
config:
raw:
models:
providers:
litellm:
baseUrl: "http://litellm.litellm.svc:4000/v1"
apiKey: "not-needed"
models:
- id: bedrock/claude-sonnet
name: Claude Sonnet
contextWindow: 200000
maxTokens: 8192
agents:
defaults:
model:
primary: litellm/bedrock/claude-sonnet
gateway:
enabled: true
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
storage:
persistence:
size: 5Gi# 列出实例
kubectl get openclawinstances -n openclaw
# 查看 Pod 状态
kubectl get pods -n openclaw
# 查看日志
kubectl logs -n openclaw my-agent-0 -c openclaw --tail=50
# 删除实例
kubectl delete openclawinstance my-agent -n openclaw参见 eks/manifests/examples/ 目录下的预置示例:
openclaw-bedrock-instance.yaml— 标准 Bedrock 实例openclaw-kata-instance.yaml— 使用 Firecracker 虚拟机隔离的实例openclaw-slack-instance.yaml— 集成 Slack Bot 的实例
┌────────────────────────────────────────────────────────┐
│ EKS 集群 │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ openclaw 命名空间 │ │
│ │ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ OpenClawInstance │ │ OpenClawInstance │ ... │ │
│ │ │ StatefulSet + Svc │ │ StatefulSet + Svc │ │ │
│ │ │ + PVC (EFS) │ │ + PVC (EFS) │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ openclaw-operator-system 命名空间 │ │
│ │ OpenClaw Operator(监听 CRD → 创建 K8s 资源) │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────┬──────────────────────────────┘
│
┌──────────┴──────────┐
│ AWS 服务 │
│ Bedrock EFS │
│ ECR IAM │
└─────────────────────┘
| 运行时 | 隔离级别 | 存储 | 镜像来源 |
|---|---|---|---|
| EKS Pod | cgroups / 命名空间 | EFS | ghcr.io(全球)/ ECR 镜像(中国) |
| EKS + Kata | Firecracker 微虚拟机 | EFS | 同上,加 runtimeClass: kata-qemu |
| 运行时 | 内核 | Prompt 注入风险 |
|---|---|---|
| EKS Pod | 共享宿主机内核 | 内核漏洞理论上可利用 |
| EKS + Kata | 独立 Firecracker 虚拟机 | 容器逃逸不可能 |
生产环境如有不可信代码执行需求,建议启用 Kata Containers(enable_kata = true)。
镜像无法从被阻断的仓库拉取。在 OpenClawInstance 中设置 spec.registry:
spec:
registry: "ACCOUNT.dkr.ecr.cn-northwest-1.amazonaws.com.cn"未设置默认 StorageClass。Terraform 自动将 EFS 设为默认。手动部署的集群需执行:
kubectl annotate storageclass efs-sc \
storageclass.kubernetes.io/is-default-class=truekubectl get deployment -n openclaw-operator-system
kubectl logs -n openclaw-operator-system deployment/openclaw-operator# 检查 addon
kubectl get pods -n kube-system -l app.kubernetes.io/name=eks-pod-identity-agent
# 检查关联
aws eks list-pod-identity-associations \
--cluster-name 集群名称 --namespace openclaw --region 区域中国区域(cn-northwest-1、cn-north-1)无法直接访问 ghcr.io、Docker Hub 等境外镜像仓库。以下说明如何在 仅有中国区域 EC2 实例 的情况下完成部署,所有境外资源通过本地 PC 中转。
| 环境 | 网络条件 |
|---|---|
| 本地 PC(Windows/Mac) | 可访问 GitHub、ghcr.io、Docker Hub |
| 中国 EC2 实例 | 无法访问 ghcr.io/Docker Hub;可访问同区域 S3 和 ECR |
| EKS 集群节点 | 仅可拉取同区域 ECR 镜像 |
本地 PC 需安装:
| 工具 | 用途 | 下载 |
|---|---|---|
| Docker Desktop | 拉取和保存镜像 | https://www.docker.com/products/docker-desktop |
| AWS CLI v2 | 上传到 S3 | https://aws.amazon.com/cli |
| Git | 克隆仓库 | https://git-scm.com |
中国 EC2 实例需安装:
| 工具 | 用途 |
|---|---|
| Docker | 加载和推送镜像到 ECR |
| AWS CLI v2 | S3 下载、ECR 操作 |
| kubectl | 集群管理 |
| Terraform >= 1.3 | 基础设施部署 |
| Helm >= 3.12 | 应用部署 |
# 克隆仓库
git clone https://github.com/aws-samples/sample-OpenClaw-on-AWS-with-Bedrock.git
cd sample-OpenClaw-on-AWS-with-Bedrock
# 打包项目(含 Terraform 模块、脚本)
tar czf openclaw-eks-project.tar.gz eks/ docs/ CLAUDE.md README.md根据 EKS 节点架构选择 --platform(Graviton 用 linux/arm64,Intel/AMD 用 linux/amd64)。
PLATFORM="linux/arm64" # Graviton 节点
# PLATFORM="linux/amd64" # Intel/AMD 节点
# 核心镜像(必需)
docker pull --platform $PLATFORM ghcr.io/openclaw/openclaw:2026.4.2
docker pull --platform $PLATFORM ghcr.io/astral-sh/uv:0.6-bookworm-slim
docker pull --platform $PLATFORM busybox:1.37
docker pull --platform $PLATFORM nginx:1.27-alpine
docker pull --platform $PLATFORM otel/opentelemetry-collector:0.120.0
docker pull --platform $PLATFORM ghcr.io/openclaw-rocks/openclaw-operator:v0.26.2
# 可选 sidecar 镜像
docker pull --platform $PLATFORM chromedp/headless-shell:stable # 浏览器沙箱
docker pull --platform $PLATFORM rclone/rclone:1.68 # 备份/恢复
docker pull --platform $PLATFORM tsl0922/ttyd:latest # Web 终端
docker pull --platform $PLATFORM ghcr.io/tailscale/tailscale:latest # VPN
# 拉取 Helm Chart OCI 制品(Terraform 部署需要)
helm pull oci://ghcr.io/openclaw-rocks/charts/openclaw-operator --version 0.26.2 --destination .
# 如使用 Kata/LiteLLM 模块,取消注释:
# helm pull oci://ghcr.io/kata-containers/kata-deploy-charts/kata-deploy --version 3.27.0 --destination .
# helm pull oci://ghcr.io/berriai/litellm-helm/litellm-helm --destination .
# 保存为 tar.gz(批量打包减少传输次数)
docker save \
ghcr.io/openclaw/openclaw:2026.4.2 \
ghcr.io/astral-sh/uv:0.6-bookworm-slim \
busybox:1.37 \
nginx:1.27-alpine \
otel/opentelemetry-collector:0.120.0 \
ghcr.io/openclaw-rocks/openclaw-operator:v0.26.2 \
| gzip > core-images.tar.gz
docker save \
chromedp/headless-shell:stable \
rclone/rclone:1.68 \
tsl0922/ttyd:latest \
ghcr.io/tailscale/tailscale:latest \
| gzip > sidecar-images.tar.gzS3 多部分上传比直接 docker push 跨境更可靠、可断点续传。
# 配置中国区域 AWS CLI profile(如尚未配置)
aws configure --profile china
# Region: cn-northwest-1
# Output: json
S3_BUCKET="你的中国S3桶名" # 使用已有桶或先创建一个
# 上传镜像文件、Helm Chart 和项目包
aws s3 cp core-images.tar.gz s3://$S3_BUCKET/openclaw-deploy/ --profile china --region cn-northwest-1
aws s3 cp sidecar-images.tar.gz s3://$S3_BUCKET/openclaw-deploy/ --profile china --region cn-northwest-1
aws s3 cp openclaw-eks-project.tar.gz s3://$S3_BUCKET/openclaw-deploy/ --profile china --region cn-northwest-1
# Helm Chart OCI 制品
aws s3 cp openclaw-operator-0.26.2.tgz s3://$S3_BUCKET/openclaw-deploy/ --profile china --region cn-northwest-1提示: 跨境 S3 上传速度约 1-2 MiB/s。核心镜像(~1GB)约需 15-20 分钟。上传完成后,中国区域内 S3 到 EC2 下载速度可达 200+ MiB/s。
S3_BUCKET="你的中国S3桶名"
REGION="cn-northwest-1"
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
ECR="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com.cn"
# 下载文件(同区域,速度很快)
aws s3 cp s3://$S3_BUCKET/openclaw-deploy/ /tmp/openclaw-deploy/ --recursive
cd ~ && tar xzf /tmp/openclaw-deploy/openclaw-eks-project.tar.gz
# 加载 Docker 镜像
gunzip -c /tmp/openclaw-deploy/core-images.tar.gz | docker load
gunzip -c /tmp/openclaw-deploy/sidecar-images.tar.gz | docker load
# 登录 ECR
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ECR
helm registry login "$ECR" --username AWS \
--password "$(aws ecr get-login-password --region $REGION)"
# 创建 ECR 仓库(幂等操作)
for repo in openclaw/openclaw astral-sh/uv library/busybox library/nginx \
otel/opentelemetry-collector openclaw-rocks/openclaw-operator \
chromedp/headless-shell rclone/rclone tsl0922/ttyd \
tailscale/tailscale charts/openclaw-operator; do
aws ecr create-repository --repository-name $repo --region $REGION 2>/dev/null || true
done
# 标记并推送核心镜像
docker tag ghcr.io/openclaw/openclaw:2026.4.2 $ECR/openclaw/openclaw:2026.4.2
docker tag ghcr.io/astral-sh/uv:0.6-bookworm-slim $ECR/astral-sh/uv:0.6-bookworm-slim
docker tag busybox:1.37 $ECR/library/busybox:1.37
docker tag nginx:1.27-alpine $ECR/library/nginx:1.27-alpine
docker tag otel/opentelemetry-collector:0.120.0 $ECR/otel/opentelemetry-collector:0.120.0
docker tag ghcr.io/openclaw-rocks/openclaw-operator:v0.26.2 $ECR/openclaw-rocks/openclaw-operator:v0.26.2
for img in openclaw/openclaw:2026.4.2 astral-sh/uv:0.6-bookworm-slim \
library/busybox:1.37 library/nginx:1.27-alpine \
otel/opentelemetry-collector:0.120.0 \
openclaw-rocks/openclaw-operator:v0.26.2; do
docker push $ECR/$img
done
# 推送可选 sidecar 镜像
docker tag chromedp/headless-shell:stable $ECR/chromedp/headless-shell:stable
docker tag rclone/rclone:1.68 $ECR/rclone/rclone:1.68
docker tag tsl0922/ttyd:latest $ECR/tsl0922/ttyd:latest
docker tag ghcr.io/tailscale/tailscale:latest $ECR/tailscale/tailscale:latest
for img in chromedp/headless-shell:stable rclone/rclone:1.68 \
tsl0922/ttyd:latest tailscale/tailscale:latest; do
docker push $ECR/$img
done
# 推送 Helm Chart OCI 制品
helm push /tmp/openclaw-deploy/openclaw-operator-0.26.2.tgz oci://$ECR/charts
echo "所有镜像和 Helm Chart 已推送到 $ECR"前置条件: 步骤 4 必须已完成(所有容器镜像和 Helm Chart 已推送至中国区 ECR)。否则
terraform apply将因无法拉取镜像/Chart 而失败。
cd ~/eks/terraform
# 初始化(Terraform provider 从 HashiCorp registry 下载,中国区域可访问)
terraform workspace new china 2>/dev/null || terraform workspace select china
terraform init -input=false
# 部署
terraform apply -auto-approve \
-var="region=cn-northwest-1" \
-var="name=openclaw-cn" \
-var="architecture=arm64" \
-var="enable_efs=true"注意: 首次 apply 可能因 EKS access entry 传播延迟报 K8s 权限错误,重新执行
terraform apply即可。如 Helm release 卡住,执行helm uninstall <name> -n <ns>清理后重试。
# 配置 kubectl
aws eks --region cn-northwest-1 update-kubeconfig --name openclaw-cn
# 检查节点和 Pod
kubectl get nodes
kubectl get pods -A
# 部署 OpenClaw 实例(编辑 manifest 中的 spec.registry 指向中国区 ECR)
kubectl apply -f eks/manifests/examples/openclaw-bedrock-instance.yaml后续更新镜像时,重复步骤 2-4(仅拉取变更的镜像)。也可使用 china-image-mirror.sh 的 --platform 参数:
# 在可访问境外 registry 的机器上
bash eks/scripts/china-image-mirror.sh \
--region cn-northwest-1 \
--name openclaw-cn \
--profile china \
--platform linux/arm64 \
--mirror部署所需的完整文件列表:
| 文件 | 大小(约) | 说明 |
|---|---|---|
openclaw-eks-project.tar.gz |
~5 MB | Terraform 模块、脚本 |
core-images.tar.gz |
~1 GB | OpenClaw + operator + busybox + 基础镜像 |
sidecar-images.tar.gz |
~100 MB | 可选 sidecar(不含 ollama) |
openclaw-operator-0.26.2.tgz |
~50 KB | Operator Helm Chart OCI 制品 |
| 合计 | ~1.1 GB |
ollama/ollama镜像(~3.4 GB)体积过大,建议仅在需要本地 LLM 推理时单独传输。