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

如何在裸金属Kubernetes集群部署HA Dgraph并配置本地存储

解决裸金属Kubernetes部署Dgraph HA集群的PVC绑定问题

我之前在裸金属K8s集群部署Dgraph HA时也碰到过完全一样的问题!核心原因是裸金属集群默认没有能动态创建PersistentVolume(PV)的StorageClass,而官方Dgraph配置里的PersistentVolumeClaim(PVC)需要绑定到现成的PV才能让Pod脱离Pending状态。下面是我亲测有效的解决方案,用本地存储来适配Dgraph的存储需求:

1. 创建本地存储专用的StorageClass

首先需要创建一个支持本地存储的StorageClass,关键是设置volumeBindingMode: WaitForFirstConsumer,这样K8s会先把Pod调度到有对应本地PV的节点,再完成PVC和PV的绑定,避免调度错误。

创建local-storageclass.yaml文件:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dgraph-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

执行命令应用:

kubectl apply -f local-storageclass.yaml

2. 为Dgraph Alpha和Zero节点创建本地PV

本地存储需要静态创建PV,因为无法动态供给。首先在目标K8s节点上创建存储目录(比如我选node-1作为alpha-0和zero-0的运行节点):

# 在node-1节点上执行
mkdir -p /var/dgraph/alpha-0
mkdir -p /var/dgraph/zero-0
# 设置权限,确保Dgraph容器能读写(Dgraph容器默认用uid 1000)
chown -R 1000:1000 /var/dgraph/alpha-0
chown -R 1000:1000 /var/dgraph/zero-0

然后创建alpha-0对应的PV文件dgraph-alpha-0-pv.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: dgraph-alpha-0-pv
spec:
  capacity:
    storage: 10Gi  # 根据你的需求调整大小
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: dgraph-local-storage
  local:
    path: /var/dgraph/alpha-0
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node-1  # 替换成你的节点名称

同样创建zero-0的PV文件dgraph-zero-0-pv.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: dgraph-zero-0-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: dgraph-local-storage
  local:
    path: /var/dgraph/zero-0
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node-1

执行命令创建PV:

kubectl apply -f dgraph-alpha-0-pv.yaml
kubectl apply -f dgraph-zero-0-pv.yaml

3. 修改Dgraph部署配置中的PVC

打开你使用的官方Dgraph部署yaml文件,找到alpha和zero的PVC部分,添加storageClassName: dgraph-local-storage,确保PVC能匹配我们创建的StorageClass和PV。

比如alpha的PVC修改后:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dgraph-alpha-0
  namespace: dgraph
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: dgraph-local-storage  # 新增这一行

zero的PVC同理修改。

4. 重新部署Dgraph

删除原来的Pending Pod,然后重新应用修改后的部署配置:

kubectl delete pod dgraph-alpha-0 dgraph-zero-0 --namespace dgraph
kubectl apply -f your-modified-dgraph-deployment.yaml

等几分钟后再查看Pod状态,应该就能看到alpha和zero Pod正常启动了:

kubectl get pod --namespace dgraph

如果是多节点的HA集群(比如3个alpha、3个zero),只需要在每个节点上重复步骤2的目录创建和PV配置,每个实例对应一个绑定到特定节点的PV即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:37:46