![](/img/trans.png)
[英]0/2 nodes are available…2 pod has unbound immediate PersistentVolumeClaims
[英]0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims
正如文檔所述:
對於 StatefulSet 中定義的每個 VolumeClaimTemplate 條目,每個 Pod 都會收到一個 PersistentVolumeClaim。 在上面的 nginx 示例中,每個 Pod 接收一個 PersistentVolume,其 StorageClass 為 my-storage-class 和 1 Gib 的預配置存儲。 如果未指定 StorageClass,則將使用默認 StorageClass。 當一個 Pod 被(重新)調度到一個節點上時,它的 volumeMounts 掛載與其 PersistentVolume Claims 關聯的 PersistentVolumes。 請注意,當 Pod 或 StatefulSet 被刪除時,與 Pod 的 PersistentVolume Claims 關聯的 PersistentVolumes 不會被刪除。 這必須手動完成。
我感興趣的部分是: If no StorageClassis specified, then the default StorageClass will be used
我像這樣創建一個 StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: ches
name: ches
spec:
serviceName: ches
replicas: 1
selector:
matchLabels:
app: ches
template:
metadata:
labels:
app: ches
spec:
serviceAccountName: ches-serviceaccount
nodeSelector:
ches-worker: "true"
volumes:
- name: data
hostPath:
path: /data/test
containers:
- name: ches
image: [here I have the repo]
imagePullPolicy: Always
securityContext:
privileged: true
args:
- server
- --console-address
- :9011
- /data
env:
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: ches-keys
key: access-key
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: ches-keys
key: secret-key
ports:
- containerPort: 9000
hostPort: 9011
resources:
limits:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: data
mountPath: /data
imagePullSecrets:
- name: edge-storage-token
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
當然,我已經創建了秘密、imagePullSecrets 等,並將該節點標記為 ches-worker。
當我應用 yaml 文件時,pod 處於 Pending 狀態並且kubectl describe pod ches-0 -n ches
給出以下錯誤:
警告 FailedScheduling 6s default-scheduler 0/1 節點可用:1 個 pod 具有未綁定的即時 PersistentVolumeClaims。 preemption: 0/1 nodes available: 1 搶占對調度沒有幫助
我在這里錯過了什么嗎?
您需要創建一個 PV 才能綁定 PVC。 如果您希望從 PVC 聲明自動創建 PV,您需要在您的集群中安裝 Provisioner。
首先創建一個至少具有 PVC 所需空間量的 PV。 然后您可以應用包含 PVC 聲明的部署 yaml。
安裝 K3s 時,還會下載一個存儲類,使其成為默認存儲類。
使用kubectl get storageclass
檢查:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE 本地路徑 rancher.io/local-path Delete WaitForFirstConsumer false 8s
另一方面,K8s 集群不下載默認存儲類。
為了解決問題:
下載 rancher.io/local-path 存儲類:
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
使用kubectl get storageclass
檢查
將此存儲類(本地路徑)設置為默認值:
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.