Արդյո՞ք երկու տեղամասի Kubernetes կլաստերին պետք են etcd-ի երեք ընտրիչներ։
Երկու VPN տեղամասերի վրա երեք կառավարման հարթության հանգույցներ դեռ կորցնում են քվորումը, երբ ավելի մեծ տեղամասը մարում է։ Հաշվեք իրական etcd ընտրիչներին և ընտրեք այն կորուստը, որը կվերապրեք։
Երեք կառավարման հարթության վիրտուալ մեքենաներ թվում են վատ գիշերից փրկվելու երեք հնարավորություն։ Բայց այդպես չէ, և այս երկու համոզմունքների միջև եղած հեռավորությունն է, որ կոկիկ երեք հանգույցանոց նախագիծը դարձնում է կլաստեր, որը դադարում է գրառումներ ընդունել, երբ մի շենք կորցնում է էլեկտրականությունը։ Տեղամասերի միջև VPN կապը մեքենաները դարձնում է միմյանց հասանելի և թաքցնում է խնդիրը՝ փոխարենը լուծելու։ Ձայները հաշվվում են ըստ etcd անդամի, և այդ անդամներից երկուսը դեռ կարող են նստել մեկ անջատիչի, մեկ UPS-ի և մեկ վերին գծի հետևում։
Երեք կառավարման հանգույց, մեկ խափանման տիրույթ
Դուք գործարկում եք kubectl get nodes, տեսնում եք երեք կառավարման հարթության գրառում և կլաստերը գրանցում եք որպես բարձր հասանելի։ Այդ թիվը նկարագրում է պլանավորվող հզորությունը, ոչ թե գոյատևումը։ Առանց արտաքին etcd-ի պահվող kubeadm-ում յուրաքանչյուր կառավարման հանգույց նաև հյուրընկալում է անդամ, այնպես որ երեք հանգույցն իսկապես տալիս են երեք ընտրիչ։ Արդյոք այդ ընտրիչները խափանվում են ինքնուրույն, առանձին հարց է, որին հանգույցների ցանկը չի կարող պատասխանել։
Երկու վիրտուալ մեքենա մեկ հիպերվիզորի վրա, երկու դարակ մեկ սնուցման վրա, երկու վերին գիծ մեկ ISP-ից. յուրաքանչյուր զույգ մեկ տիրույթ է՝ երկու հոսթի անուններով։ Գրեք տեղաբաշխումը և նշեք, թե ինչ է կիսում յուրաքանչյուր ընտրիչը՝ հիպերվիզոր, PDU, դարակի վերին անջատիչ, պահոցային զանգված, NAT սարք, VPN կենտրոնացուցիչ։ Այնուհետև թղթի վրա հեռացրեք յուրաքանչյուր համատեղ օբյեկտ և վերահաշվեք մնացած ձայները։ Կլաստերը, որը մեկ ձախողված հոսթի պատճառով կորցնում է երկու ընտրիչ, սկզբից մեկ ընտրիչով կլաստեր էր. ոչ ոք դեռ այդ հարցը չէր տվել։
Ինչին կարող է դիմանալ երկու տեղամասի բաժանումը և ինչին ոչ
Երբ երեք ընտրիչ տեղաբաշխվում են երկու և մեկ հարաբերակցությամբ երկու տեղամասերի վրա, ավելի մեծ կողմը պահպանում է քվորումը, երբ մյուս տեղամասը անհետանում է, իսկ մեկ ընտրիչի կողմը երբեք։ Այդ անհամաչափությունը թվաբանություն է, ոչ թյունինգ։ Ցանկացած մեծամասնության վրա հիմնված etcd կլաստեր, որը տարածված է հենց երկու անկախ տեղամասերի վրա, ձախողվում է «կորցրու ցանկացած տեղամաս և շարունակիր հաստատել» փորձարկումում, որովհետև երկու կողմերը միաժամանակ պետք է ունենան ձայների կեսից ավելին։
Ստորև բերված աղյուսակը ամենաարագ ձևն է տեսնելու, թե իրականում որ ձախողումներն եք գնել։ Կարդացեք յուրաքանչյուր տող այսպես. եթե այս ամբողջ տողը այսօր գիշեր անհետանա, կկարողանան փրկվածները դեռ գրառում հաստատել։
| What disappears | Voters left | Writes still commit |
|---|---|---|
| Site B, holding voter 3 | 2 of 3 | Yes |
| Site A, holding voters 1 and 2 | 1 of 3 | No |
| One hypervisor carrying any two voters | 1 of 3 | No |
| The inter-site VPN only | 2 of 3 on one side | Only 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
Համեմատեք անդամների ցանկը տեղաբաշխման գծագրի հետ։ Եթե երկու անդամ լուծվում են նույն հոսթի կամ նույն դարակի մեջ, գծագիրն է սխալ, ոչ կլաստերը, և սխալ տոպոլոգիայի շուրջ չափը փոխելը գնում է միայն նույն ընդհատման ավելի թանկ տարբերակը։
Նախքան երեք ընտրիչով որևէ նախագիծ հաստատելը, պատասխանեք չորս հարցի. քանի ընտրիչ միասին է կորցնում էլեկտրականությունը, որ տեղամասի կորուստը դեռ մեծամասնություն է թողնում, որտեղ է նստում առաջնորդը, երբ թունելը ընկնում է, և ինչ կարող է դեռ անել փրկված տեղամասը։ «Վստահ չեմ»-ը դրանցից որևէ մեկի վերաբերյալ նշանակում է, որ կլաստերը դեռ բարձր հասանելի չէ։ Դա երեք մեքենա է, որոնք բախտ են ունեցել։