ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈ всСмирно извСстного сСрвиса Tinder Π½Π΅Π΄Π°Π²Π½ΠΎ подСлились Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ тСхничСскими дСталями ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ своСй инфраструктуры Π½Π° Kubernetes. ΠŸΡ€ΠΎΡ†Π΅ΡΡ занял ΠΏΠΎΡ‡Ρ‚ΠΈ Π΄Π²Π° Π³ΠΎΠ΄Π° ΠΈ вылился Π² запуск Π½Π° K8s вСсьма ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, состоящСй ΠΈΠ· 200 сСрвисов, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π½Π° 48 тысячах ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π‘ ΠΊΠ°ΠΊΠΈΠΌΠΈ интСрСсными слоТностями ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Tinder ΠΈ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΈ β€” Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² этом ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes

Π—Π°Ρ‡Π΅ΠΌ?

ΠŸΠΎΡ‡Ρ‚ΠΈ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Tinder Ρ€Π΅ΡˆΠΈΠ» пСрСвСсти свою ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° Kubernetes. Kubernetes ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Tinder провСсти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями посрСдством Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ развСртывания (immutable deployment). Π’ этом случаС сборка ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡ… Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ сама инфраструктура Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠΎΠ΄ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ искали Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Когда ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΎ критичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΌ часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ запуска Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров EC2. ΠžΡ‡Π΅Π½ΡŒ ΡƒΠΆ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ для нас стала идСя запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Π½Π°Ρ‡Π°Π»Π° обслуТивания Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π·Π° сСкунды вмСсто ΠΌΠΈΠ½ΡƒΡ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ оказался нСпростым. Π’ΠΎ врСмя нашСй ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ 2019-Π³ΠΎ кластСр Kubernetes достиг критичСской массы ΠΈ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈΠ·-Π·Π° объСма Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€Π° кластСра ΠΈ DNS. По ΠΏΡƒΡ‚ΠΈ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ массу интСрСсных Π·Π°Π΄Π°Ρ‡, связанных с пСрСносом 200 сСрвисов ΠΈ обслуТиваниСм кластСра Kubernetes, состоящСго ΠΈΠ· 1000 ΡƒΠ·Π»ΠΎΠ², 15000 pod’ΠΎΠ² ΠΈ 48000 Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Как?

Начиная с января 2018-Π³ΠΎ, ΠΌΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ этапы ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ всСх Π½Π°ΡˆΠΈΡ… сСрвисов ΠΈ ΠΈΡ… развСртывания Π² тСстовых ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… окруТСниях Kubernetes. Начиная с октября, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ мСтодичСски ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сСрвисы Π² Kubernetes. К ΠΌΠ°Ρ€Ρ‚Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³ΠΎΠ΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ «пСрСсСлСниС» ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Tinder Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Kubernetes.

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² для Kubernetes

Π£ нас Π±ΠΎΠ»Π΅Π΅ 30 Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² исходного ΠΊΠΎΠ΄Π° для микросСрвисов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² кластСрС Kubernetes. Код Π² этих рСпозиториях написан Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Node.js, Java, Scala, Go) со мноТСством runtime-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ языка.

БистСма сборки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ настраиваСмый «контСкст сборки» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ микросСрвиса. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ состоит ΠΈΠ· Dockerfile ΠΈ списка shell-ΠΊΠΎΠΌΠ°Π½Π΄. Π˜Ρ… содСрТимоС ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ настраиваСмо, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя всС эти контСксты сборки написаны Π² соотвСтствии со стандартизированным Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ. Бтандартизация контСкстов сборки позволяСт ΠΎΠ΄Π½ΠΎΠΉ СдинствСнной систСмС сборки ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС микросСрвисы.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes
Рисунок 1-1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ процСсс сборки Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€-сборщик (Builder)

Для достиТСния максимальной согласованности ΠΌΠ΅ΠΆΠ΄Ρƒ срСдами выполнСния (runtime environments) ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс сборки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования. ΠœΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΎΡ‡Π΅Π½ΡŒ интСрСсной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ способ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ сборочной срСды ΠΏΠΎ всСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Для этого всС сборочныС процСссы проводятся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Builder.

