我尝试设置 Kubernetes 集群。我已经设置并运行了 Persistent Volume、Persistent Volume Claim 和 Storage 类,但是当我想从部署创建 pod 时,创建了 pod 但它卡在 Pending 状态。描述后,我只收到此警告“1 个节点有卷节点关联冲突。”有人能告诉我我的卷配置中缺少什么吗?
apiVersion: v1
kind: PersistentVolume
metadata:
creationTimestamp: null
labels:
io.kompose.service: mariadb-pv0
name: mariadb-pv0
spec:
volumeMode: Filesystem
storageClassName: local-storage
local:
path: "/home/gtcontainer/applications/data/db/mariadb"
accessModes:
- ReadWriteOnce
capacity:
storage: 2Gi
claimRef:
namespace: default
name: mariadb-claim0
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/cvl-gtv-42.corp.globaltelemetrics.eu
operator: In
values:
- master
status: {}
最佳答案
当持久卷声称正在使用的 pod 被调度到不同的区域而不是一个区域时,会发生错误“卷节点关联冲突”,因此实际的 pod 无法被调度,因为它无法连接到来自另一个区域的音量。要检查这一点,您可以查看所有持久卷的详细信息。 要检查这一点,请先获取您的 PVC:
$ kubectl get pvc -n <namespace>
然后获取持久卷的详细信息(不是卷声明)
$ kubectl get pv
找到与您的 PVC 对应的 PV 并描述它们
$ kubectl describe pv <pv1> <pv2>
您可以检查每个 PV 的 Source.VolumeID,它们很可能是不同的可用区,因此您的 pod 会给出相似性错误。 要解决此问题,请为单个区域创建一个存储类并在您的 PVC 中使用该存储类。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: region1storageclass
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
encrypted: "true" # if encryption required
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- eu-west-2b # this is the availability zone, will depend on your cloud provider
# multi-az can be added, but that defeats the purpose in our scenario
关于docker - Kubernetes Pod 警告 : 1 node(s) had volume node affinity conflict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51946393/