Amazon EKS Windows pakalpojumā GA ir kļūdas, taču tā ir ātrākā

Amazon EKS Windows pakalpojumā GA ir kļūdas, taču tā ir ātrākā

Labdien, es vēlos dalÄ«ties ar jums savā pieredzē par pakalpojuma AWS EKS (Elastic Kubernetes Service) iestatÄ«Å”anu un lietoÅ”anu Windows konteineriem vai drÄ«zāk par tā izmantoÅ”anas neiespējamÄ«bu un AWS sistēmas konteinerā atrasto kļūdu tiem. kam interesē Å”is pakalpojums Windows konteineriem, lÅ«dzu zem kat.

Es zinu, ka Windows konteineri nav populāra tēma, un daži cilvēki tos izmanto, taču es tomēr nolēmu uzrakstÄ«t Å”o rakstu, jo par kubernetes un Windows bija pāris raksti par HabrĆ©, un joprojām ir tādi cilvēki.

sākums

Viss sākās, kad tika nolemts mÅ«su uzņēmumā pakalpojumus migrēt uz kubernetes, kas ir 70% Windows un 30% Linux. Å im nolÅ«kam kā viens no iespējamajiem variantiem tika izskatÄ«ts AWS EKS mākoņpakalpojums. LÄ«dz 8. gada 2019. oktobrim AWS EKS Windows bija publiskajā priekÅ”skatÄ«jumā, sāku ar to, tur tika izmantota vecā kubernetes 1.11 versija, bet nolēmu tomēr pārbaudÄ«t un paskatÄ«ties, kurā stadijā ir Å”is mākoņpakalpojums, vai strādā. vispār, kā izrādÄ«jās, nē, tā bija kļūda, pievienojot noņemÅ”anu podiem, savukārt vecie pārstāja reaģēt caur iekŔējo ip no tā paÅ”a apakÅ”tÄ«kla, kur windows worker mezgls.

Tāpēc tika nolemts atteikties no AWS EKS izmantoÅ”anas par labu mÅ«su paÅ”u klasterim uz kubernetes tajā paŔā EC2, tikai mums paÅ”iem bÅ«tu jāapraksta visa balansÄ“Å”ana un HA, izmantojot CloudFormation.

Amazon EKS Windows konteineru atbalsts tagad parasti ir pieejams

autors Martin Beeby | 08. gada 2019. oktobrÄ«

Pirms man bija laiks pievienot CloudFormation veidni savam klasterim, es redzēju Ŕīs ziņas Amazon EKS Windows konteineru atbalsts tagad parasti ir pieejams

Protams, es atliku visu savu darbu un sāku pētÄ«t, ko viņi darÄ«ja GA labā un kā viss mainÄ«jās ar publisko priekÅ”skatÄ«jumu. Jā, AWS, labi darÄ«ts, atjaunināja Windows Worker mezgla attēlus uz versiju 1.14, kā arÄ« pats klasteris, EKS versija 1.14, tagad atbalsta Windows mezglus. Project by Public Preview plkst github Viņi to piesedza un teica, ka tagad izmantojiet oficiālo dokumentāciju Å”eit: EKS Windows atbalsts

EKS klastera integrÄ“Å”ana paÅ”reizējā VPC un apakÅ”tÄ«klos

Visos avotos iepriekÅ” norādÄ«tajā saitē uz paziņojumu, kā arÄ« dokumentācijā tika ierosināts izvietot klasteru, izmantojot patentēto eksctl utilÄ«tu vai CloudFormation + kubectl after, tikai izmantojot publiskos apakÅ”tÄ«klus pakalpojumā Amazon, kā arÄ« izveidojot atseviŔķa VPC jaunam klasterim.

Å Ä« opcija nav piemērota daudziem; pirmkārt, atseviŔķs VPC nozÄ«mē papildu izmaksas par tā izmaksām + trafika savienoÅ”anu ar paÅ”reizējo VPC. Kas jādara tiem, kuriem jau ir gatava AWS infrastruktÅ«ra ar saviem vairākiem AWS kontiem, VPC, apakÅ”tÄ«kliem, marÅ”ruta tabulām, tranzÄ«ta vārteju un tā tālāk? Protams, jÅ«s nevēlaties to visu lauzt vai pārtaisÄ«t, un jaunais EKS klasteris ir jāintegrē paÅ”reizējā tÄ«kla infrastruktÅ«rā, izmantojot esoÅ”o VPC un atdalÄ«Å”anai, ne vairāk kā, izveidojot klasterim jaunus apakÅ”tÄ«klus.

