ProHoster > Блог > Whakahaerenga > "Ko nga Kubernetes i piki ake i te 10 nga wa": ko wai te he mo tenei?
"Ko nga Kubernetes i piki ake i te 10 nga wa": ko wai te he mo tenei?
Tuhipoka. whakamaori.: Ko tenei tuhinga, i tuhia e Galo Navarro, e mau ana i te turanga o te Tumuaki Pūmanawa Engineer i te kamupene Pakeha Adevinta, he "tirotiro" whakamiharo me te ako i roto i te waahi o nga mahi hanganga. Ko tana taitara taketake i paku whakaroahia i roto i te whakamaoritanga mo te take i whakamaramatia e te kaituhi i te timatanga.
Panui mai i te kaituhi: Ko te ahua o tenei panui kukume nui atu te aro atu i te mea i tumanakohia. Kei te pukuriri tonu nga korero kei te pohehe te taitara o te tuhinga, kei te pouri etahi o nga kaipānui. Kei te mohio ahau ki nga take o nga mea e pa ana, na reira, ahakoa te kino o te whakakino i te katoa o nga mahi, e hiahia ana ahau ki te korero wawe ki a koe he aha tenei tuhinga. Ko tetahi mea whakamiharo i kite ahau i te hekenga o nga kapa ki Kubernetes ko nga wa ka puta mai he raru (penei i te pikinga o te roa i muri i te hekenga), ko te mea tuatahi ka whakahengia ko Kubernetes, engari ka puta ko te kaitoi kaore i te tino ki whakahenga. Ka korero tenei tuhinga mo tetahi keehi penei. Ko tona ingoa ka whakahoki ano i te tangi a tetahi o a maatau kaiwhakawhanake (i muri mai ka kite koe kaore he mahi a Kubernetes). Kare koe e kite i nga whakakitenga miharo mo Kubernetes i konei, engari ka taea e koe te tumanako kia rua nga akoranga pai mo nga punaha uaua.
I nga wiki e rua kua pahure ake nei, kei te heke taku roopu i tetahi ratonga moroiti kotahi ki tetahi papaaapapa matua kei roto ko CI/CD, he wa whakahaere a Kubernetes, ine, me etahi atu pai. He ahua whakamatautau te nekehanga: i whakaaro matou ki te tango hei turanga me te whakawhiti tata ki te 150 atu ratonga hei nga marama e haere ake nei. Ko ratou katoa te kawenga mo te whakahaere i etahi o nga papaahi ipurangi nui rawa atu i Spain (Infojobs, Fotocasa, etc.).
Whai muri i to tuku tono ki a Kubernetes me te tuku ano i etahi waka ki reira, he ohorere ohorere kei te tatari mai. Whakaroa (tereo) Ko nga tono i Kubernetes he 10 nga wa teitei ake i te EC2. I te nuinga o te waa, me rapu he otinga mo tenei raru, me whakarere ranei te hekenga o te microservice (me, pea, te kaupapa katoa).
He aha te mea he nui ake te torohūtanga o Kubernetes i te EC2?
Ki te kimi i te pounamu, i kohia e matou nga inenga i te ara tono katoa. He ngawari to maatau hoahoanga: he kuaha API (Zuul) ka tono takawaenga ki nga tauira moroiti i EC2, Kubernetes ranei. I roto i nga Kubernetes ka whakamahia e matou NGINX Ingress Controller, a ko nga pito o muri he mea noa penei whakamahinga me te tono JVM i runga i te papaahi Spring.
Ko te ahua o te raruraru i pa ki te torohūtanga tuatahi i te tuara (i tohu ahau i te waahi raruraru i te kauwhata hei "xx"). I runga i te EC2, ko te whakautu tono mo te 20ms. I roto i nga Kubernetes, ka piki ake te roa ki te 100-200 ms.
I tukuna tere e matou nga whakapae e pa ana ki te huringa o te wa whakahaere. He rite tonu te putanga JVM. Ko nga raruraru whakaurunga karekau he take: kua pai te whakahaere o te tono ki roto i nga ipu kei runga EC2. Uta ana? Engari i kite matou i nga waahi teitei ahakoa i te 1 tono mo ia hekona. Ka warewarehia ano nga okiokinga mo te kohikohi para.
I whakaaro tetahi o o matou kaiwhakahaere Kubernetes mena he whakawhirinakitanga o waho te tono na te mea he rite nga take i puta mai i nga patai DNS i mua.
Whakaaro 1: Whakatau ingoa DNS
Mo ia tono, ka uru ta maatau tono ki tetahi tauira AWS Elasticsearch kotahi ki te toru nga wa i roto i te rohe penei elastic.spain.adevinta.com. Kei roto i a maatau ipu he anga, kia taea ai e tatou te tirotiro mena he roa te rapu rohe.
Ki te whakaaro he 30ms te roa o te tirotiro, kua marama ko te whakataunga DNS i te wa e uru atu ana ki a Elasticsearch i tino whai hua ki te pikinga o te torohūtanga.
Heoi, he rereke tenei mo nga take e rua:
He maha nga tono Kubernetes kei a maatau e mahi tahi ana me nga rauemi AWS me te kore e mate i te roanga teitei. Ahakoa te take, e pa ana ki tenei keehi.
E mohio ana matou kei te mahi te JVM i te keteroki DNS i roto i te mahara. I a maatau whakaahua, kua tuhia te uara TTL ki roto $JAVA_HOME/jre/lib/security/java.security ka tautuhi ki te 10 hēkona: networkaddress.cache.ttl = 10. I etahi atu kupu, me huna e te JVM nga patai DNS katoa mo te 10 hēkona.
Hei whakaū i te whakapae tuatahi, i whakatau matou kia mutu te waea ki a DNS mo tetahi wa ka kite mena kua ngaro te raru. Tuatahi, i whakatau matou ki te whirihora ano i te tono kia korero tika ki a Elasticsearch ma te wahitau IP, kaua ma te ingoa rohe. Me whakarereke te waehere me te whakatakotoranga hou, no reira ka mapi noa matou i te rohe ki tona wahitau IP /etc/hosts:
34.55.5.111 elastic.spain.adevinta.com
Inaianei kua whiwhi te ipu i te IP tata tonu. I hua ake he whakapai ake, engari he paku tata atu matou ki nga taumata taima e tumanakohia ana. Ahakoa he wa roa te whakataunga DNS, kare tonu te tino take i a maatau.
Nga tātaritanga ma te whatunga
I whakatau matou ki te tātari i nga waka mai i te ipu ma te whakamahi tcpdumpkia kite he aha te mea e tupu ana i runga i te whatunga:
[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap
Ka tukuna e matou etahi tono me te tango i ta raatau hopu (kubectl cp my-service:/capture.pcap capture.pcap) mo etahi atu tātaritanga i roto Wireshark.
Karekau he mea ohorere mo nga patai DNS (haunga tetahi mea iti ka korerohia e au i muri mai). Te vai ra râ te tahi mau huru taa ê i roto i ta matou taviniraa i te raveraa i te mau aniraa tataitahi. Kei raro nei te whakaahua o te hopu e whakaatu ana i te tono kua whakaaetia i mua i te tiimata o te whakautu:
Ka whakaatuhia nga nama mokete ki te pou tuatahi. Mo te whakamarama, kua tohuhia e au nga momo awa TCP rereke.
Ko te awa kaakaariki timata mai i te paatete 328 e whakaatu ana i te mahi a te kiritaki (172.17.22.150) i te hononga TCP ki te ipu (172.17.36.147). Whai muri i te ruru ringa tuatahi (328-330), ka mauria mai te kete 331 HTTP GET /v1/.. — he tono taumai ki ta maatau ratonga. Ko te tukanga katoa i 1 ms.
Ko te awa hina (mai i te paatete 339) e whakaatu ana i tukuna e ta maatau ratonga he tono HTTP ki te tauira Elasticsearch (kare he ruru a TCP na te mea kei te whakamahi hononga o naianei). 18ms tenei.
I tenei wa kei te pai nga mea katoa, me nga wa e rite ana ki nga wa roa (20-30 ms ka inehia mai i te kiritaki).
Heoi, ko te wahanga kahurangi e 86ms. He aha te mahi i roto? Ma te putea 333, i tukuna e ta maatau ratonga he tono HTTP GET ki /latest/meta-data/iam/security-credentials, a, i muri tonu mai, i runga i te hononga TCP kotahi, tetahi atu tono GET ki /latest/meta-data/iam/security-credentials/arn:...
I kitea e matou kua hoki ano tenei ki nga tono katoa puta noa i te tohu. He tino puhoi ake te whakatau DNS i roto i a maatau ipu (he tino rawe te whakamaramatanga mo tenei ahuatanga, engari ka penapenahia e au mo tetahi tuhinga motuhake). I puta ko te take o te roa o te roa ko nga waea ki te ratonga AWS Instance Metadata mo ia tono.
Whakaaro 2: nga waea koretake ki AWS
No nga pito mutunga e rua AWS Instance Metadata API. Ka whakamahia e ta maatau ratonga miihini tenei ratonga i te wa e whakahaere ana a Elasticsearch. Ko nga waea e rua he waahanga o te tukanga whakamanatanga taketake. Ko te pito mutunga ka uru atu ki te tono tuatahi ka puta te mahi IAM e hono ana ki te tauira.
Ka taea e te kiritaki te whakamahi mo te wa poto me te whiwhi tiwhikete hou i ia wa (i mua i to raatau Expiration). He maamaa te tauira: Ka huri te AWS i nga taviri rangitahi mo nga take haumarutanga, engari ka taea e nga kaihoko te huna mo etahi meneti hei utu mo te whiunga mahi e pa ana ki te whiwhi tiwhikete hou.
Me tango e te AWS Java SDK te kawenga mo te whakarite i tenei mahi, engari mo etahi take kaore tenei e puta.
Whai muri i te rapu take i runga i te GitHub, ka raru matou #1921. I awhina ia ki te whakatau i te huarahi e "keri" atu ai.
Ka whakahōuhia e te AWS SDK nga tiwhikete ina puta tetahi o nga tikanga e whai ake nei:
Rā paunga (Expiration) Taka ki roto EXPIRATION_THRESHOLD, kua tohua kia 15 meneti.
Kua roa ake te wa mai i te nganatanga whakamutunga ki te whakahou i nga tiwhikete REFRESH_THRESHOLD, he tohu pakeke mo te 60 meneti.
Hei kite i te ra paunga o nga tiwhikete ka riro mai i a maatau, i whakahaerehia e matou nga whakahau cURL i runga ake nei mai i te ipu me te tauira EC2. Ko te wa whaimana o te tiwhikete i whakawhiwhia mai i te ipu ka tino poto ake: 15 meneti.
Inaianei kua marama nga mea katoa: mo te tono tuatahi, i whakawhiwhia e taatau ratonga nga tiwhikete rangitahi. I te mea kaore i whai mana mo te neke atu i te 15 meneti, ka whakatau te AWS SDK ki te whakahou i a raatau i runga i te tono a muri ake nei. Na ka puta tenei me nga tono katoa.
He aha i poto ake ai te wa mana o nga tiwhikete?
I hoahoatia te AWS Instance Metadata ki te mahi me nga tauira EC2, ehara i a Kubernetes. I tetahi atu taha, kaore matou i pai ki te whakarereke i te atanga tono. Mo tenei i whakamahia e matou KIAM - he taputapu, ma te whakamahi i nga kaihoko i ia node Kubernetes, ka taea e nga kaiwhakamahi (nga miihini e tuku tono ana ki te kapoi) ki te tautapa i nga mahi IAM ki nga ipu i roto i nga pona me te mea he tauira EC2. Ka haukotia e KIAM nga waea ki te ratonga AWS Instance Metadata me te tukatuka mai i tana keteroki, kua riro mai i a AWS i mua. Mai i te tirohanga tono, kaore he rereke.
Ka tukuna e KIAM nga tiwhikete mo te wa poto ki nga pene. He pai tenei ki te whakaaro he poto ake te roanga o te ora o te pona i te tauira EC2. Te wa mana taunoa mo nga tiwhikete he rite ki te 15 meneti.
Ko te mutunga, ki te whakakikorua koe i nga uara taunoa e rua ki runga ake o tetahi ki tetahi, ka puta he raru. Ko ia tiwhikete ka tukuna ki tetahi tono ka pau i muri i te 15 meneti. Heoi, ka kaha te AWS Java SDK ki te whakahou i tetahi tiwhikete iti iho i te 15 meneti e toe ana i mua i tona ra paunga.
Ko te mutunga, ka akiakihia te tiwhikete rangitahi ki te whakahou me ia tono, e rua nga waeatanga ki te AWS API me te nui o te pikinga o te roanga. I roto i te AWS Java SDK i kitea e matou tono āhuatanga, e whakahua ana i tetahi raruraru rite.
Ko te otinga i puta he ngawari. I whirihora ano e matou te KIAM ki te tono tiwhikete me te waa whai mana. I te wa i puta mai tenei, ka timata nga tono ki te rere me te kore e uru mai ki te ratonga AWS Metadata, a ka heke iho te roa ki nga taumata iti ake i te EC2.
kitenga
I runga i o maatau wheako ki nga hekenga, ko tetahi o nga tino take o nga raru ehara i nga ngarara i Kubernetes me etahi atu waahanga o te papaaho. Kare ano hoki e whakatika i nga hapa taketake o nga ratonga miihini e kawe ana matou. He maha nga raruraru ka puta mai na te mea ka whakakotahihia e tatou nga momo waahanga.
Ka whakakotahihia e matou nga punaha uaua kaore ano kia taunekeneke tetahi ki tetahi i mua, me te tumanako ka hangaia he punaha kotahi, nui ake. Aue, ka nui ake nga huānga, ka nui ake te waahi mo nga hapa, ka teitei ake te entropy.
I roto i a maatau, ko te roanga teitei ehara i te hua o nga pepeha, i nga whakatau kino ranei i Kubernetes, KIAM, AWS Java SDK, i a maatau ratonga miihini ranei. Ko te hua o te whakakotahi i nga tautuhinga taunoa motuhake e rua: tetahi i KIAM, tetahi i te AWS Java SDK. Ka tangohia motuhake, ka whai tikanga nga tawhā e rua: te kaupapa here whakahou tiwhikete kaha i roto i te AWS Java SDK, me te wa poto o nga tiwhikete i KAIM. Engari ka whakakotahihia e koe, ka kore e kitea nga hua. E rua nga otinga motuhake me te arorau kaore e whai tikanga ina whakakotahi.
PS mai i te kaiwhakamaori
Ka taea e koe te ako ake mo te hoahoanga o te taputapu KIAM mo te whakauru AWS IAM me Kubernetes i tenei tuhinga mai i ona kaihanga.