为什么在EKS中看不到本地持久卷?



为了测试我是否可以使用docker映像在amazon上部署自己编写的软件,我有一个测试周集群。我写了一个小的测试脚本,读取和写入一个文件,看看我是否理解如何部署。我已经成功地在minikube中部署了它,使用了三个副本。副本都使用我本地文件系统上的共享目录,在minikube中,它通过卷

挂载到pod中。下一步是将其部署到eks集群中。然而,我不能让它在几周内工作。问题是pod看不到挂载目录的内容。

这并不完全出乎我的意料,因为在minikube中,我必须首先创建一个挂载到服务器上的本地目录。我没有在周服务器上做类似的事情。我的问题是我应该做些什么来使它工作(如果可能的话)。

我使用这个yaml文件在几周内创建了一个pod:

apiVersion: v1
kind: PersistentVolume
metadata:
name: "pv-volume"
spec:
storageClassName: local-storage
capacity:
storage: "1Gi"
accessModes:
- "ReadWriteOnce"
hostPath:
path: /data/k8s
type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "pv-claim"
spec:
storageClassName: local-storage
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "500M"
---
apiVersion: v1
kind: Pod
metadata:
name: ruudtest
spec:
containers:
- name: ruud
image: MYIMAGE
volumeMounts:
- name: cmount
mountPath: "/config"
volumes:
- name: cmount
persistentVolumeClaim:
claimName: pv-claim

所以我期望是我有一个本地目录,/data/k8s,这在pod中作为路径/config可见。当我应用这个yaml时,我得到一个pod,它给出一个错误消息,表明/data/k8s目录中的数据对pod不可见。

Kubectl在创建卷和claim

之后给我这个信息
[rdgon@NL013-PPDAPP015 probeer]$ kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   REASON   AGE
persistentvolume/pv-volume                                  1Gi        RWO            Retain           Available                                              15s
persistentvolume/pvc-156edfef-d272-4df6-ae16-09b12e1c2f03   1Gi        RWO            Delete           Bound       default/pv-claim   gp2                     9s
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/pv-claim   Bound    pvc-156edfef-d272-4df6-ae16-09b12e1c2f03   1Gi        RWO            gp2            15s

这似乎表明一切正常。但是,主节点的文件系统(我在其上运行yaml文件以创建卷)似乎不是pod访问/config目录时所查找的位置。

在EKS上,默认没有名为'local-storage'的存储类。

只有一个'gp2'存储类,当你不指定storageClassName时也会使用。

'gp2'存储类创建一个专用的EBS卷,并在需要时将其连接到Kubernetes节点,因此它不使用本地文件夹。您也不需要手动创建pv,只需要创建pvc:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "pv-claim"
spec:
storageClassName: gp2
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "500M"
---
apiVersion: v1
kind: Pod
metadata:
name: ruudtest
spec:
containers:
- name: ruud
image: MYIMAGE
volumeMounts:
- name: cmount
mountPath: "/config"
volumes:
- name: cmount
persistentVolumeClaim:
claimName: pv-claim

如果你想在Node本身上有一个文件夹,你可以使用'hostPath'卷,你不需要pv或pvc:

apiVersion: v1
kind: Pod
metadata:
name: ruudtest
spec:
containers:
- name: ruud
image: MYIMAGE
volumeMounts:
- name: cmount
mountPath: "/config"
volumes:
- name: cmount
hostPath:
path: /data/k8s

这是一个坏主意,因为如果另一个节点启动,数据将丢失,并且您的pod被移动到新节点。

如果它只用于配置,你也可以使用configMap,并将文件直接放在kubernetes manifest文件中。

apiVersion: v1
kind: ConfigMap
metadata:
name: ruud-config
data:
ruud.properties: |
my ruud.properties file content...
---
apiVersion: v1
kind: Pod
metadata:
name: ruudtest
spec:
containers:
- name: ruud
image: MYIMAGE
volumeMounts:
- name: cmount
mountPath: "/config"
volumes:
- name: cmount
configMap:
name: ruud-config

请检查pv是否已创建及其"边界";通过运行以下命令

kubectl get pv
kubectl get pvc

给出对象是否被正确创建的信息

您引用的本地路径无效。试一试:

apiVersion: v1
kind: Pod
metadata:
name: ruudtest
spec:
containers:
- name: ruud
image: MYIMAGE
volumeMounts:
- name: cmount
mountPath: /config
volumes:
- name: cmount
hostPath:
path: /data/k8s
type: DirectoryOrCreate  # <-- You need this since the directory may not exist on the node.

相关内容

  • 没有找到相关文章

最新更新