ื ืคื—ื™ื ืืจืขื™ื™ื ืขื ืžืขืงื‘ ืื—ืจ ืงื™ื‘ื•ืœืช ืื—ืกื•ืŸ: EmptyDir ืขืœ ืกื˜ืจื•ืื™ื“ื™ื

ื ืคื—ื™ื ืืจืขื™ื™ื ืขื ืžืขืงื‘ ืื—ืจ ืงื™ื‘ื•ืœืช ืื—ืกื•ืŸ: EmptyDir ืขืœ ืกื˜ืจื•ืื™ื“ื™ื

ื—ืœืง ืžื”ื™ื™ืฉื•ืžื™ื ืฆืจื™ื›ื™ื ื’ื ืœืื—ืกืŸ ื ืชื•ื ื™ื, ืื‘ืœ ื”ื ื“ื™ ื ื•ื—ื™ื ืขื ื”ืขื•ื‘ื“ื” ืฉื”ื ืชื•ื ื™ื ืœื ื™ื™ืฉืžืจื• ืœืื—ืจ ื”ืคืขืœื” ืžื—ื“ืฉ.

ืœื“ื•ื’ืžื”, ืฉื™ืจื•ืชื™ ืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ ืžื•ื’ื‘ืœื™ื ืขืœ ื™ื“ื™ ื–ื™ื›ืจื•ืŸ RAM, ืืš ื™ื›ื•ืœื™ื ื’ื ืœื”ืขื‘ื™ืจ ื ืชื•ื ื™ื ื”ืžืฉืžืฉื™ื ืœืขืชื™ื ื ื“ื™ืจื•ืช ืœืื—ืกื•ืŸ ืื™ื˜ื™ ื™ื•ืชืจ ืžื–ื™ื›ืจื•ืŸ RAM, ืขื ื”ืฉืคืขื” ืžื•ืขื˜ื” ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ื”ื›ื•ืœืœื™ื. ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžื•ื“ืขื™ื ืœื›ืš ืฉื™ื™ืชื›ืŸ ืฉื™ืฉ ืงืœื˜ ืœืงืจื™ืื” ื‘ืœื‘ื“ ื‘ืงื‘ืฆื™ื, ื›ื’ื•ืŸ ื”ื’ื“ืจื•ืช ืื• ืžืคืชื—ื•ืช ืกื•ื“ื™ื™ื.

ืœ-Kubernetes ื›ื‘ืจ ื™ืฉ ื›ืžื” ืกื•ื’ื™ื ื›ืจื›ื™ื ืืจืขื™ื™ื, ืื‘ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœื”ื ืžื•ื’ื‘ืœืช ืœืžื” ืฉืžื™ื•ืฉื ื‘-K8s.

ื—ึฒืœื•ึนืฃ ื ืคื—ื™ CSI ืืคืฉืจื• ืœื”ืจื—ื™ื‘ ืืช Kubernetes ืขื ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI ื›ื“ื™ ืœืกืคืง ืชืžื™ื›ื” ื‘ื ืคื—ื™ื ืžืงื•ืžื™ื™ื ืงืœื™ื. ื‘ื“ืจืš ื–ื• ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ืžื‘ื ื™ื ืฉืจื™ืจื•ืชื™ื™ื: ื”ื’ื“ืจื•ืช, ืกื•ื“ื•ืช, ื ืชื•ื ื™ ื–ื™ื”ื•ื™, ืžืฉืชื ื™ื ื•ื›ืŸ ื”ืœืื”. ื™ืฉ ืœืฉื ื•ืช ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI ื›ื“ื™ ืœืชืžื•ืš ื‘ืชื›ื•ื ื” ื–ื• ืฉืœ Kubernetes, ืฉื›ืŸ ื”ื”ื ื—ื” ื”ื™ื ืฉืžื ื”ืœื™ ื”ืชืงื ื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ืจื’ื™ืœื™ื ืœื ื™ืขื‘ื“ื• - ืืš ื”ื”ื ื—ื” ื”ื™ื ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื ืคื—ื™ื ื›ืืœื” ื‘ื›ืœ ืฆื•ืžืช ืฉื ื‘ื—ืจ ืขื‘ื•ืจ ื”ืคื•ื“.