Manā gadÄ«jumā tika izvēlēts Ŕāds ceļŔ, es izmantoju esoÅ”o VPC, pievienoju tikai 2 publiskos apakÅ”tÄ«klus un 2 privātos apakÅ”tÄ«klus jaunajam klasterim, protams, visi noteikumi tika ņemti vērā saskaņā ar dokumentāciju Izveidojiet savu Amazon EKS Cluster VPC.

Bija arī viens nosacījums: publiskajos apakŔtīklos, kas izmanto EIP, nav darbinieku mezglu.

eksctl vs CloudFormation

Es uzreiz izdarÄ«Å”u atrunu, ka izmēģināju abas klastera izvietoÅ”anas metodes, abos gadÄ«jumos attēls bija vienāds.

Es parādÄ«Å”u piemēru, izmantojot tikai eksctl, jo kods Å”eit bÅ«s Ä«sāks. Izmantojot eksctl, izvietojiet klasteru trÄ«s darbÄ«bās:

1. Mēs izveidojam paÅ”u klasteru + Linux darbinieka mezglu, kas vēlāk uzņems sistēmas konteinerus un to paÅ”u neveiksmÄ«go vpc kontrolieri.

eksctl create cluster 
--name yyy 
--region www 
--version 1.14 
--vpc-private-subnets=subnet-xxxxx,subnet-xxxxx 
--vpc-public-subnets=subnet-xxxxx,subnet-xxxxx 
--asg-access 
--nodegroup-name linux-workers 
--node-type t3.small 
--node-volume-size 20 
--ssh-public-key wwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami auto 
--node-private-networking

Lai izvietotu esoŔā VPC, vienkārŔi norādiet savu apakŔtīklu ID, un eksctl noteiks paŔu VPC.

Lai nodroŔinātu, ka jūsu darbinieka mezgli tiek izvietoti tikai privātā apakŔtīklā, mezglu grupai ir jānorāda --node-private-networking.

2. Mēs savā klasterÄ« instalējam vpc-controller, kas pēc tam apstrādās mÅ«su darbinieku mezglus, saskaitot brÄ«vo IP adreÅ”u skaitu, kā arÄ« ENI skaitu instancē, pievienojot un noņemot tos.

eksctl utils install-vpc-controllers --name yyy --approve

3.Pēc tam, kad jūsu sistēmas konteineri ir veiksmīgi palaisti jūsu Linux darbinieka mezglā, ieskaitot vpc kontrolieri, atliek tikai izveidot citu mezglu grupu ar Windows darbiniekiem.

eksctl create nodegroup 
--region www 
--cluster yyy 
--version 1.14 
--name windows-workers 
--node-type t3.small 
--ssh-public-key wwwwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami-family WindowsServer2019CoreContainer 
--node-ami ami-0573336fc96252d05 
--node-private-networking

Kad mezgls ir veiksmÄ«gi izveidojis savienojumu ar jÅ«su kopu un Ŕķiet, ka viss ir kārtÄ«bā, tas ir statusā Gatavs, bet nē.

Kļūda vpc kontrolierī

Ja mēģināsim palaist pods uz Windows Worker mezgla, mēs saņemsim kļūdu:

NetworkPlugin cni failed to teardown pod "windows-server-iis-7dcfc7c79b-4z4v7_default" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address]

Ja skatāmies dziļāk, mēs redzam, ka mÅ«su gadÄ«jums AWS izskatās Ŕādi:

Amazon EKS Windows pakalpojumā GA ir kļūdas, taču tā ir ātrākā

Un tam vajadzētu bÅ«t Ŕādi:

Amazon EKS Windows pakalpojumā GA ir kļūdas, taču tā ir ātrākā

No tā ir skaidrs, ka vpc kontrolieris kādu iemeslu dēļ neizpildīja savu daļu un nevarēja pievienot instancē jaunas IP adreses, lai podi varētu tās izmantot.

Apskatīsim vpc-controller pod žurnālus, un tas ir tas, ko mēs redzam:

kubectl žurnāls -n kube-sistēma

