Эрчүүдийн хамгийн шилдэг нь гэж хэлэхэд буруудахгүй байх
зовлонгоор дамжуулан баяр баясгаланг олох.
Людвиг ван Бетховен

Би бол Сергей, би Yandex.Money-д гүйцэтгэлийн судалгааны багт ажилладаг. Би та нарт найрал хөгжим ашиглах бидний замын тухай түүхийн эхлэлийг хэлэхийг хүсч байна - бид хөгжмийн зэмсгийг хэрхэн сонгосон, юуг анхаарч үзсэн. Нийтлэлийн бүх үйл явдал бодит цаг хугацаанд өрнөдөг тул эрхэм уншигч та нөхцөл байдлын хөгжлийг шууд шууд дамжуулж бараг л дагаж байна.
Манай багт яагаад кондуктор хэрэгтэй байна вэ?
Кондуктор гэж хэн бэ? fr. диригер - удирдах, удирдан чиглүүлэх, удирдан чиглүүлэх - хөгжмийн ертөнцөд - энэ бол чуулгын хөгжим сурах, гүйцэтгэх удирдагч юм. Манай тохиолдолд энэ газрыг найрал хөгжим, автоматжуулалтын систем эзэлдэг.
Тэдний үүрэг бол хөгжимд удирдаачийн дүрээс ялгаатай биш - тэд багт тусалж, тоглолтыг удирдан чиглүүлж, зохион байгуулахад хэрэгтэй.
Дүрмээр бол баг нь тодорхой багц хүчин чадалтай байдаг - тэдгээрийг сервер гэж нэрлэе - тэд өөрсдийн төслийг хэрэгжүүлдэг.
Эдгээр серверүүдийг олж авах, ажиллуулах арга нь олон янз байдаг. Хэд хэдэн жишээ:
- Тус баг нь жишээлбэл, үйл ажиллагааны бүлэгт тодорхой параметр бүхий нөөцөөр хангах хүсэлт гаргадаг.
- Үйл ажиллагааны баг нь тэдгээрийг шаардлагатай хэмжээгээр - үүл эсвэл нүцгэн металлаар хангаж, SLA-ийн дагуу зохих нөхцөлд байлгах үүрэгтэй. Тохируулгыг мөн үйл ажиллагааны баг гүйцэтгэдэг.
- Баг нь үйл ажиллагааны бүлгээс зөвхөн үүлэн эсвэл нүцгэн металлын нөөцийг хүлээн авч, өөрөө тохируулдаг.
- Баг нь өөрөө нөөцийг "худалдан авч", бүрэн бие даан хадгалдаг/тохируулдаг.
Манай баг нь дэмжих шаардлагатай серверүүдийг ашигладаг - үйлдлийн системээ шинэчлэх, шинэ багц суулгах гэх мэт.
Бид өөрсдийнхөө хувьд тэдгээрийг хоёр үндсэн төрөлд хуваасан.
- танкийн бүлэг,
- үйлчилгээний бүлэг.
Танкны бүлэг нь Yandex.Tank-тай хостуудаас бүрддэг.
Үйлчилгээний бүлэгт засвар үйлчилгээтэй холбоотой бүх зүйл багтдаг - эдгээр нь хувилбарын мөчлөгт дэмжлэг үзүүлэх, автомат тайлан гаргах гэх мэт төрөл бүрийн үйлчилгээ юм.
Нэгэн цагт энэ бүхнийг гараар удирдахад тохиромжгүй болж, бид серверүүдийг "ачаахаас" эхлээд дотоод үйлчилгээгээ хөгжүүлэх, гаргах, эхлүүлэх хүртэл бүх үйл явцыг автоматжуулах талаар бодсон.
Оркестр өөрөө тоглож чаддаг байсан ч удирдаач яагаад хэрэгтэй байна вэ?
Эхлээд бид Ansible програмыг эзэмшиж, системийн администраторуудаас бага хамааралтай байхын тулд нүцгэн металл серверүүдээ "цутгаж" эхэлсэн - энд бүгд ялж, бид шинэ ур чадвар эзэмшиж, администраторуудыг бидэнгүйгээр үргэлж хангалттай байдаг зарим ажлаас чөлөөлдөг. . Бид аль болох өөрийн мэргэжлээс гадна багийн бие даасан байдлыг хөгжүүлэхийг хичээдэг.
Тус компанид Ansible-тэй ажиллах ажлыг нэлээд удаан хугацаанд тохируулж, зохицуулж ирсэн тул бид шийдлээ энэ үйл явцад хялбархан нэгтгэсэн.
Одоогоор хостын сан нь гурван Ansible үүргээс бүрдэж байна:
- Эхний үүрэг нь OS-ийг суулгах,
- хоёр дахь нь хостын үндсэн тохиргоо, LDAP зөвшөөрлийг ажиллуулдаг, жишээлбэл,
- гурав дахь нь Yandex.Tank болон холбогдох хамаарлыг докерын саванд суулгадаг.
Багийн хүрээнд ашигладаг үйлчилгээнүүд рүүгээ орцгооё.
Даалгаврынхаа хувьд бид Котлин, Питон хоёрыг адилхан ашигладаг бөгөөд Голанг бага зэрэг ашигладаг. Үйлчилгээнийхээ хөгжил, хэрэглээг нэгтгэхийн тулд бид тэдгээрийг Docker контейнерт багцлахаар шийдсэн. Энэ нь танд програмчлалын хэл сонгох эрх чөлөөг олгож, нэгэн зэрэг таны өргөдлийг хүргэх нэг төрлийн форматыг зохицуулдаг.
Docker дахь ipv6-ийн тухай жижиг тэмдэглэл
Бидний харилцдаг зарим үйлчилгээг зөвхөн ipv6-ээр дамжуулан авах боломжтой тул бид чингэлэгт зориулсан ipv6-г хэрхэн хийхийг олж мэдэх шаардлагатай болсон.
Docker-ийн албан ёсны вэбсайт дээрх ipv6 баримт бичгийн дагуу ipv6 нь daemon.json-д параметрүүдийг нэмж идэвхжүүлсэн байна:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Энэ тохиолдолд үйлчилгээ үзүүлэгч нь IPv6 дэд сүлжээг гаргах ёстой бөгөөд та бүртгүүлэх болно fixed-cidr-v6.
Гэсэн хэдий ч бид өөр сонголтыг сонгосон - ipv6 NAT, яагаад гэвэл:
- Одоо докер зөвхөн ipv6-тай.
- Контейнер бүрт дэлхий даяар чиглүүлэх боломжтой хаяг байгаа нь нэмэлт шүүлтүүр хийхгүй бол бүх портууд (хэвлэгдээгүй байсан ч) бүгдэд нээлттэй байна гэсэн үг юм.
- портуудыг нийтлэх хэрэглэгчийн прокси, .
ipv6 NAT нь , энэ нь өөрөө ip6tables дээрх дүрмийг удирдаж, шинэ контейнер нэмэх үед тэдгээрийг засдаг.
Энэхүү шийдэл нь зөв ажиллахын тулд бусад хэд хэдэн заль мэхийг хийх шаардлагатай болсон. Систем дээр ip6table_nat-г эхлүүлэхээ мартуузай. Системд суулгасан модуль байгаа нь модулийг эхлүүлэх үед цөмд ачаалагдах баталгаа болохгүй. Шинэхэн хост дээр NAT бүхий контейнер ажиллуулах үед бид ийм алдаатай тулгарсан:
2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)Modprobe модулийг ашиглан Ansible дүрд эхлүүлэх тохиргоог нэмж, lineinfile ашиглан үйлдлийн систем эхлүүлэх үед ачаалсны дараа асуудал шийдэгдсэн.
- name: Add ip6table_nat module
modprobe:
name: ip6table_nat
state: present
- name: Add ip6table_nat to boot
lineinfile:
path: /etc/modules
line: 'ip6table_nat'Дашрамд хэлэхэд, зангилаа дээр нэг сайн байдаг , энэ нь докер дээр ipv6 ажиллуулах нэг буюу өөр аргын давуу болон сул талуудыг товч бөгөөд тодорхой тайлбарласан болно.
Гэхдээ эхэнд тавьсан асуултдаа эргэн оръё:
Оркестр өөрөө тоглож чаддаг байсан ч удирдаач яагаад хэрэгтэй байна вэ?
Одоо хүн бүр манай багт хэрхэн тоглохыг төсөөлж байна:
- серверүүдийг "цутгах" үйл явц үүссэн,
- үйлчилгээг хөгжүүлэх, байршуулах нь нэгдсэн.
Үндэслэлтэй асуулт гарч ирнэ: Docker контейнерт үйлчилгээгээ хэрхэн үр ашигтай, автоматаар байршуулах, шинэчлэх, хянах вэ?
Оркестрийн гишүүн бүр өөрийнхөө хэсгийг мэддэг ч гэсэн андуурч, анхны санаанаасаа хазайж чаддаг. Эндээс бид удирдаачгүйгээр манай оркестр үр дүнтэй бэлтгэл хийж, уялдаа холбоотой тоглохгүй гэсэн дүгнэлтэд хүрч байна. Удирдагч нь гүйцэтгэлийн бүх үзүүлэлтийг хариуцаж, бүх зүйлийг нэг хэмнэл, сэтгэлийн хөдөлгөөнөөр нэгтгэхийг баталгаажуулдаг.
Хамгийн бага хөрөнгө оруулалтаар сайн кондуктор яаж авах вэ?
Оркестрийн сэдэв зах зээлд нэлээд сайн хөгжсөн. Гэхдээ эхлээд кондукторт туслах туслах хэрэгслүүдийн талаар ярилцъя.
- үндсэн хоёр функцийг хангадаг систем:
- үйлчилгээний нээлт,
- тархсан түлхүүр-утга хадгалах сан.
Манай найрал хөгжимд Консул үйлчилгээг бүртгэх, тэдгээрийн тохиргоог хадгалах үүрэгтэй. Бүртгэлийн хоёр сонголт байдаг:
- Үйлчилгээ нь HTTP API ашиглан өөрийгөө бүртгүүлэх үед идэвхтэй байна;
- Идэвхгүй - үйлчилгээг гараар бүртгүүлэх ёстой.
Vault нь нууц үг, гэрчилгээ гэх мэт нууцыг хадгалах, ашиглах боломжийг стандартчилан, нэгтгэдэг агуулах юм.
Энэ хэрэгслийг ашигласнаар бид дараах давуу талуудыг олж авах болно.
- HTTP API ашиглан нууц үүсгэх, хадгалах, тэдгээрийн амьдралын мөчлөгийг удирдах нэг төв.
- Transit Secrets Engine - өгөгдлийг хадгалахгүйгээр шифрлэх, тайлах. Хамгаалалтгүй холбооны сувгуудаар шифрлэгдсэн хэлбэрээр өгөгдлийг дамжуулах чадвар.
- Тохируулахад хялбар бодлогод хандах.
- Нууц мэдээлэлд нэвтрэх аудит.
- Дэд бүтцийнхээ хүрээнд өөрөө гарын үсэг зурсан гэрчилгээг удирдахын тулд өөрийн CA (Гэрчилгээний газар) үүсгэх чадвар.
Бидний бүх шаардлагыг харгалзан үзээд удирдаачийн дүрд тохирох хоёр сонголт байсан - Кубернетес ба Номад.
Kubernetes
Түүний тухай хичнээн олон нийтлэл, ном бичсэн байна (энд Жишээ нь), би товчхон бичих болно гэсэн мэдээлэл байна - энэ бол бараг бүх зүйлийг хийх боломжтой бүх нийтийн хураагч юм. Үүний үнэ нь Kubernetes дээр кластер байгуулах, засвар үйлчилгээ хийх нь үргэлж хялбар байдаггүй.
Нүүдэл
дээр дурьдсан консул, хадгаламжаараа алдартай HashiCorp компаниас.
Бид Nomad-ийг суулгах, тохируулах нь Kubernetes-ээс хамаагүй хялбар болохыг олж мэдсэн. Нэг хоёртын файл нь сервер болон үйлчлүүлэгчийн горимд ажилладаг. Үүний зэрэгцээ, Nomad нь бидний шийдвэрлэхийг хүсч буй ажлуудын жагсаалтыг бүхэлд нь хамардаг: кластерын удирдлага, хурдан хуваарилагч, олон мэдээллийн төвийн дэмжлэг. Түүнчлэн, консул болон агуулахыг ашиглахдаа бид үйлчилгээгээ зохион байгуулахад илүү нягт уялдаатай болдог.
Одоогоор юу хийж байна:
- Консулыг байрлуулах серверүүдийг бэлтгэсэн,
- нүүдэлчдийн кластерийн тохиргоог Консулд оруулах бөгөөд үүний тусламжтайгаар нүүдэлчийг автоматаар байрлуулах,
- Үүний зэрэгцээ бид нууцыг хадгалах сав суулгана.
Үзэгчдэд зориулсан асуулт: Ийм ажилд удирдаач хөлслөх нь зүйтэй болов уу эсвэл түүнгүйгээр найрал хөгжим сайн ажиллаж байна уу? Энэ талаар юу гэж бодож байгаагаа бидэнд сэтгэгдэл дээр хэлээрэй.
Манай блогт бүртгүүлж, холбоотой байгаарай - эцэст нь юу болсон, бид нүүдэлчдийн кластерийг хүссэнээрээ тохируулсан эсэхээ танд удахгүй хэлэх болно.
Манай тохилог байранд ирээрэй , Та үргэлж зөвлөгөө авах, хамтран ажиллагсаддаа туслах, бүтээмжийн судалгаа болон бусад зүйлийн талаар чатлах боломжтой.
Эх сурвалж: www.habr.com
