Kubernetes 1.16: ΠΎΠ±Π·ΠΎΡ€ основных Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²

Kubernetes 1.16: ΠΎΠ±Π·ΠΎΡ€ основных Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²

БСгодня, Π² срСду, состоится ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π΅Π»ΠΈΠ· Kubernetes β€” 1.16. По слоТившСйся для нашСго Π±Π»ΠΎΠ³Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, Π²ΠΎΡ‚ ΡƒΠΆΠ΅ Π² ΡŽΠ±ΠΈΠ»Π΅ΠΉΠ½Ρ‹ΠΉ β€” дСсятый β€” Ρ€Π°Π· ΠΌΡ‹ рассказываСм ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… измСнСниях Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, использованная для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, взята ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Kubernetes enhancements tracking, CHANGELOG-1.16 ΠΈ ΡΠΎΠΎΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… issues, pull requests, Π° Ρ‚Π°ΠΊΠΆΠ΅ Kubernetes Enhancement Proposals (KEP). Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ΅Ρ…Π°Π»ΠΈ!..

Π£Π·Π»Ρ‹

По-настоящСму большоС число Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ (Π² статусС Π°Π»ΡŒΡ„Π°-вСрсии) прСдставлСно Π½Π° сторонС ΡƒΠ·Π»ΠΎΠ² K8s-кластСров (Kubelet).

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, прСдставлСны Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «эфСмСрныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹Β» (Ephemeral Containers), ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСссы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² pod’Π°Ρ…. Новый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚Π°Ρ€Ρ‚ΡƒΡŽΡ‚ Π² пространствС ΠΈΠΌΡ‘Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… pod’ΠΎΠ² ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ Π½Π΅ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. Π˜Ρ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” взаимодСйствиС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ pod’Π°ΠΌΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π² цСлях Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Для этой возмоТности Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° новая ΠΊΠΎΠΌΠ°Π½Π΄Π° kubectl debug, схоТая ΠΏΠΎ своСй сути с kubectl exec: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСсто запуска процСсса Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ (ΠΊΠ°ΠΊ Π² случаС exec) ΠΎΠ½Π° запускаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² pod’Π΅. НапримСр, такая ΠΊΠΎΠΌΠ°Π½Π΄Π° подсоСдинит Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊ pod’Ρƒ:

