You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中ClickHouse无法挂载现有数据至持久化卷问题求助

Minikube部署ClickHouse无法加载本地原有数据的解决方法

问题背景

我使用ClickHouse数据库,数据存储在本地/media/user/data/clickhouse和/media/user/data/clickhouse-server目录。通过Docker运行容器时能正常访问数据,但在Minikube中部署ClickHouse Pod,配置HostPath类型的PV、PVC及Deployment后,Pod可正常启动且能通过Web GUI访问,但原有数据未加载。


原配置信息

Docker运行命令

$ docker run \
    --name local-clickhouse \
    --ulimit nofile=262144:262144 \
    -u 1000:1000 \
    -p 8123:8123 \
    -p 9000:9000 \
    -p 9009:9009 \
    -v /media/user/data/clickhouse:/var/lib/clickhouse \
    -v /media/user/data/clickhouse-server:/var/log/clickhouse-server \
    -dit clickhouse/clickhouse-server

PersistentVolume配置

数据目录PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: host-pv-clickhouse
spec:
  capacity:
    storage: 4000Gi   
  volumeMode: Filesystem
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /media/user/data/clickhouse
    type: DirectoryOrCreate

日志目录PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: host-pv-clickhouse-server
spec:
  capacity:
    storage: 4000Gi 
  volumeMode: Filesystem  
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /media/user/data/clickhouse-server
    type: DirectoryOrCreate

PersistentVolumeClaim配置

日志目录PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: host-pvc-clickhouse-server
spec:
  volumeName: host-pv-clickhouse-server
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2000Gi

数据目录PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: host-pvc-clickhouse
spec:
  volumeName: host-pv-clickhouse
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2000Gi

Service及Deployment配置

apiVersion: v1
kind: Service
metadata:
  name: clickhouse
spec:
  type: NodePort
  ports:
    - protocol: TCP
      name: tcp
      port: 9000
      targetPort: 9000
      nodePort: 30003
    - protocol: TCP
      name: http
      port: 8123
      targetPort: 8123
      nodePort: 30004
    - protocol: TCP
      name: interncomm
      port: 9009
      targetPort: 9009
      nodePort: 30005
  selector:
    app: clickhouse
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: clickhouse
  labels:
    app: clickhouse
spec:
  replicas: 1
  selector:
    matchLabels:
      app: clickhouse
  template:
    metadata:
      labels:
        app: clickhouse
    spec:
      containers:
        - name: clickhouse
          image: clickhouse/clickhouse-server:latest
          ports:
            - containerPort: 8123
              name: http
            - container containerPort: 9000
              name: tcp
            - containerPort: 9009
              name: interncomm
          volumeMounts:
            - name: clickhouse-volume
              mountPath: /var/lib/clickhouse
            - name: clickhouse-server-volume
              mountPath: /var/log/clickhouse-server
      volumes:
        - name: clickhouse-volume
          persistentVolumeClaim: 
            claimName: host-pvc-clickhouse
        - name: clickhouse-server-volume
          persistentVolumeClaim: 
            claimName: host-pvc-clickhouse-server

解决步骤

1. 解决Minikube HostPath访问宿主机路径的问题

Minikube默认以虚拟机方式运行,配置的hostPath指向的是Minikube虚拟机内部路径,而非本地宿主机目录。需要将宿主机目录挂载到Minikube虚拟机中:

# 前台运行(需保持终端开启)
minikube mount /media/user/data/clickhouse:/media/user/data/clickhouse
minikube mount /media/user/data/clickhouse-server:/media/user/data/clickhouse-server

# 或后台运行
nohup minikube mount /media/user/data/clickhouse:/media/user/data/clickhouse &
nohup minikube mount /media/user/data/clickhouse-server:/media/user/data/clickhouse-server &

2. 修复Deployment语法错误

Deployment配置中TCP端口定义存在语法错误,将- container containerPort: 9000修正为- containerPort: 9000,修正后的端口部分:

ports:
  - containerPort: 8123
    name: http
  - containerPort: 9000
    name: tcp
  - containerPort: 9009
    name: interncomm

3. 同步目录权限

Docker运行时指定了-u 1000:1000,需确保Minikube虚拟机内的挂载目录权限匹配:

# 进入Minikube虚拟机
minikube ssh

# 修改目录权限
sudo chown -R 1000:1000 /media/user/data/clickhouse
sudo chown -R 1000:1000 /media/user/data/clickhouse-server
sudo chmod -R 755 /media/user/data/clickhouse
sudo chmod -R 755 /media/user/data/clickhouse-server

4. 验证PV/PVC绑定状态

检查PV与PVC是否成功绑定:

kubectl get pv
kubectl get pvc

确保状态显示为Bound。

5. 重启Pod并验证数据

删除原有Pod,让Deployment重新创建:

kubectl delete pod -l app=clickhouse

Pod启动后,通过Web GUI或ClickHouse客户端连接,验证原有数据是否正常加载。


内容的提问来源于stack exchange,提问作者MoneyBall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:45:20