{"id":81173,"date":"2020-05-11T13:42:51","date_gmt":"2020-05-11T11:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/production-ready-images-for-k8s"},"modified":"2020-05-11T13:42:51","modified_gmt":"2020-05-11T11:42:51","slug":"production-ready-images-for-k8s","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ez a t\u00f6rt\u00e9net arr\u00f3l sz\u00f3l, hogyan haszn\u00e1ljuk a kont\u00e9nereket a term\u00e9k k\u00f6rnyezet\u00e9ben, k\u00fcl\u00f6n\u00f6sen Kubernetes alatt. A cikk a metrik\u00e1k \u00e9s a napl\u00f3k gy\u0171jt\u00e9s\u00e9re, valamint a k\u00e9pek \u00f6ssze\u00e1ll\u00edt\u00e1s\u00e1ra \u00f6sszpontos\u00edt.<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/c7e8df02d845138e489c09c55cd616e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMi az Exness p\u00e9nz\u00fcgyi technol\u00f3giai c\u00e9g vagyunk, amely online keresked\u00e9si \u00e9s p\u00e9nz\u00fcgyi term\u00e9kek fejleszt\u00e9s\u00e9vel foglalkozik B2B \u00e9s B2C ter\u00fcleten. R&amp;D r\u00e9szleg\u00fcnkben sok k\u00fcl\u00f6nb\u00f6z\u0151 csapat van, a fejleszt\u0151oszt\u00e1lyban t\u00f6bb mint 100 munkat\u00e1rs dolgozik.<\/p>\n<p>Mi k\u00e9pviselj\u00fck azt a csapatot, amely felel\u0151s a fejleszt\u0151ink \u00e1ltal \u00edrt k\u00f3dok gy\u0171jt\u00e9s\u00e9nek \u00e9s v\u00e9grehajt\u00e1s\u00e1nak platformj\u00e1\u00e9rt. K\u00fcl\u00f6n\u00f6sen minket terhel a metrik\u00e1k, napl\u00f3k \u00e9s esem\u00e9nyek gy\u0171jt\u00e9se, t\u00e1rol\u00e1sa \u00e9s biztos\u00edt\u00e1sa az alkalmaz\u00e1sokb\u00f3l. Jelenleg k\u00f6r\u00fclbel\u00fcl h\u00e1romezer Docker-kont\u00e9nert \u00fczemeltet\u00fcnk a term\u00e9k k\u00f6rnyezet\u00e9ben, t\u00e1mogatjuk a 50 TB m\u00e9ret\u0171 big data t\u00e1rol\u00f3nkat, \u00e9s olyan architekt\u00far\u00e1s megold\u00e1sokat ny\u00fajtunk, amelyek a rendszer\u00fcnk, a Kubernetes, a Rancher \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 nyilv\u00e1nos felh\u0151szolg\u00e1ltat\u00f3k k\u00f6r\u00e9 \u00e9p\u00fclnek.\u00a0<\/p>\n<h1>A mi motiv\u00e1ci\u00f3nk<\/h1>\n<p>\nMi a helyzet? Senki sem tudja megmondani. Hol a t\u0171z? Neh\u00e9z meg\u00e9rteni. Mikor gyulladt ki? Megtudhat\u00f3, de nem azonnal.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMi\u00e9rt \u00e1llnak meg egyes kont\u00e9nerek, m\u00edg m\u00e1sok \u00f6sszed\u0151lnek? Melyik kont\u00e9ner a felel\u0151s ez\u00e9rt? K\u00fcls\u0151re a kont\u00e9nerek egyform\u00e1k, de bel\u00fcl mindegyiknek megvan a maga Neo-ja.<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA fejleszt\u0151ink nagyon \u00fcgyes sr\u00e1cok. J\u00f3 szolg\u00e1ltat\u00e1sokat k\u00e9sz\u00edtenek, amelyek nyeres\u00e9get hoznak a c\u00e9gnek. De el\u0151fordulnak balesetek, amikor az alkalmaz\u00e1sokat futtat\u00f3 kont\u00e9nerek elt\u00e9rnek az \u00fatt\u00f3l. Az egyik kont\u00e9ner t\u00fal sok CPU-t haszn\u00e1l, a m\u00e1sik a h\u00e1l\u00f3zatot, a harmadik a bemeneti\/kimeneti m\u0171veleteket, a negyedik pedig egy\u00e1ltal\u00e1n nem vil\u00e1gos, hogy mit csin\u00e1l a socketekkel. Mindez \u00f6sszeomlik, \u00e9s a haj\u00f3 s\u00fcllyed.\u00a0<\/p>\n<h1>\u00dcgyn\u00f6k\u00f6k<\/h1>\n<p>\nAnnak \u00e9rdek\u00e9ben, hogy meg\u00e9rts\u00fck, mi t\u00f6rt\u00e9nik bel\u00fcl, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy \u00fcgyn\u00f6k\u00f6ket \u00e1ll\u00edtunk fel k\u00f6zvetlen\u00fcl a kont\u00e9nerekben.<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzek az \u00fcgyn\u00f6k\u00f6k koordin\u00e1l\u00f3 programok, amelyek fenntartj\u00e1k a kont\u00e9nerek \u00e1llapot\u00e1t, hogy ne t\u00f6rj\u00e9k meg egym\u00e1st. Az \u00fcgyn\u00f6k\u00f6k standardiz\u00e1ltak, \u00e9s ez lehet\u0151v\u00e9 teszi a kont\u00e9nerek karbantart\u00e1s\u00e1hoz val\u00f3 megk\u00f6zel\u00edt\u00e9s standardiz\u00e1l\u00e1s\u00e1t.\u00a0<\/p>\n<p>A mi eset\u00fcnkben az \u00fcgyn\u00f6k\u00f6knek standard form\u00e1tumban kell napl\u00f3kat biztos\u00edtaniuk, c\u00edmk\u00e9zve \u00e9s throttlinggal. Emellett standardiz\u00e1lt metrik\u00e1kat is kell szolg\u00e1ltatniuk, amelyek b\u0151v\u00edthet\u0151k az \u00fczleti alkalmaz\u00e1sok szempontj\u00e1b\u00f3l.<\/p>\n<p>Az \u00fcgyn\u00f6k\u00f6k alatt olyan eszk\u00f6z\u00f6ket is \u00e9rt\u00fcnk, amelyek hasznosak a karbantart\u00e1sban \u00e9s \u00fczemeltet\u00e9sben, amelyek k\u00e9pesek k\u00fcl\u00f6nb\u00f6z\u0151 orkestr\u00e1ci\u00f3s rendszerekben m\u0171k\u00f6dni, t\u00e1mogatj\u00e1k a k\u00fcl\u00f6nb\u00f6z\u0151 k\u00e9peket (Debian, Alpine, Centos stb.).<\/p>\n<p>V\u00e9g\u00fcl az \u00fcgyn\u00f6k\u00f6knek egyszer\u0171 CI\/CD-t kell t\u00e1mogatniuk, amely mag\u00e1ban foglalja a Docker f\u00e1jlokat. Ellenkez\u0151 esetben a haj\u00f3 sz\u00e9tesik, mert a kont\u00e9nerek \"ferde\" s\u00edneken fognak \u00e9rkezni.<\/p>\n<h1>A c\u00e9l image fel\u00e9p\u00edt\u00e9si folyamata \u00e9s strukt\u00far\u00e1ja<\/h1>\n<p>\nAnnak \u00e9rdek\u00e9ben, hogy minden standardiz\u00e1lt \u00e9s kezelhet\u0151 legyen, valamilyen standard fel\u00e9p\u00edt\u00e9si folyamatot kell k\u00f6vetni. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy kont\u00e9nerekkel \u00e9p\u00edtj\u00fck a kont\u00e9nereket \u2013 ez egyfajta rekurzi\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nItt a kont\u00e9nerek folyamatos kont\u00farok form\u00e1j\u00e1ban vannak bemutatva. Egy\u00fattal \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy elhelyezz\u00fck benn\u00fck a disztrib\u00faci\u00f3kat, hogy az \u00e9let ne t\u0171nj\u00f6n olyan egyszer\u0171nek. Mi\u00e9rt tett\u00fck ezt, az al\u00e1bb elmondjuk.<br \/>\n\u00a0<br \/>\nEnnek eredm\u00e9nyek\u00e9nt egy \u00e9p\u00edt\u00e9si eszk\u00f6z j\u00f6tt l\u00e9tre \u2013 egy adott verzi\u00f3j\u00fa kont\u00e9ner, amely hivatkozik egyes disztrib\u00faci\u00f3k \u00e9s egyes szkriptek meghat\u00e1rozott verzi\u00f3ira.<\/p>\n<p>Hogyan alkalmazzuk ezt? Van egy Docker Hubunk, ahol a kont\u00e9ner t\u00e1rol\u00f3dik. Ezt szinkroniz\u00e1ljuk a rendszer\u00fcnkbe, hogy megszabaduljunk a k\u00fcls\u0151 f\u00fcgg\u0151s\u00e9gekt\u0151l. \u00cdgy egy s\u00e1rga sz\u00ednnel megjel\u00f6lt kont\u00e9nert kaptunk. K\u00e9sz\u00edt\u00fcnk egy sablont, hogy az \u00f6sszes sz\u00fcks\u00e9ges disztrib\u00faci\u00f3t \u00e9s szkriptet telep\u00edts\u00fck a kont\u00e9nerbe. Ezt k\u00f6vet\u0151en elk\u00e9sz\u00edtj\u00fck a k\u00e9szenl\u00e9ti k\u00e9pet: a fejleszt\u0151k beleteszik a k\u00f3dot \u00e9s bizonyos saj\u00e1t f\u00fcgg\u0151s\u00e9geiket.\u00a0<\/p>\n<p>Mi\u00e9rt j\u00f3 ez a megk\u00f6zel\u00edt\u00e9s?\u00a0<\/p>\n<ul>\n<li>El\u0151sz\u00f6r is, teljes verzi\u00f3ellen\u0151rz\u00e9s a fel\u00e9p\u00edt\u00e9si eszk\u00f6z\u00f6k - a kont\u00e9ner, a szkriptek \u00e9s a disztrib\u00faci\u00f3k verzi\u00f3i tekintet\u00e9ben.\u00a0<\/li>\n<li>M\u00e1sodszor, el\u00e9rt\u00fck a standardiz\u00e1ci\u00f3t: azonos m\u00f3don k\u00e9sz\u00edtj\u00fck el a sablonokat, az \u00e1tmeneti \u00e9s a k\u00e9szenl\u00e9ti k\u00e9peket.\u00a0<\/li>\n<li>Harmadszor, a kont\u00e9nerek biztos\u00edtj\u00e1k sz\u00e1munkra a hordozhat\u00f3s\u00e1got. Ma Gitlabot haszn\u00e1lunk, holnap \u00e1tt\u00e9r\u00fcnk TeamCity-re vagy Jenkins-re, \u00e9s \u00edgy is el tudjuk ind\u00edtani a kont\u00e9nereinket.\u00a0<\/li>\n<li>Negyedszer, a f\u00fcgg\u0151s\u00e9gek minimaliz\u00e1l\u00e1sa. Nem v\u00e9letlen\u00fcl helyezt\u00fck el a kont\u00e9nerben a disztrib\u00faci\u00f3kat, hiszen ez lehet\u0151v\u00e9 teszi, hogy ne t\u00f6lts\u00fck le \u0151ket minden alkalommal az Internetr\u0151l.\u00a0<\/li>\n<li>\u00d6t\u00f6dsz\u00f6r, n\u0151tt az \u00e9p\u00edt\u00e9si sebess\u00e9g \u2013 a helyi k\u00e9pek megl\u00e9te lehet\u0151v\u00e9 teszi, hogy ne pazaroljunk id\u0151t a let\u00f6lt\u00e9sre, mivel rendelkez\u00fcnk helyi k\u00e9ppel.\u00a0<\/li>\n<\/ul>\n<p>\nM\u00e1s sz\u00f3val, el\u00e9rt\u00fck a kontroll\u00e1lhat\u00f3 \u00e9s rugalmas fel\u00e9p\u00edt\u00e9si folyamatot. Azonos eszk\u00f6z\u00f6ket haszn\u00e1lunk b\u00e1rmilyen kont\u00e9ner \u00e9p\u00edt\u00e9s\u00e9re, teljes verzi\u00f3z\u00e1s mellett.\u00a0<\/p>\n<h1>Hogyan m\u0171k\u00f6dik a fel\u00e9p\u00edt\u00e9si elj\u00e1r\u00e1sunk?<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA build is initiated with a single command, the process runs in an image (highlighted in red). The developer has a Docker file (highlighted in yellow), which we render by replacing variables with values. Along the way, we add headers and footers \u2014 these are our agents.\u00a0<\/p>\n<p>The header adds distributions from the corresponding images. The footer installs our services, configures the workload execution, logging, and other agents, replaces the entrypoint, and so on.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe debated for a long time whether to install a supervisor. In the end, we decided that we need one. We chose S6. The supervisor manages the container: it allows connections in case the main process fails and provides manual management of the container without recreating it. Logs and metrics are processes running inside the container. They also need to be monitored somehow, and we do this with the help of the supervisor. Finally, S6 takes care of housekeeping tasks, signal processing, and other responsibilities.<\/p>\n<p>Since we are using different orchestration systems, after the build and launch, the container must understand what environment it is in and act accordingly. For example:<br \/>\nThis allows us to create a single image and run it in different orchestration systems, taking into account the specifics of each orchestration system.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor the same container, we get different process trees in Docker and Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe payload runs under the S6 supervisor. Note the collector and events \u2014 these are our agents responsible for logs and metrics. They are absent in Kubernetes but present in Docker. Why?\u00a0<\/p>\n<p>If we look at the specification of a pod (here and later \u2013 Kubernetes pod), we will see that the events container runs in a pod that has a separate collector container performing the function of collecting metrics and logs. We can leverage Kubernetes capabilities: launching containers in the same pod, in a single process and\/or network space. In fact, we can embed our agents and perform various functions. And if this same container is launched in Docker, it will retain all the same capabilities, that is, it will be able to deliver logs and metrics since the agents will be running inside.\u00a0<\/p>\n<h1>Metrics and logs<\/h1>\n<p>\nDelivering metrics and logs is a complex task. Several aspects are associated with its solution.<br \/>\nAz infrastrukt\u00far\u00e1t a hasznos terhel\u00e9s futtat\u00e1s\u00e1ra alak\u00edtj\u00e1k ki, nem pedig a logok t\u00f6meges tov\u00e1bb\u00edt\u00e1s\u00e1ra. Ez\u00e9rt ennek a folyamatnak minim\u00e1lis er\u0151forr\u00e1sig\u00e9nnyel kell m\u0171k\u00f6dnie a tart\u00e1lyok sz\u00e1m\u00e1ra. Seg\u00edteni szeretn\u00e9nk fejleszt\u0151inknek: \u201eV\u00e9gy egy Docker Hub kont\u00e9nert, ind\u00edtsd el, \u00e9s mi el tudjuk juttatni a logokat.\u201d\u00a0<\/p>\n<p>A m\u00e1sodik szempont a logok mennyis\u00e9g\u00e9nek korl\u00e1toz\u00e1sa. Ha t\u00f6bb kont\u00e9nerben logmennyis\u00e9g-ugr\u00e1s (p\u00e9ld\u00e1ul egy alkalmaz\u00e1s folyamatosan ki\u00edrja a stack trace-t) fordul el\u0151, az CPU, s\u00e1vsz\u00e9less\u00e9g \u00e9s a logfeldolgoz\u00f3 rendszer terhel\u00e9s\u00e9t n\u00f6veli, ami a gazdag\u00e9p \u00e9s a gazdag\u00e9pen l\u00e9v\u0151 t\u00f6bbi kont\u00e9ner m\u0171k\u00f6d\u00e9s\u00e9re is hat\u00e1ssal van, \u00e9s n\u00e9ha a gazdag\u00e9p \"\u00f6sszeoml\u00e1s\u00e1hoz\" vezet.\u00a0<\/p>\n<p>A harmadik szempont, hogy a lehet\u0151 legt\u00f6bb metrikagy\u0171jt\u00e9si m\u00f3dszert dobozb\u00f3l t\u00e1mogassuk. A f\u00e1jlok olvas\u00e1s\u00e1t\u00f3l \u00e9s a Prometheus-endpoint lek\u00e9rdez\u00e9s\u00e9t\u0151l kezdve a specifikus alkalmaz\u00e1si protokollok haszn\u00e1lat\u00e1ig.<\/p>\n<p>\u00c9s v\u00e9g\u00fcl, minimaliz\u00e1lni kell az er\u0151forr\u00e1s-fogyaszt\u00e1st.<\/p>\n<p>Egy Go nyelv\u0171 open-source megold\u00e1st v\u00e1lasztottunk, amely Telegraf n\u00e9vre hallgat. Ez egy univerz\u00e1lis csatlakoz\u00f3, amely t\u00f6bb mint 140 k\u00fcl\u00f6nb\u00f6z\u0151 bemeneti csatorn\u00e1t (input plugins) \u00e9s 30 k\u00fcl\u00f6nb\u00f6z\u0151 kimeneti csatorn\u00e1t (output plugins) t\u00e1mogat. Ezen tov\u00e1bbfejlesztett\u00fck, \u00e9s most bemutatjuk, hogyan haszn\u00e1ljuk a Kubernetes p\u00e9ld\u00e1j\u00e1n.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTegy\u00fck fel, hogy a fejleszt\u0151 egy terhel\u00e9st telep\u00edt, \u00e9s a Kubernetes k\u00e9rd\u00e9st kap a pod l\u00e9trehoz\u00e1s\u00e1ra. Ekkor minden podhoz automatikusan l\u00e9trej\u00f6n egy Collector nev\u0171 kont\u00e9ner (mutation webhookot haszn\u00e1lunk). A Collector a mi \u00fcgyn\u00f6k\u00fcnk. Indul\u00e1skor ez a kont\u00e9ner be\u00e1ll\u00edtja mag\u00e1t a Prometheus \u00e9s a loggy\u0171jt\u0151 rendszer m\u0171k\u00f6d\u00e9s\u00e9re.<\/p>\n<ul>\n<li>Ehhez pod annot\u00e1ci\u00f3kat haszn\u00e1l, \u00e9s az azok tartalm\u00e1t\u00f3l f\u00fcgg\u0151en l\u00e9trehoz p\u00e9ld\u00e1ul egy Prometheus v\u00e9gpontot;\u00a0\n<\/li>\n<li>A pod specifik\u00e1ci\u00f3ja \u00e9s a kont\u00e9nerek specifikus be\u00e1ll\u00edt\u00e1sai alapj\u00e1n d\u00f6nti el, hogyan tov\u00e1bb\u00edtja a logokat.\n<\/li>\n<\/ul>\n<p>\nA logokat a Docker API-n kereszt\u00fcl gy\u0171jtj\u00fck: a fejleszt\u0151knek el\u00e9g a stdout vagy stderr kimenetre helyezni\u00fck \u0151ket, a Collector pedig int\u00e9zkedik. A logokat chunkokban gy\u0171jtj\u00fck, n\u00e9mi k\u00e9sleltet\u00e9ssel, hogy elker\u00fclj\u00fck a gazdag\u00e9p esetleges t\u00falterhel\u00e9s\u00e9t.\u00a0<\/p>\n<p>A metrik\u00e1k a kont\u00e9nerekben fut\u00f3 terhel\u00e9s- (folyamat-) p\u00e9ld\u00e1nyok szerint ker\u00fclnek gy\u0171jt\u00e9sre. Minden c\u00edmk\u00e9zve van: namespace, pod stb., majd Prometheus form\u00e1tumra konvert\u00e1l\u00f3dik \u2013 \u00e9s \u00edgy gy\u0171jthet\u0151v\u00e9 v\u00e1lik (a logokon k\u00edv\u00fcl). Emellett a logokat, metrik\u00e1kat \u00e9s esem\u00e9nyeket a Kafka rendszerbe \u00e9s tov\u00e1bb k\u00fcldj\u00fck:<\/p>\n<ul>\n<li>A logok a Graylogban \u00e9rhet\u0151k el (vizu\u00e1lis elemz\u00e9shez);\n<\/li>\n<li>A napl\u00f3kat, metrik\u00e1kat \u00e9s esem\u00e9nyeket Clickhouse-ba k\u00fcldj\u00fck hossz\u00fa t\u00e1v\u00fa t\u00e1rol\u00e1sra.\n<\/li>\n<\/ul>\n<p>\nUgyan\u00edgy m\u0171k\u00f6dik az AWS-ben is, csak a Graylogot Kafka helyett Cloudwatch-ra cser\u00e9lj\u00fck. A napl\u00f3kat oda k\u00fcldj\u00fck, \u00e9s ez nagyon k\u00e9nyelmes: azonnal tiszt\u00e1ban vagyunk azzal, hogy melyik klaszterhez \u00e9s kont\u00e9nerhez tartoznak. Ugyanez \u00e9rv\u00e9nyes a Google Stackdriverre is. Teh\u00e1t a s\u00e9m\u00e1nk on-premise Kafka-val, valamint felh\u0151ben is m\u0171k\u00f6dik.\u00a0<\/p>\n<p>Ha nincs Kubernetes\u00fcnk podokkal, a s\u00e9ma kicsit bonyolultabb, de ugyanazon elveken alapul.<\/p>\n<p><img decoding=\"async\" alt=\"Termel\u00e9sre k\u00e9sz k\u00e9pek a k8s-hez\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA kont\u00e9neren bel\u00fcl ugyanazok a folyamatok futnak, amelyeket S6 seg\u00edts\u00e9g\u00e9vel orchestr\u00e1lunk. Minden ugyanaz a folyamat fut egyetlen kont\u00e9neren bel\u00fcl.<\/p>\n<h1>V\u00e9g\u00fcl<\/h1>\n<p>\nTeljes megold\u00e1st hoztunk l\u00e9tre a k\u00e9pek \u00e9p\u00edt\u00e9s\u00e9re \u00e9s \u00fczembe helyez\u00e9s\u00e9re, logok \u00e9s metrik\u00e1k gy\u0171jt\u00e9si \u00e9s sz\u00e1ll\u00edt\u00e1si lehet\u0151s\u00e9gekkel:<\/p>\n<ul>\n<li>A k\u00e9pek \u00e9p\u00edt\u00e9s\u00e9re standardiz\u00e1lt megk\u00f6zel\u00edt\u00e9st dolgoztunk ki, amely alapj\u00e1n CI-sablonokat fejlesztett\u00fcnk;\n<\/li>\n<li>Az adatgy\u0171jt\u0151 \u00fcgyn\u00f6k\u00f6k a mi Telegraf kiterjeszt\u00e9seink. J\u00f3l bev\u00e1ltuk \u0151ket production k\u00f6rnyezetben;\n<\/li>\n<li>Mutation webhookot alkalmazunk az \u00fcgyn\u00f6k\u00f6kkel rendelkez\u0151 kont\u00e9nerek podokba t\u00f6rt\u00e9n\u0151 bevezet\u00e9s\u00e9re;\u00a0\n<\/li>\n<li>Integr\u00e1l\u00f3dtunk a Kubernetes\/Rancher \u00f6kosziszt\u00e9m\u00e1ba;\n<\/li>\n<li>K\u00e9pesek vagyunk ugyanazokat a kont\u00e9nereket futtatni k\u00fcl\u00f6nb\u00f6z\u0151 orchestr\u00e1l\u00e1si rendszerekben, \u00e9s megkapni a v\u00e1rt eredm\u00e9nyt;\n<\/li>\n<li>Teljesen dinamikus kont\u00e9nerkezel\u0151 konfigur\u00e1ci\u00f3t hoztunk l\u00e9tre.\u00a0\n<\/li>\n<\/ul>\n<p>\nT\u00e1rsszerz\u0151: <b>Ilya Prudnikov<\/b><br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/exness\/blog\/488392\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Production-ready images for k8s | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Production-ready k\u00e9pek k8s-hez | ProHoster","description":"Ez a t\u00f6rt\u00e9net arr\u00f3l sz\u00f3l, hogyan haszn\u00e1ljuk a kont\u00e9nereket term\u00e9kfejleszt\u00e9si k\u00f6rnyezetben, k\u00fcl\u00f6n\u00f6sen a Kubernetes alatt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Production-ready images for k8s | ProHoster","og:description":"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/production-ready-images-for-k8s","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-11T11:42:51+00:00","article:modified_time":"2020-05-11T11:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81173","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:03:22","updated":"2022-09-28 06:12:17","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}