{"id":489968,"date":"2026-08-06T08:26:50","date_gmt":"2026-08-06T08:26:50","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=489968"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=489968","title":{"rendered":"\u0418\u0437\u00a0\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b Compose \u0432\u00a0\u0431\u043e\u0435\u0432\u043e\u0439 Kubernetes: \u043a\u0430\u043a\u00a0\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0437\u0430 5\u00a0\u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u0438\u0437\u0443\u0447\u0430\u044f \u0432\u0441\u0435 \u0441\u00a0\u043d\u0443\u043b\u044f"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h4>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h4>\n<p>\u0417\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u043f\u0440\u043e\u0448\u0451\u043b \u043f\u0443\u0442\u044c \u043e\u0442\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0434\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e K3s\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u00a0Zero\u2011Downtime \u0434\u0435\u043f\u043b\u043e\u0435\u043c. \u0428\u0438\u0448\u0435\u043a \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u043d\u0430\u0431\u0438\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0438 \u043c\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u0435\u0441\u0442\u044c \u0447\u0435\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c: \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u044b\u0445 \u0433\u0430\u0439\u0434\u043e\u0432, \u0441\u043b\u0435\u043f\u044b\u0445 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u0432 YAML\u2011\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0421\u00a0\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0432\u044b \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u0441\u044c, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u00a0\u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u044b\u0442. \u0425\u043e\u0442\u044f, \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043c\u043d\u0435 \u0442\u043e\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b. \u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0442\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e Docker Compose \u043a\u00a0Kubernetes, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433\u0430 \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c: \u0430\u00a0\u0432\u0441\u0451\u00a0\u043b\u0438\u00a0\u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e?<\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c, \u043d\u043e\u00a0\u0438 backend\u2011 \u0438 frontend\u2011\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043b\u044e\u0431\u044b\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u00a0\u0438\u0445 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0430 \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0447\u0435\u043c\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430 \u0438 \u043a\u0430\u043a\u00a0\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u0441\u0431\u043e\u044f\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0447\u0430\u043b\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f (\u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043f\u043e\u043b\u0435\u0437 \u0432\u00a0DevOps)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430\u2011\u0442\u043e \u044f \u043d\u0435\u00a0\u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u043b, \u043a\u0442\u043e \u043e\u043d \u0442\u0430\u043a\u043e\u0439, \u0432\u0430\u0448 Kubernetes, \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d. \u0421\u043b\u044b\u0448\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u0444\u044b \u0432\u00a0\u0434\u0443\u0445\u0435: \u00ab\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0438\u0438\u00bb \u0438\u043b\u0438 \u00ab\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443\u00a0\u2014 \u0438 \u0437\u0430\u0431\u044b\u043b\u00bb. \u0412\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0441\u00a0\u0441\u043e\u0432\u0435\u0442\u0430 \u0434\u0440\u0443\u0433\u0430 <a class=\"mention\" href=\"\/users\/dirtyhornet\">@DirtyHornet<\/a>, \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c Linux \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0DevOps.<\/p>\n<p>\u0414\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043c\u0435\u043d\u044f \u0443\u0436\u0435\u00a0\u0431\u044b\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0433\u0440\u0430\u0443\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 Windows \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u043d\u0430\u00a0Unity\u00a0\u2014 \u0431\u0430\u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0412\u00a0\u0442\u043e\u00a0\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0440\u0435\u0432\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u0437\u0430\u0449\u0438\u0442\u0435 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0449\u0451 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c: \u043a\u043e\u0434 \u044f \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0432\u0430\u0439\u0431\u043a\u043e\u0434\u0438\u043b \u0447\u0435\u0440\u0435\u0437 Claude. \u0421\u0430\u043c\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0430\u0437\u0443: Linux, Git, \u0441\u0435\u0442\u0438. \u0422\u043e\u043d\u043d\u044b \u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u043d\u0430\u00a0YouTube, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b \u043d\u0430\u00a0Stepik \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0436\u0438\u0432\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u042f\u00a0\u0431\u044b\u043b \u043f\u043e\u0440\u0430\u0436\u0451\u043d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Unix\u2011\u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a\u0430\u043a\u0438\u0435\u2011\u0442\u043e inode, \u0430\u00a0\u0434\u0438\u0441\u043a\u0438 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0430\u043c\u0438 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u0441\u0442\u044b\u043a\u0443\u044e\u0442\u0441\u044f \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044f \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u043e \u0432\u00a0Docker \u0438 Nginx. \u0418 \u0441\u043d\u043e\u0432\u0430\u00a0\u2014 \u043a\u0443\u0447\u0430 \u0432\u0438\u0434\u0435\u043e, \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0444\u043e\u0446\u044b\u0433\u0430\u043d, \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043f\u0430\u0440\u0438\u0442\u044c \u043a\u0443\u0440\u0441\u044b \u0438 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0442\u0430\u043a \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u00a0\u043b\u0430\u0434\u043e\u043d\u0438. \u041d\u0430\u00a0\u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u0443\u0433\u043b\u0438\u043b \u0438 \u0443\u0437\u043d\u0430\u0432\u0430\u043b \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u043e\u0442\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 SHA\u2011\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 cert\u2011manager \u0434\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0414\u0435\u0434\u043b\u0430\u0439\u043d \u043f\u043e\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0432\u0441\u0451 \u0431\u043b\u0438\u0437\u0438\u043b\u0441\u044f. \u041a\u00a0\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u0430\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u043e\u0431\u043b\u0430\u043a\u043e (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0442 \u042f\u043d\u0434\u0435\u043a\u0441\u0430) \u0438 \u043f\u043e\u0448\u0451\u043b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u043e\u0434\u0435 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e Git \u0438 Docker \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043b Compose, Nginx, \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u043b\u0441\u044f \u043f\u043e\u00a0best practices\u00a0\u2014 \u0438 \u0441\u00a0\u044d\u0442\u0438\u043c \u0432\u044b\u0448\u0435\u043b \u043d\u0430\u00a0\u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u0435\u0440\u0445\u043e\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u043c\u044b\u0441\u043b\u0438, \u0441\u00a0\u0442\u0435\u043f\u043b\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u044d\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0436\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u043e \u043b\u0435\u0442\u043e, \u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0439\u0444\u043e\u0440\u0438\u044f \u043e\u0442\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e Docker Compose\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043b\u0435\u0442\u0443\u0447\u0438\u043b\u0430\u0441\u044c. \u042f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0445\u043e\u0447\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0438 \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0445 CI\/CD\u2011\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0447\u0443\u0436\u0438\u0445 \u0433\u0430\u0439\u0434\u0430\u0445 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u0441\u0442\u0430\u043b\u043e \u043c\u0430\u043b\u043e, \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u0437\u0440\u043e\u0441\u043b\u0430\u044f, \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044f \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043b\u0435\u0436\u043a\u0435 \u0441\u00a0Kubernetes.<\/p>\n<\/div>\n<\/details>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f. \u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b<\/h4>\n<p>\u0412\u043e\u043a\u0440\u0443\u0433 k8s\/k3s, \u0434\u0430\u00a0\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0441\u0435\u0433\u043e IT\u2011\u043c\u0438\u0440\u0430, \u043c\u043d\u043e\u0433\u043e \u0445\u0430\u0439\u043f\u0430 \u0432\u00a0\u0441\u0442\u0438\u043b\u0435: \u00ab\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0431\u0438\u0439\u0446\u044b Amazon \u043d\u0430\u00a0\u0438\u0437\u0438\u00a0\u2014 \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u00a0\u043c\u043e\u0438\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u00a0\u0442\u0430\u043a.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0440\u043e\u043b\u0438\u043a\u0438 YouTube\u2011\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u0414\u0435\u0432\u043e\u043f\u0441\u0438\u043c \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443\u00bb \u0438 \u0431\u0430\u0437\u0430 \u043f\u043e\u00a0\u043a\u0443\u0431\u0435\u0440\u0443 \u0441\u00a0\u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0410\u0440\u0442\u0443\u0440\u0430 \u041a\u0440\u044e\u043a\u043e\u0432\u0430. \u041e\u043d\u0438 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u044e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u043d\u0430\u0442\u0435, \u043f\u0438\u0448\u0438\u0442\u0435\u00bb \u0438\u043b\u0438 \u00ab\u0437\u0430\u0441\u0443\u043d\u0435\u043c \u044d\u0442\u0443 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0443 \u0432\u00a0\u044f\u0434\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00a0\u2014 \u0432\u0441\u0451, \u0432\u043e\u0442 \u0442\u0430\u043a \u043c\u044b \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e\u00bb, \u0430\u00a0\u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u043e\u043b\u0438\u043a\u0438 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u043e, \u043f\u043e\u0434, \u043a\u0440\u0443\u0442\u043e\u00bb\u00a0\u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f. \u0410\u0440\u0442\u0443\u0440 \u0434\u0430\u0451\u0442 \u0448\u0438\u043a\u0430\u0440\u043d\u0443\u044e \u0431\u0430\u0437\u0443, \u043d\u043e\u00a0\u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u00ab\u0437\u0430\u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c\u00bb\u00a0\u2014 \u0430\u00a0\u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u0442\u044b \u043d\u0430\u0447\u043d\u0435\u0448\u044c \u0447\u0442\u043e\u2011\u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 Kubernetes, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u00a0\u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u0438\u0445 \u043b\u044e\u0434\u0435\u0439\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u0413\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u043a\u00a0\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0443\u043c\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439: \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e\u00a0\u0445\u043e\u0434\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0435\u0449\u0451 \u0442\u043e\u043d\u043d\u044b \u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u043f\u043e\u0442\u044b\u043a\u0430\u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u044f \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435, \u043d\u0435\u00a0\u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434 \u0438 \u043f\u043e\u00a0\u0447\u0443\u0442\u044c\u2011\u0447\u0443\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u0441\u0435\u0431\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u0430\u0434\u043c\u0430\u043f:<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u00a0\u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f?<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u00a0\u0447\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432?<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0435\u043d\u043e\u043c\u0435\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0435\u0451 \u043a\u0440\u0430\u0448\u2011\u0442\u0435\u0441\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u00a0\u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u043f\u043b\u0430\u043d, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<p>\u0421\u00a0\u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0435\u00a0\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0442\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u0438 \u0430\u0440\u0435\u043d\u0434\u043e\u0432\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0435\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u00a0\u043c\u043e\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u00a0Kubernetes, \u0432\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0439\u043c\u0451\u0442\u0435, \u0447\u0442\u043e\u00a0\u043a\u0443\u0431\u0435\u0440\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u0430\u00a0\u0446\u0435\u043b\u0430\u044f \u043a\u043b\u0430\u0434\u0435\u0437\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u00a0\u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u00a0\u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a\u00a0\u043c\u043e\u0435\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440 (k8s vanilla)\u00a0\u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439 \u0433\u0430\u0434, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u00a0\u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u041f\u041a \u0438\u043b\u0438\u00a0\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0435 \u0441\u00a0\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0438\u00a0\u2014 \u0437\u0430\u0442\u0435\u044f \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f. \u0414\u0430\u00a0\u0438 \u0437\u0430\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 k3s \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0439 \u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b?<\/p>\n<p>\u041f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443, \u044d\u0442\u043e\u0442 \u00ab\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0440\u0430\u0442\u00bb \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e: \u043e\u043d \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u00a0\u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e\u00a0\u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439\u00a0\u0436\u0435 API. \u041b\u044e\u0431\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u043e\u0431\u0435\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0431\u0435\u0437\u00a0\u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0418 \u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0432\u0440\u043e\u0434\u0435 kind (Kubernetes in Docker), \u0430\u00a0\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 production\u2011ready \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Kubernetes (Rolling Update, Probes) \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0436\u0438\u0440\u0430. \u0418\u0437\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438\u0434\u0451\u0442 \u043b\u0451\u0433\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043a\u0430 Kine + SQLite, \u0430\u00a0\u0432\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0443\u0436\u0435 \u0432\u0448\u0438\u0442\u044b CoreDNS, Traefik \u0432\u00a0\u0440\u043e\u043b\u0438 ingress\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 Local Path Provisioner \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0434\u0438\u0441\u043a\u0430\u043c\u0438 (PVC). \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0435\u0439 \u0441\u0443\u0435\u0442\u044b.<\/p>\n<div class=\"floating-image\">\n<p>\u0412\u00a0\u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0435 \u043a\u0443\u0431\u0435\u0440 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 3\u00a0\u043c\u0430\u0441\u0442\u0435\u0440\u2011\u043d\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432). \u041d\u043e\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 CI\/CD, \u043c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u042f \u0432\u044b\u0431\u0440\u0430\u043b Single\u2011Node \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443: \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438 Control Plane, \u0438 Worker\u2011\u0443\u0437\u043b\u043e\u043c.<\/p>\n<\/div>\n<p><strong>\u0427\u0442\u043e\u00a0\u043d\u0430\u0441\u0447\u0451\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432?<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0434\u043b\u044f\u00a0\u043c\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><strong>RKE2<\/strong>\u00a0\u2014 2\u20133\u00a0\u0413\u0411 RAM \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u0434\u044b + \u0442\u044f\u0436\u0451\u043b\u0430\u044f \u0431\u0430\u0437\u0430 etcd.<\/p>\n<\/li>\n<li>\n<p><strong>Minikube<\/strong>\u00a0\u2014 \u0448\u0438\u043a\u0430\u0440\u043d\u043e \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f\u00a0\u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>MicroK8s<\/strong>\u00a0\u2014 \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0434\u043e\u00a0\u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u0443\u0437\u043d\u0430\u043b \u043e\u00a0\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u043f\u043b\u0435\u0439 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0410\u0440\u0442\u0443\u0440\u0430 \u041a\u0440\u044e\u043a\u043e\u0432\u0430, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0431\u0430\u0437\u044b k3s \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e: \u043e\u043d \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u00a0\u0431\u043e\u043b\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u0440\u0430\u0437\u0443 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0434\u0435\u043f\u043b\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u043e<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u00a0\u0436\u0435\u043b\u0435\u0437\u043e. \u041f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u044f \u043d\u0430\u0448\u0451\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430 \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430. \u0418\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440<a href=\"http:\/\/cloud.ru\" rel=\"noopener noreferrer nofollow\"> <\/a><a href=\"http:\/\/Cloud.ru\" rel=\"noopener noreferrer nofollow\">Cloud.ru<\/a> (\u0431\u044b\u0432\u0448\u0438\u0439 SberCloud), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0451\u0442 4000\u00a0\u0431\u043e\u043d\u0443\u0441\u043d\u044b\u0445 \u0440\u0443\u0431\u043b\u0435\u0439 \u043d\u0430\u00a0\u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430\u00a0\u2014 \u043f\u0440\u0438\u00a0\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u00a0\u0432\u044b \u043d\u0435\u00a0\u0437\u043b\u043e\u0439 \u0434\u044f\u0434\u044f\u2011\u043c\u0430\u0439\u043d\u0435\u0440.<\/p>\n<div class=\"floating-image\">\n<figure class=\"float \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae7\/c6e\/427\/ae7c6e4271894a615463320c8c4b891f.png\" width=\"349\" height=\"238\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ae7\/c6e\/427\/ae7c6e4271894a615463320c8c4b891f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae7\/c6e\/427\/ae7c6e4271894a615463320c8c4b891f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043d\u0430\u00a0\u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 CPU \u0438\u043b\u0438\u00a0RAM \u0438 \u0441\u0436\u0435\u0447\u044c \u0433\u0440\u0430\u043d\u0442 \u0437\u0430\u00a0\u043d\u0435\u0434\u0435\u043b\u044e, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u00a0\u2014 \u044d\u0442\u043e, \u043a\u0430\u043a\u00a0\u043f\u043e\u00a0\u043c\u043d\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u043f\u043b\u044e\u0441, \u0447\u0435\u043c \u043c\u0438\u043d\u0443\u0441.<\/p>\n<\/div>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/798\/e2e\/dca\/798e2edca41224e4d32332b7fbb6e818.png\" width=\"755\" height=\"418\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/798\/e2e\/dca\/798e2edca41224e4d32332b7fbb6e818.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/798\/e2e\/dca\/798e2edca41224e4d32332b7fbb6e818.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c (4\u00a0\u0413\u0411):<\/strong> Kubernetes \u0432\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043b\u044e\u0431\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c. \u0421\u0430\u043c\u043e\u043c\u0443 k3s \u0445\u0432\u0430\u0442\u0438\u0442 \u0438 512\u00a0\u041c\u0411, \u043d\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f\u00a0\u043c\u0430\u043d\u0451\u0432\u0440\u0430: PostgreSQL \u0441\u00a0\u0442\u043e\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, FastAPI\u2011\u0431\u044d\u043a\u0435\u043d\u0434, React\u2011\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0442\u044f\u0436\u0451\u043b\u043e\u0435\u00a0\u2014 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u044b GitLab\u2011\u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u043e\u0433 \u0434\u043b\u044f\u00a0\u0442\u0430\u043a\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438\u00a0\u2014 \u043e\u0442 4\u00a0\u0413\u0411.<\/p>\n<\/li>\n<li>\n<p><strong>CPU (2\u00a0vCPU):<\/strong> \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0445\u0432\u0430\u0442\u0438\u0442 2\u00a0\u044f\u0434\u0435\u0440. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u00a0\u043f\u0435\u0442\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0447\u043a\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439: \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432\u00a0CI\/CD\u2011\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435 \u0438\u043b\u0438\u00a0\u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 k3s \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443 \u0443\u0431\u0438\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0443 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043a\u0440\u0430\u0448\u2011\u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0438\u0441\u043a (30\u00a0\u0413\u0411 SSD):<\/strong> \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u043a\u043b\u0438\u043a (IOPS) \u0434\u043b\u044f\u00a0Persistent Volumes, \u0430\u00a0\u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043b\u044f\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 HDD \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u00a0SSD.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u044f \u043f\u043e\u0434\u0448\u043b\u0438\u0444\u043e\u0432\u0430\u043b \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e requests (\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b) \u0438 limits (\u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f) \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445 \u043f\u043e\u0434\u043e\u0432\u00a0\u2014 \u0442\u0430\u043a \u043c\u044b \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u00a0OOM Killer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0451\u0442 \u0437\u0430\u00a0GitLab\u2011\u0440\u0430\u043d\u043d\u0435\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u043d\u0451\u0442 \u0437\u0430\u0434\u044b\u0445\u0430\u0442\u044c\u0441\u044f.<\/p>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044f. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u043a\u0430\u0441\u0430 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (StatefulSet + PVC + Secrets)<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u0448\u0438\u043a\u0430\u0440\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f K3s\u00a0\u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, SSH\u2011\u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f\u00a0Git \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044b, \u0430\u00a0GitLab Runner \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0451\u043b\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u0432 docker\u2011\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435), \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<p>\u041c\u043e\u0439 \u043f\u043b\u0430\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5f\/34e\/998\/b5f34e9980593239faa431eec3df0775.png\" width=\"298\" height=\"323\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b5f\/34e\/998\/b5f34e9980593239faa431eec3df0775.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5f\/34e\/998\/b5f34e9980593239faa431eec3df0775.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0437\u0436\u0435, \u043e\u043d\u00a0\u0431\u044b\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d:<\/p>\n<ol>\n<li>\n<p>PostgreSQL \u0432\u00a0StatefulSet.<\/p>\n<\/li>\n<li>\n<p>Deployment \u0434\u043b\u044f\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0435\u0433\u043e \u0441\u0432\u044f\u0437\u044c \u0441\u00a0\u0411\u0414 + \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434.<\/p>\n<\/li>\n<li>\n<p>Zero\u2011Downtime, Ingress \u0438 Probes.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0441\u00a0TLS\u2011\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c \u0432\u00a0\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435.<\/p>\n<\/li>\n<li>\n<p>GitLab Runner \u0432\u00a0\u043f\u043e\u0434\u0430\u0445.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f0e\/5e5\/d78\/f0e5e5d787899c079f803c06c97098ce.png\" alt=\"\u0412\u043e\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0435\u0439 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\" title=\"\u0412\u043e\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0435\u0439 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\" width=\"786\" height=\"712\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f0e\/5e5\/d78\/f0e5e5d787899c079f803c06c97098ce.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f0e\/5e5\/d78\/f0e5e5d787899c079f803c06c97098ce.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u043e\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0435\u0439 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e\u00a0\u0432\u00a0\u044d\u0442\u043e\u043c Kubernetes \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u0431\u0435\u0440\u0451\u0448\u044c YAML \u043e\u0442\u00a0docker\u2011compose, \u0447\u0443\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u0448\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0448\u044c \u0432\u00a0\u043a\u0443\u0431\u0435. \u041d\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u0448\u0438\u043b \u0441\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0439 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 (\u0440\u043e\u0432\u043d\u043e \u0434\u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0433\u043e \u043f\u0438\u043d\u043a\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430).<\/p>\n<p>\u041d\u043e\u00a0\u0441\u043d\u0430\u0447\u0430\u043b\u0430\u00a0\u2014 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435\u00a0\u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0432\u043e\u0438\u043b \u0430\u0437\u044b docker\u2011compose:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Pod \u0438\u043b\u0438\u00a0Deployment\u00a0\u2014 \u0445\u0443\u0434\u0448\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p>\u041f\u043e\u0434\u044b \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b: \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u043b\u0438\u00a0\u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434, \u0431\u0430\u0437\u0430 \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442, \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043c \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u043f\u043b\u0438\u043a\u0438 StatefulSet \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0431\u0430\u0437\u0443 \u0431\u0435\u0437\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Master\u2011Slave \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 \u0411\u0414.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 Deployment \u043f\u043e\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0432\u00a0\u0438\u043c\u0435\u043d\u0430\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0445\u0435\u0448\u2011\u0441\u0443\u0444\u0444\u0438\u043a\u0441 (\u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439: postgres\u2011db\u2011ajfdjf\u0447\u0435\u0442\u043e\u0442\u0430\u043c), \u0438 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f\u00a0\u2014 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043d\u0430\u0439\u0434\u0443\u0442 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u043e\u00a0\u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c replicas: 2\u00a0\u0434\u043b\u044f\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u043d\u0430\u00a0\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c. \u0414\u0432\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 PostgreSQL (\u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 master\u2011slave \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438) \u043d\u0435\u00a0\u0441\u043c\u043e\u0433\u0443\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u00a0\u043e\u0434\u0438\u043d \u0434\u0438\u0441\u043a\u00a0\u2014 postgres \u043f\u043e\u0435\u0434\u0435\u0442 \u043a\u0443\u043a\u0443\u0445\u043e\u0439.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a\u00a0\u043c\u043e\u0435\u0439 \u0431\u0430\u0437\u0435. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0447\u0435\u043c\u0443\u2011\u0442\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0441\u0442\u0430\u043b\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0435\u043b\u0435\u0442\u0430 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0438\u0437\u00a0\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u0434\u00a0\u0441\u0435\u0431\u044f, \u0431\u0435\u0437\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Helm\u2011\u0447\u0430\u0440\u0442\u043e\u0432 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0435\u0449\u0451 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e\u00a0Kubernetes \u043d\u0435\u00a0\u043f\u043b\u0435\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u0444\u0430\u0439\u043b.env, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0435\u0433\u043e \u043a\u00a0StatefulSet \u0432\u043e\u00a0\u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043c\u043d\u043e\u0439 \u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c. \u042f, \u043f\u043e\u2011\u043c\u043e\u0435\u043c\u0443, \u0437\u0430\u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432.gitignore \u0434\u043b\u044f\u00a0\u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0438, \u043a\u0430\u044e\u0441\u044c\u2026<\/p>\n<pre><code class=\"yaml\">apiVersion: v1kind: Servicemetadata:  name: db  labels:    app: pg_app_composespec:  ports:  - port: 5432    name: app-network  clusterIP: 127.0.0.1 # \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c, \u041a\u0443\u0431\u0435\u0440 \u043d\u0435 \u043f\u0443\u0441\u0442\u0438\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a  selector:    app: pg_app_compose # \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438---apiVersion: apps\/v1kind: StatefulSetmetadata:  name: app-networkspec:  serviceName: \"db\"  replicas: 1  selector:    matchLabels:      app: pg_app_compose  template:    metadata:      labels:        app: pg_app_compose    spec:      containers:      - name: pg_app_compose        image: postgres:16-alpine        # \u0417\u0434\u0435\u0441\u044c \u044f \u043d\u0430\u0438\u0432\u043d\u043e \u0436\u0434\u0430\u043b, \u0447\u0442\u043e \u041a\u0443\u0431\u0435\u0440 \u0441\u0430\u043c \u043d\u0430\u0439\u0434\u0435\u0442 \u043c\u043e\u0439 .env \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0430\u0440\u043e\u043b\u0438        ports:        - containerPort: 5432          name: app-network        volumeMounts:        - name: pg_backend_data          mountPath: \/var\/lib\/postgresql\/data  volumeClaimTemplates:  - metadata:      name: pg_backend_data    spec:      accessModes: [ \"ReadWriteOnce\" ]      resources:        requests:          storage: 1Gi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>backend\u2011deployment\u00a0\u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u00a0\u0441\u0442\u0430\u0440\u043e\u0439 \u0442\u0430\u043a\u0442\u0438\u043a\u0435: \u0431\u0435\u0440\u0451\u043c \u0441\u00a0\u0434\u043e\u043a\u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u043f\u043e\u0434\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0432\u00a0docker\u2011compose. \u0418 \u0442\u0443\u0442 \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043a\u043e\u043b\u044b \u0441\u00a0GitLab Container Registry: \u043e\u043d\u00a0\u0431\u044b\u043b \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u00a0\u0434\u0430\u0432\u0430\u043b \u0441\u0442\u044f\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0437 (\u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u044f \u043d\u0430\u043a\u043e\u0441\u044f\u0447\u0438\u043b, \u0432\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0443\u0442\u044c \u0441\u00a0\u043e\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u0439).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/105\/15a\/a29\/10515aa299660fbe2a4bd2a843b45d7b.png\" alt=\"\u0421\u043a\u0440\u0438\u043d \u043e\u0448\u0438\u0431\u043a\u0438 401 Unauthorized\" title=\"\u0421\u043a\u0440\u0438\u043d \u043e\u0448\u0438\u0431\u043a\u0438 401 Unauthorized\" width=\"1157\" height=\"588\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/105\/15a\/a29\/10515aa299660fbe2a4bd2a843b45d7b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/105\/15a\/a29\/10515aa299660fbe2a4bd2a843b45d7b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043a\u0440\u0438\u043d \u043e\u0448\u0438\u0431\u043a\u0438 401\u00a0Unauthorized<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u00a0\u0434\u0440\u0443\u0436\u0431\u043e\u0439 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0411\u0414 \u043d\u0435\u00a0\u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c: \u0441\u043d\u043e\u0432\u0430 \u0432\u0438\u0436\u0443, \u0447\u0442\u043e\u00a0\u043f\u043e\u0434\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 (Ready 0\/1). \u0412\u0430\u0436\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0443\u0441\u0432\u043e\u0438\u043b \u043f\u043e\u00a0\u0445\u043e\u0434\u0443 \u044d\u0442\u043e\u0439 \u0434\u0432\u0438\u0436\u0443\u0445\u0438: \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u043e\u043d\u0430 \u0432\u0430\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u0435\u00a0\u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u043d\u0430\u0443\u0433\u0430\u0434. \u041d\u0435\u00a0\u043f\u043e\u043b\u0435\u043d\u0438\u0442\u0435\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c kubectl logs \/ describe pod, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0430\u043c\u0430\u044f \u0443\u043c\u043d\u0430\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430 \u0434\u0430\u0451\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043e\u0432\u0435\u0442\u00a0\u2014 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u00a0\u0437\u043d\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0432\u00a0\u0446\u0435\u043b\u043e\u043c, \u0438 \u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0440\u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/983\/925\/89d\/98392589db2da6e487f2075cb281365e.png\" alt=\"Pods READY 0\/1\" title=\"Pods READY 0\/1\" width=\"1150\" height=\"195\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/983\/925\/89d\/98392589db2da6e487f2075cb281365e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/983\/925\/89d\/98392589db2da6e487f2075cb281365e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Pods READY 0\/1<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u043a\u0443\u0431\u0435\u0440 \u0442\u0440\u0443\u0434\u044f\u0433\u0430:<\/p>\n<pre><code>Normal\u00a0 BackOff\u00a0 3m56s (x18558 over 2d22h)\u00a0 kubeletspec.containers(fastapi-backend):<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 18\u00a0\u0442\u044b\u0441\u044f\u0447 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u2026 \u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0443\u0442\u044c \u043a\u00a0\u043e\u0431\u0440\u0430\u0437\u0443, \u043d\u043e\u00a0\u043a\u0443\u0431 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0443 ImagePullBackOff. \u0417\u0434\u0435\u0441\u044c \u044f \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u043b\u044b\u0445\u043d\u0443\u043b \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0441\u00a0\u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u00a0\u043d\u043e\u0432\u043e\u0439\u00a0\u2014 \u0438 \u0442\u0443\u0442\u00a0\u0436\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: CreateContainerConfigError. Kubernetes \u043e\u043f\u044f\u0442\u044c \u0434\u0430\u0451\u0442 \u043f\u043e\u00a0\u0440\u0443\u043a\u0430\u043c \u043e\u0448\u0438\u0431\u043a\u043e\u0439: type: Invalid value: \u201cOpaque\u201d: field is immutable.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f8\/fd7\/5fc\/8f8fd75fc5609dc0bfb25b14ca5f7d9f.png\" alt=\"Invalid value\" title=\"Invalid value\" width=\"1167\" height=\"105\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8f8\/fd7\/5fc\/8f8fd75fc5609dc0bfb25b14ca5f7d9f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f8\/fd7\/5fc\/8f8fd75fc5609dc0bfb25b14ca5f7d9f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Invalid value<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u042f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0434\u0430\u043b \u0441\u0435\u043a\u0440\u0435\u0442\u0443 \u0441\u00a0\u043f\u0430\u0440\u043e\u043b\u044f\u043c\u0438 \u0434\u043b\u044f\u00a0\u0431\u0430\u0437\u044b \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u0443 \u0441\u00a0\u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 GitLab (\u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438) \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u00a0\u0436\u0435 \u0438\u043c\u044f, \u0430\u00a0\u0432\u00a0Kubernetes \u043d\u0430\u00a0\u043b\u0435\u0442\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430. \u041e\u043d \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e\u00a0\u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u0435\u0449\u0451 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0442\u0430\u0440\u044b\u0445, \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u043e.<\/p>\n<p>\u0423\u0434\u0430\u043b\u0438\u0432 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b, \u044f \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0434\u043b\u044f\u00a0GitLab \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<pre><code class=\"bash\">kubectl create secret docker-registry gitlab-registry-secret \\\u00a0\u00a0--docker-server=registry.gitlab.com \\\u00a0\u00a0--docker-username='' \\\u00a0\u00a0--docker-password='' \\\u00a0\u00a0--docker-email=''<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/263\/990\/991\/2639909913e1b06ff84a3d0194fdb086.png\" alt=\"\u041e\u0431\u0440\u0430\u0437 \u0441\u0442\u044f\u043d\u0443\u043b\u0441\u044f\" title=\"\u041e\u0431\u0440\u0430\u0437 \u0441\u0442\u044f\u043d\u0443\u043b\u0441\u044f\" width=\"1164\" height=\"576\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/263\/990\/991\/2639909913e1b06ff84a3d0194fdb086.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/263\/990\/991\/2639909913e1b06ff84a3d0194fdb086.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0431\u0440\u0430\u0437 \u0441\u0442\u044f\u043d\u0443\u043b\u0441\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u043b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u00a0\u0431\u0430\u0437\u0435 \u0434\u043b\u044f\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u0430 (\u043a\u0430\u043a \u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u00a0compose: \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u044d\u043a\u0435\u043d\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0438\u043c\u044f \u0431\u0430\u0437\u044b, \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f)\u00a0\u2014 \u0438 \u043d\u0435\u00a0\u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u0432\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u0432\u00a0\u0447\u0451\u043c \u0434\u0435\u043b\u043e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c SQLAlchemy\u2011\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u00a0psycopg2\u00a0\u043d\u0430\u00a0asyncpg, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u00a0docker\u2011compose \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u00a0\u0447\u0430\u0441\u0442\u044f\u043c, \u0430\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c ORM \u043d\u0443\u0436\u0435\u043d \u0435\u0434\u0438\u043d\u044b\u0439 URI\u2011\u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (Universal Resource Identifier, \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0435\u0431\u2011\u0430\u0434\u0440\u0435\u0441 \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435). \u0412\u00a0Kubernetes \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0432\u00a0YAML:<\/p>\n<pre><code class=\"yaml\">- name: DATABASE_URL\u00a0\u00a0value: \"postgresql+asyncpg:\/\/$(DB_USER):$(DB_PASSWORD)@$(DB_HOST):$(DB_PORT)\/$(DB_NAME)\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d69\/b64\/e37\/d69b64e370715f3f3d4fca3a55a88dd1.png\" alt=\"METRICS_API_KEY, psycopg2 (\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443)\" title=\"METRICS_API_KEY, psycopg2 (\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443)\" width=\"637\" height=\"248\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d69\/b64\/e37\/d69b64e370715f3f3d4fca3a55a88dd1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d69\/b64\/e37\/d69b64e370715f3f3d4fca3a55a88dd1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>METRICS_API_KEY, psycopg2\u00a0(\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443)<\/figcaption><\/div>\n<\/figure>\n<details class=\"spoiler\">\n<summary>\u0412\u00a0\u0447\u0451\u043c \u0444\u0438\u0448\u043a\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 postgresql+asyncpg:\/\/?<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>postgresql\u00a0\u2014 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u043a\u0430\u043a\u043e\u0439 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 SQL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c (\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 Postgres \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0MySQL).<\/p>\n<\/li>\n<li>\n<p>+asyncpg\u00a0\u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u041c\u043e\u0439 FastAPI \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e postgresql:\/\/, Python \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 (psycopg2), \u043d\u0430\u00a0\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u043d\u0430\u0447\u043d\u0451\u0442 \u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 $(&#8230;) \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u0438 \u0432\u00a0\u043e\u0434\u0438\u043d \u0440\u0430\u0431\u043e\u0447\u0438\u0439 URI. \u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u043c\u043e\u0438 \u043c\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u00a0\u0434\u0440\u0443\u0436\u0431\u043e\u0439 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1f\/230\/2ba\/d1f2302ba430efb4d2dc9d4fe9e416fd.png\" alt=\"\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c\" title=\"\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c\" width=\"570\" height=\"257\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d1f\/230\/2ba\/d1f2302ba430efb4d2dc9d4fe9e416fd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1f\/230\/2ba\/d1f2302ba430efb4d2dc9d4fe9e416fd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c<\/figcaption><\/div>\n<\/figure>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f. \u0421\u0435\u0442\u044c \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f (Traefik, Ingress + cert\u2011manager)<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0432\u00a0\u0441\u0435\u0442\u0438 Kubernetes. \u041f\u0440\u043e\u00a0\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u00a0\u2014 \u0442\u0430\u043c \u0432\u0441\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0431\u0435\u0437\u00a0\u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c (\u0441\u043a\u0443\u0447\u043d\u043e). \u0410\u00a0\u0432\u043e\u0442 \u043d\u0430\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Ingress\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (Traefik) \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435\u00a0\u2014 \u043f\u043e\u0434\u043b\u044f\u043d\u043e\u043a \u0442\u0430\u043c \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u0430\u043b\u043e.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u00a0\u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u0438\u0437\u00a0docker\u2011compose \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b Nginx \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0434\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u00a0\u0431\u044d\u043a\u0435\u043d\u0434 \u0447\u0435\u0440\u0435\u0437 location \/api\/. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043f\u043e\u043b\u043d\u0430\u044f \u0448\u043b\u044f\u043f\u0430: \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u00a0\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u0440\u0438\u00a0\u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a\u00a0API \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u0438 \u043d\u0430\u00a0\u0444\u0440\u043e\u043d\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u0420\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 Ingress. \u042f \u0432\u044b\u043d\u0435\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Nginx \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 ConfigMap \u0438 \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u043b \u0435\u0433\u043e \u0432\u00a0\u043f\u043e\u0434\u00a0\u0441\u00a0\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c. \u0422\u0435\u043f\u0435\u0440\u044c Nginx \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u043a\u0443 React, \u043d\u0435\u00a0\u0432\u0441\u0442\u0430\u0432\u0430\u044f \u043d\u0430\u00a0\u043f\u0443\u0442\u0438 \u0443\u00a0\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 ConfigMap \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1kind: ConfigMapmetadata:  name: frontend-nginx-configdata:  default.conf: |    server {        listen 80;        server_name localhost;        location \/ {            root \/usr\/share\/nginx\/html;            index index.html index.htm;            try_files $uri $uri\/ \/index.html;        }    }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0435\u0437\u00a0\u043e\u0431\u0440\u044b\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (Zero\u2011Downtime), \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b readinessProbe \u0438 livenessProbe: \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u043f\u043e\u0434\u00a0\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0438\u043b\u0438\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u043e \u0438 \u0433\u043e\u0442\u043e\u0432\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c (\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u00a0\u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0430 \u043d\u0435\u00a0\u0443\u043b\u0435\u0442\u0430\u043b\u0438 \u0432\u00a0\u043f\u0443\u0441\u0442\u043e\u0442\u0443).<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"yaml\">readinessProbe:\u00a0\u00a0\u00a0\u00a0httpGet:\u00a0\u00a0\u00a0\u00a0path: \/\u00a0\u00a0\u00a0\u00a0port: 80\u00a0\u00a0\u00a0\u00a0initialDelaySeconds: 2 # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439\u00a0\u00a0\u00a0\u00a0periodSeconds: 5 \u00a0 \u00a0 \u00a0 # \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044clivenessProbe:\u00a0\u00a0\u00a0\u00a0httpGet:\u00a0\u00a0\u00a0\u00a0path: \/\u00a0\u00a0\u00a0\u00a0port: 80\u00a0\u00a0\u00a0\u00a0initialDelaySeconds: 5\u00a0\u00a0\u00a0\u00a0periodSeconds: 10<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u00a0\u0431\u0435\u0437\u00a0\u0433\u0440\u0430\u0431\u0435\u043b\u044c.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438.<\/strong> \u0412\u0441\u044e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u044f \u043e\u0442\u0434\u0430\u043b Traefik. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0438\u0434\u0430<a href=\"https:\/\/site.com\/api\" rel=\"noopener noreferrer nofollow\"> https:\/\/site.com\/api<\/a> \u0443\u0445\u043e\u0434\u0438\u043b\u0438 \u0432\u00a0FastAPI \u043a\u0430\u043a\u00a0\u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 \/, \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Traefik\u00a0\u2014 Middleware StripPrefix. \u041d\u043e\u00a0\u043f\u0440\u0438\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0432\u00a0\u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 Ingress \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0430\u0433\u043b\u0443\u0445\u043e \u043b\u043e\u043c\u0430\u043b\u0441\u044f: \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0443 404\u00a0page not found \u043e\u0442\u00a0Traefik (\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435), \u0445\u043e\u0442\u044f \u043f\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e, \u0430\u00a0\u043b\u043e\u0433\u0438 Nginx\u00a0\u0431\u044b\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u043c\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b Traefik:<\/p>\n<pre><code class=\"yaml\">apiVersion: traefik.containo.us\/v1alpha1kind: Middlewaremetadata:  name: strip-api-prefixspec:  stripPrefix:    prefixes:      - \/api---apiVersion: networking.k8s.io\/v1kind: Ingressmetadata:  name: app-ingress  annotations:    kubernetes.io\/ingress.class: \"traefik\"    traefik.ingress.kubernetes.io\/router.middlewares: \"default-strip-api-prefix@cuberdns\" # &lt;-- \u0432\u043e\u0442 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0439 \u0444\u0438\u0433\u043d\u0438 Traefik \u043f\u0440\u0438\u043a\u0440\u044b\u043b \u043c\u0430\u0440\u0448\u0440\u0443\u0442    # \u0430\u0432\u0442\u043e\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430    cert-manager.io\/cluster-issuer: \"letsencrypt-prod\"spec:  # \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442  tls:  - hosts:    - hybrid-lab.duckdns.org    secretName: hybrid-lab-tls-secret # \u0441\u044e\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442  # \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430  rules:  - host: hybrid-lab.duckdns.org    http:      paths:      - path: \/api        pathType: Prefix        backend:          service:            name: backend-service            port:              number: 8000      - path: \/        pathType: Prefix        backend:          service:            name: frontend-service            port:              number: 80<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042f \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043a\u0430\u043a @cuberdns. Traefik \u0432\u0438\u0434\u0435\u043b \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u0432\u00a0\u0446\u0435\u043b\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b \u0432\u0435\u0441\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442. \u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u00a0\u0431\u044b\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 @kubernetescrd, \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0438 Ingress \u043d\u0430\u0448\u0451\u043b \u0441\u0435\u0440\u0432\u0438\u0441\u044b.<\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438: \u043a\u0432\u0435\u0441\u0442 \u0441\u00a0Let\u2019s Encrypt.<\/strong><\/p>\n<p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u043d\u043e\u00a0\u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u0447\u0435\u043a \u043d\u0435\u00a0\u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0441\u044f\u2026 \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0437\u0430\u0432\u0438\u0441 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u0435 Pending.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/372\/66f\/d3f\/37266fd3f40437e0a5c0be317f8cd94a.png\" alt=\"Reason: Pending\" title=\"Reason: Pending\" width=\"875\" height=\"348\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/372\/66f\/d3f\/37266fd3f40437e0a5c0be317f8cd94a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/372\/66f\/d3f\/37266fd3f40437e0a5c0be317f8cd94a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Reason: Pending<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0438\u0436\u0435 \u0438 \u043f\u043e\u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 kubectl get certificate \u2192 describe order \u2192 describe certificaterequest.<\/p>\n<p>\u0412\u044b\u044f\u0441\u043d\u0438\u043b\u0438\u0441\u044c \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>\u0412\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 ClusterIssuer \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0430\u043b\u043e email\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0437\u2011\u0437\u0430 \u0447\u0435\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0430. ClusterIssuer \u043e\u0442\u0434\u0430\u0451\u0442 \u044d\u0442\u043e\u0442 email \u0441\u0435\u0440\u0432\u0435\u0440\u0443 ACME (Let\u2019s Encrypt), \u0438 \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043d\u0435\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0430\u00a0\u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430 \u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 20\u00a0\u0434\u043d\u0435\u0439, \u043e\u043d \u0432\u044b\u0441\u044b\u043b\u0430\u0435\u0442 \u0432\u0430\u043c \u043f\u0438\u0441\u044c\u043c\u0435\u0446<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u043c \u0441\u0442\u0430\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Security Groups \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043e\u0431\u043b\u0430\u043a\u0435 (<a href=\"http:\/\/Cloud.ru\" rel=\"noopener noreferrer nofollow\">Cloud.ru<\/a>). \u0420\u043e\u0431\u043e\u0442 Let\u2019s Encrypt (HTTP-01\u00a0challenge) \u043d\u0435\u00a0\u043c\u043e\u0433 \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043f\u043e\u043a\u0430 \u044f \u043d\u0435\u00a0\u043e\u0442\u043a\u0440\u044b\u043b 80\u00a0\u0438 443\u00a0TCP\u2011\u043f\u043e\u0440\u0442\u044b \u043d\u0430\u00a0\u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u0440\u0432\u043e\u043b\u0435 \u0434\u043b\u044f\u00a0\u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/922\/d8e\/261\/922d8e2615b4cb7e8c644b8f019cc70f.png\" width=\"1155\" height=\"522\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/922\/d8e\/261\/922d8e2615b4cb7e8c644b8f019cc70f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/922\/d8e\/261\/922d8e2615b4cb7e8c644b8f019cc70f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f83\/26a\/fac\/f8326afaca7db01025a91c32d6c55381.png\" alt=\"\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c\" title=\"\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c\" width=\"541\" height=\"60\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f83\/26a\/fac\/f8326afaca7db01025a91c32d6c55381.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f83\/26a\/fac\/f8326afaca7db01025a91c32d6c55381.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0437\u0430\u0432\u0435\u043b\u043e\u0441\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u0441\u0435\u0442\u044c\u00a0\u2014 \u043d\u0435\u00a0\u0431\u0435\u0437\u00a0\u0437\u0430\u0442\u044b\u043a\u043e\u0432\u00a0\u2014 \u043d\u043e\u00a0\u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.<\/p>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u043f\u044f\u0442\u0430\u044f. GitLab Runner \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u0430\u0445, gitlab\u2011ci<\/h4>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043c\u043e\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0442\u0430\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u043d\u043d\u0435\u0440\u0430 CI\/CD \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0420\u0430\u043d\u044c\u0448\u0435 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043a\u0440\u0443\u0442\u0438\u043b\u043e\u0441\u044c \u0432\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c Docker: \u0440\u0430\u043d\u043d\u0435\u0440\u00a0\u043b\u0438\u043d\u0442\u0438\u043b \u043a\u043e\u0434, \u0433\u043e\u043d\u044f\u043b \u0442\u0435\u0441\u0442\u044b, \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043e\u0431\u0440\u0430\u0437\u044b, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0438\u0445 \u0432\u00a0GitLab Registry \u0438 \u0432\u044b\u0441\u044b\u043b\u0430\u043b \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0447\u0435\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440 \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0443\u0448\u0435.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0432\u0441\u0451\u2011\u0442\u0430\u043a\u0438 \u0440\u0435\u0448\u0438\u043b\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Helm. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 namespace \u0434\u043b\u044f\u00a0\u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440\u0443 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 (RBAC) \u0432\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1kind: Namespacemetadata:  name: gitlab-runner---apiVersion: v1kind: ServiceAccountmetadata:  name: gitlab-runner  namespace: gitlab-runner---# \u0434\u0430\u0451\u043c \u0440\u0430\u043d\u043d\u0435\u0440\u0443 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0434\u0435\u043b\u0430\u0442\u044c deploy \u0447\u0435\u0440\u0435\u0437 CI\/CDapiVersion: rbac.authorization.k8s.io\/v1kind: ClusterRoleBindingmetadata:  name: gitlab-runner-adminroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:  - kind: ServiceAccount    name: gitlab-runner    namespace: gitlab-runner<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u044f \u043d\u0435\u00a0\u043b\u044e\u0431\u043b\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0438 \u0438\u0437\u00a0bash\u2011\u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Helm\u2011\u0447\u0430\u0440\u0442\u0430 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0437\u043b\u043e:<\/p>\n<pre><code class=\"bash\">helm install --namespace gitlab-runner gitlab-runner gitlab\/gitlab-runner \\  --set gitlabUrl=https:\/\/gitlab.com\/ \\  --set runnerRegistrationToken=\"...\" \\  --set rbac.create=true \\  --set rbac.serviceAccountName=gitlab-runner \\  --set runners.tags=\"\" \\  --set runners.privileged=true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0443 \u0438 \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b ~\/.bashrc \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 KUBECONFIG (\u043f\u0443\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043e\u0442\u00a0k3s), \u0447\u0442\u043e\u0431\u044b Helm \u043f\u043e\u00a0\u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u043d\u0435\u00a0\u0438\u0441\u043a\u0430\u043b \u0435\u0433\u043e \u043f\u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 ~\/.kube\/config (\u0433\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 k8s) \u0438 \u043d\u0435\u00a0\u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c6\/7a8\/ef9\/5c67a8ef988dd61a6424d7f5eb763940.png\" alt=\"\u0424\u0430\u0439\u043b ~\/.bashrc\" title=\"\u0424\u0430\u0439\u043b ~\/.bashrc\" width=\"381\" height=\"59\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5c6\/7a8\/ef9\/5c67a8ef988dd61a6424d7f5eb763940.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c6\/7a8\/ef9\/5c67a8ef988dd61a6424d7f5eb763940.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0430\u0439\u043b ~\/.bashrc<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/683\/53f\/58a\/68353f58a0911284818346ce98e115c2.png\" alt=\"\u042d\u0442\u043e \u043e\u043d \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438\" title=\"\u042d\u0442\u043e \u043e\u043d \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438\" width=\"1098\" height=\"148\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/683\/53f\/58a\/68353f58a0911284818346ce98e115c2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/683\/53f\/58a\/68353f58a0911284818346ce98e115c2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042d\u0442\u043e \u043e\u043d \u0432\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u042d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u00a0\u0432\u0441\u0451. \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u043d\u043d\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0442\u0430\u0442\u0443\u0441 Online, \u043f\u0440\u0438\u00a0git push \u043e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f\u00a0\u0434\u0436\u043e\u0431\u044b. \u0414\u0435\u043b\u0430\u0435\u043c kubectl describe pod&#8230; \u2011n gitlab\u2011runner. \u0412\u0438\u0434\u0438\u043c \u0438\u0441\u0442\u0438\u043d\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443: 401\u00a0Unauthorized.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ab\/731\/c1a\/0ab731c1ad781d509438d8a8109c23c5.png\" alt=\"Error: ErrImagePull\" title=\"Error: ErrImagePull\" width=\"908\" height=\"171\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0ab\/731\/c1a\/0ab731c1ad781d509438d8a8109c23c5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ab\/731\/c1a\/0ab731c1ad781d509438d8a8109c23c5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Error: ErrImagePull<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0431\u0443\u0440\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0418\u0418\u2011\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 GitLab \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0433\u0430\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0445 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439 (\u0430 \u043d\u0430\u0448 \u0440\u0430\u043d\u043d\u0435\u0440 \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f) \u0431\u0435\u0437\u00a0\u043b\u043e\u0433\u0438\u043d\u0430 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f, \u043f\u043b\u044e\u0441\u043e\u043c \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0441\u0432\u043e\u0435\u043c\u0443 \u0440\u0430\u043d\u043d\u0435\u0440\u0443 \u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 Docker Hub. \u0417\u0430\u043e\u0434\u043d\u043e (\u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434) \u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b \u0444\u043b\u0430\u0433 privileged: true, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0434\u043b\u044f\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043e\u043d \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"bash\">helm upgrade --install --namespace gitlab-runner gitlab-runner gitlab\/gitlab-runner \\  --set gitlabUrl=https:\/\/gitlab.com\/ \\  --set runnerRegistrationToken=\"\" \\  --set rbac.create=true \\  --set serviceAccount.name=gitlab-runner \\  --set runners.tags=\"botan\" \\  --set runners.privileged=false \\  --set image.registry=\"docker.io\" \\  --set image.image=\"gitlab\/gitlab-runner\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u00a0\u0441\u0435\u0442\u044c\u044e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0440 \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438\u00a0\u2014 \u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0432\u00a0\u0441\u0435\u0442\u044f\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u0440\u0430\u043d\u043d\u0435\u0440\u0430 (\u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 Docker\u2011in\u2011Docker \u0434\u0435\u043b\u0438\u043b\u0438 \u043e\u0431\u0449\u0443\u044e \u0441\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a\u00a0\u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430\u043c).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d7d\/df9\/778\/d7ddf9778f502fd61320e844b5c406e9.png\" alt=\"GitLab pipeline\" title=\"GitLab pipeline\" width=\"308\" height=\"367\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d7d\/df9\/778\/d7ddf9778f502fd61320e844b5c406e9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d7d\/df9\/778\/d7ddf9778f502fd61320e844b5c406e9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>GitLab pipeline<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0440\u043e\u0441 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0445\u043e\u0441\u0442\u0430 \u0432\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c gitlab\u2011ci.yml \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Kaniko. \u042d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043e\u0442\u00a0Google, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 Kubernetes. \u0415\u0439 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d \u0434\u0435\u043c\u043e\u043d Docker, \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u044b root\u2011\u043f\u0440\u0430\u0432\u0430 (privileged: true) \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d\u0430\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0441\u043b\u043e\u0439 \u0437\u0430\u00a0\u0441\u043b\u043e\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432 user\u2011space).<\/p>\n<pre><code class=\"yaml\">build_backend:  stage: build  image:    # \u043e\u0431\u0440\u0430\u0437 Kaniko    name: gcr.io\/kaniko-project\/executor:debug    entrypoint: [\"\"]  script:    # \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 GitLab Registry    - mkdir -p \/kaniko\/.docker    - echo \"{\\\"auths\\\":{\\\"$CI_REGISTRY\\\":{\\\"username\\\":\\\"$CI_REGISTRY_USER\\\",\\\"password\\\":\\\"$CI_REGISTRY_PASSWORD\\\"}}}\" &gt; \/kaniko\/.docker\/config.json    # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438 \u043f\u0443\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0437 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439    - \/kaniko\/executor      --context \"${CI_PROJECT_DIR}\/metrics-backend\"      --dockerfile \"${CI_PROJECT_DIR}\/metrics-backend\/Dockerfile\"      --destination \"${BACKEND_IMAGE}\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0430\u043c \u0434\u0435\u043f\u043b\u043e\u0439. Runner \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u00a0\u2014 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0432\u00a0API Kubernetes. \u0412\u043c\u0435\u0441\u0442\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0445 SSH\u2011\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u044e\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430) \u0448\u0430\u0433 \u0434\u0435\u043f\u043b\u043e\u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0434\u043e\u00a0\u043e\u0434\u043d\u043e\u0439 \u0438\u0437\u044f\u0449\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0420\u0430\u043d\u043d\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0451\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0438\u0437\u00a0\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e Git\u2011\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0438\u0445 \u043a\u0443\u0431\u0435\u0440\u0443:<\/p>\n<pre><code class=\"yaml\">deploy_app:  stage: deploy  image: bitnami\/kubectl:latest  script:    # \u0440\u0430\u043d\u043d\u0435\u0440 \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u0447\u0435\u0440\u0435\u0437 ServiceAccount,    # \u0435\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b SSH-\u043a\u043b\u044e\u0447\u0438 \u2014 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f:    - kubectl apply -f k3s\/ --recursive<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0451! \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0441\u0442\u0430\u043b \u043f\u043e\u2011\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u00a0\u2014 \u0447\u0438\u0441\u0442\u044b\u0439 Push\u2011based GitOps \u0431\u0435\u0437\u00a0\u0435\u0434\u0438\u043d\u043e\u0433\u043e SSH\u2011\u043a\u043b\u044e\u0447\u0430.<\/p>\n<hr\/>\n<h4>\u0427\u0430\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u0430\u044f. \u041a\u0440\u0430\u0448\u2011\u0442\u0435\u0441\u0442\u044b<\/h4>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043c\u043e\u0434\u043d\u044b\u0439 k8s\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434, \u043d\u0435\u00a0\u0434\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e, \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043e\u0440\u0438\u044e \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e. \u041d\u043e\u00a0\u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e\u00a0\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0441\u0442\u043e\u044f\u0442, \u0435\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u043e\u0442\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e\u00a0\u0436\u0435 \u0447\u0438\u0445\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0436\u0438\u0432\u044b\u043c \u043f\u0440\u0438\u00a0\u043b\u044e\u0431\u044b\u0445 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430\u0445, \u0430\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435\u00a0\u0443\u0432\u0438\u0434\u044f\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 502\u00a0\u043d\u0430\u00a0\u0441\u0432\u043e\u0451\u043c \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<h4>\u0422\u0435\u0441\u0442 1. \u0412\u044b\u043a\u0430\u0442\u043a\u0430 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u00a0\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 (ZDD)<\/h4>\n<p>\u0420\u0430\u043d\u0435\u0435 \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b Zero\u2011Downtime Deployment.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d Rolling Update<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0427\u0442\u043e\u0431\u044b \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435\u00a0\u043f\u0443\u0441\u043a\u0430\u043b \u0442\u0440\u0430\u0444\u0438\u043a \u0432\u00a0\u043f\u0443\u0441\u0442\u043e\u0442\u0443, \u0430\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435\u00a0\u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0431\u0440\u044b\u0432\u044b \u043f\u0440\u0438\u00a0\u0432\u044b\u043a\u0430\u0442\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445 Deployment \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0440\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<p><strong>1. \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f RollingUpdate:<\/strong><\/p>\n<ul>\n<li>\n<p>maxSurge: 1\u00a0\u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 Kubernetes \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u00a0\u0441\u0432\u0435\u0440\u0445\u00a0\u043b\u0438\u043c\u0438\u0442\u0430 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>maxUnavailable: 0\u00a0\u2014 \u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u043e\u0434\u044b \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a.<\/p>\n<\/li>\n<\/ul>\n<p><strong>2. \u041f\u0440\u043e\u0431\u044b \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 (readinessProbe):<\/strong><\/p>\n<p>Kubernetes \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \/health. \u041f\u043e\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0438 \u043d\u0435\u00a0\u043e\u0442\u0432\u0435\u0442\u0438\u0442 HTTP 200\u00a0OK, \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u00a0\u043d\u0435\u00a0\u043f\u043e\u0439\u0434\u0451\u0442.<\/p>\n<p><strong>3. livenessProbe:<\/strong><\/p>\n<p>\u0421\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442, \u043f\u043e\u0434\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u043e \u0432\u00a0\u0431\u043e\u044e. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u0430\u0436\u0434\u0443\u044e \u0434\u0435\u0441\u044f\u0442\u0443\u044e \u0434\u043e\u043b\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c HTTP\u2011\u0441\u0442\u0430\u0442\u0443\u0441:<\/p>\n<pre><code class=\"bash\">while true; do\u00a0\u00a0curl -s -o \/dev\/null -w \"%{http_code}\\n\" https:\/\/hybrid-lab.duckdns.org\/\u00a0\u00a0sleep 0.1done<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0448\u043b\u0438 (200\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f)\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0432\u00a0GitLab, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/17d\/584\/fd4\/17d584fd4bc339dbeb44e3dc6d6af102.png\" alt=\"\u041f\u043e\u0435\u0445\u0430\u043b\u0438\" title=\"\u041f\u043e\u0435\u0445\u0430\u043b\u0438\" width=\"1047\" height=\"385\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/17d\/584\/fd4\/17d584fd4bc339dbeb44e3dc6d6af102.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/17d\/584\/fd4\/17d584fd4bc339dbeb44e3dc6d6af102.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0435\u0445\u0430\u043b\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0431\u0440\u0430\u0437 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043b\u0435\u0442\u044f\u0442 \u0432\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0447\u0435\u0440\u0435\u0437 k9s. \u041d\u0430\u00a0\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435 \u0432\u0438\u0434\u043d\u043e \u043c\u0430\u0433\u0438\u044e ZDD \u0432\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438: \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f, \u043d\u043e\u00a0Service \u043d\u0435\u00a0\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0430\u00a0\u043d\u0438\u0445 \u0442\u0440\u0430\u0444\u0438\u043a (\u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d \u043d\u0430\u00a0\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043a\u0440\u0430\u0441\u043d\u044b\u043c). \u0421\u0442\u0430\u0440\u044b\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0443\u0442 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 Terminating \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u043e\u0440\u044f\u0442\u0441\u044f \u0437\u0435\u043b\u0451\u043d\u044b\u043c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/acd\/5ff\/3b7\/acd5ff3b7a114e22d2c92d771e95ed90.png\" alt=\"\u041b\u043e\u0433\u0438 \u043f\u043e\u0448\u043b\u0438\" title=\"\u041b\u043e\u0433\u0438 \u043f\u043e\u0448\u043b\u0438\" width=\"799\" height=\"428\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/acd\/5ff\/3b7\/acd5ff3b7a114e22d2c92d771e95ed90.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/acd\/5ff\/3b7\/acd5ff3b7a114e22d2c92d771e95ed90.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041b\u043e\u0433\u0438 \u043f\u043e\u0448\u043b\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043d\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0444\u043e\u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0435. Service \u043d\u0435\u00a0\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u043d\u0435\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0434 (\u043e\u043d \u0433\u043e\u0440\u0438\u0442 \u043a\u0440\u0430\u0441\u043d\u044b\u043c):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/716\/751\/f4e\/716751f4e0b762020a9e524edf3b0cae.png\" alt=\"\u0422\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0442 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432\" title=\"\u0422\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0442 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432\" width=\"365\" height=\"275\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/716\/751\/f4e\/716751f4e0b762020a9e524edf3b0cae.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/716\/751\/f4e\/716751f4e0b762020a9e524edf3b0cae.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0442 \u0431\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b20\/2ab\/1d6\/b202ab1d625df9a5b2f7341d9058e961.png\" alt=\"frontend \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f, \u0443 \u0431\u044d\u043a\u0430 \u043f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\" title=\"frontend \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f, \u0443 \u0431\u044d\u043a\u0430 \u043f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\" width=\"1099\" height=\"538\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b20\/2ab\/1d6\/b202ab1d625df9a5b2f7341d9058e961.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b20\/2ab\/1d6\/b202ab1d625df9a5b2f7341d9058e961.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>frontend \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f, \u0443\u00a0\u0431\u044d\u043a\u0430 \u043f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e.<\/p>\n<h4>\u0422\u0435\u0441\u0442 2. \u0423\u0431\u0438\u0432\u0430\u0435\u043c Stateless\u2011\u043f\u043e\u0434<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e, \u043d\u043e\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u043a\u0430 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 kubectl delete pod&#8230; (\u0438\u043b\u0438 Ctrl + D \u0432\u00a0k9s) \u0443\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u00a0\u0441\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c.<\/p>\n<p>Service \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0438\u0437\u00a0\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u0430\u00a0Ingress \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u0432\u0442\u043e\u0440\u0443\u044e, \u0436\u0438\u0432\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0443. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 ReplicaSet \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0443\u0448\u0435\u043d\u043e, \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ca\/114\/68d\/5ca11468d17af5cd1e3ae5164a1a03a1.png\" alt=\"\u041f\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f\" title=\"\u041f\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f\" width=\"1144\" height=\"537\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5ca\/114\/68d\/5ca11468d17af5cd1e3ae5164a1a03a1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ca\/114\/68d\/5ca11468d17af5cd1e3ae5164a1a03a1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0434\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f<\/figcaption><\/div>\n<\/figure>\n<h4>\u0422\u0435\u0441\u0442 3. \u0421\u043c\u0435\u0440\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u00a0\u2014 \u043f\u043e\u0442\u0435\u0440\u044f \u043f\u043e\u0434\u0430 \u0441\u00a0PostgreSQL \u043f\u043e\u0434\u00a0\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u041a\u0430\u043a\u00a0\u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0434\u043b\u044f\u00a0\u0411\u0414 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 StatefulSet (PVC) \u0432\u043c\u0435\u0441\u0442\u043e Deployment. \u0424\u0438\u0448\u043a\u0430 PersistentVolumeClaim \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0434\u0438\u0441\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043f\u043e\u0434\u0430: \u0432\u00a0\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043e\u043d \u00ab\u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f\u00bb \u043e\u0442\u00a0\u0443\u043c\u0438\u0440\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u0430 \u0438 \u0436\u0434\u0451\u0442.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430\u0448\u0443 \u0431\u0430\u0437\u0443 \u0434\u043e\u00a0\u0442\u0435\u0441\u0442\u0430:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ad\/0d9\/617\/1ad0d961727e84985fcebb6110ae1142.png\" alt=\"\u0427\u0442\u043e \u0442\u043e \u0435\u0441\u0442\u044c\" title=\"\u0427\u0442\u043e \u0442\u043e \u0435\u0441\u0442\u044c\" width=\"747\" height=\"503\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1ad\/0d9\/617\/1ad0d961727e84985fcebb6110ae1142.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ad\/0d9\/617\/1ad0d961727e84985fcebb6110ae1142.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0427\u0442\u043e\u00a0\u0442\u043e \u0435\u0441\u0442\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0423\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u00a0postgres-0, Kubernetes \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044e \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0435\u0433\u043e. \u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0446\u0435\u043f\u043b\u044f\u0435\u0442 \u0442\u043e\u0442\u00a0\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 PVC. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u2014 \u0432\u0441\u0451 \u043d\u0430\u00a0\u043c\u0435\u0441\u0442\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b0d\/cbf\/e52\/b0dcbfe523af346179eb804eaff98261.png\" alt=\"\u041f\u043e\u0434 \u0441 postgress \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f\" title=\"\u041f\u043e\u0434 \u0441 postgress \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f\" width=\"1138\" height=\"530\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b0d\/cbf\/e52\/b0dcbfe523af346179eb804eaff98261.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b0d\/cbf\/e52\/b0dcbfe523af346179eb804eaff98261.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0434\u00a0\u0441 postgress \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/423\/b49\/847\/423b49847be6ecb6fa03721374092afa.png\" alt=\"\u0412\u0441\u0435 \u0436\u0438\u0432\u043e\" title=\"\u0412\u0441\u0435 \u0436\u0438\u0432\u043e\" width=\"474\" height=\"391\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/423\/b49\/847\/423b49847be6ecb6fa03721374092afa.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/423\/b49\/847\/423b49847be6ecb6fa03721374092afa.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0436\u0438\u0432\u043e<\/figcaption><\/div>\n<\/figure>\n<h4>\u0422\u0435\u0441\u0442 4. \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c (\u0441\u0442\u0440\u0435\u0441\u0441\u2011\u0442\u0435\u0441\u0442)<\/h4>\n<p>\u0420\u0430\u043d\u0435\u0435 \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435 backend\u2011deployment.yaml \u044f \u0436\u0451\u0441\u0442\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"yaml\">resources:  requests:    memory: \"128Mi\"    cpu: \"100m\"  limits:    memory: \"512Mi\"    cpu: \"500m\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0431\u044c\u0451\u043c \u043a\u0430\u043d\u0430\u043b\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u043c 400\u00a0\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u0431\u044d\u043a\u0435\u043d\u0434:<\/p>\n<pre><code class=\"bash\">wrk -t12 -c400 -d60s https:\/\/hybrid-lab.duckdns.org\/api\/health<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/21e\/78a\/54d\/21e78a54ddfc8f79a72bc7e2241a21bc.png\" alt=\"Warning CPU Level\" title=\"Warning CPU Level\" width=\"1149\" height=\"532\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/21e\/78a\/54d\/21e78a54ddfc8f79a72bc7e2241a21bc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/21e\/78a\/54d\/21e78a54ddfc8f79a72bc7e2241a21bc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Warning CPU Level<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u00a0\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0438\u0437\u00a0k9s \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a\u00a0\u043f\u043e\u0434\u044b \u043f\u043e\u0434\u043d\u0430\u043f\u0440\u044f\u0433\u043b\u0438\u0441\u044c (Warning CPU Level) \u0438 \u0443\u043f\u0435\u0440\u043b\u0438\u0441\u044c \u0432\u00a0\u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439\u00a0\u043b\u0438\u043c\u0438\u0442 (500m). \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c Kubernetes: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0436\u0451\u0441\u0442\u043a\u0438\u043c\u00a0\u043b\u0438\u043c\u0438\u0442\u0430\u043c \u043f\u043e\u0434\u044b \u043d\u0435\u00a0\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0436\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u00a0\u043f\u0430\u0434\u0430\u0435\u0442, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u043e\u0441\u0442\u0430 \u043d\u0435\u00a0\u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442. \u0411\u044d\u043a\u0435\u043d\u0434 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0440\u043e\u0442\u0442\u043b\u0438\u0442\u044c (\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c), \u043d\u043e\u00a0\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u043f\u0440\u044f\u043c\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b. \u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u00a0\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<hr\/>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430\u0437\u0430\u0434, \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0437\u0430\u00a0\u044d\u0442\u0438 \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432\u00a0\u0431\u044b\u043b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0440\u0430\u0431\u043e\u0442\u044b. \u041e\u0442\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u0448\u0430\u0433\u043e\u0432 \u0432\u00a0Linux \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e Docker Compose\u00a0\u2014 \u0434\u043e\u00a0\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0435\u0441\u0441\u2011\u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>\u0412\u00a0\u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0443\u0442\u0438 \u044f \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u043b, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0435\u0445\u00a0\u0436\u0435 Taints &amp; Tolerations \u0438 \u0432\u0438\u0434\u0438\u0448\u044c, \u043a\u0430\u043a\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438\u0437\u044f\u0449\u043d\u043e \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u044b \u043f\u043e\u00a0\u043d\u043e\u0434\u0430\u043c, \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0432\u0441\u0435 \u0442\u0432\u043e\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u00a0\u2014 \u043d\u0430\u00a0\u043b\u0438\u0446\u0435 \u043d\u0435\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0443\u043b\u044b\u0431\u043a\u0430. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u043e. \u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u044f\u043b\u0441\u044f \u0441\u0442\u0440\u0430\u0445 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e\u00a0Kubernetes\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0434\u044a\u0435\u043c\u043d\u0430\u044f \u0433\u043b\u044b\u0431\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0432\u043e\u0438\u0442\u044c. \u041d\u0435\u00a0\u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f\u00a0\u0431\u044b\u043b\u0430 \u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u0447\u0435\u0442\u043a\u0430\u044f \u043c\u0435\u0447\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0438 \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u041c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u00a0\u043a\u0430\u0439\u0444 \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0433\u043b\u0443\u043f\u043e. \u041f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0437\u0430\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c, \u043d\u043e\u00a0\u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u043d\u0430\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u0435\u00a0\u2014 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 (\u0441\u043c\u043e\u0442\u0440\u044f \u0447\u0442\u043e\u00a0\u043f\u043e\u00a0\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430), \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0434\u0435\u043f\u043b\u043e\u0439 \u043d\u0430\u00a0ArgoCD \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e GitOps. \u042f \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0435\u043c\u044b, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430 \u0434\u043e\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0443\u043a\u0438 \u043d\u0435\u00a0\u0434\u043e\u0448\u043b\u0438. \u041d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442 \u0445\u0432\u0430\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u00a0\u0432\u0441\u0451 \u0441\u0440\u0430\u0437\u0443.<\/p>\n<p>\u0412\u0441\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0\u043c\u043e\u0451\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u00a0GitHub \u0438 GitLab. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0443\u2011\u0442\u043e \u044d\u0442\u043e\u0442 \u043e\u043f\u044b\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0438 \u043d\u0435\u0440\u0432\u044b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0434\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043b\u043e\u043d\u0433\u0440\u0438\u0434 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0435, \u0441\u043e\u0432\u0435\u0442\u0430\u043c \u043f\u043e\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043e\u0442\u00a0\u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u0438 \u043b\u044e\u0431\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1067354\/\">https:\/\/habr.com\/ru\/articles\/1067354\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435\u0417\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u043f\u0440\u043e\u0448\u0451\u043b \u043f\u0443\u0442\u044c \u043e\u0442\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0434\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e K3s\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u00a0Zero\u2011Downtime \u0434\u0435\u043f\u043b\u043e\u0435\u043c. \u0428\u0438\u0448\u0435\u043a \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u043d\u0430\u0431\u0438\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0438 \u043c\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u0435\u0441\u0442\u044c \u0447\u0435\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.\u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c: \u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u044b\u0445 \u0433\u0430\u0439\u0434\u043e\u0432, \u0441\u043b\u0435\u043f\u044b\u0445 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u0432 YAML\u2011\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0421\u00a0\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0432\u044b \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u0441\u044c, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.\u0414\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u00a0\u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u044b\u0442. \u0425\u043e\u0442\u044f, \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043c\u043d\u0435 \u0442\u043e\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b. \u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0442\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e Docker Compose \u043a\u00a0Kubernetes, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433\u0430 \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c: \u0430\u00a0\u0432\u0441\u0451\u00a0\u043b\u0438\u00a0\u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e?\u0423\u0432\u0435\u0440\u0435\u043d, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e DevOps\u2011\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c, \u043d\u043e\u00a0\u0438 backend\u2011 \u0438 frontend\u2011\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043b\u044e\u0431\u044b\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u00a0\u0438\u0445 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0430 \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0447\u0435\u043c\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430 \u0438 \u043a\u0430\u043a\u00a0\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u0441\u0431\u043e\u044f\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\u041d\u0430\u0447\u0430\u043b\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f (\u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043f\u043e\u043b\u0435\u0437 \u0432\u00a0DevOps)\u041a\u043e\u0433\u0434\u0430\u2011\u0442\u043e \u044f \u043d\u0435\u00a0\u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u043b, \u043a\u0442\u043e \u043e\u043d \u0442\u0430\u043a\u043e\u0439, \u0432\u0430\u0448 Kubernetes, \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d. \u0421\u043b\u044b\u0448\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u0444\u044b \u0432\u00a0\u0434\u0443\u0445\u0435: \u00ab\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0438\u0438\u00bb \u0438\u043b\u0438 \u00ab\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443\u00a0\u2014 \u0438 \u0437\u0430\u0431\u044b\u043b\u00bb. \u0412\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0441\u00a0\u0441\u043e\u0432\u0435\u0442\u0430 \u0434\u0440\u0443\u0433\u0430 @DirtyHornet, \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c Linux \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0DevOps.\u0414\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043c\u0435\u043d\u044f \u0443\u0436\u0435\u00a0\u0431\u044b\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0433\u0440\u0430\u0443\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 Windows \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u043d\u0430\u00a0Unity\u00a0\u2014 \u0431\u0430\u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0412\u00a0\u0442\u043e\u00a0\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0440\u0435\u0432\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u0437\u0430\u0449\u0438\u0442\u0435 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0449\u0451 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c: \u043a\u043e\u0434 \u044f \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0432\u0430\u0439\u0431\u043a\u043e\u0434\u0438\u043b \u0447\u0435\u0440\u0435\u0437 Claude. \u0421\u0430\u043c\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\u0422\u0430\u043a \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0430\u0437\u0443: Linux, Git, \u0441\u0435\u0442\u0438. \u0422\u043e\u043d\u043d\u044b \u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u043d\u0430\u00a0YouTube, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b \u043d\u0430\u00a0Stepik \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0436\u0438\u0432\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u042f\u00a0\u0431\u044b\u043b \u043f\u043e\u0440\u0430\u0436\u0451\u043d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Unix\u2011\u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a\u0430\u043a\u0438\u0435\u2011\u0442\u043e inode, \u0430\u00a0\u0434\u0438\u0441\u043a\u0438 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0430\u043c\u0438 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u0441\u0442\u044b\u043a\u0443\u044e\u0442\u0441\u044f \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044f \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u043e \u0432\u00a0Docker \u0438 Nginx. \u0418 \u0441\u043d\u043e\u0432\u0430\u00a0\u2014 \u043a\u0443\u0447\u0430 \u0432\u0438\u0434\u0435\u043e, \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0444\u043e\u0446\u044b\u0433\u0430\u043d, \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043f\u0430\u0440\u0438\u0442\u044c \u043a\u0443\u0440\u0441\u044b \u0438 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0442\u0430\u043a \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u00a0\u043b\u0430\u0434\u043e\u043d\u0438. \u041d\u0430\u00a0\u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u0443\u0433\u043b\u0438\u043b \u0438 \u0443\u0437\u043d\u0430\u0432\u0430\u043b \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u043e\u0442\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 SHA\u2011\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 cert\u2011manager \u0434\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.\u0414\u0435\u0434\u043b\u0430\u0439\u043d \u043f\u043e\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0432\u0441\u0451 \u0431\u043b\u0438\u0437\u0438\u043b\u0441\u044f. \u041a\u00a0\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u0430\u0440\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u043e\u0431\u043b\u0430\u043a\u043e (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0442 \u042f\u043d\u0434\u0435\u043a\u0441\u0430) \u0438 \u043f\u043e\u0448\u0451\u043b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u043e\u0434\u0435 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e Git \u0438 Docker \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043b Compose, Nginx, \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u043b\u0441\u044f \u043f\u043e\u00a0best practices\u00a0\u2014 \u0438 \u0441\u00a0\u044d\u0442\u0438\u043c \u0432\u044b\u0448\u0435\u043b \u043d\u0430\u00a0\u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u0435\u0440\u0445\u043e\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u043c\u044b\u0441\u043b\u0438, \u0441\u00a0\u0442\u0435\u043f\u043b\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u044d\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0436\u043a\u0438.\u041d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u043e \u043b\u0435\u0442\u043e, \u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0439\u0444\u043e\u0440\u0438\u044f \u043e\u0442\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e Docker Compose\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043b\u0435\u0442\u0443\u0447\u0438\u043b\u0430\u0441\u044c. \u042f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0445\u043e\u0447\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0438 \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0445 CI\/CD\u2011\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0447\u0443\u0436\u0438\u0445 \u0433\u0430\u0439\u0434\u0430\u0445 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u0441\u0442\u0430\u043b\u043e \u043c\u0430\u043b\u043e, \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u0437\u0440\u043e\u0441\u043b\u0430\u044f, \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044f \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043b\u0435\u0436\u043a\u0435 \u0441\u00a0Kubernetes.\u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f. \u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\u0412\u043e\u043a\u0440\u0443\u0433 k8s\/k3s, \u0434\u0430\u00a0\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0441\u0435\u0433\u043e IT\u2011\u043c\u0438\u0440\u0430, \u043c\u043d\u043e\u0433\u043e \u0445\u0430\u0439\u043f\u0430 \u0432\u00a0\u0441\u0442\u0438\u043b\u0435: \u00ab\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f\u00a0\u0441\u0432\u043e\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0431\u0438\u0439\u0446\u044b Amazon \u043d\u0430\u00a0\u0438\u0437\u0438\u00a0\u2014 \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u00a0\u043c\u043e\u0438\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u00a0\u0442\u0430\u043a.\u0412\u00a0\u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0440\u043e\u043b\u0438\u043a\u0438 YouTube\u2011\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u0414\u0435\u0432\u043e\u043f\u0441\u0438\u043c \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443\u00bb \u0438 \u0431\u0430\u0437\u0430 \u043f\u043e\u00a0\u043a\u0443\u0431\u0435\u0440\u0443 \u0441\u00a0\u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0410\u0440\u0442\u0443\u0440\u0430 \u041a\u0440\u044e\u043a\u043e\u0432\u0430. \u041e\u043d\u0438 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u044e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u043d\u0430\u0442\u0435, \u043f\u0438\u0448\u0438\u0442\u0435\u00bb \u0438\u043b\u0438 \u00ab\u0437\u0430\u0441\u0443\u043d\u0435\u043c \u044d\u0442\u0443 \u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043a\u0443 \u0432\u00a0\u044f\u0434\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00a0\u2014 \u0432\u0441\u0451, \u0432\u043e\u0442 \u0442\u0430\u043a \u043c\u044b \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e\u00bb, \u0430\u00a0\u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u043e\u043b\u0438\u043a\u0438 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u043e, \u043f\u043e\u0434, \u043a\u0440\u0443\u0442\u043e\u00bb\u00a0\u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f. \u0410\u0440\u0442\u0443\u0440 \u0434\u0430\u0451\u0442 \u0448\u0438\u043a\u0430\u0440\u043d\u0443\u044e \u0431\u0430\u0437\u0443, \u043d\u043e\u00a0\u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u00ab\u0437\u0430\u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c\u00bb\u00a0\u2014 \u0430\u00a0\u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u0442\u044b \u043d\u0430\u0447\u043d\u0435\u0448\u044c \u0447\u0442\u043e\u2011\u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e.\u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 Kubernetes, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u00a0\u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u0438\u0445 \u043b\u044e\u0434\u0435\u0439\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u0413\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u043a\u00a0\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0443\u043c\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u0434\u00a0\u0440\u0443\u043a\u043e\u0439: \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e\u00a0\u0445\u043e\u0434\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e.\u041f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0435\u0449\u0451 \u0442\u043e\u043d\u043d\u044b \u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u043f\u043e\u0442\u044b\u043a\u0430\u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b, \u044f \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435, \u043d\u0435\u00a0\u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434 \u0438 \u043f\u043e\u00a0\u0447\u0443\u0442\u044c\u2011\u0447\u0443\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u0441\u0435\u0431\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u0430\u0434\u043c\u0430\u043f:\u0427\u0442\u043e\u00a0\u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f?\u041d\u0430\u00a0\u0447\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440?\u041a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432?\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0435\u043d\u043e\u043c\u0435\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0435\u0451 \u043a\u0440\u0430\u0448\u2011\u0442\u0435\u0441\u0442\u044b.\u041f\u043e\u00a0\u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u043f\u043b\u0430\u043d, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043d\u0430\u0447\u0430\u0442\u044c.\u0421\u00a0\u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0435\u00a0\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0442\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u0438 \u0430\u0440\u0435\u043d\u0434\u043e\u0432\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0435\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u00a0\u043c\u043e\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u00a0Kubernetes, \u0432\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0439\u043c\u0451\u0442\u0435, \u0447\u0442\u043e\u00a0\u043a\u0443\u0431\u0435\u0440\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u0430\u00a0\u0446\u0435\u043b\u0430\u044f \u043a\u043b\u0430\u0434\u0435\u0437\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u00a0\u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u00a0\u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u00a0\u0425\u0430\u0431\u0440\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a\u00a0\u043c\u043e\u0435\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440 (k8s vanilla)\u00a0\u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439 \u0433\u0430\u0434, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u00a0\u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u041f\u041a \u0438\u043b\u0438\u00a0\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0435 \u0441\u00a0\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0438\u00a0\u2014 \u0437\u0430\u0442\u0435\u044f \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f. \u0414\u0430\u00a0\u0438 \u0437\u0430\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 k3s \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0439 \u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b?\u041f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443, \u044d\u0442\u043e\u0442 \u00ab\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0440\u0430\u0442\u00bb \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e: \u043e\u043d \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u00a0\u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e\u00a0\u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439\u00a0\u0436\u0435 API. \u041b\u044e\u0431\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u043e\u0431\u0435\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0431\u0435\u0437\u00a0\u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0418 \u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0432\u0440\u043e\u0434\u0435 kind (Kubernetes in Docker), \u0430\u00a0\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 production\u2011ready \u0440\u0435\u0448\u0435\u043d\u0438\u0435.\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Kubernetes (Rolling Update, Probes) \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0436\u0438\u0440\u0430. \u0418\u0437\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438\u0434\u0451\u0442 \u043b\u0451\u0433\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043a\u0430 Kine + SQLite, \u0430\u00a0\u0432\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0443\u0436\u0435 \u0432\u0448\u0438\u0442\u044b CoreDNS, Traefik \u0432\u00a0\u0440\u043e\u043b\u0438 ingress\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 Local Path Provisioner \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0434\u0438\u0441\u043a\u0430\u043c\u0438 (PVC). \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0435\u0439 \u0441\u0443\u0435\u0442\u044b.\u0412\u00a0\u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0435 \u043a\u0443\u0431\u0435\u0440 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 3\u00a0\u043c\u0430\u0441\u0442\u0435\u0440\u2011\u043d\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432). \u041d\u043e\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 CI\/CD, \u043c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u042f \u0432\u044b\u0431\u0440\u0430\u043b Single\u2011Node \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443: \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438 Control Plane, \u0438 Worker\u2011\u0443\u0437\u043b\u043e\u043c.\u0427\u0442\u043e\u00a0\u043d\u0430\u0441\u0447\u0451\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432?\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0434\u043b\u044f\u00a0\u043c\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439:RKE2\u00a0\u2014 2\u20133\u00a0\u0413\u0411 RAM \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u0434\u044b + \u0442\u044f\u0436\u0451\u043b\u0430\u044f \u0431\u0430\u0437\u0430 etcd.Minikube\u00a0\u2014 \u0448\u0438\u043a\u0430\u0440\u043d\u043e \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f\u00a0\u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.MicroK8s\u00a0\u2014 \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0434\u043e\u00a0\u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u0443\u0437\u043d\u0430\u043b \u043e\u00a0\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u043f\u043b\u0435\u0439 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0410\u0440\u0442\u0443\u0440\u0430 \u041a\u0440\u044e\u043a\u043e\u0432\u0430, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0431\u0430\u0437\u044b k3s \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e: \u043e\u043d \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u00a0\u0431\u043e\u043b\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u0440\u0430\u0437\u0443 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0434\u0435\u043f\u043b\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u00a0\u0436\u0435\u043b\u0435\u0437\u043e. \u041f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u044f \u043d\u0430\u0448\u0451\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0430 \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430. \u0418\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 Cloud.ru (\u0431\u044b\u0432\u0448\u0438\u0439 SberCloud), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0451\u0442 4000\u00a0\u0431\u043e\u043d\u0443\u0441\u043d\u044b\u0445 \u0440\u0443\u0431\u043b\u0435\u0439 \u043d\u0430\u00a0\u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430\u00a0\u2014 \u043f\u0440\u0438\u00a0\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u00a0\u0432\u044b \u043d\u0435\u00a0\u0437\u043b\u043e\u0439 \u0434\u044f\u0434\u044f\u2011\u043c\u0430\u0439\u043d\u0435\u0440.\u042f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043d\u0430\u00a0\u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 CPU \u0438\u043b\u0438\u00a0RAM \u0438 \u0441\u0436\u0435\u0447\u044c \u0433\u0440\u0430\u043d\u0442 \u0437\u0430\u00a0\u043d\u0435\u0434\u0435\u043b\u044e, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u00a0\u2014 \u044d\u0442\u043e, \u043a\u0430\u043a\u00a0\u043f\u043e\u00a0\u043c\u043d\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u043f\u043b\u044e\u0441, \u0447\u0435\u043c \u043c\u0438\u043d\u0443\u0441.\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c (4\u00a0\u0413\u0411): Kubernetes \u0432\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043b\u044e\u0431\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c. \u0421\u0430\u043c\u043e\u043c\u0443 k3s \u0445\u0432\u0430\u0442\u0438\u0442 \u0438 512\u00a0\u041c\u0411, \u043d\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f\u00a0\u043c\u0430\u043d\u0451\u0432\u0440\u0430: PostgreSQL \u0441\u00a0\u0442\u043e\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, FastAPI\u2011\u0431\u044d\u043a\u0435\u043d\u0434, React\u2011\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0442\u044f\u0436\u0451\u043b\u043e\u0435\u00a0\u2014 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u044b GitLab\u2011\u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u043e\u0433 \u0434\u043b\u044f\u00a0\u0442\u0430\u043a\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438\u00a0\u2014 \u043e\u0442 4\u00a0\u0413\u0411.CPU (2\u00a0vCPU): \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0445\u0432\u0430\u0442\u0438\u0442 2\u00a0\u044f\u0434\u0435\u0440. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u00a0\u043f\u0435\u0442\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0447\u043a\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439: \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432\u00a0CI\/CD\u2011\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435 \u0438\u043b\u0438\u00a0\u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 k3s \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443 \u0443\u0431\u0438\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0443 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043a\u0440\u0430\u0448\u2011\u0442\u0435\u0441\u0442\u043e\u0432.\u0414\u0438\u0441\u043a (30\u00a0\u0413\u0411 SSD): \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u043a\u043b\u0438\u043a (IOPS) \u0434\u043b\u044f\u00a0Persistent Volumes, \u0430\u00a0\u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043b\u044f\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 HDD \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u00a0SSD.\u041f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u044f \u043f\u043e\u0434\u0448\u043b\u0438\u0444\u043e\u0432\u0430\u043b \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e requests (\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b) \u0438 limits (\u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f) \u0432\u00a0\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445 \u043f\u043e\u0434\u043e\u0432\u00a0\u2014 \u0442\u0430\u043a \u043c\u044b \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u00a0OOM Killer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0451\u0442 \u0437\u0430\u00a0GitLab\u2011\u0440\u0430\u043d\u043d\u0435\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u043d\u0451\u0442 \u0437\u0430\u0434\u044b\u0445\u0430\u0442\u044c\u0441\u044f.\u0427\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044f. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u043a\u0430\u0441\u0430 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (StatefulSet + PVC + Secrets)\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u0448\u0438\u043a\u0430\u0440\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f K3s\u00a0\u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, SSH\u2011\u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f\u00a0Git \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044b, \u0430\u00a0GitLab Runner \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0451\u043b\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u0432 docker\u2011\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435), \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u00a0\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.\u041c\u043e\u0439 \u043f\u043b\u0430\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:\u041f\u043e\u0437\u0436\u0435, \u043e\u043d\u00a0\u0431\u044b\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d:PostgreSQL \u0432\u00a0StatefulSet.Deployment \u0434\u043b\u044f\u00a0\u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0435\u0433\u043e \u0441\u0432\u044f\u0437\u044c \u0441\u00a0\u0411\u0414 + \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434.Zero\u2011Downtime, Ingress \u0438 Probes.\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0441\u00a0TLS\u2011\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c \u0432\u00a0\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435.GitLab Runner \u0432\u00a0\u043f\u043e\u0434\u0430\u0445.\u0412\u043e\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0435\u0439 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e\u00a0\u0432\u00a0\u044d\u0442\u043e\u043c Kubernetes \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u0431\u0435\u0440\u0451\u0448\u044c YAML \u043e\u0442\u00a0docker\u2011compose, \u0447\u0443\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u0448\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0448\u044c \u0432\u00a0\u043a\u0443\u0431\u0435. \u041d\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u0448\u0438\u043b \u0441\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0439 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 (\u0440\u043e\u0432\u043d\u043e \u0434\u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0433\u043e \u043f\u0438\u043d\u043a\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430).\u041d\u043e\u00a0\u0441\u043d\u0430\u0447\u0430\u043b\u0430\u00a0\u2014 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435\u00a0\u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-489968","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=489968"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489968\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}