Принудительно установить PersistentVolumeClaim и Deployment в одной зоне доступности - PullRequest
0 голосов
/ 23 марта 2019

У меня есть кластер 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"
                  }
               }]
         }
      }
   }
}

1 Ответ

1 голос
/ 24 марта 2019

Вы можете попробовать установить аннотацию для региона и зоны доступности, как указано в здесь и здесь

...