Π•Π³ΠΎ рСализация ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Docker. Builder наслСдуСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ сСкрСты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ»ΡŽΡ‡ SSH, ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ AWS ΠΈ Ρ‚. Π΄.), Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ для доступа ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ рСпозиториям Tinder. Он ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, содСрТащиС исходники, Ρ‡Ρ‚ΠΎΠ±Ρ‹ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ сборки. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ устраняСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² сборки ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Builder ΠΈ хостом. Π₯ранящиСся Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ сборки ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки.

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисов Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ срСду компиляции со срСдой выполнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² процСссС установки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Node.js bcrypt Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ спСцифичныС для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹). Π’ процСссС компиляции трСбования ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… сСрвисов, ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Dockerfile составляСтся Π½Π° Π»Π΅Ρ‚Ρƒ.

АрхитСктура кластСра Kubernetes ΠΈ миграция

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ кластСра

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ kube-aws для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ развСртывания кластСра Π½Π° экзСмплярах EC2 ΠΎΡ‚ Amazon. Π’ самом Π½Π°Ρ‡Π°Π»Π΅ всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΡƒΠ»Π΅ ΡƒΠ·Π»ΠΎΠ². ΠœΡ‹ быстро осознали Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ раздСлСния Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ экзСмпляров для Π±ΠΎΠ»Π΅Π΅ эффСктивного использования рСсурсов. Π›ΠΎΠ³ΠΈΠΊΠ° Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ запуск Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… pod’ΠΎΠ² оказывался Π±ΠΎΠ»Π΅Π΅ прСдсказуСмым ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΈΡ… сосущСствованиС с большим числом ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… pod’ΠΎΠ².

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π°:

  • m5.4xlarge β€” для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (Prometheus);
  • c5.4xlarge β€” для Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Node.js (однопоточная рабочая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°);
  • c5.2xlarge β€” для Java ΠΈ Go (многопоточная рабочая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°);
  • c5.4xlarge β€” для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ (3 ΡƒΠ·Π»Π°).

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ

Одним ΠΈΠ· ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ со старой инфраструктуры Π½Π° Kubernetes стало ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прямого взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами Π² Π½ΠΎΠ²Ρ‹Π΅ балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (Elastic Load Balancers, ELB). Они Π±Ρ‹Π»ΠΈ созданы Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ подсСти Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ частного ΠΎΠ±Π»Π°ΠΊΠ° (VPC). Π­Ρ‚Π° ΠΏΠΎΠ΄ΡΠ΅Ρ‚ΡŒ Π±Ρ‹Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ VPC Kubernetes. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ постСпСнно, Π½Π΅ учитывая ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ порядок зависимостСй ΠΎΡ‚ сСрвисов.

Π­Ρ‚ΠΈ endpoints Π±Ρ‹Π»ΠΈ созданы с использованиСм Π²Π·Π²Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² DNS-записСй, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… CNAME ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ELB. Для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΡ‹ добавляли Π½ΠΎΠ²ΡƒΡŽ запись, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ELB слуТбы Kubernetes с вСсом, Ρ€Π°Π²Π½Ρ‹ΠΌ 0. Π—Π°Ρ‚Π΅ΠΌ устанавливали Time To Live (TTL) Π½Π°Π±ΠΎΡ€Π° записСй Π½Π° 0. ПослС этого старыС ΠΈ Π½ΠΎΠ²Ρ‹Π΅ вСсовыС коэффициСнты ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ 100% Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TTL Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΎΡΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

Π˜ΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Ρƒ нас Java-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΡΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ с Π½ΠΈΠ·ΠΊΠΈΠΌ TTL DNS, Π° Node-прилоТСния β€” Π½Π΅Ρ‚. Один ΠΈΠ· ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² пСрСписал Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΡƒΠ»Π° соСдинСний, ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΠ² Π΅Π³ΠΎ Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обновлял ΠΏΡƒΠ»Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 60 сСкунд. Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сработал ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈ Π±Π΅Π· Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ΠΎ сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π£Ρ€ΠΎΠΊΠΈ

ΠŸΡ€Π΅Π΄Π΅Π»Ρ‹ сСтСвой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ

Π Π°Π½Π½ΠΈΠΌ ΡƒΡ‚Ρ€ΠΎΠΌ 8 января 2019 Π³ΠΎΠ΄Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Tinder Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Β«ΡƒΠΏΠ°Π»Π°Β». Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° нСсвязанноС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΡƒΡ‚Ρ€ΠΎΠΌ Π² кластСрС возросло число pod’ΠΎΠ² ΠΈ ΡƒΠ·Π»ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΡŽ кэша ARP Π½Π° всСх Π½Π°ΡˆΠΈΡ… ΡƒΠ·Π»Π°Ρ….

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Linux, связанных с кэшСм ARP:

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes
(источник)

