為了測驗我是否可以使用 docker 鏡像在亞馬遜上部署自寫軟體,我有一個測驗 eks 集群。我寫了一個小測驗腳本,它讀寫一個檔案,看看我是否理解如何部署。我已經使用三個副本成功地將它部署在 minikube 中。副本都使用我本地檔案系統上的共享目錄,并且在 minikube 中使用卷掛載到 pod
下一步是將其部署在 eks 集群中。但是,我無法讓它在 eks 中作業。問題是 pod 看不到掛載目錄的內容。
這并不完全讓我感到驚訝,因為在 minikube 中,我必須先創建一個掛載到服務器上的本地目錄。我還沒有在 eks 服務器上做過類似的事情。我的問題是我應該怎么做才能使這項作業(如果可能的話)。
我使用這個 yaml 檔案在 eks 中創建一個 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 在創建卷和宣告后向我提供此資訊
[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 目錄時所看到的位置。
uj5u.com熱心網友回復:
在 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
如果您想要節點本身上的檔案夾,則可以使用“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 清單檔案中。
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
uj5u.com熱心網友回復:
請通過運行以下命令檢查 pv 是否已創建及其“系結”到 PVC
kubectl get pv
kubectl get pvc
這將提供是否正確創建物件的資訊
uj5u.com熱心網友回復:
您參考的本地路徑無效。嘗試:
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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495023.html
下一篇:通過ClusterIP訪問Pod
