我在 AWS 中有一个 kubernetes 集群,在以下 AZ 中有 ec2 工作节点,每个 AZ 中有相应的 PersistentVolume。
us-west-2a
us-west-2b
us-west-2c
us-west-2d
我的问题是我想创建一个带有引用 PersistentVolumeClaim 的卷挂载的 Deployment,并保证它们位于同一个 AZ,因为现在很幸运,Deployment 和 PersistentVolumeClaim 最终都在同一个 AZ 中。如果它们不在同一个 AZ 中,则部署无法找到卷挂载。
我通过在每个 AZ 中手动创建 EBS 卷并将 ID 复制到规范来创建 4 个 PersistentVolume。
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "pv-2"
},
"spec": {
"capacity": {
"storage": "1Gi"
},
"accessModes": [
"ReadWriteOnce"
],
"persistentVolumeReclaimPolicy": "Retain",
"awsElasticBlockStore": {
"volumeID": "vol-053f78f0c16e5f20e",
"fsType": "ext4"
}
}
}
{
"kind": "PersistentVolumeClaim",
"apiVersion": "v1",
"metadata": {
"name": "mydata",
"namespace": "staging"
},
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"resources": {
"requests": {
"storage": "10Mi"
}
}
}
}
{
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": {
"name": "myapp",
"namespace": "default",
"labels": {
"app": "myapp"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "myapp"
}
},
"template": {
"metadata": {
"labels": {
"app": "myapp"
}
},
"spec": {
"containers": [
{
"name": "hello",
"image": "centos:7",
"volumeMounts": [ {
"name":"mydata",
"mountPath":"/etc/data/"
} ]
}
],
"volumes": [ {
"name":"mydata",
"persistentVolumeClaim":{
"claimName":"mydata"
}
}]
}
}
}
}