VK Cloud logo

Көпаймақты сақтау кластарын пайдалану

Kubernetes подты жоспарлау кезінде оған сол подтың өзімен бірдей қолжетімділік аймағында орналасқан тұрақты томды (PV) динамикалық түрде дайындауы үшін алдын ала бапталған көпаймақты сақтау кластарын пайдаланыңыз. Kubernetes-та подты мұндай жоспарлау үшін Topology Spread Constraints механизмі жауап береді. Ол жұмыс жүктемесін (workload) әртүрлі қолжетімділік аймақтары арасында бөлу есебінен кластердің істен шығуға төзімділігін арттыруға және жоғары қолжетімділігін (high availability) қамтамасыз етуге көмектеседі.

Дайындық қадамдары

  1. Егер әлі жасалмаған болса, актуалды нұсқадағы кластерді жасаңыз.
  2. Егер әлі жасалмаған болса, kubectl құралын орнатып, баптаңыз.
  3. kubectl көмегімен кластерге қосылыңыз.

1. PV үшін көпаймақты сақтау класын (StorageClass) қосыңыз

  1. StorageClass үшін манифест файлын, мысалы csi-ceph-hdd.yaml, жасаңыз да, оған келесі мазмұнды қосыңыз:

    apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: csi-ceph-hddparameters:  type: ceph-hddprovisioner: cinder.csi.openstack.orgreclaimPolicy: DeletevolumeBindingMode: WaitForFirstConsumerallowVolumeExpansion: true

    Мұнда:

    • type: ceph-hdd PV үшін диск түрін сипаттайды.

    • volumeBindingMode: WaitForFirstConsumer тиісті PVC пайдаланатын алғашқы под жасалғанға дейін PV жасауды және оған байланыстыруды кейінге қалдырады. Осылайша, бұл под алдымен түйінге жоспарланады, содан кейін ғана Kubernetes ол үшін түйінмен бірдей қолжетімділік аймағындағы PV жасайды. Бұл под пен PV әртүрлі қолжетімділік аймақтарында болып қалатын жағдайды болдырмауға мүмкіндік береді.

      Егер бірінші іске қосудан кейін осы подты басқа қолжетімділік аймағына көшіруге әрекеттенсеңіз, ұқсас мәтіні бар қатені аласыз:

      3 node(s) had volume node affinity conflict

      Томдарды байланыстыру баптаулары туралы толығырақ Kubernetes ресми құжаттамасында.

  2. Кластерде жасалған манифесті қолданыңыз:

    kubectl apply -f csi-ceph-hdd.yaml

2. Қолданбаны жасаңыз

  1. test-statefulset аттар кеңістігі үшін StatefulSet түріндегі жұмыс жүктемесі контроллері манифестінің файлын жасаңыз:

    Мұнда:

    • replicas: 3 — под репликаларының саны.
    • maxSkew: 1 — түйіндер арасындағы подтар санының ең көп рұқсат етілген айырмашылығы. Бұл мысалда ол 1-ден аспауы керек.
  2. Манифест негізінде Kubernetes ресурсын жасаңыз:

    kubectl apply -f test-statefulset.yaml
  3. Жасалған подтар туралы ақпаратты келесі команда арқылы қараңыз:

    kubectl get pods -n test-statefulset -o wide

    Шығыс мысалы:

    NAME            READY   STATUS    RESTARTS   AGE     IP               NODE                            NOMINATED NODE   READINESS GATESzone-spread-0   1/1     Running   0          2m42s   10.100.173.129   test-multiaz-node-group-ud1-0   <none>           <none>zone-spread-1   1/1     Running   0          2m30s   10.100.100.128   test-multiaz-node-group-ud2-2   <none>           <none>zone-spread-2   1/1     Running   0          2m18s   10.100.204.193   test-multiaz-node-group-ud1-1   <none>           <none>

    Бұл 2 қолжетімділік аймағында 3 под жасалғанын білдіреді:

    • zone-spread-0UD1 аймағындағы test-multiaz-node-group-ud1-0 түйінінде;
    • zone-spread-1UD2 аймағындағы test-multiaz-node-group-ud2-2 түйінінде;
    • zone-spread-2UD1 аймағындағы test-multiaz-node-group-ud1-1 түйінінде.
  4. StorageClass үшін манифест негізінде әр под үшін оның қолжетімділік аймағында PV жасалғанына көз жеткізіңіз:

    1. Подтар үшін жасалған PV-лерді табыңыз:

      kubectl get pv -o wide
    2. Шығарылған кестеде жасалған csi-ceph-hdd сақтау класы негізіндегі әрбір PVC үшін NODE бағанының мәндерін табыңыз. Шығыс мысалы:

      NAME                                       ...   STATUS    STORAGECLASS   ...   NODE...                                        ...   ...       ...                      pvc-58fd0c60-e825-42a9-a187-b9f092bb077d         Bound     csi-ceph-hdd   ...   test-multiaz-node-group-ud1-0pvc-eb0ee40d-6580-4902-a832-ea192e32f910   ...   Bound     csi-ceph-hdd   ...   test-multiaz-node-group-ud2-2pvc-f32f486e-75e9-4ba5-b553-ffbbad180b91   ...   Bound     csi-ceph-hdd   ...   test-multiaz-node-group-ud1-1

Пайдаланылмайтын ресурстарды жойыңыз

Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер көпаймақты сақтау кластарының жұмысын тексеру үшін жасалған Kubernetes ресурстары енді қажет болмаса, оларды жойыңыз:

  1. Жасалған test-statefulset аттар кеңістігін және онымен байланысты ресурстарды жойыңыз:

    kubectl delete ns test-statefulset
  2. Жасалған PV-лерді жойыңыз.

ifdef(public)}

  1. Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.

{/ifdef}