gc_thresh3 β€” это ТСсткий ΠΏΡ€Π΅Π΄Π΅Π». ПоявлСниС Π² Π»ΠΎΠ³Π΅ записСй Π²ΠΈΠ΄Π° Β«neighbor table overflowΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ послС синхронного сбора мусора (GC) Π² кэшС ARP ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ нСдостаточно мСста для хранСния сосСднСй записи. Π’ этом случаС ядро просто ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ отбрасывало ΠΏΠ°ΠΊΠ΅Ρ‚.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Flannel Π² качСствС сСтСвой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ (network fabric) Π² Kubernetes. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· VXLAN. VXLAN прСдставляСт собой L2-Ρ‚ΠΎΠ½Π½Π΅Π»ΡŒ, поднятый ΠΏΠΎΠ²Π΅Ρ€Ρ… L3-сСти. ВСхнология ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ MAC-in-UDP (MAC Address-in-User Datagram Protocol) ΠΈ позволяСт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ сСтСвыС сСгмСнты 2-Π³ΠΎ уровня. Вранспортный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π² физичСской сСти Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… β€” IP плюс UDP.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes
Рисунок 2–1. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Flannel (источник)

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes
Рисунок 2–2. ΠŸΠ°ΠΊΠ΅Ρ‚ VXLAN (источник)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΡƒΠ·Π΅Π» Kubernetes выдСляСт Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство с маской /24 ΠΈΠ· большСго Π±Π»ΠΎΠΊΠ° /9. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΠ΄Π½Ρƒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ARP (Π½Π° интСрфСйсС flannel.1) ΠΈ ΠΎΠ΄Π½Ρƒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ (FDB). Они Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, связь ΡƒΠ·Π΅Π»-pod (ΠΈΠ»ΠΈ pod-pod) Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс eth0 (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Flannel Π²Ρ‹ΡˆΠ΅). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ появлСнию Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ARP для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ источника ΠΈ адрСсата ΡƒΠ·Π»Π°.

Π’ нашСй срСдС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ связи вСсьма распространСн. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° сСрвис Π² Kubernetes создаСтся ELB ΠΈ Kubernetes рСгистрируСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π² ELB. ELB Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ pod’Π°Ρ… ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ назначСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΡƒΠ·Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ ELB, ΠΎΠ½ рассматриваСт Π΅Π³ΠΎ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ» iptables для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сСрвиса ΠΈ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ pod Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡƒΠ·Π»Π΅.

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ сбоя Π² кластСрС Π±Ρ‹Π»ΠΎ 605 ΡƒΠ·Π»ΠΎΠ². По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅, этого оказалось достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ gc_thresh3, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Когда Ρ‚Π°ΠΊΠΎΠ΅ происходит, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒΡΡ, Π½ΠΎ ΠΈ всС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство Flannel с маской /24 ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ARP. Бвязь ΡƒΠ·Π΅Π»-pod ΠΈ DNS-запросы ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ (DNS Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² кластСрС; подробности Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π°Π»Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅).

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ значСния gc_thresh1, gc_thresh2 ΠΈ gc_thresh3 ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Flannel для пСрСрСгистрации ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… сСтСй.

НСоТиданноС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ DNS

Π’ процСссС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ использовали DNS для управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ постСпСнного ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° сСрвисов со старой инфраструктуры Π½Π° Kubernetes. ΠœΡ‹ устанавливали ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΈΠ΅ значСния TTL для связанных RecordSets Π² Route53. Когда старая инфраструктура Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π° экзСмплярах EC2, конфигурация нашСго распознаватСля ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π½Π° DNS Amazon. ΠœΡ‹ воспринимали это ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅ ΠΈ воздСйствиС Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ TTL Π½Π° наши сСрвисы ΠΈ сСрвисы Amazon (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DynamoDB) ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ практичСски Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ.

