当我出于某种原因 push 部署时,我在Pod上收到错误消息:



以下是我的YAML:

它在本地运行,而不是在任何云解决方案上运行。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.16.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: ckan
  name: ckan
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: ckan
    spec:
      containers:
        image: slckan/docker_ckan
        name: ckan
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
            - name: ckan-home
              mountPath: /usr/lib/ckan/
              subPath: ckan
      volumes:
      - name: ckan-home
        persistentVolumeClaim:
          claimName: ckan-pv-home-claim
      restartPolicy: Always
status: {}

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ckan-pv-home-claim
  labels:
    io.kompose.service: ckan
spec:
  storageClassName: ckan-home-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  volumeMode: Filesystem
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ckan-home-sc
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=1000
  - gid=1000

最佳答案

您必须定义 PersistentVolume ,以提供由 PersistentVolumeClaim 占用的光盘空间。
当使用storageClass时,Kubernetes将启用“Dynamic Volume Provisioning” ,它不适用于本地文件系统。

解决您的问题:

  • 提供 PersistentVolume 来实现声明的约束(大小> = 100Mi)
  • PersistentVolumeClaim
  • 中删除storageClass -line
  • 从群集中删除 StorageClass

  • 这些乐段如何一起演奏?
    在创建部署状态描述时,通常知道应用程序需要哪种存储(量,速度,...)。
    为了使部署具有通用性,您希望避免对存储的严格依赖。 Kubernetes的卷抽象可让您以标准化方式提供和使用存储。
    PersistentVolumeClaim 用于在应用程序部署的同时提供存储约束。
    PersistentVolume 提供了准备使用的群集范围内的卷实例(“bound”)。一个PersistentVolume将绑定(bind)到一个声明。但是由于该声明的多个实例可以在多个节点上运行,因此该卷可能由多个节点accessed
    不带StorageClass的 PersistentVolume的被认为是静态
    "Dynamic Volume Provisioning"以及 StorageClass一起允许集群按需配置PersistentVolume。
    为了使该工作正常进行,给定的存储提供者必须支持provisioning-当出现不满意的 PersistentVolumeClaim 弹出窗口时,群集允许集群请求提供“新的” PersistentVolume

    持久卷示例
    为了找到如何指定内容的方法,最好查看API for your Kubernetes version,因此以下示例是从API-Reference of K8S 1.17构建的:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ckan-pv-home
      labels:
        type: local
    spec:
      capacity:
        storage: 100Mi
      hostPath:
        path: "/mnt/data/ckan"
    
    PersistentVolumeSpec 允许我们定义多个属性。
    我选择了hostPath卷,该卷将本地目录映射为该卷的内容。该容量使资源调度程序可以根据资源需求来识别此卷。

    其他资源:
  • Configure PersistentVolume Guide
  • 09-27 23:24