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

StatefulSet部署Cassandra时出现spec.containers[0].volumeMounts[0].name: Not found错误的排查求助

StatefulSet部署Cassandra时出现spec.containers[0].volumeMounts[0].name: Not found错误的排查求助

我在部署Cassandra StatefulSet时遇到了卷挂载的问题,先跟大家说下我的操作流程:

我先部署了nfs-subdir-external-provisioner,使用helm安装的命令如下:

root@k8s-eu-1-master:~# helm install k8s-eu-1-worker-1-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
> --set nfs.server=38.242.249.121 \
> --set nfs.path=/srv/shared-k8s-eu-1-worker-1 \
> --set storageClass.name=k8s-eu-1-worker-1 \
> --set storageClass.provisionerName=k8s-sigs.io/k8s-eu-1-worker-1 \
> --set nfs.volumeName=k8s-eu-1-worker-1-nfs-v

安装完成后检查资源状态,都是正常运行的:

root@k8s-eu-1-master:~# helm ls
NAME                                                NAMESPACE   REVISION    UPDATED                                 STATUS      CHART                                   APP VERSION
k8s-eu-1-worker-1-nfs-subdir-external-provisioner   default     1           2023-11-07 17:14:42.197847444 +0100 CET deployed    nfs-subdir-external-provisioner-4.0.18  4.0.2

root@k8s-eu-1-master:~# kubectl get deployments
NAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
k8s-eu-1-worker-1-nfs-subdir-external-provisioner   1/1     1            1           2m9s

root@k8s-eu-1-master:~# kubectl get pods
NAME                                                              READY   STATUS    RESTARTS   AGE
k8s-eu-1-worker-1-nfs-subdir-external-provisioner-79fff4ff2qx7k   1/1     Running   0          2m27s

查看provisioner的Pod详情,确认卷k8s-eu-1-worker-1-nfs-v已经正确挂载:

root@k8s-eu-1-master:~# kubectl describe pod k8s-eu-1-worker-1-nfs-subdir-external-provisioner-79fff4ff2qx7k
# 省略非关键输出,重点看卷配置
Volumes:
k8s-eu-1-worker-1-nfs-v:
Type:      NFS (an NFS mount that lasts the lifetime of a pod)
Server:   xx.xxx.xxx.xxx
Path:      /srv/shared-k8s-eu-1-worker-1
ReadOnly:  false

接下来我修改了Cassandra的StatefulSet YAML,想把这个NFS卷挂载到Cassandra Pod里,完整配置如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cassandra
  labels:
    app: cassandra
spec:
  serviceName: cassandra
  replicas: 3
  selector:
    matchLabels:
      app: cassandra
  template:
    metadata:
      labels:
        app: cassandra
    spec:
      terminationGracePeriodSeconds: 1800
      containers:
      - name: cassandra
        image: gcr.io/google-samples/cassandra:v13
        imagePullPolicy: Always
        ports:
        - containerPort: 7000
          name: intra-node
        - containerPort: 7001
          name: tls-intra-node
        - containerPort: 7199
          name: jmx
        - containerPort: 9042
          name: cql
        resources:
          limits:
            cpu: "500m"
            memory: 1Gi
          requests:
            cpu: "500m"
            memory: 1Gi
        securityContext:
          capabilities:
            add:
            - IPC_LOCK
        lifecycle:
          preStop:
            exec:
              command:
              - /bin/sh
              - -c
              - nodetool drain
        env:
        - name: MAX_HEAP_SIZE
          value: 512M
        - name: HEAP_NEWSIZE
          value: 100M
        - name: CASSANDRA_SEEDS
          value: "cassandra-0.cassandra.default.svc.cluster.local"
        - name: CASSANDRA_CLUSTER_NAME
          value: "K8Demo"
        - name: CASSANDRA_DC
          value: "DC1-K8Demo"
        - name: CASSANDRA_RACK
          value: "Rack1-K8Demo"
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        readinessProbe:
          exec:
            command:
            - /bin/bash
            - -c
            - /ready-probe.sh
          initialDelaySeconds: 15
          timeoutSeconds: 5
        # 这里是我配置的卷挂载
        volumeMounts:
        - name: k8s-eu-1-worker-1-nfs-v
          mountPath: /srv/shared-k8s-eu-1-worker-1
      # 原有的volumeClaimTemplates
      volumeClaimTemplates:
      - metadata:
          name: k8s-eu-1-worker-1
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: k8s-eu-1-worker-1
          resources:
            requests:
              storage: 1Gi
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: k8s-eu-1-worker-1
provisioner: k8s-sigs.io/k8s-eu-1-worker-1
parameters:
  #type: pd-ss

但应用这个配置后,出现了错误:

root@k8s-eu-1-master:~# kubectl apply -f ./cassandraStatefulApp/cassandra-statefulset.yaml
statefulset.apps/cassandra created
Warning: resource storageclasses/k8s-eu-1-worker-1 is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
The StorageClass "k8s-eu-1-worker-1" is invalid: parameters: Forbidden: updates to parameters are forbidden.

root@k8s-eu-1-master:~# kubectl get statefulsets
NAME        READY   AGE
cassandra   0/3     21s

root@k8s-eu-1-master:~# kubectl describe statefulsets cassandra
# 省略非关键输出,重点看错误事件
Events:
Type     Reason        Age                 From                    Message
----     ------        ----                ----                    -------
Warning  FailedCreate  20s (x13 over 41s)  statefulset-controller  create Pod cassandra-0 in StatefulSet cassandra failed error: Pod "cassandra-0" is invalid: spec.containers[0].volumeMounts[0].name: Not found: "k8s-eu-1-worker-1-nfs-v"

我实在搞不清楚哪里出错了,想请教大家:我在StatefulSet的YAML里指定VolumeMounts的方式到底哪里有问题?正确的做法应该是什么?

备注:内容来源于stack exchange,提问作者Raphael10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:24:38