kubectl debug -c debug-shell --image=debian target-pod -- bash

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎΠ± эфСмСрных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… (ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ KEP. ВСкущая рСализация (Π² K8s 1.16) β€” Π°Π»ΡŒΡ„Π°-вСрсия, Π° срСди ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² Π΅Ρ‘ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² Π±Π΅Ρ‚Π°-Π²Π΅Ρ€ΡΠΈΡŽ значится «тСстированиС Ephemeral Containers API Π½Π° протяТСнии Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 2 Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² [Kubernetes]Β».

NB: По своСй сути ΠΈ Π΄Π°ΠΆΠ΅ названию Ρ„ΠΈΡ‡Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ kubectl-debug, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΡƒΠΆΠ΅ писали. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ с появлСниСм эфСмСрных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внСшнСго ΠΏΠ»Π°Π³ΠΈΠ½Π° прСкратится.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²ΠΎ β€” PodOverhead β€” ΠΏΡ€ΠΈΠ·Π²Π°Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подсчёта Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° pod’Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ исполняСмой срСды (runtime). Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π°Π²Ρ‚ΠΎΡ€Ρ‹ этого KEP приводят Kata Containers, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ запуска гостСвого ядра, Π°Π³Π΅Π½Ρ‚Π° kata, init-систСмы ΠΈ Ρ‚.ΠΏ. Когда overhead становится Ρ‚Π°ΠΊΠΈΠΌ большим, Π΅Π³ΠΎ нСльзя ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ β€” трСбуСтся способ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для дальнСйшСго квотирования, планирования ΠΈ Ρ‚.ΠΏ. Для Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² PodSpec Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ Overhead *ResourceList (сопоставляСтся с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² RuntimeClass, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ).

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ β€” ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡƒΠ·Π»Π° (Node Topology Manager), ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹ΠΉ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройкС распрСдСлСния Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… рСсурсов для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Kubernetes. Π­Ρ‚Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° Π²Ρ‹Π·Π²Π°Π½Π° растущСй ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… соврСмСнных систСм (ΠΈΠ· области Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ, машинного обучСния, финансовых услуг ΠΈ Ρ‚.ΠΏ.) Π² Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСниях ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ исполнСнии ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ возмоТности CPU ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ускорСния. Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Kubernetes Π΄ΠΎ сих ΠΏΠΎΡ€ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Π»ΠΈΡΡŒ благодаря Ρ€Π°Π·Ρ€ΠΎΠ·Π½Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ (CPU manager, Device manager, CNI), Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌ добавят Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ упростит ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… topology-aware β€” ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° сторонС Kubelet. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ β€” Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ KEP.

Kubernetes 1.16: ΠΎΠ±Π·ΠΎΡ€ основных Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²
Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Topology Manager

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ„ΠΈΡ‡Π° β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π²ΠΎ врСмя ΠΈΡ… запуска (startup probe). Как извСстно, для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»Π³ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ статус: ΠΈΡ… Π»ΠΈΠ±ΠΎ Β«ΡƒΠ±ΠΈΠ²Π°ΡŽΡ‚Β» Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»Π° функционирования, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ Π½Π° Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² deadlock. Новая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· feature gate ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ StartupProbeEnabled) отмСняСт β€” Ρ‚ΠΎΡ‡Π½Π΅Π΅, ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ β€” дСйствиС Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° pod Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» свой запуск. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ„ΠΈΡ‡Ρƒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ pod-startup liveness-probe holdoff. Для pod’ΠΎΠ², Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΡΡ‚Π°Ρ€Ρ‚ΡƒΡŽΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ опрос состояния Π² ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сразу Π² статусС Π±Π΅Ρ‚Π°-вСрсии прСдставлСно ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ для RuntimeClass, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Β«Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½Ρ‹Ρ… кластСров». C RuntimeClass Scheduling Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ RuntimeClass’Π°: для pod’ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ RuntimeClass, Π½Π΅ думая ΠΎ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ кластСра. РаньшС для достиТСния этого β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ pod’Ρ‹ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° ΡƒΠ·Π»Π°Ρ… с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ всСго ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ β€” ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊ NodeSelector ΠΈ tolerations. Π’ KEP рассказываСтся ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… использования ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, подробностях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘Π΅Ρ‚ΡŒ

Π”Π²Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ сСтСвыС Ρ„ΠΈΡ‡ΠΈ, Ρ‡Ρ‚ΠΎ появились Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ (Π² Π°Π»ΡŒΡ„Π°-вСрсии) Π² Kubernetes 1.16 β€” это:

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ сСтСвого стСка β€” IPv4/IPv6 β€” ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΅Π³ΠΎ Β«ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅Β» Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ pod’ΠΎΠ², ΡƒΠ·Π»ΠΎΠ², сСрвисов. Она Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя взаимодСйствиС IPv4-to-IPv4 ΠΈ IPv6-to-IPv6 ΠΌΠ΅ΠΆΠ΄Ρƒ pod’Π°ΠΌΠΈ, с pod’ΠΎΠ² Π²ΠΎ внСшниС сСрвисы, эталонныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Bridge CNI, PTP CNI ΠΈ Host-Local IPAM), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с кластСрами Kubernetes, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ IPv4 ΠΈΠ»ΠΈ IPv6. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Π² KEP.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° IP-адрСсов Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ² (IPv4 ΠΈ IPv6) Π² спискС pod’ΠΎΠ²:

    kube-master# kubectl get pods -o wide
    NAME               READY     STATUS    RESTARTS   AGE       IP                          NODE
    nginx-controller   1/1       Running   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • Новый API для Endpoint β€” EndpointSlice API. Он Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Endpoint API с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ/ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² control-plane (apiserver, etcd, endpoints-controller, kube-proxy). Новый API Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² API-Π³Ρ€ΡƒΠΏΠΏΡƒ Discovery ΠΈ смоТСт ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ дСсятки тысяч backend endpoint’ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сСрвисС Π² кластСрС, состоящСм ΠΈΠ· тысячСй ΡƒΠ·Π»ΠΎΠ². Для этого ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Service отобраТаСтся Π² N ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² EndpointSlice, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 100 endpoint’ΠΎΠ² (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ настраиваСтся). Π’ EndpointSlice API прСдусмотрят ΠΈ возмоТности для Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ развития: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ мноТСства IP-адрСсов Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod’Π°, Π½ΠΎΠ²Ρ‹Ρ… состояний для endpoint’ΠΎΠ² (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ready ΠΈ NotReady), динамичСского subsetting для endpoint’ΠΎΠ².

