Πώς να αναπτύξετε το OpenClaw στο Kubernetes
Ερευνητές ασφάλειας έχουν βρει πάνω από 135.000 εκδοχές OpenClaw εντελώς απροστάτευτες στο διαδίκτυο. Πολλές από αυτές ήταν ευάλωτες σε εκτέλεση κώδικα εξ αποστάσεως. Η κρίση ασφάλειας του OpenClaw είναι πραγματική: κρίσιμα CVE, κακόβουλες δεξιότητες και ένα θεμελιώδες πρόβλημα με τον τρόπο που οι περισσότερες αναπτύξεις χειρίζονται την πιστοποίηση. Η εκτέλεση του OpenClaw σε VPS με docker run είναι εύκολη. Η ασφαλής εκτέλεσή του είναι ένα διαφορετικό πρόβλημα.
Το Kubernetes λύνει αυτό το πρόβλημα. Παίρνετε απομόνωση δικτύου, όρια πόρων, αυτοματοποιημένες επανεκκινήσεις και προεπιλογές ασφάλειας που θα χρειάζονταν ώρες για να ρυθμιστούν χειροκίνητα. Και με τον OpenClaw Kubernetes Operator, τα παίρνετε όλα από ένα μόνο αρχείο YAML.
Αυτός ο οδηγός σας πάει από το μηδέν σε έναν έτοιμο για παραγωγή agent OpenClaw στο Kubernetes. Κάθε μπλοκ YAML είναι έτοιμο για αντιγραφή και επικόλληση.
Γιατί operator
Η εκτέλεση του OpenClaw στο Kubernetes είναι περισσότερο από ένα Deployment και ένα Service. Χρειάζεστε απομόνωση δικτύου, διαχείριση μυστικών, μόνιμη αποθήκευση, παρακολούθηση υγείας, ανάπτυξη ρυθμίσεων και προαιρετικά αυτοματοποίηση προγράμματος περιήγησης. Η σωστή σύνδεση όλων αυτών χειροκίνητα είναι κουραστική και επιρρεπής σε σφάλματα.
Ένας Kubernetes operator κωδικοποιεί αυτές τις ανησυχίες σε έναν μόνο προσαρμοσμένο πόρο. Δηλώνετε τι θέλετε, και ο operator το συμφιλιώνει συνεχώς στο σωστό σύνολο αντικειμένων Kubernetes. Αυτό σας δίνει:
- Ασφάλεια εξ ορισμού. Κάθε agent τρέχει ως UID 1000, όλες οι δυνατότητες Linux αφαιρεμένες, seccomp ενεργοποιημένο, σύστημα αρχείων ρίζας μόνο για ανάγνωση και εξ ορισμού απαγορευτική NetworkPolicy που επιτρέπει μόνο DNS και HTTPS εξερχόμενη κίνηση. Χωρίς χειροκίνητη ενίσχυση.
- Αυτόματες ενημερώσεις με επαναφορά. Ο operator ελέγχει το μητρώο OCI για νέες εκδόσεις, δημιουργεί αντίγραφο ασφαλείας του χώρου εργασίας, αναπτύσσει την ενημέρωση και επαναφέρει αυτόματα αν το νέο pod αποτύχει στους ελέγχους υγείας.
- Ανάπτυξη ρυθμίσεων. Αλλάξτε το
spec.config.rawκαι ο operator ανιχνεύει ότι το hash περιεχομένου άλλαξε, ενεργοποιώντας μια κυλιόμενη ενημέρωση. Το ίδιο για εναλλαγή μυστικών. - Αντίγραφα ασφαλείας και επαναφορά. Αυτόματο αντίγραφο ασφαλείας χώρου εργασίας σε S3-συμβατή αποθήκευση κατά τη διαγραφή εκδοχής. Επαναφορά σε νέα εκδοχή από οποιοδήποτε στιγμιότυπο.
- Πιστοποίηση πύλης. Αυτόματη δημιουργία token πύλης ανά εκδοχή. Χωρίς χειροκίνητη σύνδεση, χωρίς mDNS (που δεν λειτουργεί στο Kubernetes ούτως ή άλλως).
- Ανίχνευση αποκλίσεων. Κάθε 5 λεπτά, ο operator ελέγχει ότι κάθε διαχειριζόμενος πόρος ταιριάζει με την επιθυμητή κατάσταση. Αν κάποιος επεξεργαστεί χειροκίνητα μια NetworkPolicy ή διαγράψει ένα PDB, συμφιλιώνεται πίσω.
Προαπαιτούμενα
Χρειάζεστε:
- Ένα cluster Kubernetes (1.28+). Οποιαδήποτε συμβατή διανομή λειτουργεί: EKS, GKE, AKS, k3s ή ένα τοπικό Kind cluster για δοκιμές.
kubectlρυθμισμένο να επικοινωνεί με το cluster σας.helmv3 εγκατεστημένο.- Ένα κλειδί API για τον πάροχο AI σας (Anthropic, OpenAI ή οποιοδήποτε OpenAI-συμβατό endpoint).
Βήμα 1: Εγκαταστήστε τον operator
Ο operator παρέχεται ως OCI Helm chart. Μία εντολή τον εγκαθιστά:
helm install openclaw-operator \
oci://ghcr.io/openclaw-rocks/charts/openclaw-operator \
--namespace openclaw-operator-system \
--create-namespace
Επαληθεύστε ότι τρέχει:
kubectl get pods -n openclaw-operator-system
Θα πρέπει να δείτε το pod του operator σε κατάσταση Running. Ο operator εγκαθιστά επίσης ένα validating webhook που αποτρέπει μη ασφαλείς ρυθμίσεις (όπως εκτέλεση ως root).
Βήμα 2: Δημιουργήστε το μυστικό κλειδί API σας
Αποθηκεύστε το κλειδί API του παρόχου AI σας σε ένα Kubernetes Secret. Ο operator θα το εισάγει στο container του agent:
kubectl create namespace openclaw
kubectl create secret generic openclaw-api-keys \
--namespace openclaw \
--from-literal=ANTHROPIC_API_KEY=sk-ant-your-key-here
Για OpenAI ή άλλους παρόχους, χρησιμοποιήστε το κατάλληλο όνομα μεταβλητής περιβάλλοντος (OPENAI_API_KEY, OPENROUTER_API_KEY κλπ.). Μπορείτε να συμπεριλάβετε πολλαπλούς παρόχους στο ίδιο Secret.
Συμβουλή: Για παραγωγή, εξετάστε τη χρήση του External Secrets Operator για συγχρονισμό κλειδιών από AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager ή Azure Key Vault. Η τεκμηρίωση του operator έχει λεπτομερή παραδείγματα.
Βήμα 3: Αναπτύξτε τον πρώτο σας agent
Δημιουργήστε ένα αρχείο με όνομα my-agent.yaml:
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: my-agent
namespace: openclaw
spec:
envFrom:
- secretRef:
name: openclaw-api-keys
config:
raw:
agents:
defaults:
model:
primary: "anthropic/claude-sonnet-4-20250514"
storage:
persistence:
enabled: true
size: 10Gi
Εφαρμόστε το:
kubectl apply -f my-agent.yaml
Αυτός ο ένας πόρος δημιουργεί StatefulSet, Service, ServiceAccount, Role, RoleBinding, ConfigMap, PVC, PDB, NetworkPolicy και ένα Secret token πύλης. Ο operator τα συμφιλιώνει όλα.
Βήμα 4: Επαληθεύστε ότι τρέχει
Παρακολουθήστε την εκδοχή να ξεκινά:
kubectl get openclawinstances -n openclaw -w
NAME PHASE READY AGE
my-agent Provisioning False 10s
my-agent Running True 45s
Όταν η φάση δείχνει Running και το Ready είναι True, ο agent σας είναι ζωντανός. Ελέγξτε τα logs:
kubectl logs -n openclaw statefulset/my-agent -f
Για να αλληλεπιδράσετε με τον agent σας, κάντε port-forward την πύλη:
kubectl port-forward -n openclaw svc/my-agent 18789:18789
Στη συνέχεια ανοίξτε http://localhost:18789 στο πρόγραμμα περιήγησής σας.
Βήμα 5: Συνδέστε ένα κανάλι
Το OpenClaw υποστηρίζει Telegram, Discord, WhatsApp, Signal και άλλα κανάλια μηνυμάτων. Κάθε κανάλι ρυθμίζεται μέσω μεταβλητών περιβάλλοντος. Προσθέστε το σχετικό token στο Secret σας:
kubectl create secret generic openclaw-channel-keys \
--namespace openclaw \
--from-literal=TELEGRAM_BOT_TOKEN=your-bot-token-here
Στη συνέχεια αναφέρετέ το στην εκδοχή σας:
spec:
envFrom:
- secretRef:
name: openclaw-api-keys
- secretRef:
name: openclaw-channel-keys
Το OpenClaw ανιχνεύει αυτόματα το token και ενεργοποιεί το κανάλι. Δεν χρειάζεται επιπλέον ρύθμιση.
Αυτό καλύπτει τα βασικά. Ο agent σας τρέχει, είναι ασφαλισμένος και προσβάσιμος. Το υπόλοιπο αυτού του οδηγού καλύπτει προαιρετικές λειτουργίες που μπορείτε να ενεργοποιήσετε όταν είστε έτοιμοι.
Αυτοματοποίηση προγράμματος περιήγησης
Το OpenClaw μπορεί να περιηγηθεί στο web, να τραβήξει στιγμιότυπα οθόνης και να αλληλεπιδράσει με σελίδες. Ο operator το κάνει προσθήκη μιας γραμμής. Εκτελεί ένα ενισχυμένο Chromium sidecar στο ίδιο pod, συνδεδεμένο μέσω localhost:
spec:
chromium:
enabled: true
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
Ο operator εισάγει αυτόματα μια μεταβλητή περιβάλλοντος CHROMIUM_URL στο κύριο container. Το sidecar container τρέχει ως UID 1001 με σύστημα αρχείων ρίζας μόνο για ανάγνωση και δικό του πλαίσιο ασφάλειας.
Δεξιότητες και εξαρτήσεις χρόνου εκτέλεσης
Οι δεξιότητες OpenClaw από το ClawHub μπορούν να εγκατασταθούν δηλωτικά. Ο operator εκτελεί ένα init container που φέρνει κάθε δεξιότητα πριν ξεκινήσει ο agent:
spec:
skills:
- "@anthropic/mcp-server-fetch"
- "@anthropic/mcp-server-filesystem"
Αν οι δεξιότητές σας ή οι διακομιστές MCP χρειάζονται pnpm ή Python, ενεργοποιήστε τα ενσωματωμένα init containers εξαρτήσεων χρόνου εκτέλεσης:
spec:
runtimeDeps:
pnpm: true # Installs pnpm via corepack
python: true # Installs Python 3.12 + uv
Τα init containers εγκαθιστούν αυτά τα εργαλεία στο PVC δεδομένων, οπότε διατηρούνται μεταξύ επανεκκινήσεων χωρίς να μεγαλώνει η εικόνα του container.
Αυτόματες ενημερώσεις
Το OpenClaw κυκλοφορεί νέες εκδόσεις συχνά. Ο operator μπορεί να τις παρακολουθεί αυτόματα, να δημιουργεί αντίγραφο ασφαλείας πριν την ενημέρωση και να επαναφέρει αν κάτι πάει στραβά:
spec:
autoUpdate:
enabled: true
checkInterval: "12h"
backupBeforeUpdate: true
rollbackOnFailure: true
healthCheckTimeout: "10m"
Όταν εμφανιστεί μια νέα έκδοση στο μητρώο, ο operator:
- Δημιουργεί αντίγραφο ασφαλείας του PVC χώρου εργασίας σε S3-συμβατή αποθήκευση
- Ενημερώνει την ετικέτα εικόνας στο StatefulSet
- Περιμένει μέχρι
healthCheckTimeoutγια να περάσει το pod τους ελέγχους ετοιμότητας - Αν το pod αποτύχει να γίνει έτοιμο, επαναφέρει την προηγούμενη ετικέτα εικόνας και το αντίγραφο ασφαλείας
Μετά από 3 συνεχόμενες αποτυχημένες επαναφορές, ο operator παύει την αυτόματη ενημέρωση και θέτει μια συνθήκη ώστε να μπορέσετε να ερευνήσετε.
Σημείωση: Η αυτόματη ενημέρωση δεν κάνει τίποτα για εικόνες δεσμευμένες σε digest (
spec.image.digest). Αν δεσμεύετε σε digest, ελέγχετε τις ενημερώσεις χειροκίνητα.
Ενίσχυση παραγωγής
Ο operator παρέχεται ασφαλής εξ ορισμού. Ακολουθούν οι πρόσθετες ρυθμίσεις για αναπτύξεις παραγωγής.
Παρακολούθηση με Prometheus
Ενεργοποιήστε το ServiceMonitor για συλλογή μετρικών operator και εκδοχών:
spec:
observability:
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: "30s"
Χρονοπρογραμματισμός σε αποκλειστικούς κόμβους
spec:
availability:
nodeSelector:
openclaw.rocks/nodepool: openclaw
tolerations:
- key: openclaw.rocks/dedicated
value: openclaw
effect: NoSchedule
Προσθήκη κανόνων εξερχόμενης κίνησης
spec:
security:
networkPolicy:
additionalEgress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 5432
protocol: TCP
Ταυτότητα παρόχου cloud
spec:
security:
rbac:
serviceAccountAnnotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::123456789:role/openclaw"
Εταιρικά proxy και ιδιωτικά CA
spec:
security:
caBundle:
configMapName: corporate-ca-bundle
key: ca-bundle.crt
Ο operator προσαρτά το πακέτο CA σε όλα τα containers και ορίζει αυτόματα το NODE_EXTRA_CA_CERTS.
GitOps
Το OpenClawInstance CRD είναι ένα απλό αρχείο YAML. Αυτό σημαίνει ότι ταιριάζει απευθείας σε μια ροή εργασίας GitOps. Αποθηκεύστε τα manifests των agents σε ένα αποθετήριο git και αφήστε το ArgoCD ή το Flux να τα συγχρονίσει στο cluster σας.
gitops/
└── agents/
├── kustomization.yaml
├── namespace.yaml
├── agent-a.yaml
└── agent-b.yaml
Κάθε αλλαγή περνά από ένα pull request. Η ομάδα σας ελέγχει τη διαφορά. Συγχωνεύστε στο main και το ArgoCD την εφαρμόζει. Χωρίς kubectl apply από φορητούς, χωρίς απόκλιση ρυθμίσεων, πλήρες ίχνος ελέγχου.
Αντίγραφα ασφαλείας και επαναφορά
Ο operator υποστηρίζει S3-συμβατά αντίγραφα ασφαλείας. Όταν διαγράψετε μια εκδοχή, ο operator δημιουργεί αυτόματα αντίγραφο ασφαλείας του PVC χώρου εργασίας πριν την αφαίρεση.
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: my-agent-restored
namespace: openclaw
spec:
restoreFrom: "s3://bucket/path/to/backup.tar.gz"
envFrom:
- secretRef:
name: openclaw-api-keys
storage:
persistence:
enabled: true
size: 10Gi
Τοπική εξαγωγή συμπερασμάτων με Ollama
spec:
ollama:
enabled: true
models:
- "llama3.2"
- "nomic-embed-text"
gpu: 1
resources:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "4"
memory: 8Gi
storage:
sizeLimit: 30Gi
Ενσωμάτωση Tailscale
spec:
tailscale:
enabled: true
mode: serve
authKeySecretRef:
name: tailscale-authkey
hostname: my-agent
kubectl create secret generic tailscale-authkey \
--namespace openclaw \
--from-literal=authkey=tskey-auth-...
Προσαρμοσμένα sidecars και init containers
spec:
sidecars:
- name: cloudsql-proxy
image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2
args: ["--structured-logs", "project:region:instance"]
resources:
requests:
cpu: 100m
memory: 128Mi
Λειτουργία συγχώνευσης ρυθμίσεων
spec:
config:
mergeMode: merge
raw:
agents:
defaults:
model:
primary: "anthropic/claude-sonnet-4-20250514"
Το πλήρες παράδειγμα
apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
name: production-agent
namespace: openclaw
spec:
envFrom:
- secretRef:
name: openclaw-api-keys
config:
mergeMode: merge
raw:
agents:
defaults:
model:
primary: "anthropic/claude-sonnet-4-20250514"
skills:
- "@anthropic/mcp-server-fetch"
runtimeDeps:
pnpm: true
chromium:
enabled: true
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
ollama:
enabled: true
models: ["llama3.2"]
gpu: 1
resources:
requests:
cpu: "2"
memory: 4Gi
tailscale:
enabled: true
mode: serve
authKeySecretRef:
name: tailscale-authkey
authSSO: true
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
storage:
persistence:
enabled: true
size: 10Gi
autoUpdate:
enabled: true
checkInterval: "24h"
backupBeforeUpdate: true
rollbackOnFailure: true
observability:
metrics:
enabled: true
serviceMonitor:
enabled: true
# Remove or adjust these if you don't use dedicated nodes
availability:
nodeSelector:
openclaw.rocks/nodepool: openclaw
tolerations:
- key: openclaw.rocks/dedicated
value: openclaw
effect: NoSchedule
Τι παίρνετε αμέσως
Χωρίς να αγγίξετε μία μόνο ρύθμιση ασφάλειας, κάθε agent που αναπτύσσεται από τον operator περιλαμβάνει:
- Εκτέλεση χωρίς root (UID 1000)
- Σύστημα αρχείων ρίζας μόνο για ανάγνωση
- Όλες οι δυνατότητες Linux αφαιρεμένες
- Προφίλ Seccomp RuntimeDefault
- Εξ ορισμού απαγορευτική NetworkPolicy (μόνο DNS + HTTPS εξερχόμενη)
- ServiceAccount ανά εκδοχή χωρίς αυτόματη προσάρτηση token
- PodDisruptionBudget
- Ανιχνευτές ζωτικότητας, ετοιμότητας και εκκίνησης
- Αυτόματα δημιουργημένο token πιστοποίησης πύλης
- 5-λεπτη συμφιλίωση αποκλίσεων
Επόμενα βήματα
- Περιηγηθείτε στην πλήρη αναφορά API για κάθε πεδίο CRD
- Διαβάστε τους οδηγούς ανάπτυξης για EKS, GKE, AKS και Kind
- Ρυθμίστε αλυσίδες εναλλακτικών μοντέλων σε πολλαπλούς παρόχους AI
- Ρυθμίστε External Secrets για Vault, AWS, GCP ή Azure
Αν αντιμετωπίσετε προβλήματα ή έχετε σχόλια, ανοίξτε ένα issue στο GitHub. Τα PR είναι επίσης ευπρόσδεκτα.
Αν δεν θέλετε να διαχειρίζεστε Kubernetes μόνοι σας, το OpenClaw.rocks τα χειρίζεται όλα αυτά για εσάς. Επιλέξτε ένα πλάνο, συνδέστε ένα κανάλι και ο agent σας είναι ζωντανός σε δευτερόλεπτα.