Үш басқару жазықтығы виртуалды машинасы жаман түннен аман қалудың үш мүмкіндігі сияқты көрінеді. Бірақ олай емес, және осы екі сенімнің арасындағы қашықтық ұқыпты үш түйінді жобаны бір ғимарат электр қуатынан айырылғанда жазу қабылдауды тоқтататын кластерге айналдырады. Алаңдар арасындағы 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

Мүшелер тізімін орналастыру сызбасымен салыстырыңыз. Егер екі мүше бір хостқа немесе бір сөреге шешілсе, қате кластерде емес, сызбада, және қате топология айналасында өлшемді өзгерту сол үзілістің қымбатырақ нұсқасын ғана сатып алады.

Кез келген үш сайлаушылы жобаны мақұлдамас бұрын төрт сұраққа жауап беріңіз: қанша сайлаушы бірге қуаттан айырылады, қай алаңның жоғалуы әлі көпшілікті қалдырады, туннель құлағанда көшбасшы қайда отырады және аман қалған алаң әлі не істей алады. Олардың кез келгеніне «сенімді емеспін» деген кластер әлі жоғары қолжетімді емес дегенді білдіреді. Бұл бағы жанған үш машина.

Қатысты мақалалар