ื–ื• ืขืฉื•ื™ื” ืœื”ื™ื•ืช ื‘ืขื™ื” ืขื‘ื•ืจ ืืžืฆืขื™ ืื—ืกื•ืŸ ืฉืฆื•ืจื›ื™ื ืžืฉืื‘ื™ ืžืืจื— ืžืฉืžืขื•ืชื™ื™ื ืื• ืขื‘ื•ืจ ืื—ืกื•ืŸ ืฉื–ืžื™ืŸ ืจืง ื‘ื—ืœืง ืžื”ืžืืจื—ื™ื. ืœื›ืŸ Kubernetes 1.19 ืžืฆื™ื’ ืฉืชื™ ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ ื ืคื— ื‘ื“ื™ืงืช ืืœืคื ื”ื“ื•ืžื•ืช ืžื‘ื—ื™ื ื” ืจืขื™ื•ื ื™ืช ืœื ืคื—ื™ EmptyDir:

  • ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืฉื™ืžื•ืฉ ื›ืœืœื™;

  • ืžืขืงื‘ ืื—ืจ ืงื™ื‘ื•ืœืช ืื—ืกื•ืŸ CSI.

ื™ืชืจื•ื ื•ืช ื”ื’ื™ืฉื” ื”ื—ื“ืฉื”:

  • ืื—ืกื•ืŸ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืงื•ืžื™ ืื• ืžื—ื•ื‘ืจ ื“ืจืš ืจืฉืช;

  • ืœื ืคื—ื™ื ื™ื›ื•ืœ ืœื”ื™ื•ืช ื’ื•ื“ืœ ืžื•ื’ื“ืจ ืฉืœื ื ื™ืชืŸ ืœื—ืจื•ื’ ืžืžื ื• ืขืœ ื™ื“ื™ ื”ื™ื™ืฉื•ื;

  • ืขื•ื‘ื“ ืขื ื›ืœ ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI ืฉืชื•ืžื›ื™ื ื‘ื”ืงืฆืื” ืฉืœ ืืžืฆืขื™ ืื—ืกื•ืŸ ืงื‘ื•ืขื™ื ื•(ื›ื“ื™ ืœืชืžื•ืš ื‘ืžืขืงื‘ ืงื™ื‘ื•ืœืช) ืžื™ื™ืฉืžื™ื ืืช ื”ืฉื™ื—ื” GetCapacity;

  • ื›ืจื›ื™ื ืขืฉื•ื™ื™ื ืœื›ืœื•ืœ ื ืชื•ื ื™ื ืจืืฉื•ื ื™ื™ื ื‘ื”ืชืื ืœืžื ื”ืœ ื”ื”ืชืงืŸ ื•ืœื”ื’ื“ืจื•ืช;

  • ื›ืœ ื”ืคืขื•ืœื•ืช ื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืขื ื ืคื— (ื™ืฆื™ืจืช ืชืžื•ื ืช ืžืฆื‘, ืฉื™ื ื•ื™ ื’ื•ื“ืœ ื•ื›ื•') ื ืชืžื›ื•ืช;

  • ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื ืคื—ื™ื ืขื ื›ืœ ื‘ืงืจ ื™ื™ืฉื•ื ืฉืžืงื‘ืœ ืžื•ื“ื•ืœ ืื• ืžืคืจื˜ ื ืคื—;

  • ืžืชื–ืžืŸ Kubernetes ื‘ื•ื—ืจ ืฆืžืชื™ื ืžืชืื™ืžื™ื ื‘ืขืฆืžื•, ื›ืš ืฉืื™ืŸ ืขื•ื“ ืฆื•ืจืš ืœื”ืงืฆื•ืช ื•ืœื”ื’ื“ื™ืจ ื”ืจื—ื‘ื•ืช ืžืชื–ืžืŸ ืื• ืœืฉื ื•ืช ืืช ื”-webhooks.

ืืคืฉืจื•ื™ื•ืช ื™ื™ืฉื•ื

ืœื›ืŸ, ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืฉื™ืžื•ืฉ ื›ืœืœื™ ืžืชืื™ืžื™ื ืœืžืงืจื™ ื”ืฉื™ืžื•ืฉ ื”ื‘ืื™ื:

ื–ื™ื›ืจื•ืŸ ืžืชืžืฉืš ื›ืชื—ืœื™ืฃ ืœ-RAM ืขื‘ื•ืจ memcached

ื”ืžื”ื“ื•ืจื•ืช ื”ืื—ืจื•ื ื•ืช ืฉืœ memcached ืชืžื™ื›ื” ื ื•ืกืคืช ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ ืžืชืžืฉืš (Intel Optane ื•ื›ื•', ืžืฉื•ืขืจ. ืžึฐืชื•ึผืจื’ึฐืžึธืŸ) ื‘ืžืงื•ื ื–ื™ื›ืจื•ืŸ RAM ืจื’ื™ืœ. ื‘ืขืช ืคืจื™ืกืช memcached ื“ืจืš ื‘ืงืจ ื™ื™ืฉื•ืžื™ื, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืืžืฆืขื™ ืื—ืกื•ืŸ ืืจืขื™ื™ื ืœืฉื™ืžื•ืฉ ื›ืœืœื™ ื›ื“ื™ ืœื‘ืงืฉ ื›ื™ ื ืคื— ื‘ื’ื•ื“ืœ ื ืชื•ืŸ ื™ื•ืงืฆื” ืž-PMEM ื‘ืืžืฆืขื•ืช ืžื ื”ืœ ื”ื”ืชืงืŸ CSI, ืœืžืฉืœ PMEM-CSI.

ืื—ืกื•ืŸ ืžืงื•ืžื™ ืฉืœ LVM ื›ืžืจื—ื‘ ืขื‘ื•ื“ื”

ื™ื™ืฉื•ืžื™ื ืฉืขื•ื‘ื“ื™ื ืขื ื ืชื•ื ื™ื ืฉื’ื“ื•ืœื™ื ืž-RAM ืขืฉื•ื™ื™ื ืœื“ืจื•ืฉ ืื—ืกื•ืŸ ืžืงื•ืžื™ ืขื ื’ื•ื“ืœ ืื• ืžื“ื“ื™ ื‘ื™ืฆื•ืขื™ื ืฉื ืคื—ื™ EmptyDir ืจื’ื™ืœื™ื ืž-Kubernetes ืœื ื™ื›ื•ืœื™ื ืœืกืคืง. ืœืžืฉืœ, ืœืฉื ื›ืš ื ื›ืชื‘ TopoLVM.

ื’ื™ืฉื” ืœืงืจื™ืื” ื‘ืœื‘ื“ ืขื‘ื•ืจ ื ืคื—ื™ ื ืชื•ื ื™ื

ื”ืงืฆืืช ื ืคื— ื™ื›ื•ืœื” ืœื’ืจื•ื ืœื™ืฆื™ืจืช ื ืคื— ืžืœื ื›ืืฉืจ:

ื ื™ืชืŸ ืœื”ืจื›ื™ื‘ ืืžืฆืขื™ ืื—ืกื•ืŸ ืืœื” ื‘ืžืฆื‘ ืงืจื™ืื” ื‘ืœื‘ื“.

ืึตื™ืš ืžึทืคืขึดื™ืœึดื™ื ืึถืช ื–ึถื”

ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช

ืชื›ื•ื ื” ืžืจื›ื–ื™ืช ืฉืœ ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช ื”ื™ื ืžืงื•ืจ ื”ื•ื•ืœื™ื•ื ื”ื—ื“ืฉ, EphemeralVolumeSource, ื”ืžื›ื™ืœ ืืช ื›ืœ ื”ืฉื“ื•ืช ืœื™ืฆื™ืจืช ื‘ืงืฉืช ื ืคื— (ื ืงืจืืช ื”ื™ืกื˜ื•ืจื™ืช ื‘ืงืฉืช ื ืคื— ืžืชืžืฉื›ืช, PVC). ื‘ืงืจ ื—ื“ืฉ ื ื›ื ืก kube-controller-manager ืžืกืชื›ืœ ืขืœ ื”ืชืจืžื™ืœื™ื ืฉื™ื•ืฆืจื™ื ืžืงื•ืจ ื ืคื— ื›ื–ื”, ื•ืื– ื™ื•ืฆืจ PVC ืขื‘ื•ืจ ื”ืชืจืžื™ืœื™ื ื”ืืœื”. ืขื‘ื•ืจ ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ ื”-CSI, ื‘ืงืฉื” ื–ื• ื ืจืื™ืช ื›ืžื• ื”ืื—ืจื•ืช, ื›ืš ืฉืื™ืŸ ืฆื•ืจืš ื‘ืชืžื™ื›ื” ืžื™ื•ื—ื“ืช ื›ืืŸ.

ื›ืœ ืขื•ื“ ืงื™ื™ืžื™ื PVC ื›ืืœื”, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ืžื• ื›ืœ ื‘ืงืฉื” ืื—ืจืช ื‘ื•ื•ืœื™ื•ื. ื‘ืคืจื˜, ื ื™ืชืŸ ืœื”ืชื™ื™ื—ืก ืืœื™ื”ื ื›ืžืงื•ืจ ื ืชื•ื ื™ื ื‘ืขืช ื”ืขืชืงืช ืืžืฆืขื™ ืื—ืกื•ืŸ ืื• ื™ืฆื™ืจืช ืชืžื•ื ืช ืžืฆื‘ ืžืืžืฆืขื™ ืื—ืกื•ืŸ. ื—ืคืฅ PVC ืžื›ื™ืœ ื’ื ืืช ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ื›ืจืš.

ื”ืฉืžื•ืช ืฉืœ PVC ืฉื ื•ืฆืจื• ืื•ื˜ื•ืžื˜ื™ืช ืžื•ื’ื“ืจื™ื ืžืจืืฉ: ื”ื ืฉื™ืœื•ื‘ ืฉืœ ืฉื ื”ืชืจืžื™ืœ ื•ืฉื ื”ื›ืจืš, ืžื•ืคืจื“ื™ื ื‘ืžืงืฃ. ืฉืžื•ืช ืžื•ื’ื“ืจื™ื ืžืจืืฉ ืžืงืœื™ื ืขืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”-PVC ื›ื™ ืื™ื ืš ืฆืจื™ืš ืœื—ืคืฉ ืื•ืชื• ืื ืืชื” ื™ื•ื“ืข ืืช ืฉื ื”ืชืจืžื™ืœ ื•ืฉื ื”ื›ืจืš. ื”ื—ื™ืกืจื•ืŸ ื”ื•ื ืฉื™ื™ืชื›ืŸ ืฉื”ืฉื ื›ื‘ืจ ื‘ืฉื™ืžื•ืฉ, ืืฉืจ ืžื–ื•ื”ื” ืขืœ ื™ื“ื™ Kubernetes ื•ื›ืชื•ืฆืื” ืžื›ืš ื”ืคื•ื“ ื ื—ืกื ืžืœื”ืชื—ื™ืœ.

ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉื”ื•ื•ืœื™ื•ื ื ืžื—ืง ื™ื—ื“ ืขื ื”ืคื•ื“, ื”ื‘ืงืจ ืžื’ื™ืฉ ื‘ืงืฉื” ืœื•ื•ืœื™ื•ื ืชื—ืช ื”ื‘ืขืœื™ื. ื›ืืฉืจ ื”ืคื•ื“ ื ืžื—ืง, ืคื•ืขืœ ืžื ื’ื ื•ืŸ ืื™ืกื•ืฃ ื”ืืฉืคื” ื”ืกื˜ื ื“ืจื˜ื™, ืฉืžื•ื—ืง ื’ื ืืช ื”ื‘ืงืฉื” ื•ื’ื ืืช ื”ื•ื•ืœื™ื•ื.

ื”ื‘ืงืฉื•ืช ืžื•ืชืืžื•ืช ืขืœ ื™ื“ื™ ืžื ื”ืœ ื”ืื—ืกื•ืŸ ื‘ืืžืฆืขื•ืช ื”ืžื ื’ื ื•ืŸ ื”ืจื’ื™ืœ ืฉืœ ืžื—ืœืงืช ื”ืื—ืกื•ืŸ. ืืžื ื ืฉื™ืขื•ืจื™ื ืขื ื›ืจื™ื›ื” ืžื™ื™ื“ื™ืช ื•ืžืื•ื—ืจืช (aka WaitForFirstConsumer) ื ืชืžื›ื™ื, ืขื‘ื•ืจ ื›ืจื›ื™ื ืืจืขื™ื™ื ื–ื” ื”ื’ื™ื•ื ื™ ืœื”ืฉืชืžืฉ WaitForFirstConsumer, ืื– ื”ืžืชื–ืžืŸ ื™ื›ื•ืœ ืœืฉืงื•ืœ ื’ื ืืช ื”ืฉื™ืžื•ืฉ ื‘ืฆืžืช ื•ื’ื ืืช ื–ืžื™ื ื•ืช ื”ืื—ืกื•ืŸ ื‘ืขืช โ€‹โ€‹ื‘ื—ื™ืจืช ืฆื•ืžืช. ืชื›ื•ื ื” ื—ื“ืฉื” ืžื•ืคื™ืขื” ื›ืืŸ.

ืžืขืงื‘ ืื—ืจ ืงื™ื‘ื•ืœืช ืื—ืกื•ืŸ

ื‘ื“ืจืš ื›ืœืœ ืœืžืชื–ืžืŸ ืื™ืŸ ื™ื“ืข ื”ื™ื›ืŸ ืžื ื”ืœ ื”ืชืงืŸ CSI ื™ืฆื•ืจ ืืช ืืžืฆืขื™ ื”ืื—ืกื•ืŸ. ืื™ืŸ ื’ื ื“ืจืš ื”ืžืชื–ืžืŸ ืœื™ืฆื•ืจ ืงืฉืจ ื™ืฉื™ืจื•ืช ืขื ื”ื ื”ื’ ื›ื“ื™ ืœื‘ืงืฉ ืžื™ื“ืข ื–ื”. ืœื›ืŸ, ื”ืžืชื–ืžืŸ ืกื•ืงืจ ืฆืžืชื™ื ืขื“ ืฉื”ื•ื ืžื•ืฆื ืื—ื“ ืฉื ื™ืชืŸ ืœื’ืฉืช ืืœื™ื• ืœื›ืจื›ื™ื (ื›ืจื™ื›ื” ืžืื•ื—ืจืช) ืื• ืžืฉืื™ืจ ืืช ื‘ื—ื™ืจืช ื”ืžื™ืงื•ื ืœื—ืœื•ื˜ื™ืŸ ืœื ื”ื’ (ื›ืจื™ื›ื” ืžื™ื™ื“ื™ืช).

ื—ื“ืฉ API CSIStorageCapacity, ืฉื ืžืฆื ื‘ืฉืœื‘ ืืœืคื, ืžืืคืฉืจ ืœืื—ืกืŸ ืืช ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื ื‘-etcd ื›ืš ืฉื”ื ื™ื”ื™ื• ื–ืžื™ื ื™ื ืœืžืชื–ืžืŸ. ืฉืœื ื›ืžื• ืชืžื™ื›ื” ื‘ื ืคื—ื™ื ืืจืขื™ื™ื ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช, ื›ืืฉืจ ืืชื” ืคื•ืจืก ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ, ืขืœื™ืš ืœื”ืคืขื™ืœ ืžืขืงื‘ ืื—ืจ ืงื™ื‘ื•ืœืช ื”ืื—ืกื•ืŸ: external-provisioner ืฆืจื™ืš ืœืคืจืกื ืืช ืžื™ื“ืข ื”ืงื™ื‘ื•ืœืช ืฉื”ืชืงื‘ืœ ืžื”ื ื”ื’ ื“ืจืš ืจื’ื™ืœ GetCapacity.

ืื ื”ืžืชื–ืžืŸ ืฆืจื™ืš ืœื‘ื—ื•ืจ ืฆื•ืžืช ืขื‘ื•ืจ ืคื•ื“ ืขื ื ืคื— ืœื ืžืื•ื’ื“ ืฉืžืฉืชืžืฉ ื‘ื›ืจื™ื›ื” ืžืื•ื—ืจืช, ื•ื”ืžื ื”ืœ ื”ืชืงืŸ ืื™ืคืฉืจ ืชื›ื•ื ื” ื–ื• ื‘ืžื”ืœืš ื”ืคืจื™ืกื” ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ื”ื“ื’ืœ CSIDriver.storageCapacity, ื•ืื– ืฆืžืชื™ื ืฉืื™ืŸ ืœื”ื ืžืกืคื™ืง ืงื™ื‘ื•ืœืช ืื—ืกื•ืŸ ื™ื™ืžื—ืงื• ืื•ื˜ื•ืžื˜ื™ืช. ื–ื” ืขื•ื‘ื“ ื”ืŸ ืขื‘ื•ืจ ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช ื•ื”ืŸ ืขื‘ื•ืจ ื›ืจื›ื™ื ืžืชืžืฉื›ื™ื, ืืš ืœื ืขื‘ื•ืจ ื›ืจื›ื™ื ืืจืขื™ื™ื ืฉืœ CSI ืžื›ื™ื•ื•ืŸ ืฉืœื ื ื™ืชืŸ ืœืงืจื•ื ืืช ื”ืคืจืžื˜ืจื™ื ืฉืœื”ื ืขืœ ื™ื“ื™ Kubernetes.

ื›ืจื’ื™ืœ, ืืžืฆืขื™ ืื—ืกื•ืŸ ืžืงื•ืฉืจื™ื ืžื™ื™ื“ื™ืช ื ื•ืฆืจื™ื ืœืคื ื™ ืชื–ืžื•ืŸ ื”ืคื•ื“ื™ื, ื•ื”ืžื™ืงื•ื ืฉืœื”ื ื ื‘ื—ืจ ืขืœ ื™ื“ื™ ืžื ื”ืœ ื”ืื—ืกื•ืŸ, ื›ืš ื‘ืขืช ื”ื’ื“ืจืช ื”ืชืฆื•ืจื” external-provisioner ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžื—ืœืงื•ืช ืื—ืกื•ืŸ ืขื ื›ืจื™ื›ื” ืžื™ื™ื“ื™ืช ืžื“ืœื’ื™ื, ืžื›ื™ื•ื•ืŸ ืฉื‘ื›ืœ ืžืงืจื” ืœื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื ืชื•ื ื™ื ืืœื•.

ืžื›ื™ื•ื•ืŸ ืฉืžืชื–ืžืŸ kubernetes ื ืืœืฅ ืœืขื‘ื•ื“ ืขื ืžื™ื“ืข ืฉืขืœื•ืœ ืœื”ื™ื•ืช ืœื ืžืขื•ื“ื›ืŸ, ืื™ืŸ ืขืจื•ื‘ื” ืœื›ืš ืฉื”ืงื™ื‘ื•ืœืช ืชื”ื™ื” ื–ืžื™ื ื” ื‘ื›ืœ ืžืงืจื” ื‘ืขืช ื™ืฆื™ืจืช ืืžืฆืขื™ ื”ืื—ืกื•ืŸ, ืืš ื”ืกื™ื›ื•ื™ ืฉื”ื•ื ื™ื™ื•ื•ืฆืจ ืœืœื ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื ื’ื“ืœ.

ื .ื‘. ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืžื™ื“ืข ืžืคื•ืจื˜ ื™ื•ืชืจ, ื›ืžื• ื’ื "ืœืชืจื’ืœ ื‘ื‘ื˜ื—ื” ืขืœ ื“ื•ื›ืŸ ื”ื—ืชื•ืœื™ื", ื•ื‘ืžืงืจื” ืฉืœ ืžืฆื‘ ืœื ืžื•ื‘ืŸ ืœื—ืœื•ื˜ื™ืŸ, ืœืงื‘ืœ ืกื™ื•ืข ื˜ื›ื ื™ ืžื•ืกืžืš ื‘ืงื•ืจืกื™ื ืื™ื ื˜ื ืกื™ื‘ื™ื™ื - ื‘ืกื™ืก Kubernetes ื™ืชืงื™ื™ื ื‘-28-30 ื‘ืกืคื˜ืžื‘ืจ, ื•ืœืžื•ืžื—ื™ื ืžืชืงื“ืžื™ื ื™ื•ืชืจ Kubernetes Mega 14โ€“16 ื‘ืื•ืงื˜ื•ื‘ืจ.

ืื‘ื˜ื—ื”

CSIStorageCapacity

ืื•ื‘ื™ื™ืงื˜ื™ CSIStorageCapacity ืฉื•ื›ื ื™ื ื‘ืžืจื—ื‘ื™ ืฉืžื•ืช; ื‘ืขืช ื”ืคืขืœืช ื›ืœ ืžื ื”ืœ ื”ืชืงืŸ CSI ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœื•, ืžื•ืžืœืฅ ืœื”ื’ื‘ื™ืœ ืืช ื–ื›ื•ื™ื•ืช RBAC ืœ-CSIStorageCapacity ื‘ืžืจื—ื‘ ื–ื” ืžื›ื™ื•ื•ืŸ ืฉื‘ืจื•ืจ ืžื”ื™ื›ืŸ ืžื’ื™ืขื™ื ื”ื ืชื•ื ื™ื. Kubernetes ืœื ื‘ื•ื“ืง ืืช ื–ื” ื‘ื›ืœ ืžืงืจื”, ื•ื‘ื“ืจืš ื›ืœืœ ืžื ื”ืœื™ ื”ืชืงื ื™ื ืžื•ื›ื ืกื™ื ืœืื•ืชื• ืžืจื—ื‘ ืฉืžื•ืช, ื›ืš ืฉื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ื“ืจื™ื™ื‘ืจื™ื ืฆืคื•ื™ื™ื ืœืขื‘ื•ื“ ื•ืœื ืœืคืจืกื ื ืชื•ื ื™ื ืฉื’ื•ื™ื™ื (ื•ื›ืืŸ ื”ื›ืจื˜ื™ืก ืฉืœื™ ื ื›ืฉืœ, ืžืฉื•ืขืจ. ืžืชืจื’ื ื”ืžื‘ื•ืกืก ืขืœ ื‘ื“ื™ื—ื” ืžื–ื•ืงืŸ)

ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืžื˜ืจื•ืช ื›ืœืœื™ื•ืช

ืื ืœืžืฉืชืžืฉื™ื ื™ืฉ ื–ื›ื•ื™ื•ืช ืœื™ืฆื•ืจ ืคื•ื“ (ื‘ืื•ืคืŸ ื™ืฉื™ืจ ืื• ืขืงื™ืฃ), ื”ื ื™ื•ื›ืœื• ื’ื ืœื™ืฆื•ืจ ื›ืจื›ื™ื ืืจืขื™ื™ื ืœืฉื™ืžื•ืฉ ื›ืœืœื™, ื’ื ืื ืื™ืŸ ืœื”ื ื–ื›ื•ื™ื•ืช ืœื™ืฆื•ืจ ื‘ืงืฉื” ื‘ื ืคื—. ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉื‘ื“ื™ืงื•ืช ื”ืจืฉืื•ืช RBAC ืžื•ื—ืœื•ืช ืขืœ ื”ื‘ืงืจ ืฉื™ื•ืฆืจ ืืช ื”-PVC, ืœื ืขืœ ื”ืžืฉืชืžืฉ. ื–ื” ื”ืฉื™ื ื•ื™ ื”ืขื™ืงืจื™ ืฉืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืœื—ืฉื‘ื•ืŸ ืฉืœืš, ืœืคื ื™ ื”ืคืขืœืช ืชื›ื•ื ื” ื–ื• ื‘ืืฉื›ื•ืœื•ืช ืฉื‘ื”ื ืœื ืืžื•ืจื•ืช ืœื”ื™ื•ืช ืœืžืฉืชืžืฉื™ื ืœื ืžื”ื™ืžื ื™ื ื–ื›ื•ื™ื•ืช ืœื™ืฆื•ืจ ืืžืฆืขื™ ืื—ืกื•ืŸ.

ื“ื•ื’ืžื”

ื ืคืจื“ ืกื ื™ืฃ PMEM-CSI ืžื›ื™ืœ ืืช ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื”ื“ืจื•ืฉื™ื ืœื”ืคืขืœืช ืืฉื›ื•ืœ Kubernetes 1.19 ื‘ืชื•ืš ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช QEMU ืขื ื›ืœ ื”ืชื›ื•ื ื•ืช ื‘ืฉืœื‘ ื”ืืœืคื. ืงื•ื“ ืžื ื”ืœ ื”ื”ืชืงืŸ ืœื ื”ืฉืชื ื”, ืจืง ื”ืคืจื™ืกื” ื”ืฉืชื ืชื”.

ื‘ืžื›ื•ื ื” ืžืชืื™ืžื” (ืœื™ื ื•ืงืก, ืžืฉืชืžืฉ ืจื’ื™ืœ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืกึทื•ึธืจ, ืชืจืื” ื›ืืŸ ืคืจื˜ื™ื) ืคืงื•ื“ื•ืช ืืœื• ื™ืขืœื• ืืช ื”ืืฉื›ื•ืœ ื•ื™ืชืงื™ื ื• ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ PMEM-CSI:

git clone --branch=kubernetes-1-19-blog-post https://github.com/intel/pmem-csi.git
cd pmem-csi
export TEST_KUBERNETES_VERSION=1.19 TEST_FEATURE_GATES=CSIStorageCapacity=true,GenericEphemeralVolume=true TEST_PMEM_REGISTRY=intel
make start && echo && test/setup-deployment.sh

ืœืื—ืจ ืฉื”ื›ืœ ืขื•ื‘ื“, ื”ืคืœื˜ ื™ื›ื™ืœ ื”ื•ืจืื•ืช ืฉื™ืžื•ืฉ:

The test cluster is ready. Log in with [...]/pmem-csi/_work/pmem-govm/ssh.0, run
kubectl once logged in.  Alternatively, use kubectl directly with the
following env variable:
   KUBECONFIG=[...]/pmem-csi/_work/pmem-govm/kube.config

secret/pmem-csi-registry-secrets created
secret/pmem-csi-node-secrets created
serviceaccount/pmem-csi-controller created
...
To try out the pmem-csi driver ephemeral volumes:
   cat deploy/kubernetes-1.19/pmem-app-ephemeral.yaml |
   [...]/pmem-csi/_work/pmem-govm/ssh.0 kubectl create -f -

ืื•ื‘ื™ื™ืงื˜ื™ CSIStorageCapacity ืœื ื ื•ืขื“ื• ืœื”ื™ืงืจื ืขืœ ื™ื“ื™ ื‘ื ื™ ืื“ื, ื•ืœื›ืŸ ื ื“ืจืฉ ืขื™ื‘ื•ื“ ืžืกื•ื™ื. ืžืกื ื ื™ ืชื‘ื ื™ืช Golang ื™ืฆื™ื’ื• ืืช ืžื—ืœืงื•ืช ื”ืื—ืกื•ืŸ, ื“ื•ื’ืžื” ื–ื• ืชืฆื™ื’ ืืช ื”ืฉื, ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ื•ื”ืงื™ื‘ื•ืœืช:

$ kubectl get 
        -o go-template='{{range .items}}{{if eq .storageClassName "pmem-csi-sc-late-binding"}}{{.metadata.name}} {{.nodeTopology.matchLabels}} {{.capacity}}
{{end}}{{end}}' 
        csistoragecapacities
csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 30716Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

ืœืื•ื‘ื™ื™ืงื˜ ื‘ื•ื“ื“ ื™ืฉ ืืช ื”ืชื•ื›ืŸ ื”ื‘ื:

$ kubectl describe csistoragecapacities/csisc-6cw8j
Name:         csisc-sqdnt
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  storage.k8s.io/v1alpha1
Capacity:     30716Mi
Kind:         CSIStorageCapacity
Metadata:
  Creation Timestamp:  2020-08-11T15:41:03Z
  Generate Name:       csisc-
  Managed Fields:
    ...
  Owner References:
    API Version:     apps/v1
    Controller:      true
    Kind:            StatefulSet
    Name:            pmem-csi-controller
    UID:             590237f9-1eb4-4208-b37b-5f7eab4597d1
  Resource Version:  2994
  Self Link:         /apis/storage.k8s.io/v1alpha1/namespaces/default/csistoragecapacities/csisc-sqdnt
  UID:               da36215b-3b9d-404a-a4c7-3f1c3502ab13
Node Topology:
  Match Labels:
    pmem-csi.intel.com/node:  pmem-csi-pmem-govm-worker1
Storage Class Name:           pmem-csi-sc-late-binding
Events:                       <none>

ื‘ื•ืื• ื ื ืกื” ืœื™ืฆื•ืจ ืืคืœื™ืงืฆื™ื™ืช ื”ื“ื’ืžื” ืขื ื ืคื— ื—ื“-ืคืขืžื™ ืฉืœ ืžื˜ืจื” ื›ืœืœื™ืช. ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ pmem-app-ephemeral.yaml:

# This example Pod definition demonstrates
# how to use generic ephemeral inline volumes
# with a PMEM-CSI storage class.
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline-volume
spec:
  containers:
    - name: my-frontend
      image: intel/pmem-csi-driver-test:v0.7.14
      command: [ "sleep", "100000" ]
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-volume
  volumes:
  - name: my-csi-volume
    ephemeral:
      volumeClaimTemplate:
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 4Gi
          storageClassName: pmem-csi-sc-late-binding

ืœืื—ืจ ื”ื™ืฆื™ืจื”, ื›ืคื™ ืฉืžื•ืฆื’ ื‘ื”ื•ืจืื•ืช ืœืขื™ืœ, ื™ืฉ ืœื ื• ื›ืขืช ืชืจืžื™ืœ ื•-PVC ื ื•ืกืคื™ื:

$ kubectl get pods/my-csi-app-inline-volume -o wide
NAME                       READY   STATUS    RESTARTS   AGE     IP          NODE                         NOMINATED NODE   READINESS GATES
my-csi-app-inline-volume   1/1     Running   0          6m58s   10.36.0.2   pmem-csi-pmem-govm-worker1   <none>           <none>
$ kubectl get pvc/my-csi-app-inline-volume-my-csi-volume
NAME                                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
my-csi-app-inline-volume-my-csi-volume   Bound    pvc-c11eb7ab-a4fa-46fe-b515-b366be908823   4Gi        RWO            pmem-csi-sc-late-binding   9m21s

ื‘ืขืœ PVC - ืชื—ืช:

$ kubectl get -o yaml pvc/my-csi-app-inline-volume-my-csi-volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: pmem-csi.intel.com
    volume.kubernetes.io/selected-node: pmem-csi-pmem-govm-worker1
  creationTimestamp: "2020-08-11T15:44:57Z"
  finalizers:
  - kubernetes.io/pvc-protection
  managedFields:
    ...
  name: my-csi-app-inline-volume-my-csi-volume
  namespace: default
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: true
    controller: true
    kind: Pod
    name: my-csi-app-inline-volume
    uid: 75c925bf-ca8e-441a-ac67-f190b7a2265f
...

ืžื™ื“ืข ืžืขื•ื“ื›ืŸ ืฆืคื•ื™ ืขื‘ื•ืจ pmem-csi-pmem-govm-worker1:

csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 26620Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

ืื ืืคืœื™ืงืฆื™ื” ืื—ืจืช ืฆืจื™ื›ื” ื™ื•ืชืจ ืž-26620Mi, ื”ืžืชื–ืžืŸ ืœื ื™ื™ืงื— ื‘ื—ืฉื‘ื•ืŸ pmem-csi-pmem-govm-worker1 ื‘ื›ืœ ืžืงืจื”.

ืžื” ื”ืœืื”?

ืฉืชื™ ื”ืชื›ื•ื ื•ืช ืขื“ื™ื™ืŸ ื‘ืคื™ืชื•ื—. ืžืกืคืจ ื™ื™ืฉื•ืžื™ื ื ืคืชื—ื• ื‘ืžื”ืœืš ื‘ื“ื™ืงื•ืช ืืœืคื. ืงื™ืฉื•ืจื™ ื”ืฆืขืช ื”ืฉื™ืคื•ืจ ืžืชืขื“ื™ื ืืช ื”ืขื‘ื•ื“ื” ืฉืฆืจื™ืš ืœืขืฉื•ืช ื›ื“ื™ ืœืขื‘ื•ืจ ืœืฉืœื‘ ื”ื‘ื˜ื, ื•ื›ืŸ ืื™ืœื• ื—ืœื•ืคื•ืช ื›ื‘ืจ ื ื‘ื—ื ื• ื•ื ื“ื—ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”