I1011 06:32:03.910140       1 watcher.go:178] Node watcher processing node ip-10-xxx.ap-xxx.compute.internal.
I1011 06:32:03.910162       1 manager.go:109] Node manager adding node ip-10-xxx.ap-xxx.compute.internal with instanceID i-088xxxxx.
I1011 06:32:03.915238       1 watcher.go:238] Node watcher processing update on node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.200423       1 manager.go:126] Node manager failed to get resource vpc.amazonaws.com/CIDRBlock  pool on node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxxx
E1011 06:32:08.201211       1 watcher.go:183] Node watcher failed to add node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxx
I1011 06:32:08.201229       1 watcher.go:259] Node watcher adding key ip-10-xxx.ap-xxx.compute.internal (0): failed to find the route table for subnet subnet-0xxxx
I1011 06:32:08.201302       1 manager.go:173] Node manager updating node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.201313       1 watcher.go:242] Node watcher failed to update node ip-10-xxx.ap-xxx.compute.internal: node manager: failed to find node ip-10-xxx.ap-xxx.compute.internal.

MeklÄ“Å”ana Google ne pie kā nedeva, jo acÄ«mredzot neviens vēl nebija pieķēris Ŕādu kļūdu vai nebija publicējis problēmu, vispirms nācās izdomāt iespējas paÅ”am. Pirmā lieta, kas ienāca prātā, bija tāda, ka, iespējams, vpc kontrolieris nevar atrisināt ip-10-xxx.ap-xxx.compute.internal un sasniegt to, un tāpēc rodas kļūdas.

Jā, patieŔām, mēs VPC izmantojam pielāgotus DNS serverus un principā neizmantojam Amazon, tāpēc pat pārsÅ«tÄ«Å”ana netika konfigurēta Å”im ap-xxx.compute.internal domēnam. Izmēģināju Å”o variantu, un tas nedeva rezultātus, iespējams, tests nebija tÄ«rs, un tāpēc tālāk, sazinoties ar tehnisko atbalstu, padevos viņu idejai.

Tā kā ideju Ä«sti nebija, visas droŔības grupas veidoja pats eksctl, tāpēc par to apkalpojamÄ«bu Å”aubu nebija, marÅ”ruta tabulas arÄ« bija pareizas, nat, dns, interneta pieeja ar worker node arÄ« bija.

Turklāt, ja izvietojat darbinieka mezglu publiskajā apakÅ”tÄ«klā, neizmantojot ā€”node-private-networking, vpc kontrolieris nekavējoties atjaunināja Å”o mezglu, un viss darbojās kā pulkstenis.

Bija divas iespējas:

  1. Atmet un pagaidi, kamēr kāds aprakstÄ«s Å”o kļūdu AWS un to izlabos, un tad vari droÅ”i lietot AWS EKS Windows, jo viņi tikko izlaida GA (Ŕī raksta tapÅ”anas brÄ«dÄ« ir pagājuÅ”as 8 dienas), iespējams, daudzi to darÄ«s ej pa to paÅ”u ceļu kā es.
  2. Rakstiet AWS atbalsta dienestam un pastāstiet viņiem problēmas bÅ«tÄ«bu ar veselu kaudzi žurnālu no jebkuras vietas un pierādiet viņiem, ka viņu pakalpojums nedarbojas, izmantojot jÅ«su VPC un apakÅ”tÄ«klus, ne velti mums bija biznesa atbalsts, jums vajadzētu izmantot tā vismaz vienu reizi :)

Saziņa ar AWS inženieriem

Izveidojot biļeti portālā, es kļūdaini izvēlējos atbildēt man caur Web - e-pastu vai atbalsta centru, caur Å”o iespēju viņi var jums atbildēt pēc dažām dienām, neskatoties uz to, ka manai biļetei bija Smaguma pakāpe - sistēma ir traucēta, nozÄ«mēja atbildi <12 stundu laikā, un tā kā Biznesa atbalsta plānā ir 24/7 atbalsts, tad cerēju uz to labāko, bet sanāca kā vienmēr.

Mana biļete tika atstāta nepieŔķirta no piektdienas lÄ«dz pirmdienai, tad nolēmu viņiem vēlreiz uzrakstÄ«t un izvēlējos atbildes opciju Chat. Pēc neilgas gaidÄ«Å”anas pie manis tika nozÄ«mēts Harshads Madhavs, un tad sākās...

