Summary
CloudBeaver을 k3s 환경으로 설치하는 과정을 기록했습니다.
PostgreSQL을 편하게 관리하기위해 CloudBeaver를 호스팅합니다.
yaml
ConfigMap
CloudBeaver의 환경 변수를 저장하는 객체입니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: cloudbeaver-config
namespace: core-infra
data:
TZ: "Asia/Seoul"Tip
내용이 별로 없어서 Deployment에 직접 넣어도 상관 없습니다.
PVC
CloudBeaver의 데이터를 영구 저장할 수 있는 저장 공간을 요청합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cloudbeaver-pvc
namespace: core-infra
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5GiService
CloudBeaver의 내부 네트워크 관련 객체입니다.
apiVersion: v1
kind: Service
metadata:
name: cloudbeaver-svc
namespace: core-infra
spec:
type: ClusterIP
selector:
app: cloudbeaver
ports:
- name: http
port: 80
targetPort: 8978Deployment
CloudBeaver 컨테이너를 생성하고 배포하는 객체입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudbeaver
namespace: core-infra
labels:
app: cloudbeaver
spec:
replicas: 1
selector:
matchLabels:
app: cloudbeaver
template:
metadata:
labels:
app: cloudbeaver
spec:
containers:
- name: cloudbeaver
image: dbeaver/cloudbeaver:latest
ports:
- containerPort: 8978
envFrom:
- configMapRef:
name: cloudbeaver-config
# ==========================================
# 헬스체크 (Docker Compose의 curl 방식을 K8s native httpGet으로 변환)
# ==========================================
livenessProbe:
httpGet:
path: /status
port: 8978
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /status
port: 8978
initialDelaySeconds: 5
periodSeconds: 10
# ==========================================
# 리소스 제한 (기존 설정 100% 반영)
# ==========================================
resources:
requests:
cpu: "100m"
memory: "400Mi"
limits:
cpu: "1.0"
memory: "1Gi"
volumeMounts:
- name: cloudbeaver-data
mountPath: /opt/cloudbeaver/workspace
volumes:
- name: cloudbeaver-data
persistentVolumeClaim:
claimName: cloudbeaver-pvcIngress
CloudBeaver의 통신 규칙을 담당합니다. Traefik을 이용해 SSL 인증서를 자동 발급해줍니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cloudbeaver-ingress
namespace: core-infra
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-cloudflare"
traefik.ingress.kubernetes.io/router.middlewares: "core-infra-internal-only@kubernetescrd"
spec:
ingressClassName: traefik
tls:
- hosts:
- beaver.junbeom.work # 사용할 서브도메인 (필요시 cloudbeaver.junbeom.work 등으로 수정)
secretName: cloudbeaver-tls-secret
rules:
- host: beaver.junbeom.work
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloudbeaver-svc
port:
number: 80Tip
모든 객체는
cloudbeaver.yaml에 포함됩니다.
Installation
kubectl apply -f cloudbeaver.yamlSuccess
