Kubernetes 클러스터 배포
엔터프라이즈급 배포 —— 자동 확장, 고가용성, 롤링 업데이트
K8s는 언제 써야 되나
솔직하게 말해: 대부분 사람들은 Kubernetes가 필요 없어. 단일 머신 Docker Compose로도 꽤 많은 트래픽을 버틸 수 있어. 근데 당신의 상황이 이렇다면 —— 팀이 여러 명 동시에 쓰고, 자동 확장이 필요하고, 제로 다운타임 업데이트 필요 —— 그럼 K8s가 정답이야.
이 글이 K8s에서 OpenClaw 배포 하는 거 손잡고 인도, 클러스터 준비부터 HPA 자동 스케일, 한 단계씩.
다섯 단계로 K8s 배포 끝내
클러스터 준비
먼저 K8s 클러스터 구축. 클라우드 벤더 관리형 K8s (알리바바 ACK, 텐센트 TKE, AWS EKS) 써도 되고, kubeadm으로 직접 구축할 수도 있어. 최소 3개 노드, 1 master + 2 worker 추천.
Deployment 생성
Deployment YAML 작성, OpenClaw Pod 템플릿, 복제본 수, 리소스 제한 정의. 복제본 수는 최소 2개 추천, 하나 망가지면 다른 하나로 커버.
Service 생성
Service는 트래픽을 각 Pod으로 분산시킴. ClusterIP 타입은 클러스터 내부용, 또는 NodePort로 포트 직접 노출.
Ingress 설정
Ingress는 클러스터의 진입 게이트웨이로 도메인 라우팅과 TLS 언로드를 담당. Nginx Ingress Controller 하나 설치하고 Ingress 규칙 설정하면 됨.
Docker 패키지 활성화
HPA (Horizontal Pod Autoscaler)는 CPU나 메모리 사용률에 따라 Pod 개수를 자동으로 증감. 피크 시간에 자동 확장, 저사용 시간에 자동 축소로 비용 절감.
Deployment 설정
이건 핵심 설정 파일, OpenClaw 어떻게 돌지 정의:
apiVersion: apps/v1
kind: Deployment
metadata:
name: openclaw
namespace: 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: openclaw/openclaw:latest
ports:
- containerPort: 3000
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "2000m"
memory: "2Gi"
env:
- name: OPENCLAW_API_KEY
valueFrom:
secretKeyRef:
name: openclaw-secrets
key: api-key
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
volumeMounts:
- name: data
mountPath: /app/data
volumes:
- name: data
persistentVolumeClaim:
claimName: openclaw-data
Service 설정
apiVersion: v1
배포 명령어
YAML이 완성되면 몇 줄 명령으로 배포 가능:
# 네임스페이스 생성
신규 사용자 추가
K8s의 롤링 업데이트는 기본으로 들어있지만 롤백 방법을 알아야 함:
# 이미지 버전 업데이트