Π”ΠΎ Π±Π΅Ρ‚Π°-вСрсии продвинулся прСдставлСнный Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅ finalizer, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ service.kubernetes.io/load-balancer-cleanup ΠΈ прикрСпляСмый ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвису с Ρ‚ΠΈΠΏΠΎΠΌ LoadBalancer. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ удалСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ сСрвиса ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ фактичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ рСсурса, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° «зачистка» всСх ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСсурсов балансировщика.

API Machinery

Настоящая Β«Π²Π΅Ρ…Π° стабилизации» зафиксирована Π² области API-сСрвСра Kubernetes ΠΈ взаимодСйствия с Π½ΠΈΠΌ. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ это ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ благодаря ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ Π² статус stable Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² особом прСдставлСнии CustomResourceDefinitions (CRD), Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π»ΠΈ статус Π±Π΅Ρ‚Π°-вСрсии со Π²Ρ€Π΅ΠΌΡ‘Π½ Π΄Π°Π»Ρ‘ΠΊΠΎΠ³ΠΎ Kubernetes 1.7 (Π° это июнь 2017 Π³ΠΎΠ΄Π°!). Вакая ΠΆΠ΅ стабилизация ΠΏΡ€ΠΈΡˆΠ»Π° ΠΈ ΠΊ связанным с Π½ΠΈΠΌΠΈ Ρ„ΠΈΡ‡Π°ΠΌ:

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π΄Π°Π²Π½ΠΎ ΡΡ‚Π°Π²ΡˆΠΈΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ для администраторов Kubernetes: admission webhook β€” Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΏΡ€Π΅Π±Ρ‹Π²Π°Π» Π² статусС Π±Π΅Ρ‚Ρ‹ (с K8s 1.9) ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ объявлСн ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

Π”Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΈΡ‡ΠΈ достигли Π±Π΅Ρ‚Π°-вСрсии: server-side apply ΠΈ watch bookmarks.

А СдинствСнным Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² Π°Π»ΡŒΡ„Π°-вСрсии стал ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ SelfLink β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ URI, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ObjectMeta ΠΈ ListMeta (Ρ‚.Π΅. Ρ‡Π°ΡΡ‚ΡŒΡŽ любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Kubernetes). Π—Π°Ρ‡Π΅ΠΌ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ? ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡ Β«ΠΏΠΎ-простому» Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ отсутствиС настоящих (Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΡ‹Ρ…) ΠΏΡ€ΠΈΡ‡ΠΈΠ½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΠΏΠΎΠ»Π΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ сущСствовало. Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΡƒΠ±Ρ€Π°Π² Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅) ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ generic-apiserver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (это СдинствСнноС ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устанавливаСтся прямо ΠΏΠ΅Ρ€Π΅Π΄ сСриализациСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). НастоящСС «устарСваниС» (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π±Π΅Ρ‚Π°-вСрсии) SelfLink ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΊ вСрсии Kubernetes 1.20, Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ β€” 1.21.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