По ΠΌΠ΅Ρ€Π΅ пСрСноса сСрвисов Π² Kubernetes ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ DNS ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎ 250 тысяч запросов Π² сСкунду. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прилоТСния стали ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ постоянныС ΠΈ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ timeout’Ρ‹ ΠΏΠΎ DNS-запросам. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ нСсмотря Π½Π° Π½Π΅ΠΈΠΌΠΎΠ²Π΅Ρ€Π½Ρ‹Π΅ усилия ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ DNS-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π½Π° CoreDNS (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° ΠΏΠΈΠΊΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ достиг 1000 pod’ΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° 120 ядрах).

Π˜ΡΡΠ»Π΅Π΄ΡƒΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ race conditions, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² netfilter Π² Linux. ΠΠ°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ Π½Π°ΠΌΠΈ timeout’Ρ‹ Π²ΠΊΡƒΠΏΠ΅ с ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ счСтчиком insert_failed Π² интСрфСйсС Flannel соотвСтствовали Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π° этапС Source ΠΈ Destination Network Address Translation (SNAT ΠΈ DNAT) ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ внСсСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ conntrack. Одним ΠΈΠ· ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ, ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠ΅ΠΌΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ сообщСством, стал пСрСнос DNS Π½Π° сам Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΡƒΠ·Π΅Π». Π’ этом случаС:

  • SNAT Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ остаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΡƒΠ·Π»Π°. Π•Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс eth0.
  • DNAT Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ IP адрСсата являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для ΡƒΠ·Π»Π°, Π° Π½Π΅ случайно Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ pod’ΠΎΠΌ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ iptables.

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. CoreDNS Π±Ρ‹Π» Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΊΠ°ΠΊ DaemonSet Π² Kubernetes ΠΈ ΠΌΡ‹ Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ DNS-сСрвСр ΡƒΠ·Π»Π° Π² resolv.conf ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod’a настроив Ρ„Π»Π°Π³ —cluster-dns ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ kubeletβ€Š. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ оказалось эффСктивным для timeout’ΠΎΠ² DNS.

Однако ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ наблюдали ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ счСтчика insert_failed Π² интСрфСйсС Flannel. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΎΡΡŒ ΠΈ послС внСдрСния ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ сумСли ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ SNAT ΠΈ/ΠΈΠ»ΠΈ DNAT Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для DNS-Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Race conditions ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρƒ нас β€” TCP, ΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΎΠ½ΠΈ просто ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. ΠœΡ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ пытаСмся Π½Π°ΠΉΡ‚ΠΈ подходящСС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для всСх Ρ‚ΠΈΠΏΠΎΠ² Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

ИспользованиС Envoy для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

По ΠΌΠ΅Ρ€Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ backend-сСрвисов Π² Kubernetes ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ нСсбалансированной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ pod’Π°ΠΌΠΈ. ΠœΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° HTTP Keepalive соСдинСния ELB зависали Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… pod’Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ deployment’Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, основная Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° шла Ρ‡Π΅Ρ€Π΅Π· нСбольшой ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ доступных pod’ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, испытанным Π½Π°ΠΌΠΈ, стала установка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° MaxSurge Π½Π° 100% Π½Π° Π½ΠΎΠ²Ρ‹Ρ… deployment’ах для Ρ…ΡƒΠ΄ΡˆΠΈΡ… случаСв. Π­Ρ„Ρ„Π΅ΠΊΡ‚ оказался Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ нСпСрспСктивным Π² ΠΏΠ»Π°Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… deployment’ΠΎΠ².

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ использованноС Π½Π°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ искусствСнно Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ запросы Π½Π° рСсурсы для критичСски Π²Π°ΠΆΠ½Ρ‹Ρ… сСрвисов. Π’ этом случаС Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ сосСдству pod’ΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ большС пространства для ΠΌΠ°Π½Π΅Π²Ρ€Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ тяТСлыми pod’Π°ΠΌΠΈ. Π’ долгосрочной пСрспСктивС ΠΎΠ½ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ сработало ΠΈΠ·-Π·Π° пустой Ρ‚Ρ€Π°Ρ‚Ρ‹ рСсурсов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, наши Node-прилоТСния Π±Ρ‹Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ, соотвСтствСнно, ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ядро. ЕдинствСнным Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ использованиС Π»ΡƒΡ‡ΡˆΠ΅ΠΉ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

ΠœΡ‹ Π΄Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Envoy. БлоТившаяся ситуация ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π½Π°ΠΌ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Envoy β€” это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прокси сСдьмого уровня с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… SOA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Он ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ автоматичСскиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Ρ‹, circuit breakers ΠΈ глобальноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости. (ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΎ Istio, Π² основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Envoy.)