Mēs ar to atkļūdojām tieÅ”saistē 3 stundas pēc kārtas, pārsÅ«tot žurnālus, izvietojot to paÅ”u klasteru AWS laboratorijā, lai emulētu problēmu, no manas puses izveidojām klasteru no jauna utt., vienÄ«gais, pie kā nonācām, ir tas, ka no plkst. žurnālos bija skaidrs, ka resol nedarbojas AWS iekŔējie domēna nosaukumi, par kuriem es rakstÄ«ju iepriekÅ”, un Harshad Madhav man lÅ«dza izveidot pārsÅ«tÄ«Å”anu, it kā mēs izmantojam pielāgotu DNS un tā varētu bÅ«t problēma.

PārsūtīŔana

ap-xxx.compute.internal  -> 10.x.x.2 (VPC CIDRBlock)
amazonaws.com -> 10.x.x.2 (VPC CIDRBlock)

Tas arÄ« tika izdarÄ«ts, diena bija beigusies. HarÅ”ads Madhavs atrakstÄ«ja, lai pārbaudÄ«tu, un tam vajadzētu darboties, bet nē, izŔķirtspēja nepalÄ«dzēja.

Pēc tam notika saziņa ar vēl 2 inženieriem, viens vienkārÅ”i izkrita no čata, acÄ«mredzot baidÄ«jās no sarežģīta gadÄ«juma, otrs manu dienu atkal pavadÄ«ja pilnā atkļūdoÅ”anas ciklā, sÅ«tot žurnālus, veidojot klasterus abās pusēs, beigas vins tikai teica labi, man tas der, te es esmu es daru visu soli pa solim oficiala dokumentaacija un tev un tev izdosies.

Uz ko es pieklājÄ«gi palÅ«dzu viņam aiziet un pieŔķirt manai biļetei kādu citu, ja nezināt, kur meklēt problēmu.

Fināls

TreÅ”ajā dienā pie manis tika norÄ«kots jauns inženieris Aruns B., un jau no komunikācijas sākuma ar viņu uzreiz bija skaidrs, ka tie nav 3 iepriekŔējie inženieri. ViņŔ izlasÄ«ja visu vēsturi un nekavējoties lÅ«dza savākt žurnālus, izmantojot viņa paÅ”a ps1 skriptu, kas bija viņa github. Tam atkal sekoja visas klasteru veidoÅ”anas, komandu rezultātu izvadÄ«Å”anas, žurnālu vākÅ”anas iterācijas, bet Aruns B., spriežot pēc man uzdotajiem jautājumiem, virzÄ«jās pareizajā virzienā.

Kad mēs nonācām lÄ«dz punktam -stderrthreshold=debug iespējoÅ”ana viņu vpc-kontrolerÄ«, un kas notika tālāk? protams, tas nedarbojas) pods vienkārÅ”i nesākas ar Å”o opciju, darbojas tikai -stderrthreshold=info.

Mēs pabeidzām Å”eit, un Aruns B. teica, ka viņŔ mēģinās atveidot manus soļus, lai iegÅ«tu tādu paÅ”u kļūdu. Nākamajā dienā es saņemu atbildi no Aruna B. viņŔ neatteicās no Ŕīs lietas, bet paņēma viņu vpc kontroliera pārskata kodu un atrada vietu, kur tas atrodas un kāpēc tas nedarbojas:

Amazon EKS Windows pakalpojumā GA ir kļūdas, taču tā ir ātrākā

Tādējādi, ja izmantojat galveno marÅ”ruta tabulu savā VPC, tad pēc noklusējuma tai nav saistÄ«bu ar nepiecieÅ”amajiem apakÅ”tÄ«kliem, kas ir tik nepiecieÅ”ami vpc-kontrolierim, publiska apakÅ”tÄ«kla gadÄ«jumā tai ir pielāgota marÅ”ruta tabula. kam ir asociācija.

Manuāli pievienojot asociācijas galvenajai marŔruta tabulai ar nepiecieŔamajiem apakŔtīkliem un no jauna izveidojot mezglu grupu, viss darbojas lieliski.

Ceru, ka Aruns B. tieŔām ziņos par Å”o kļūdu EKS izstrādātājiem un mēs redzēsim jaunu vpc-controller versiju, kurā viss darbosies no kastes. PaÅ”laik jaunākā versija ir: 602401143452.dkr.ecr.ap-southeast-1.amazonaws.com/eks/vpc-resource-controller:0.2.1
ir Ŕī problēma.

Paldies visiem, kas izlasīja līdz galam, pirms ievieŔanas pārbaudiet visu, ko izmantosit ražoŔanā.

Avots: www.habr.com

Pievieno komentāru