Основная Ρ€Π°Π±ΠΎΡ‚Π° Π² области storage, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ…, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ Π² области ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ CSI. Π“Π»Π°Π²Π½Ρ‹ΠΌΠΈ измСнСниями здСсь стали:

  • Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ (Π² Π°Π»ΡŒΡ„Π°-вСрсии) появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CSI-ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² с Windows: Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ ΠΈ здСсь ΠΏΡ€ΠΈΠ΄Ρ‘Ρ‚ Π½Π° смСну ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌ in-tree Π² ядрС Kubernetes ΠΈ FlexVolume-ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌ ΠΎΡ‚ Microsoft Π½Π° Π±Π°Π·Π΅ Powershell;

    Kubernetes 1.16: ΠΎΠ±Π·ΠΎΡ€ основных Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²
    Π‘Ρ…Π΅ΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CSI-ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π² Kubernetes для Windows

  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° CSI-Ρ‚ΠΎΠΌΠΎΠ², прСдставлСнная Π΅Ρ‰Ρ‘ Π² K8s 1.12, доросла Π΄ΠΎ Π±Π΅Ρ‚Π°-вСрсии;
  • Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ Β«ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡΒ» (с Π°Π»ΡŒΡ„Π°- Π΄ΠΎ Π±Π΅Ρ‚Π°-вСрсии) достигла Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования CSI для создания Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… эфСмСрных Ρ‚ΠΎΠΌΠΎΠ² (CSI Inline Volume Support).

Появившаяся Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ вСрсии Kubernetes функция клонирования Ρ‚ΠΎΠΌΠΎΠ² (использованиС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… PVC Π² качСствС DataSource для создания Π½ΠΎΠ²Ρ‹Ρ… PVC) Ρ‚ΠΎΠΆΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° статус Π±Π΅Ρ‚Π°-вСрсии.

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ

Π”Π²Π° Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… измСнСния Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (ΠΎΠ±Π° Π² Π°Π»ΡŒΡ„Π°-вСрсии):

  • EvenPodsSpreading β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для «чСстного распрСдСлСния» Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ pod’Ρ‹ вмСсто логичСских Π΅Π΄ΠΈΠ½ΠΈΡ† прилоТСния (Π²Ρ€ΠΎΠ΄Π΅ Deployment ΠΈ ReplicaSet) ΠΈ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ этого распрСдСлСния (ΠΊΠ°ΠΊ Тёсткого трСбования ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ мягкого условия, Ρ‚.Π΅. ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°). Π€ΠΈΡ‡Π° Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ возмоТности распрСдСлСния ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… pod’ΠΎΠ², Π½Ρ‹Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ опциями PodAffinity ΠΈ PodAntiAffinity, прСдоставив администраторам Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π² этом вопросС, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ β€” Π»ΡƒΡ‡ΡˆΡƒΡŽ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ β€” Π² KEP.
  • ИспользованиС BestFit Policy Π² RequestedToCapacityRatio Priority Function Π²ΠΎ врСмя планирования pod’ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ bin packing (Β«ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹Β») ΠΊΠ°ΠΊ для основных рСсурсов (процСссор, ΠΏΠ°ΠΌΡΡ‚ΡŒ), Ρ‚Π°ΠΊ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… (Π²Ρ€ΠΎΠ΄Π΅ GPU). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Π² KEP.

    Kubernetes 1.16: ΠΎΠ±Π·ΠΎΡ€ основных Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²
    ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ pod’ΠΎΠ²: Π΄ΠΎ использования best fit policy (Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· default scheduler) ΠΈ с Π΅Ρ‘ использованиСм (Ρ‡Π΅Ρ€Π΅Π· scheduler extender)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, прСдставлСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π²Π½Π΅ основного Π΄Π΅Ρ€Π΅Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Kubernetes (out-of-tree).

Π”Ρ€ΡƒΠ³ΠΈΠ΅ измСнСния