ΠœΡ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ: ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ Envoy sidecar’Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod’Π° ΠΈ СдинствСнный ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, Π° кластСр β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ локально ΠΏΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ каскадированиС ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСбольшой радиус «пораТСния», ΠΌΡ‹ использовали ΠΏΠ°Ρ€ΠΊ front-proxy pod’ΠΎΠ² Envoy, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π·ΠΎΠ½Ρƒ доступности (Availability Zone, AZ) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвиса. Они ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΊ простому ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ обнаруТСния сСрвисов, написанному ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» список pod’ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ AZ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвиса.

Π—Π°Ρ‚Π΅ΠΌ сСрвисныС front-Envoy’ΠΈ использовали этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ обнаруТСния сСрвисов с ΠΎΠ΄Π½ΠΈΠΌ upstream-кластСром ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠΌ. ΠœΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹Π΅ timeout’Ρ‹, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΈ всС настройки circuit breaker’а ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ сбоями ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ бСспрСпятствСнныС развСртывания. ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· этих сСрвисных front-Envoy’Π΅Π² ΠΌΡ‹ располоТили TCP ELB. Π”Π°ΠΆΠ΅ Ссли keepalive с нашСго основного прокси-слоя зависал Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Envoy pod’Π°Ρ…, ΠΎΠ½ΠΈ всС ΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ Π±Ρ‹Π»ΠΈ настроСны Π½Π° балансировку Ρ‡Π΅Ρ€Π΅Π· least_request Π² backend.

Для deployment’ов ΠΌΡ‹ использовали Ρ…ΡƒΠΊ preStop ΠΊΠ°ΠΊ Π½Π° pod’Π°Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ Π½Π° pod’Π°Ρ… sidecar’ΠΎΠ². Π₯ΡƒΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ состояния Ρƒ админского endpoint’Π°, располоТСнного Π½Π° sidecar-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, ΠΈ засыпал Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ соСдинСниям.

Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ смогли Ρ‚Π°ΠΊ быстро ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΡΡ, связана с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ смогли Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ установку Prometheus. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΏΠΎΠΊΠ° ΠΌΡ‹ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ пСрСраспрСдСляли Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с самых нСсбалансированных сСрвисов, Π° Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ 12 самыми Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ сСрвисами Π² кластСрС. Π’ этом Π³ΠΎΠ΄Ρƒ ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ service mesh с Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ сСрвисов, circuit breaking’ΠΎΠΌ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ выбросов, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ скорости ΠΈ трассировкой.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes
Рисунок 3–1. ΠšΠΎΠ½Π²Π΅Ρ€Π³Π΅Π½Ρ†ΠΈΡ CPU ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Envoy

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Tinder Π½Π° Kubernetes

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Благодаря ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ исслСдованиям ΠΌΡ‹ создали ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΠΎ инфраструктурС с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ проСктирования, развСртывания ΠΈ эксплуатации ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… кластСров Kubernetes. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Tinder ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ знаниями ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния Π² Kubernetes.

Когда Π½Π° старой инфраструктурС Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… мощностях, Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΈΠ½ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ запуска Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров EC2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСкунд вмСсто ΠΌΠΈΠ½ΡƒΡ‚. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС EC2 Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ†ΠΈΡŽ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² 2019-ΠΌ Π³ΠΎΠ΄Ρƒ ΠΌΡ‹ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сниТСниС Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° EC2 ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΌ Π³ΠΎΠ΄ΠΎΠΌ.

На ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ ΡƒΡˆΠ»ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΄Π²Π° Π³ΠΎΠ΄Π°, Π½ΠΎ ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Π΅Π΅ Π² ΠΌΠ°Ρ€Ρ‚Π΅ 2019-Π³ΠΎ. Π’ настоящСС врСмя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Tinder Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° кластСрС Kubernetes, состоящСм ΠΈΠ· 200 сСрвисов, 1000 ΡƒΠ·Π»ΠΎΠ², 15 000 pod’ΠΎΠ² ΠΈ 48 000 Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π±ΠΎΠ»Π΅Π΅ Π½Π΅ являСтся ΡƒΠ΄Π΅Π»ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎ эксплуатации. ВсС наши ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ эту ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ процСсс сборки ΠΈ развСртывания своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ΄Π°.

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

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

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