У меня есть кластер kubernetes в AWS с рабочими узлами ec2 в следующих AZ, а также соответствующие значения PersistentVolumes в каждом AZ.
us-west-2a
us-west-2b
us-west-2c
us-west-2d
Моя проблема в том, что я хочу создать Развертывание с монтированием тома, которое ссылается на PersistentVolumeClaim и гарантирует, что они приземляются в одном и том же AZ, потому что в настоящее время удачно, что и Deployment и PersistentVolumeClaim окажутся в одном AZ. Если они не приземляются в одном и том же AZ, развертывание не может найти монтирование тома.
Я создаю 4 PersistentVolumes, вручную создавая тома EBS в каждом AZ и копируя идентификатор в спецификацию.
{
"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"
}
}]
}
}
}
}