Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° с отслСТиваниСм Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°: EmptyDir Π½Π° стСроидах

Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° с отслСТиваниСм Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°: EmptyDir Π½Π° стСроидах

НСкоторым прилоТСниям Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΎΠ½ΠΈ достаточно спокойно относятся ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны послС пСрСзапуска.

НапримСр сСрвисы для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ, с нСбольшим влияниСм Π½Π° ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ настройки ΠΈΠ»ΠΈ сСкрСтныС ΠΊΠ»ΡŽΡ‡ΠΈ.

Π’ Kubernetes ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² эфСмСрных Ρ‚ΠΎΠΌΠΎΠ², Π½ΠΎ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² K8s.

Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° CSI ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Kubernetes с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² CSI для обСспСчСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ лСгковСсных Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΠΌΠΎΠ². Π­Ρ‚ΠΈΠΌ способом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ структуры: настройки, сСкрСты, Π΄Π°Π½Π½Ρ‹Π΅ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. CSI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Kubernetes, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ стандартизированныС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ — Π½ΠΎ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° любом ΡƒΠ·Π»Π΅, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ для ΠΏΠΎΠ΄Π°.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для Ρ‚ΠΎΠΌΠΎΠ² со Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ рСсурсов ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, доступного Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Kubernetes 1.19 прСдставлСны Π΄Π²Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½Ρ†ΠΈΠΈ Ρ‚ΠΎΠΌΠΎΠ² для Π°Π»ΡŒΡ„Π°-тСстирования, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π½Π° Ρ‚ΠΎΠΌΠ° EmptyDir:

  • эфСмСрныС Ρ‚ΠΎΠΌΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния;

  • отслСТиваниС Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° CSI.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎ сСти;

  • Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ;

  • Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ CSI, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ прСдоставлСниС постоянных Ρ‚ΠΎΠΌΠΎΠ² ΠΈ (для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ отслСТивания Смкости) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π²Ρ‹Π·ΠΎΠ² GetCapacity;

  • Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, зависящиС ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;

  • всС Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚ΠΎΠΌΠΎΠΌ (созданиС снимка состояния, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Ρ‚.ΠΏ.) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ;

  • Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ модуля ΠΈΠ»ΠΈ Ρ‚ΠΎΠΌΠ°;

  • ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Kubernetes сам Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ подходящиС ΡƒΠ·Π»Ρ‹, поэтому большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ webhooks.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ примСнСния

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ эфСмСрныС Ρ‚ΠΎΠΌΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния подходят для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния:

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти для memcached

ПослСдниС выпуски memcached Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ использования постоянной памяти (Intel Optane ΠΈ Ρ‚.ΠΏ., ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°) вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠŸΡ€ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ memcached Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ· PMEM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CSI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ PMEM-CSI.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ LVM Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ локальноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° EmptyDir ΠΎΡ‚ Kubernetes. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для этой Ρ†Π΅Π»ΠΈ Π±Ρ‹Π» написан TopoLVM.

Доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния для Ρ‚ΠΎΠΌΠΎΠ² с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ созданию Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΌΠ° ΠΏΡ€ΠΈ:

Π­Ρ‚ΠΈ Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ смонтированы Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния являСтся Π½ΠΎΠ²Ρ‹ΠΉ источник Ρ‚ΠΎΠΌΠ°, EphemeralVolumeSource, содСрТащий всС поля для создания запроса ΠΊ Ρ‚ΠΎΠΌΡƒ (историчСски это называСтся запрос Π½Π° постоянный Ρ‚ΠΎΠΌ, PVC). Новый ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π² kube-controller-manager просматриваСт ΠΏΠΎΠ΄Ρ‹, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ источник Ρ‚ΠΎΠΌΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ создаСт PVC для этих ΠΏΠΎΠ΄ΠΎΠ². Для CSI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° этот запрос выглядит Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅, поэтому здСсь Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ особСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Пока Ρ‚Π°ΠΊΠΈΠ΅ PVC ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ — ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ запросы Π½Π° Ρ‚ΠΎΠΌ. Π’ частности ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылкой Π² качСствС источника Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΎΠΌΠ° ΠΈΠ»ΠΈ создании снимка с Ρ‚ΠΎΠΌΠ°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ PVC Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ‚ΠΎΠΌΠ°.

ИмСна автоматичСски создаваСмых PVC ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹: это комбинация ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠΌΠ°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой дСфисом. ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ взаимодСйствиС с PVC, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ, Ссли извСстно имя ΠΏΠΎΠ΄Π° ΠΈ имя Ρ‚ΠΎΠΌΠ°. НСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ имя ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано, Ρ‡Ρ‚ΠΎ обнаруТиваСтся Kubernetes ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запуск ΠΏΠΎΠ΄Π° блокируСтся.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΌ удаляСтся вмСстС с ΠΏΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎΠ΄ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ запроса Π½Π° Ρ‚ΠΎΠΌ. Когда ΠΏΠΎΠ΄ удаляСтся — ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡƒΠ±ΠΎΡ€ΠΊΠΈ мусора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удаляСт ΠΊΠ°ΠΊ запрос, Ρ‚Π°ΠΊ ΠΈ Ρ‚ΠΎΠΌ.

