我使用 Helm Chart 在 EKS v 1.16 中部署了 jenkins 服务。 PV 和 PVC 被意外删除,因此我重新创建了 PV 和 PVC,如下所示:
PV.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-vol
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
volumeID: aws://us-east-2b/vol-xxxxxxxx
capacity:
storage: 120Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: jenkins-ci
namespace: ci
persistentVolumeReclaimPolicy: Retain
storageClassName: gp2
volumeMode: Filesystem
status:
phase: Bound
PVC.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-ci
namespace: ci
spec:
storageClassName: gp2
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 120Gi
volumeMode: Filesystem
volumeName: jenkins-vol
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 120Gi
phase: Bound
kubectl 描述 sc gp2
Name: gp2
IsDefaultClass: Yes
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"},"name":"gp2","namespace":""},"parameters":{"fsType":"ext4","type":"gp2"},"provisioner":"kubernetes.io/aws-ebs"}
,storageclass.kubernetes.io/is-default-class=true
Provisioner: kubernetes.io/aws-ebs
Parameters: fsType=ext4,type=gp2
AllowVolumeExpansion: True
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
我面临的问题是,当 pod 被安排在与 EBS 卷不同的可用区中的节点上时,它没有运行?我该如何解决这个问题
将节点选择器添加到您的部署文件中,这会将其与所需可用区域中的节点(在您的情况下为 us-east-2b)匹配:
nodeSelector:
topology.kubernetes.io/zone: us-east-2b
将以下标签添加到持久卷。
labels:
failure-domain.beta.kubernetes.io/region: us-east-2b
failure-domain.beta.kubernetes.io/zone: us-east-2b
示例:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.beta.kubernetes.io/gid: "1000"
labels:
failure-domain.beta.kubernetes.io/region: us-east-2b
failure-domain.beta.kubernetes.io/zone: us-east-2b
name: test-pv-1
spec:
accessModes:
- ReadWriteOnce
csi:
driver: ebs.csi.aws.com
fsType: xfs
volumeHandle: vol-0d075fdaa123cd0e
capacity:
storage: 100Gi
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
使用上述标签,pod 将自动在卷所在的同一可用区中运行。
根据持久卷文档,kubernetes 默认调度程序将使用 PV 定义中的 nodeAffinity 信息。
nodeAffinity 定义了限制可以从哪些节点访问该卷的约束。该字段会影响使用该卷的 Pod 的调度。
这意味着您必须确保 PV 定义如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-name
spec:
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.ebs.csi.aws.com/zone
operator: In
values:
- ap-south-1a
...
通常这应该会自动填充,但如果缺少此内容,那么这就是导致调度程序将 pod 调度到无法附加卷的节点上的原因。
这里提到的标签来自于节点标签。
apiVersion: v1
kind: Node
metadata:
labels:
...
topology.ebs.csi.aws.com/zone: ap-south-1a
topology.kubernetes.io/region: ap-south-1
topology.kubernetes.io/zone: ap-south-1a
希望,这对某人有帮助。