Mehrstufiger Docker-Build · K8s-Manifeste · macOS-Knotenbetreiber · HPA-Autoskalierung mit Warteschlangentiefe
Läuft Ihr OpenClaw noch nativ? Angesichts der Anforderungen der Zusammenarbeit mehrerer Teams, der elastischen Skalierung und der regionsübergreifenden Bereitstellung greift die herkömmliche Installation zu kurz. Dieser Leitfaden bietet eine Vollständiger Containerisierungs- und K8s-Orchestrierungsplan: Wie man OpenClaw in ein Standard-Docker-Image umwandelt, es mit dem Kubernetes-Operator auf macOS-Knoten bereitstellt und die automatische Skalierung mit HPA basierend auf benutzerdefinierten Metriken implementiert. Beinhaltet mehrstufige Build-Optimierung, privilegierte macOS-Konfiguration und Kosten-Elastizitäts-Kompromissmatrix.
Bei der Umstellung von OpenClaw vom lokalen Knoten auf Docker und dann auf Kubernetes geht es nicht darum, Trends hinterherzujagen – es löst echte Schwachstellen in der Produktion.
Inkonsistente Umgebungen: Verschiedene Entwickler/CI-Knoten haben unterschiedliche Knoten-/NPM-Versionen, was zu Problemen mit der Funktion „Funktioniert auf meinem Computer“ führt. Container garantieren eine identische Laufzeit.
Skalierungsineffizienz: Natives OpenClaw kann nicht schnell repliziert werden. Wenn die Aufgabenwarteschlangen wachsen, ist die manuelle Instanzerstellung zu langsam.
Schwierigkeiten bei der regionsübergreifenden Bereitstellung: Die manuelle Bereitstellung auf mehreren Remote-Mac-Knoten ist fehleranfällig. Die deklarative Konfiguration von K8 ermöglicht einen konsistenten Rollout in mehreren Regionen.
Langsam故障恢复: Knotenfehler erfordert manuelle Neuinstallation. Orchestrator erkennt und plant automatisch neu, wodurch die MTTR drastisch reduziert wird.
Geringe Ressourcenauslastung: Jede Instanz reserviert eine ganze Maschine. K8s ermöglicht die gemeinsame Nutzung mehrerer Mandanten und Ressourcenkontingente und verbessert so die Gesamteffizienz.
Vorteile der Containerisierung: DevOps-Umfragen aus dem Jahr 2026 zeigen, dass containerisierte KI-Agent-Dienste den Arbeitsaufwand um 70 % reduzieren und die Ressourcennutzung um über 40 % verbessern.
Bevor Sie eine Docker-Datei schreiben, externalisieren Sie die OpenClaw-Konfiguration vom Dateisystem in Umgebungsvariablen und externen Speicher – dies ist der wichtigste erste Schritt.
| Original (Datei) | Containerisierter Ansatz | Notizen |
|---|---|---|
openclaw.json API-Schlüssel | ConfigMap/Geheimnis | Für sensible Daten muss K8s Secret oder ein externer Tresor verwendet werden |
storage.type = "file" | Wechseln zu redis oder Cloud-Speicher | Das Container-Dateisystem ist kurzlebig. Der Staat muss externalisiert werden |
gateway.address = "0.0.0.0:8080" | Umgebungsvar GATEWAY_ADDR | Portzuordnung über Docker -p oder K8s-Service |
skills lokaler Pfad | ConfigMap oder Sidecar-Container | Für eine einfache Aktualisierung sollten die Fertigkeiten unabhängig vom Bild sein |
logs in die lokale Datei | stdout/stderr + Beiwagensammler | Folgen Sie 12FA: Melden Sie sich bei der Konsole an |
Kernänderung: machen openclaw.json aus Umgebungsvariablen lesen. Beispiel:
{
"storage": {
"type": "redis",
"host": "${REDIS_HOST}",
"port": 6379,
"password": "${REDIS_PASSWORD}"
},
"gateway": {
"address": "${GATEWAY_ADDR}",
"adminPort": "${ADMIN_PORT}"
},
"llm": {
"provider": "${LLM_PROVIDER}",
"apiKey": "${LLM_API_KEY}"
}
}
Ein effizientes, sicheres Docker-Image ist die Grundlage für die K8s-Orchestrierung. Verwenden Sie mehrstufige Builds, um die Größe zu verringern, die Sicherheit zu erhöhen und Gesundheitsprüfungen hinzuzufügen.
Wählen Sie ein minimales Basisbild: Verwenden Sie offizielle Node.js (z. B. node:18-alpine) zur Laufzeit, kein vollständiges Betriebssystem, um die Angriffsfläche zu verringern.
Mehrstufiger Aufbau: Stufe 1 installiert Deps und kompiliert; Stufe 2 enthält nur Laufzeitdateien, wodurch die Bildgröße um mehr als 60 % reduziert wird.
Nicht-Root-Benutzer: Dediziert erstellen openclaw Benutzer in Dockerfile und wechseln Sie mit USER; Vermeiden Sie Root im Container.
Gesundheitscheck hinzufügen: Deklarieren HEALTHCHECK Ich rufe OpenClaw an /health Endpunkt, damit K8s die Bereitschaft überwachen können.
Port freigeben: Verwenden EXPOSE 8080; Der K8s-Dienst leitet den Datenverkehr entsprechend weiter.
Layer-Optimierung: Abhängigkeitsinstallation von der Quellkopie trennen, um den Cache zu nutzen; verwenden npm ci --only=production um Entwicklungs-Deps vom Produktions-Image auszuschließen.
# Build stage
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Runtime stage
FROM node:18-alpine
WORKDIR /app
RUN addgroup -g 1001 -S openclaw && adduser -u 1001 -S openclaw -G openclaw
COPY --from=builder --chown=openclaw:openclaw /app/dist ./dist
COPY --from=builder --chown=openclaw:openclaw /app/node_modules ./node_modules
COPY --from=builder --chown=openclaw:openclaw /app/package*.json ./
USER openclaw
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD node -e "require('http').get('http://localhost:8080/health', (r) => {if(r.statusCode!==200)throw new Error('unhealthy')})"
CMD ["node", "dist/index.js"]
Für die vollständige Kubernetes-Bereitstellung ist die Zusammenarbeit mehrerer Ressourcen erforderlich. Nachfolgend finden Sie den Mindestsatz zum Ausführen von OpenClaw auf Remote-Mac-Knoten.
| Ressource | Zweck | Schlüsselfelder |
|---|---|---|
| Bereitstellung | Verwaltet Pod-Replikate und fortlaufende Updates | Repliken, Strategie, Vorlage |
| Service | Interner Lastausgleich und DNS | Typ (ClusterIP), Ports, Selektor |
| Eindringen | Externes HTTP/HTTPS-Routing | Regeln, Host, Pfad, Backend-Dienst |
| ConfigMap | Nicht sensibler Konfigurationsspeicher | Daten, unveränderlich |
| Geheimnis | Vertrauliche Informationen (API-Schlüssel, Passwörter) | Typ: Undurchsichtig, Daten (base64) |
Das folgende YAML-Beispiel zeigt ein vollständiges K8s-Setup für OpenClaw. Geheimnisse müssen separat erstellt werden.
apiVersion: apps/v1
kind: Deployment
metadata:
name: openclaw
labels:
app: openclaw
spec:
replicas: 2
selector:
matchLabels:
app: openclaw
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: openclaw
spec:
containers:
- name: openclaw
image: your-registry/openclaw:latest
ports:
- containerPort: 8080
env:
- name: GATEWAY_ADDR
value: "0.0.0.0:8080"
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: openclaw-config
key: redis.host
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: openclaw-secret
key: redis.password
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 30
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: openclaw
spec:
selector:
app: openclaw
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: openclaw
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: openclaw.vpsmesh.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: openclaw
port:
number: 80
---
apiVersion: v1
kind: ConfigMap
metadata:
name: openclaw-config
data:
redis.host: "redis-cluster.vpsmesh.com"
llm.provider: "openai"
Kubernetes läuft normalerweise unter Linux; Die Bereitstellung unter macOS erfordert die Handhabung von Hardwarebindung, Berechtigungen und Geräte-Plugins. Ein benutzerdefinierter Operator kapselt diese Komplexität.
node-role.kubernetes.io/macos=true) und Affinitätsregeln zum Planen von Pods auf Mac-Knoten.securityContext.privileged: true oder allowPrivilegeEscalation: true, aber beschränken Sie den Umfang streng.k8s-device-plugin) und deklarieren Sie Ressourcen wie limits: apple.com/metal: 1.hostPath or Local PV, aber Datenpersistenz/-migration müssen berücksichtigt werden.OpenClawAgent in native K8s-Ressourcen für die Bereitstellung und Lebenszyklusverwaltung mit einem Klick.Sicherheitswarnung: Die Containerisolierung unter macOS ist weniger streng als unter Linux. Testen Sie privilegierte Container gründlich in einer Sandbox und beschränken Sie, auf welchen Knoten sie landen können.
Beispiel für ein Operatorskelett (mit Kopf):
import kopf
@kopf.on.create('openclawvpsmesh.io', 'v1', 'openclawagents')
def create_fn(spec, **kwargs):
image = spec.get('image', 'your-registry/openclaw:latest')
replicas = spec.get('replicas', 1)
redis_host = spec['redis']['host']
redis_password = spec['redis'].get('password')
deployment = {
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {"name": f"openclaw-{kwargs['name']}"},
"spec": {
"replicas": replicas,
"selector": {"matchLabels": {"app": "openclaw"}},
"template": {
"metadata": {"labels": {"app": "openclaw"}},
"spec": {
"containers": [{
"name": "openclaw",
"image": image,
"env": [
{"name": "REDIS_HOST", "value": redis_host},
{"name": "REDIS_PASSWORD", "value": redis_password}
],
"ports": [{"containerPort": 8080}]
}]
}
}
}
}
return {"status": "created"}
Die OpenClaw-Last korreliert direkt mit der Tiefe der Aufgabenwarteschlange. K8s HorizontalPodAutoscaler kann benutzerdefinierte Metriken (Warteschlangenlänge, Antwortzeit) verwenden, um Replikate automatisch zu skalieren.
| Metrisch | Beschreibung | Skalenschwellen | Abkühlung |
|---|---|---|---|
| CPU-Auslastung | Pod-CPU % | Scale-out >70 %, Scale-in <30 % | 300er |
| Speichernutzung | Pod-Speicher % | Scale-out >80 %, Scale-in <40 % | 300s |
| Warteschlangentiefe | Offene OpenClaw-Aufgaben | Scale-out >50 Aufgaben, Scale-in <10 Aufgaben | 180er Jahre |
| Reaktionszeit der Aufgabe | P95-Latenz | Scale-out >2 s, Scale-in <500 ms | 300s |
Um die auf der Warteschlangentiefe basierende Skalierung zu ermöglichen, stellen Sie den Prometheus-Stack und einen OpenClaw-Metrikexporter bereit und registrieren Sie die Metrik dann bei der Custom Metrics API von K8. HPA-Beispiel:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: openclaw-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: openclaw
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Pods
pods:
metric:
name: openclaw_queue_depth
target:
type: AverageValue
averageValue: 50
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 300
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Pods
value: 2
periodSeconds: 60
Kompromiss zwischen Kosten und Elastizität: Ein zu niedriger Nachbildungsboden verschwendet Ressourcen; Zu aggressive Schwellenwerte verursachen Flattern. Legen Sie Baselines durch Auslastungstests außerhalb der Hauptverkehrszeiten fest, bevor Sie live gehen.
Containerisierung und K8s sind keine Allheilmittel – sie bringen betriebliche Komplexität und Mehraufwand mit sich. Hier sind drei harte Datenpunkte, anhand derer Sie entscheiden können, ob sich die Investition lohnt.
stabilizationWindowSeconds und Schrittgrößen, um ein Flattern zu vermeiden.Der Aufbau Ihrer eigenen Containerplattform erfordert umfassende Kubernetes- und macOS-Kenntnisse, einschließlich Image-Erstellung, Ressourcenplanung, Netzwerk und Sicherheitshärtung. Für die meisten Teams ist dieser technische Aufwand erheblich.
Für Produktionsumgebungen, die zuverlässige, elastische OpenClaw-Bereitstellungen suchen, Der verwaltete OpenClaw-Service von VpsMesh ist oft die bessere Wahl. Wir bieten vorinstallierte Mac Mini M4-Knoten mit automatischer Skalierung und regionsübergreifender DR – es ist nicht erforderlich, komplexe Operatoren oder HPA-Konfigurationen zu schreiben. Entdecken Sie auf unserer Website, wie Sie OpenClaw der Enterprise-Klasse mit minimalen Startkosten erhalten Preisseite oder online bestellen jetzt.
Die wichtigste Änderung ist die Externalisierung der Konfiguration. Verschieben Sie Skill-Definitionen aus lokalen Verzeichnissen in ConfigMap-Volume-Mounts. Ersetzen Sie hartcodierte Pfade durch Umgebungsvariablen. Stellen Sie sicher, dass für den gesamten Dateizugriff deklarierte Volumes verwendet werden. Sehen Sie sich unsere an Hilfecenter Weitere Informationen finden Sie auf der Containerisierungsseite.
Das macOS-Container-Ökosystem hinkt Linux hinterher. Privilegierte Container, Geräte-Plugins und CNI-Netzwerke werden nur begrenzt unterstützt. Erwägen Sie leichtgewichtige Distributionen wie k3s oder minikube und führen Sie nur nicht privilegierte oder minimal privilegierte Workloads aus. Bewerten Sie für Hochleistungsanforderungen, ob eine Containerisierung erforderlich ist, oder verwenden Sie die verwalteten OpenClaw-Knoten von VpsMesh.
Stellen Sie den Prometheus-Stack und einen OpenClaw-Metrikexporter bereit, um die Warteschlangentiefe über die Custom Metrics API von K8 offenzulegen. Dann konfigurieren Sie HPA mit type: Pods Referenzierung des Metriknamens. Informationen zur Adaptereinrichtung finden Sie in der K8s-Dokumentation zum Thema „Verwenden von Prometheus als Quelle für benutzerdefinierte Metriken“.