Запросам ставится Π² соотвСтствиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ класса Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π₯отя классы с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌ связываниСм (ΠΎΠ½ΠΈ ΠΆΠ΅ WaitForFirstConsumer) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, для эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ WaitForFirstConsumer, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ использованиС ΡƒΠ·Π»Π°, Ρ‚Π°ΠΊ ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΡƒΠ·Π»Π°. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ появляСтся новая функция.

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ CSI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ создаст Ρ‚ΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ Ρƒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π½Π΅Ρ‚ возмоТности ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ для запроса этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΡƒΠ·Π»Ρ‹ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠΌΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступными (ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС), Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ оставит Π²Ρ‹Π±ΠΎΡ€ мСста Π·Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ (Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ связываниС).

Новый API CSIStorageCapacity, находящийся Π² стадии alpha, позволяСт Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² etcd, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ доступны ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΡƒ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΠΏΡ€ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ отслСТиваниС Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°: external-provisioner Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Смкости, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡƒΡŽ ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ GetCapacity.

Если ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΡƒ Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» для ΠΏΠΎΠ΄Π° с нСпривязанным Ρ‚ΠΎΠΌΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС, Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π» эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ устанавливая Ρ„Π»Π°Π³ CSIDriver.storageCapacity, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΡƒΠ·Π»Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚Ρƒ достаточно Смкости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ для эфСмСрных ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Ρ‚Π°ΠΊ ΠΈ постоянных Ρ‚ΠΎΠΌΠΎΠ², Π½ΠΎ Π½Π΅ для эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² CSI, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ считаны Kubernetes.

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‚ΠΎΠΌΠ° с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ связываниСм ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ², Π° ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ выбираСтся Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, поэтому ΠΏΡ€ΠΈ настройкС external-provisioner ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ классы хранСния с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ связываниСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Π΄Π°Π½Π½Ρ‹Π΅ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ kubernetes Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ доступна Π² любом случаС ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡˆΠ°Π½ΡΡ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ создан Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ, ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ΡΡ.

N.B. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ бСзопасно Β«ΠΏΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΡˆΠΊΠ°Ρ… стСндС», Π° Π² случаС совсСм ΡƒΠΆ нСпонятной ситуации ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° интСнсивах — Kubernetes Π‘Π°Π·Π° ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ 28-30 сСнтября, Π° для Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… спСциалистов Kubernetes МСга 14–16 октября.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

CSIStorageCapacity

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CSIStorageCapacity находятся Π² пространствах ΠΈΠΌΠ΅Π½, ΠΏΡ€ΠΈ раскаткС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° CSI Π² своСм пространствС ΠΈΠΌΠ΅Π½ рСкомСндуСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° RBAC для CSIStorageCapacity Π² этом пространствС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° приходят Π΄Π°Π½Π½Ρ‹Π΅. Π’ любом случаС Kubernetes Π½Π΅ провСряСт это, Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ставятся Π² ΠΎΠ΄Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ оТидаСтся, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (ΠΈ Ρ‚ΡƒΡ‚ ΠΌΠ½Π΅ ΠΊΠ°Ρ€Ρ‚Π° ΠΏΠΎΠΏΠ΅Ρ€Π»Π°, ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ° ΠΏΠΎ ΠΌΠΎΡ‚ΠΈΠ²Π°ΠΌ Π±ΠΎΡ€ΠΎΠ΄Π°Ρ‚ΠΎΠ³ΠΎ Π°Π½Π΅ΠΊΠ΄ΠΎΡ‚Π°)

Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΎΠΌΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²Π° для создания ΠΏΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ опосрСдованно) — ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ смогут ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эфСмСрныС Ρ‚ΠΎΠΌΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния Π΄Π°ΠΆΠ΅ Ссли Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ ΠΏΡ€Π°Π² Π½Π° созданиС запроса Π½Π° Ρ‚ΠΎΠΌ. А всС ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π² RBAC ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт PVC, Π° Π½Π΅ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π­Ρ‚ΠΎ основноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² кластСрах, Ссли Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° созданиС Ρ‚ΠΎΠΌΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° Π² PMEM-CSI содСрТит всС Π½ΡƒΠΆΠ½Ρ‹Π΅ измСнСния для запуска кластСра Kubernetes 1.19 Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин QEMU со всСми фунциями, находящимися Π½Π° alpha стадии. Код Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π΅ измСнялся, помСнялось Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅.

На подходящСй машинС (Linux, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker, смотритС Ρ‚ΡƒΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ) эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΡƒΡ‚ кластСр ΠΈ установят Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ 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 ΠΏΡ€ΠΈ любом раскладС.

Π§Ρ‚ΠΎ дальшС?

ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всС Π΅Ρ‰Π΅ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π‘Ρ‹Π»ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ нСсколько заявок ΠΏΡ€ΠΈ alpha-тСстировании. По ссылкам с прСдлоТСниями ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌ вСдСтся Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΡΡ‚Π°Π΄ΠΈΡŽ beta, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠΆΠ΅ рассмотрСны ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com