我StorageClass
为集群定义了以下aws eks
(3个节点)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: aws-gp2
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zones: us-west-2a, us-west-2b, us-west-2c, us-west-2d
fsType: ext4
reclaimPolicy: Retain
allowVolumeExpansion: true
并让eks
节点在us-west-2a, us-west-2b, us-west-2c
区域中运行。
当我尝试mysql
使用动态持久卷进行部署时
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pv-claim
namespace: default
labels:
app: mysql
env: prod
spec:
storageClassName: aws-gp2
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
kind: Deployment
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
metadata:
name: mysql
namespace: default
labels:
app: mysql
env: prod
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
但是 pod 并没有超越Pending
状态。
Pod 的事件日志说:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 8s (x7 over 20s) default-scheduler pod has unbound immediate PersistentVolumeClaims (repeated 3 times)
Warning FailedScheduling 8s (x2 over 8s) default-scheduler 0/3 nodes are available: 3 node(s) had volume node affinity conflict.
我不明白为什么 pod 无法安装 PVC。
我向 eks 集群添加了 1 个节点,因此所有 4 个节点都可以跨越 4 个 az,然后重新部署它mysql
并且它工作。仍然不知道真正的问题是什么。
是的,我知道这已经被讨论了百万次,我在你提出问题 2 年后才回答。很可能您已经忘记了这个问题,但社区记住了一切。
下一代的社区答案...
一切都已经在类似的堆栈问题Kubernetes Pod 警告中进行了讨论:1 个节点发生了卷节点关联冲突
@Sownak Roy 的回答:完整,没有我的修改。他们根本不需要那里..
当持久卷声称 Pod 正在使用的被调度在不同的区域而不是一个区域时,会发生错误“卷节点关联冲突”,因此实际的 Pod 无法被调度,因为它无法连接到卷另一个区域。要检查这一点,您可以查看所有持久卷的详细信息。要检查这一点,首先获取您的 PVC:
然后获取持久卷的详细信息(不是卷声明)
找到与您的 PVC 对应的 PV 并描述它们
您可以检查每个 PV 的 Source.VolumeID,它们很可能是不同的可用区,因此您的 pod 会给出关联错误。要解决此问题,请为单个区域创建一个存储类并在您的 PVC 中使用该存储类。