Deployment.apps 无效:spec.template.spec.containers[0].volumeMounts[1].name:未找到:“数据”

Dol*_*hin 2 kubernetes

我正在部署一个soa-illidan-hub-service以 kubernetes 版本中的持久卷命名的应用程序v1.16.0。当我应用 yaml 时,它给了我这个错误:

Deployment.apps "soa-illidan-hub-service" is invalid: spec.template.spec.containers[0].volumeMounts[1].name: Not found: "data"
Run Code Online (Sandbox Code Playgroud)

这是我的 yaml 文件:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: soa-illidan-hub-service
  namespace: dabai-pro
  selfLink: /apis/apps/v1/namespaces/dabai-pro/deployments/soa-illidan-hub-service
  uid: 01a06200-f8d4-4d60-bd79-a7acf76d0a30
  resourceVersion: '6232127'
  generation: 62
  creationTimestamp: '2020-06-08T01:42:11Z'
  labels:
    k8s-app: soa-illidan-hub-service
  annotations:
    deployment.kubernetes.io/revision: '52'
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: soa-illidan-hub-service
  template:
    metadata:
      name: soa-illidan-hub-service
      creationTimestamp: null
      labels:
        k8s-app: soa-illidan-hub-service
      annotations:
        kubectl.kubernetes.io/restartedAt: '2020-07-09T17:41:29+08:00'
    spec:
      volumes:
        - name: agent
          emptyDir: {}
      initContainers:
        - name: init-agent
          image: 'harbor.google.net/miaoyou/dabai-pro/skywalking-agent:6.5.0'
          command:
            - sh
            - '-c'
            - >-
              set -ex;mkdir -p /skywalking/agent;cp -r /opt/skywalking/agent/*
              /skywalking/agent;
          resources: {}
          volumeMounts:
            - name: agent
              mountPath: /skywalking/agent
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      containers:
        - name: soa-illidan-hub-service
          image: >-
            harbor.google.net/miaoyou/dabai-pro/soa-illidan-hub-service@sha256:4ac4c6ddceac3fde05e95219b20414fb39ad81a4f789df0fbf97196b72c9e6f0
          env:
            - name: SKYWALKING_ADDR
              value: 'dabai-skywalking-skywalking-oap.apm.svc.cluster.local:11800'
            - name: APOLLO_META
              valueFrom:
                configMapKeyRef:
                  name: pro-config
                  key: apollo.meta
            - name: ENV
              valueFrom:
                configMapKeyRef:
                  name: pro-config
                  key: env
          resources: {}
          volumeMounts:
            - name: agent
              mountPath: /opt/skywalking/agent
            - name: data
              mountPath: /var/export/data
          livenessProbe:
            httpGet:
              path: /actuator/liveness
              port: 11024
              scheme: HTTP
            initialDelaySeconds: 120
            timeoutSeconds: 60
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 11024
              scheme: HTTP
            initialDelaySeconds: 120
            timeoutSeconds: 60
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
          securityContext:
            privileged: false
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      imagePullSecrets:
        - name: harbor-regcred
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  volumeClaimTemplates:
    - metadata:
        name: data
        creationTimestamp: null
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
        volumeMode: Filesystem
  progressDeadlineSeconds: 600
Run Code Online (Sandbox Code Playgroud)

要添加 PV,我添加了volumeClaimTemplates 配置:

 volumeClaimTemplates:
        - metadata:
            name: data
            creationTimestamp: null
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 10Gi
            volumeMode: Filesystem
Run Code Online (Sandbox Code Playgroud)

我在我的 Pod 中使用这个卷,如下所示:

volumeMounts:
   - name: data
      mountPath: /var/export/data
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我应该怎样解决这个问题?

Jul*_*sta 6

我相信您的部署定义是问题所在。

检查 k8s 文档,我发现了这个例子

kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}
Run Code Online (Sandbox Code Playgroud)

基本上,您需要volumeMounts在容器下定义 ,并引用该部分volumeMount下的有效卷volumes

只是为了强调,名称应该匹配,否则,它也会失败。