Π’Π°ΠΊΠΆΠ΅ Π² Ρ€Π΅Π»ΠΈΠ·Π΅ Kubernetes 1.16 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ ΠΏΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡŽ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π² ΠΏΠΎΠ»Π½Ρ‹ΠΉ порядок, Π° Ссли Ρ‚ΠΎΡ‡Π½Π΅Π΅ β€” Π² соотвСтствиС с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ прСдписаниями ΠΊ инструмСнтации K8s. Они ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Prometheus. НСсыстоковки ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΈ попросту созданы Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ инструкции появились), ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ настало врСмя привСсти всё ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ стандарту, Β«Π² соотвСтствиС с ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ экосистСмой PrometheusΒ». ВСкущая рСализация этой ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ носит статус Π°Π»ΡŒΡ„Π°-вСрсии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях Kubernetes Π΄ΠΎ Π±Π΅Ρ‚Ρ‹ (1.17) ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ (1.18).

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния:

  • Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Windows с появлСниСм ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Kubeadm для этой ОБ (Π°Π»ΡŒΡ„Π°-вСрсия), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ RunAsUserName для Windows-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (Π°Π»ΡŒΡ„Π°-вСрсия), ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Group Managed Service Account (gMSA) Π΄ΠΎ Π±Π΅Ρ‚Π°-вСрсии, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ mount/attach для Ρ‚ΠΎΠΌΠΎΠ² vSphere.
  • ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сТатия Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… API. РаньшС для этих Ρ†Π΅Π»Π΅ΠΉ использовался HTTP-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π» ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Β«ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅ сТатиС запросов»: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Accept-Encoding: gzip Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ сТатый Π² GZIP ΠΎΡ‚Π²Π΅Ρ‚, Ссли Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π» 128 Кб. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π° Go автоматичСски ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сТатиС (ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сразу замСтят сниТСниС Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. (Для Π΄Ρ€ΡƒΠ³ΠΈΡ… языков ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСбольшиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.)
  • Π‘Ρ‚Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ HPA ΠΈΠ·/Π΄ΠΎ нуля pod’ΠΎΠ² Π½Π° основС Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. Если ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ производится Π½Π° основС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²/Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‚, ΠΌΠΎΠΆΠ½ΠΎ автоматичСски ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ 0 Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы. ОсобСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ эта Ρ„ΠΈΡ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ для случаСв, ΠΊΠΎΠ³Π΄Π° worker’Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ рСсурсы GPU, Π° количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… worker’ΠΎΠ² ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ число доступных GPU.
  • Новый ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β€” k8s.io/client-go/metadata.Client β€” для Β«ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎΒ» доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Он ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (Ρ‚.Π΅. ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π» metadata) ΠΈΠ· рСсурсов кластСра ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ с Π½ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ· разряда сбора мусора ΠΈ квотирования.
  • Π‘ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Kubernetes Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… («встроСнных» Π² in-tree) ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (Π°Π»ΡŒΡ„Π°-вСрсия).
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ kubeadm Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ (Π°Π»ΡŒΡ„Π°-вСрсия) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ΠΈ kustomize Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ init, join ΠΈ upgrade. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„Π»Π°Π³ΠΎΠΌ --experimental-kustomize, см. Π² KEP.
  • Новый endpoint для apiserver β€” readyz, β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΅Π³ΠΎ готовности (readiness). Π’Π°ΠΊΠΆΠ΅ Ρƒ API-сСрвСра появился Ρ„Π»Π°Π³ --maximum-startup-sequence-duration, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ пСрСзапуски.
  • Π”Π²Π΅ Ρ„ΠΈΡ‡ΠΈ для Azure ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π·ΠΎΠ½ доступности (Availability Zones) ΠΈ cross resource group (RG). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Azure Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹:
  • Π£ AWS появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для EBS Π² Windows ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ API-Π²Ρ‹Π·ΠΎΠ²Ρ‹ EC2 DescribeInstances.
  • Kubeadm Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ CoreDNS ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ вСрсии CoreDNS.
  • Π‘ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΈ etcd Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Docker-ΠΎΠ±Ρ€Π°Π·Π΅ сдСлали world-executable, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ этот ΠΎΠ±Ρ€Π°Π· Π±Π΅Π· нСобходимости Π² ΠΏΡ€Π°Π²Π°Ρ… root. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Ρ€Π°Π· ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ etcd ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ вСрсии etcd2.
  • Π’ Cluster Autoscaler 1.16.0 ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° использованиС distroless Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (DigitalOcean, Magnum, Packet).
  • ОбновлСния Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ/зависимом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

P.S.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

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