Үч башкаруу тегиздигинин виртуалдык машинасы жаман түндөн аман калуунун үч мүмкүнчүлүгүндөй көрүнөт. Бирок андай эмес, жана бул эки ишенимдин ортосундагы аралык таза үч түйүндүү долбоорду бир имарат электр кубатынан ажыраганда жазуу кабыл алууну токтоткон кластерге айландырат. Аймактардын ортосундагы VPN байланышы машиналарды бири-бирине жеткиликтүү кылат жана маселени оңдоонун ордуна жашырат. Добуштар ар бир etcd мүчөсү боюнча саналат, жана ошол мүчөлөрдүн экөө дагы эле бир коммутатор, бир UPS жана бир линиянын артында отура алышат.

Үч башкаруу түйүнү, бир бузулуу домени

Сиз kubectl get nodes иштетесиз, үч башкаруу тегиздигинин жазуусун көрөсүз жана кластерди жогорку жеткиликтүү деп каттайсыз. Бул сан пландалган сыйымдуулукту сүрөттөйт, жашоону эмес. Сырткы etcd жок kubeadm ичинде ар бир башкаруу түйүнү мүчөнү да кармайт, ошондуктан үч түйүн чындыгында үч шайлоочу берет. Ошол шайлоочулардын көз карандысыз иштебей калышы өзүнчө суроо, ага түйүндөрдүн тизмеси жооп бере албайт.

Бир гипервизордогу эки VM, бир кубат булагындагы эки текче, бир ISPден эки линия: ар бир жуп эки хост атын кийген бир домен. Жайгаштырууну жазып, ар бир шайлоочу эмнени бөлүшөрүн белгилеңиз — гипервизор, PDU, текченин үстүнкү коммутатору, сактоо массиви, NAT түзмөгү, VPN концентратору. Анан кагазда ар бир жалпы объектини алып салып, калган добуштарды кайра санаңыз. Бир иштебей калган хосттон эки шайлоочуну жоготкон кластер башынан бери бир шайлоочулуу кластер болгон; эч ким ага бул суроону али берген эмес.

Эки аймактын бөлүнүшү эмнени көтөрө алат жана эмнени көтөрө албайт

Үч шайлоочу эки аймакка эки жана бир болуп жайгаштырылса, экинчи аймак жок болгондо чоңураак тарап кворумду сактайт, ал эми бир шайлоочулуу тарап эч качан сактабайт. Бул асимметрия арифметика, жөндөө эмес. Так эки көз карандысыз аймакка таралган көпчүлүккө негизделген каалаган etcd кластери «каалаган аймактан ажырап, бекитүүнү улант» сынагынан өтпөйт, анткени эки тарап тең бир убакта добуштардын жарымынан көбүн кармоого тийиш.

Төмөнкү таблица кайсы бузулууларды чындыгында сатып алганыңызды көрүүнүн эң тез жолу. Ар бир сапты мындай окуңуз: бүгүн түндө бул сап толугу менен жок болсо, аман калгандар дагы эле жазууну беките алабы?

What disappearsVoters leftWrites still commit
Site B, holding voter 32 of 3Yes
Site A, holding voters 1 and 21 of 3No
One hypervisor carrying any two voters1 of 3No
The inter-site VPN only2 of 3 on one sideOnly on the majority side

Эмне үчүн туннель эч качан добуш кошпойт

VPN — транспорт, мүчө эмес. Ал алыскы шайлоочуну жеткиликтүү кыла алат жана бөлүнүүнү жай убакыт чегине окшош нерсеге айландыра алат, жана бул анын кворумга кошкон бүт салымы. Ал кошкону — чыгым, анткени ар бир бекитүү байланыштан өтүшү керек жана etcd raft журналына тийген жазууларда бул барыш-келишти төлөйт. Титреген жол репликацияны кайталоолорго жана шайлоолорго айландырат.

Бөлүнүүлөр — адамдар сыйкыр күткөн жер, ошондуктан алар тууралуу так болуңуз. Эгер байланыш эски лидер бир шайлоочулуу тарапта отурганда үзүлсө, бул тарап беките албайт жана шайлоо убактысы бүткөндө лидер кызматтан кетет, ал эми эки шайлоочулуу тарап орун басарды шайлайт. etcdдин бузулуу режимдери боюнча колдонмосу жүрүм-турумду так сүрөттөйт: көпчүлүк тарапта уланган кызмат, обочолонгон тарапта экинчи жазууга боло турган кластер жок.

Кайсы тыныгууну сатып аларыңызды чечиңиз

Эки кошуу бир — A аймагы негизги болуп, аны жоготуу кимдир бирөө аракет кылганга чейин башкаруу тегиздигинин жазууларын жоготууну билдирерин кабыл алганда мыйзамдуу долбоор. Аны кемчиликке айландырган нерсе — ошол чечимди жашыруун калтыруу. Аны runbookка жазыңыз: башкаруу тегиздигиңиз кайсы аймактан аман калат жана экинчи аймак 03:00дө өчкөндө оператор эмне кылат.

Эгер талап ордуна «каалаган аймак иштебей калышы мүмкүн» болсо, жайгаштыруу ар бир аймакта көпчүлүктү кармоого тийиш, ал эми эки аймактагы үч шайлоочу муну кыла албайт. Же чынында эле көз карандысыз үчүнчү доменди кошосуз — башка провайдердеги кичинекей аймак ал жакка жол туруктуу болсо жарайт — же өзүнчө etcd менен эки кластерге бөлүнүп, ошол бөлүнүүнүн операциялык чыгымын кабыл аласыз. Эч бир күбө кыска жолу будан кутулбайт: etcdде жеңил калыс мүчө жок, ошондуктан үчүнчү шайлоочу өзүнүн диск, эстутум жана тармак талаптары бар толук мүчө. Диаграммага «күбө» деп жазылган кутуча тартуу күбө жаратпайт.

Кворум кызмат менен бирдей эмес

etcd кворуму API серверин жазуу кабыл алууга жөндөмдүү кармайт, жана кармаганы ушул гана. Жүктөө теңдештиргичинин ден соолук текшерүүлөрү, ingress, туннель аркылуу CNI жеткиликтүүлүгү, томдорду тиркөө зоналары жана колдонмо репликациясы — ар бири өз жообун талап кылат. Кластер таза көпчүлүктү кармап, баары бир колдонуучуларга пайдалуу эч нерсе сунуштай албашы мүмкүн.

Анан бар деп ойлогон мүчөлүгүңүздү ырастаңыз, анткени диаграммалар жылат:

kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table

Мүчөлөрдүн тизмесин жайгаштыруу чиймеси менен салыштырыңыз. Эгер эки мүчө бир хостко же бир текчеге чечилсе, ката кластерде эмес, чиймеде, жана туура эмес топологиянын айланасында өлчөмдү өзгөртүү ошол эле тыныгуунун кымбатыраак версиясын гана сатып алат.

Каалаган үч шайлоочулуу долбоорду бекитүүдөн мурун төрт суроого жооп бериңиз: канча шайлоочу бирге кубаттан ажырайт, кайсы аймактын жоголушу дагы көпчүлүктү калтырат, туннель кулаганда лидер кайда отурат жана аман калган аймак дагы эмне кыла алат. Алардын кайсынысына болбосун «ишенбейм» деген кластер дагы жогорку жеткиликтүү эмес дегенди билдирет. Бул бактылуу үч машина.

Тектеш макалалар