{"id":402873,"date":"2024-06-29T16:46:25","date_gmt":"2024-06-29T16:46:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=402873"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=402873","title":{"rendered":"<span>\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Kubernetes \u0441 \u043d\u0443\u043b\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/573\/291\/3c4\/5732913c4f4d821201569a7a3956b3a2.png\" width=\"1222\" height=\"684\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/573\/291\/3c4\/5732913c4f4d821201569a7a3956b3a2.png\"\/><\/figure>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043d\u0430 \u0432\u0438\u0434, \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab<a href=\"https:\/\/habr.com\/ru\/post\/444446\/\" rel=\"noopener noreferrer nofollow\"><u>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u044f<\/u><\/a>\u00bb \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c, \u0438 \u0441\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439. \u0412 \u043d\u0435\u0451 \u0432\u043e\u0448\u0451\u043b \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434, \u0432\u043e\u0440\u043a\u0435\u0440 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0430\u0436 \u0434\u0432\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 MongoDB \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0438 Redis \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0434\u0430\u0447. \u0412 \u00ab<a href=\"https:\/\/habr.com\/ru\/companies\/joom\/articles\/526550\/\" rel=\"noopener noreferrer nofollow\"><u>\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0432 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u043d\u0443\u043b\u044f<\/u><\/a>\u00bb \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0442\u0440\u0435\u0442\u044c\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u00a0\u2014 Elasticsearch.<\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Docker Compose. \u041d\u043e \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438? \u041a\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? \u041a\u0430\u043a \u0440\u0430\u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f?<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/\" rel=\"noopener noreferrer nofollow\"><u>minikube<\/u><\/a>. \u041c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 Kubernetes, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 Kubernetes \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u043c \u0432 \u0441\u0443\u0440\u043e\u0432\u043e\u043c \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e Kubernetes, \u043d\u043e \u0435\u0449\u0451 \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b Docker \u0438 Kubernetes<\/h2>\n<p>Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0432\u0435\u0431\u0435, \u0440\u0435\u0448\u0430\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447.\u00a0<\/p>\n<ol>\n<li>\n<p><strong>\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f<\/strong>: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044f \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0421\u0435\u0440\u0432\u0438\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u0440\u0442? \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0430\u0442\u0447\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b? \u0414\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a? \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/strong>: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c Docker daemon \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435? \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f? \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c<\/strong>: Docker \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0435\u0434\u0438\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>docker build<\/code> \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043f\u0443\u0448\u0438\u043c \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043f\u0443\u043b\u043b\u0438\u043c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u2014 \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0438 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437, \u0431\u0443\u0434\u044c \u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0440\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442, \u0438\u043b\u0438 \u0434\u0436\u043e\u0431\u0430, \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0438 \u0443\u043c\u0438\u0440\u0430\u044e\u0449\u0430\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 <em>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445<\/em> Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 \u043f\u043e\u043b\u0435 \u043d\u0435 \u0432\u043e\u0438\u043d, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0442\u043e\u044f\u0449\u0435\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Docker Compose; \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u0441\u043b\u0430\u0431\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0446\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c <code>docker compose up -d<\/code> \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041d\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e, \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0435\u0437\u043a\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><strong>Kubernetes<\/strong> \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u043c\u0430\u0448\u0438\u043d \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0444\u0438\u0447\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u2014 \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. Kubernetes \u0432\u0432\u043e\u0434\u0438\u0442 \u0440\u044f\u0434 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a \u043f\u043e\u0434 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441, \u0438 \u0434\u0430\u0451\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f18\/fc7\/ed7\/f18fc7ed7365747e7f923334f662ba14.png\" width=\"293\" height=\"288\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f18\/fc7\/ed7\/f18fc7ed7365747e7f923334f662ba14.png\"\/><\/figure>\n<p>\u041f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0441 \u043d\u0443\u043b\u044f \u2014 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u0434\u0435\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438\/DevOps. \u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e managed \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432 DigitalOcean \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u0430\u043c, \u0430 \u0441\u0430\u043c\u0438 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e\u0439 \u0434\u043b\u044f <s>\u0436\u0441\u043e\u043d\u043e\u0443\u043a\u043b\u0430\u0434\u0447\u0438\u043a\u0430<\/s> \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 minikube, \u043d\u043e \u0432\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043b\u044e\u0431\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0431\u043b\u0430\u0433\u043e, \u0442\u0430\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/\" rel=\"noopener noreferrer nofollow\"><u>kubectl<\/u><\/a> \u2014 command line interface \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c Kubernetes. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0431\u0443\u0434\u0435\u0442 <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\" rel=\"noopener noreferrer nofollow\"><u>minikube<\/u><\/a> \u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Kubernetes. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043d\u0430 Mac, \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c <\/p>\n<pre><code>brew install kubectl brew install minikube minikube start<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0447\u0435\u043a\u0430\u0443\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 GitHub \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0442\u043a\u0443:<\/p>\n<pre><code>git clone git@github.com:Saluev\/habr-app-demo.git cd habr-app-demo git checkout feature\/k8s<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u043a\u043e\u0434 \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043c\u043e-\u0430\u043f\u043f\u043a\u0438, \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/444446\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0446\u0438\u043a\u043b\u0430<\/a>, \u0438 \u0434\u043e\u043a\u0435\u0440\u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0438. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u043e\u0431\u043e \u0432\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a\u0430\u043a-\u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0451\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e; \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/github.com\/Saluev\/habr-app-demo\" rel=\"noopener noreferrer nofollow\"><u>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/u><\/a> \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0443.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u0441\u0435 YAML-\u0444\u0430\u0439\u043b\u044b, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <code>k8s\/log.sh<\/code>\u00a0\u2014 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<h2>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e<\/h2>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 <em>\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/em> \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u00f3\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b kubectl \u2014 \u044d\u0442\u043e CRUD-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 (Create, Read, Update, Delete).<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0440\u0430\u0441\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e <em>\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c \u0438\u043c\u0451\u043d<\/em> (namespace). \u0412 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u044f\u0445 \u041e\u041e\u041f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d \u2014 \u0442\u043e\u0436\u0435 \u0440\u0435\u0441\u0443\u0440\u0441. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0441 \u0442\u0438\u043f\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl get<\/code>:<\/p>\n<pre><code>$ kubectl get namespaces NAME              STATUS   AGE default           Active   1d kube-node-lease   Active   1d kube-public       Active   1d kube-system       Active   1d<\/code><\/pre>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b YAML\/JSON. \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl get<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c YAML \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 (\u0445\u043e\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u043e\u0432 \u043e\u043d \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439)\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f default:<\/p>\n<pre><code class=\"yaml\">$ kubectl get namespace -o yaml default  apiVersion: v1 kind: Namespace metadata:   creationTimestamp: \"2022-07-25T18:00:57Z\"   labels:     kubernetes.io\/metadata.name: default   name: default   resourceVersion: \"200\"   uid: 492e34b7-82e0-472b-9fb9-3ed7005a83eb spec:   finalizers:   - kubernetes status:   phase: Active<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>kind<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b. \u0424\u043b\u0430\u0433 <code>-o yaml<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430; \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d <code>-o json<\/code>:<\/p>\n<pre><code>$ kubectl get namespace -o json default | jq .status.phase \"Active\"<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl describe<\/code>:<\/p>\n<pre><code>$ kubectl describe namespace default  Name:         default Labels:       kubernetes.io\/metadata.name=default Annotations:  &lt;none> Status:       Active  No resource quota.  No LimitRange resource.<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0443\u0445\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 <code>kubectl get<\/code>, \u0437\u0434\u0435\u0441\u044c, \u043f\u043e\u043c\u0438\u043c\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u0441\u0430\u043c\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043e \u043d\u0438\u0445 \u043d\u0438\u0436\u0435) \u0438\u043b\u0438, \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, <code>LimitRange<\/code> (\u0447\u0442\u043e \u0431\u044b \u044d\u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e).\u00a0<\/p>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e CRUD-\u2060\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432; \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>kubectl api-resources<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445:<\/p>\n<pre><code>$ kubectl api-resources NAME              SHORTNAMES   APIVERSION   NAMESPACED   KIND bindings                       v1           true         Binding configmaps        cm           v1           true         ConfigMap endpoints         ep           v1           true         Endpoints events            ev           v1           true         Event namespaces        ns           v1           false        Namespace ...<\/code><\/pre>\n<p>\u0418\u0437 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u2014 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 <code>SHORTNAMES<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>kubectl\u00a0get\u00a0namespaces<\/code> \u0438 <code>kubectl\u00a0get\u00a0ns<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434<\/h2>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443\u0435\u0434\u0435\u0448\u044c. \u042f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0430\u043c Kubernetes \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u2014 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440!<\/p>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 Kubernetes \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <em>\u043f\u043e\u0434<\/em> (<a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/\" rel=\"noopener noreferrer nofollow\"><u>Pod<\/u><\/a>). \u041f\u043e\u0434 \u2014 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (<em>\u043d\u043e\u0434\u0435<\/em>), \u043a\u043e\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441; \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439\u00a0\u2014 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0438 \u0432\u0442\u043e\u0440\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043b\u043e\u0433\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 Filebeat.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0431\u044b \u043f\u0435\u0440\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434 \u0441\u043e <a href=\"https:\/\/docs.python.org\/3\/library\/http.server.html\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0432 python HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>kubectl apply<\/code>:<\/p>\n<pre><code class=\"bash\">kubectl apply -f - &lt;&lt;EOF apiVersion: v1 kind: Pod metadata:   name: test-pod spec:   containers:     - name: python-container       image: python:bullseye       command: [\"python3\", \"-m\", \"http.server\", \"8080\"] EOF<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u044d\u0442\u043e\u043c\u0443 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u043c\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c YAML \u0432 \u0444\u0430\u0439\u043b \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>kubectl apply -f path\/to\/filename.yaml<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 <code>pod\/test-pod created<\/code> \u0438 \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u043e\u0432:<\/p>\n<pre><code>$ kubectl get pods   NAME       READY   STATUS              RESTARTS   AGE test-pod   0\/1     ContainerCreating   0          69s<\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 minikube \u0441\u043a\u0430\u0447\u0430\u0435\u0442 Docker-\u043e\u0431\u0440\u0430\u0437 <code>python:bullseye<\/code>, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u0442 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 <code>Running<\/code>:<\/p>\n<pre><code>$ kubectl get pods  NAME       READY   STATUS    RESTARTS   AGE test-pod   1\/1     Running   0          4m20s<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Kubernetes \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f. \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 <code>kubectl describe<\/code>:<\/p>\n<pre><code>$ kubectl describe pod test-pod ... Events:   Type    Reason     Age     From               Message   ----    ------     ----    ----               -------   Normal  Scheduled  2m27s  default-scheduler  Successfully assigned default\/test-pod to minikube   Normal  Pulling    2m26s  kubelet            Pulling image \"python:bullseye\"   Normal  Pulled     6s     kubelet            Successfully pulled image \"python:bullseye\" in 2m20.024146s (2m20.024218s including waiting)   Normal  Created    5s     kubelet            Created container python-container   Normal  Started    5s     kubelet            Started container python-container<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 <em>\u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/em> Kubernetes, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438 Kubernetes \u0432\u044b\u0431\u0440\u0430\u043b, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u043d\u043e\u0434\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434. <code>minikube<\/code> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043d\u043e\u0434\u044b; \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u0430\u0448\u0438\u043d. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c Kubernetes \u043d\u0430\u0447\u0430\u043b \u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u044d\u0442\u0443 \u043d\u043e\u0434\u0443 \u043d\u0443\u0436\u043d\u044b\u0439 Docker-\u043e\u0431\u0440\u0430\u0437. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u043b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0448\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0435\u0433\u043e.<\/p>\n<p>\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <code>docker exec<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0447\u0435\u0440\u0435\u0437 <code>kubectl exec<\/code>, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<pre><code>$ kubectl exec test-pod -- whoami root $ kubectl exec -it test-pod -- \/bin\/bash root@test-pod:\/# ls bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var root@test-pod:\/# <\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u043e\u0434\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043a \u043d\u0435\u043c\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl port-forward<\/code>:<\/p>\n<pre><code>$ kubectl port-forward pod\/test-pod 7080:8080 Forwarding from 127.0.0.1:7080 -> 8080 Forwarding from [::1]:7080 -> 8080 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c <a href=\"http:\/\/localhost:7080\/\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/localhost:7080\/<\/u><\/a> \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 <code>http.server<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c86\/c24\/b10\/c86c24b1077a870bca9125239e004a2a.png\" width=\"1268\" height=\"1036\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c86\/c24\/b10\/c86c24b1077a870bca9125239e004a2a.png\"\/><\/figure>\n<p>\u042d\u0442\u043e \u2014 \u0444\u0430\u0439\u043b\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441 python.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl logs<\/code>:<\/p>\n<pre><code>$ kubectl logs test-pod 127.0.0.1 - - [03\/Jul\/2023 14:24:19] \"GET \/ HTTP\/1.1\" 200 - 127.0.0.1 - - [03\/Jul\/2023 14:24:19] code 404, message File not found 127.0.0.1 - - [03\/Jul\/2023 14:24:19] \"GET \/favicon.ico HTTP\/1.1\" 404 -<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0435\u043d \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 favicon, \u0432\u0435\u0440\u043d\u0443\u0432\u0448\u0438\u0439 404. \u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0447\u0442\u043e-\u0442\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435\u00a0\u2014 \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430.<\/p>\n<h2>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c Docker-\u043e\u0431\u0440\u0430\u0437\u044b<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u043e\u043a\u0443\u0441 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0437\u044b \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u2014 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/444446\/\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0447\u0435\u043a\u0430\u0443\u0442\u0438\u043b\u0438 <a href=\"https:\/\/github.com\/Saluev\/habr-app-demo\" rel=\"noopener noreferrer nofollow\"><u>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/u><\/a> \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0435\u0442\u043a\u0443 <code>feature\/k8s<\/code>, \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043e, \u0438 \u043e\u0431\u0440\u0430\u0437\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>docker build<\/code>:<\/p>\n<pre><code>docker build --target backend -t habr-app-demo\/backend:latest backend docker build --target worker -t habr-app-demo\/worker:latest backend docker build -t habr-app-demo\/frontend:latest frontend<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes, \u0433\u0434\u0435-\u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0438\u043c \u0443 \u043d\u0430\u0441 \u0431\u044b \u0431\u044b\u043b\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Docker-\u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0445 \u0437\u0430\u043f\u0443\u0448\u0438\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u0432\u0435\u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>habr-app-demo-registry<\/code> \u0432 DigitalOcean, \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u0442\u0430\u043a:<\/p>\n<pre><code>docker tag \\     habr-app-demo\/backend:latest \\     registry.digitalocean.com\/habr-app-demo-registry\/backend  docker push \\     registry.digitalocean.com\/habr-app-demo-registry\/backend  # \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c #     registry.digitalocean.com\/habr-app-demo-registry\/backend:latest # \u043a\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0430. # \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432.<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 minikube, \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0430\u043c \u0432\u0441\u0451 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. minikube \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 Docker daemon, \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b \u043d\u0430\u0434\u043e \u0432 \u043d\u0451\u043c,\u00a0 \u0447\u0442\u043e\u0431\u044b Kubernetes-\u0434\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>minikube docker-env<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>eval $(minikube docker-env) docker build --target backend -t habr-app-demo\/backend:latest backend docker build --target worker -t habr-app-demo\/worker:latest backend docker build -t habr-app-demo\/frontend:latest frontend<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0437\u044b \u0441\u043e\u0431\u0440\u0430\u043b \u0441\u0440\u0430\u0437\u0443 \u043d\u0443\u0436\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 Docker daemon. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0432 \u043d\u0435\u0433\u043e \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0430\u0448\u0438 \u043e\u0431\u0440\u0430\u0437\u044b \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>docker\u00a0images<\/code> \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c env:<\/p>\n<pre><code>$ (eval $(minikube docker-env) &amp;&amp; docker images) REPOSITORY              TAG     IMAGE ID      CREATED        SIZE habr-app-demo\/backend   latest  e6fe8b126165  4 minutes ago  126MB habr-app-demo\/frontend  latest  eb41101843f2  3 minutes ago  126MB habr-app-demo\/worker    latest  629e4c4dc21e  2 minutes ago  126MB ...<\/code><\/pre>\n<h2>\u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442<\/h2>\n<p>\u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u043e\u0432 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0432\u0435\u0436\u0435\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 Docker-\u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kubernetes. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u044b \u043a\u0430\u043a \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435, \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438: \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes \u043c\u043e\u0436\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0423\u0448\u043b\u0430 \u0432 \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043d\u043e\u0434\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442 \u043f\u043e\u0434 \u2014 \u0432\u0441\u0451, \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0445\u043e\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e-\u0442\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u0434\u043e\u043c \u043c\u044b \u0432\u0440\u044f\u0434 \u043b\u0438 \u043e\u0431\u043e\u0439\u0434\u0451\u043c\u0441\u044f, \u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432 \u0440\u0443\u043a\u0430\u043c\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e, \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u043e\u0434\u043e\u0432 Kubernetes \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/replicaset\/\" rel=\"noopener noreferrer nofollow\"><u>ReplicaSet<\/u><\/a>. \u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430)\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 \u0438 \u0431)\u00a0\u0448\u0430\u0431\u043b\u043e\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u043b\u0435\u043f\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u043e\u0434\u044b. \u0422\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u0432\u0430 \u043f\u043e\u0434\u0430 \u0441 \u043d\u0430\u0448\u0438\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c:<\/p>\n<pre><code class=\"yaml\">apiVersion: apps\/v1 kind: ReplicaSet metadata:   name: backend-replicaset spec:   replicas: 2  # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u043c\u0438    # template \u2014 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0432. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443   # \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u0430 (\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435), \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c\u0438:   # \u2022 apiVersion \u0438 kind \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u2014 \u0438 \u0442\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e   #   \u044d\u0442\u043e \u043f\u043e\u0434 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 API, \u0447\u0442\u043e \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442;   # \u2022 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c name \u2014 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f   #   \u0434\u0432\u0438\u0436\u043a\u043e\u043c Kubernetes \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430.   template:     metadata:        # labels \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 key-value \u043f\u0430\u0440\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435        # \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u0435. \u0412\u044b\u0431\u043e\u0440 \u043a\u043b\u044e\u0447\u0430 app \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f        # backend-app \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u0435\u043d. \u041d\u043e \u044d\u0442\u043e\u0442 \u043b\u0435\u0439\u0431\u043b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u043d\u0438\u0436\u0435!       labels:         app: backend-app      spec:       containers:         - name: backend-container            # \u0421\u043f\u043e\u0441\u043e\u0431 \u0443\u043a\u0430\u0437\u0430\u0442\u044c minikube \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435           # \u043d\u0430\u043c\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0437\u044b. \u0411\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 imagePullPolicy           # Kubernetes \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0442\u044f\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430            # (\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0441\u0444\u0435\u0439\u043b\u0438\u0442\u0441\u044f).           image: docker.io\/habr-app-demo\/backend:latest           imagePullPolicy: Never            ports:             - containerPort: 40001    # selector \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043b\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u044b   # \u0438\u0437 \u0447\u0438\u0441\u043b\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043d\u0435\u043c\u0443. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443   # \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0432\u044b\u0448\u0435 \u043b\u0435\u0439\u0431\u043b app: backend-app, \u043c\u044b \u0442\u043e\u0447\u043d\u043e   # \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u0441 \u0442\u0430\u043a\u0438\u043c \u043b\u0435\u0439\u0431\u043b\u043e\u043c \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u044b \u044d\u0442\u0438\u043c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u043e\u043c.   # \u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c,   # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u0443\u0436\u0435 \u043d\u0430\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u043e\u0434\u043e\u0432 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b    # \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u043f\u043b\u0438\u043a, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0432 \u043f\u043e\u043b\u0435 replicas.   selector:     matchLabels:       app: backend-app<\/code><\/pre>\n<p>\u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 \u2014 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043f\u043e\u0434\u044b \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0434\u044b \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u043e\u0434\u043e\u0432 \u0440\u0443\u043a\u0430\u043c\u0438) \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u043f\u043e YAML \u0432\u044b\u0448\u0435 \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0434\u0432\u0430 \u043f\u043e\u0434\u0430. \u041d\u043e \u0443 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430 \u0435\u0441\u0442\u044c \u043c\u0438\u043d\u0443\u0441 \u2014 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0434\u044b: \u043d\u0430\u043c \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u043e\u043d\u0430 \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e, \u043f\u043e\u0434 \u0437\u0430 \u043f\u043e\u0434\u043e\u043c; \u0441 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430\u043c\u0438 \u0436\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0438 \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u043e\u043c \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0439 (\u0447\u0442\u043e \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u043e), \u043b\u0438\u0431\u043e \u0434\u043e\u043b\u0433\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u0445\u043e\u0434\u043e\u0432\u043e\u0447\u043a\u043e\u0439 \u043c\u0435\u043d\u044f\u0442\u044c <code>replicas<\/code> \u0432 \u043e\u0431\u043e\u0438\u0445 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430\u0445, \u0441\u0434\u0443\u0432\u0430\u044f \u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u043d\u0430\u0434\u0443\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0439. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0443\u043c\u0435\u044e\u0449\u0438\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u0438\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 Kubernetes \u0435\u0441\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/deployment\/\" rel=\"noopener noreferrer nofollow\"><u>Deployment<\/u><\/a>, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430, \u043f\u043b\u044e\u0441 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u0432\u044b\u043a\u0430\u0442\u043a\u0438\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u043e\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435, \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0430\u00bb).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03f\/1d7\/791\/03f1d77918dd84aab3e2c4216df18452.png\" width=\"1500\" height=\"1000\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03f\/1d7\/791\/03f1d77918dd84aab3e2c4216df18452.png\"\/><\/figure>\n<p>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430 \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432 \u0438 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c. \u042d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 Kubernetes \u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0414\u0430\u043b\u0435\u0435, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430 \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u043e\u0431\u043e\u0438\u0445 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0432.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430 \u0441 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430:<\/p>\n<pre><code class=\"yaml\"># k8s\/backend-deployment.yaml apiVersion: apps\/v1 kind: Deployment metadata:   name: backend-deployment spec:   replicas: 2   template:     metadata:       labels:         app: backend-app     spec:       containers:         - name: backend-container           image: docker.io\/habr-app-demo\/backend:latest           imagePullPolicy: Never           ports:             - containerPort: 40001   selector:     matchLabels:       app: backend-app  # \u0411\u0435\u0437 \u043f\u043e\u043b\u043e\u0442\u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u044d\u0442\u043e\u0442 YAML # \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0436\u0430\u0441\u0430\u044e\u0449\u0438\u0439, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438 # (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0438\u0445 \u0447\u0438\u0442\u0430\u0435\u0442\u0435)<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl apply<\/code> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl get all<\/code>:<\/p>\n<pre><code>$ kubectl apply -f k8s\/backend-deployment.yaml deployment.apps\/backend-deployment created  $ kubectl get all NAME                                    READY STATUS           RESTARTS    AGE pod\/backend-deployment-77cc555f4b-2wv24 0\/1   CrashLoopBackOff 2 (19s ago) 45s pod\/backend-deployment-77cc555f4b-kd4k9 0\/1   CrashLoopBackOff 2 (18s ago) 44s pod\/test-pod                            1\/1   Running          0           1h  NAME                               READY UP-TO-DATE AVAILABLE AGE deployment.apps\/backend-deployment 0\/2   2          0         50s  NAME                                          DESIRED CURRENT READY AGE replicaset.apps\/backend-deployment-77cc555f4b 2       2       0     47s<\/code><\/pre>\n<p>\u0421\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442, \u043e\u043d \u043f\u043e\u0440\u043e\u0434\u0438\u043b \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430, \u0430 \u0443\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043b\u0438\u0441\u044c \u0434\u0432\u0430 \u043f\u043e\u0434\u0430 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0441\u0435\u0442\u0430. \u041d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043e\u0434\u0430\u043c\u0438 \u044f\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043a! \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>CrashLoopBackOff<\/code>?\u00a0<\/p>\n<p>\u041e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Kubernetes, \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u043a\u043b\u044f\u0442\u043e\u0435 \u0441\u043b\u043e\u0432\u043e (\u0444\u0440\u0430\u0437\u0443?) \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e Kubernetes \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u043e\u0434\u044b, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043d\u0438\u0445 \u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 crash loop. \u0415\u0441\u043b\u0438 \u0431\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0443\u043f\u0430\u043b \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0443 \u043d\u0435\u0433\u043e \u0431\u044b\u043b \u0431\u044b \u0441\u0442\u0430\u0442\u0443\u0441 <code>Error<\/code>, \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u043c\u00a0\u2014 \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442\u0435 <code>kubectl get all<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 Kubernetes \u0435\u0449\u0451 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u043e\u0433\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u0438\u0437 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430 \u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430:<\/p>\n<pre><code>$ kubectl logs deployment\/backend-deployment Found 2 pods, using pod\/backend-deployment-77cc555f4b-2wv24 ... pymongo.errors.ServerSelectionTimeoutError: mongo:27017: [Errno -2] Name does not resolve, Timeout: 1.0s, Topology Description: &lt;TopologyDescription id: 64a319b1d732cacfbcdd43f1, topology_type: Unknown, servers: [&lt;ServerDescription ('mongo', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongo:27017: [Errno -2] Name does not resolve')>]> ...<\/code><\/pre>\n<p>\u0410\u0445 \u0434\u0430. \u041c\u044b \u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0438 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445!<\/p>\n<h2>\u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<blockquote>\n<p><strong>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/strong>. \u0413\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435\u00a0\u2014 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0438 \u043d\u0435\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes\u00a0\u2014 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u043e\u0438 SaaS-\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0411\u0414 \u0438 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c\u0438, \u0447\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0430\u043c\u043e\u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0432\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e Kubernetes, \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u043d\u0438\u043c\u0438. \u0412\u044b\u0431\u043e\u0440 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u0411\u0414 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u043c\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439.<\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435, \u043f\u043e\u0434\u044b\u00a0\u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e \u043f\u0440\u0438\u0445\u043e\u0442\u0438 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434 Kubernetes \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043d\u043e\u0434 (\u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/scheduling-eviction\/assign-pod-node\/\" rel=\"noopener noreferrer nofollow\"><u>\u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u044b<\/u><\/a> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043f\u043e\u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0439 ID, \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0438\u0437\u0432\u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e, \u043a\u0430\u043a \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u0430, \u043a\u0442\u043e \u043e\u043d: \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, secondary \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f stateful-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 Kubernetes \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u2014 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/statefulset\/\" rel=\"noopener noreferrer nofollow\"><u>StatefulSet<\/u><\/a>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u0434\u043e\u0432 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 (\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430) \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u043c \u0442\u043e\u043c\u0430\u043c.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a34\/52b\/c97\/a3452bc975d1a85bbf356523b947b3b9.png\" width=\"397\" height=\"252\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a34\/52b\/c97\/a3452bc975d1a85bbf356523b947b3b9.png\"\/><\/figure>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 StatefulSet, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043e\u0434\u043d\u0443 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 MongoDB:<\/p>\n<pre><code class=\"yaml\"># k8s\/mongodb-statefulset.yaml apiVersion: apps\/v1 kind: StatefulSet metadata:   name: mongodb-statefulset spec:   serviceName: mongodb-service   replicas: 1  # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0435   template:     metadata:       labels:         # label \u043d\u0443\u0436\u0435\u043d \u0438\u0437 \u0442\u0435\u0445 \u0436\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u0438 \u0432 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0435.         app: mongodb-app     spec:       containers:         - name: mongodb-container           image: mongo:6.0.6            # \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0440\u0443\u0436\u0443 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043c\u043e\u043d\u0433\u0438.           ports:             - containerPort: 27017               name: mongodb-cli    # selector \u043d\u0443\u0436\u0435\u043d \u0438\u0437 \u0442\u0435\u0445 \u0436\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u0438 \u0432 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0435.   selector:     matchLabels:       app: mongodb-app <\/code><\/pre>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. Set-\u0442\u043e \u0443 \u043d\u0430\u0441 stateful, \u043d\u043e \u0433\u0434\u0435 \u044d\u0442\u043e\u0442 state? \u0425\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0447\u0442\u043e\u0431\u044b \u0444\u0430\u0439\u043b\u044b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u0432 \u043d\u0451\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0432.<\/p>\n<p>\u041f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0435 \u0442\u043e\u043c\u0430 \u0432 Kubernetes \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#persistent-volumes\" rel=\"noopener noreferrer nofollow\"><u>PersistentVolume<\/u><\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0442\u0438\u043f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u043a\u0430\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b), \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043d\u043e\u0434\u0435 \u0438\u043b\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445) \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0422\u043e\u043c\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043f\u043e\u0434\u0430\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#persistentvolumeclaims\" rel=\"noopener noreferrer nofollow\"><u>PersistentVolumeClaim<\/u><\/a> (PVC), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0442\u043e\u043c\u0443; Kubernetes \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043c \u043f\u043e PVC, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0435\u0449\u0451 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\u00a0<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0435 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u0438 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0434\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043c\u0430, \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d PVC, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u0432\u043e\u0439 \u0442\u043e\u043c. YAML \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0430 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"yaml\"># k8s\/mongodb-statefulset.yaml ...       containers:         - name: mongodb-container           ...           # \u041c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.           volumeMounts:             - mountPath: \"\/data\/db\"               name: mongodb-pvc   ...   volumeClaimTemplates:     - metadata:         name: mongodb-pvc       spec:         accessModes:           - ReadWriteOnce # \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c\/\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043d\u043e\u0434\u0435         resources:           requests:             storage: 100Mi<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 <code>kubectl apply<\/code> \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043e\u0432, \u0432\u0438\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434:<\/p>\n<pre><code>$ kubectl apply -f k8s\/mongodb-statefulset.yaml statefulset.apps\/mongodb-statefulset created  $ kubectl get pods NAME                                  READY  STATUS            RESTARTS        AGE backend-deployment-77cc555f4b-2wv24   0\/1    CrashLoopBackOff  42 (2m9s ago)   4h20m backend-deployment-77cc555f4b-kd4k9   0\/1    CrashLoopBackOff  42 (2m11s ago)  4h20m mongodb-statefulset-0                 1\/1    Running           0               5s test-pod                              1\/1    Running           0               4h20m<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0434\u0430 \u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435.<\/p>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0445 \u0442\u043e\u043c\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u0438\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043c:<\/p>\n<pre><code>$ kubectl get persistentvolumes NAME                                     CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM                                     STORAGECLASS REASON AGE pvc-88da024c-31ef-49f8-9b0b-3403bc3795d2 100Mi    RWO          Delete         Bound  default\/mongodb-pvc-mongodb-statefulset-0 standard            13d<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e MongoDB \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00a0\u2014 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a \u043d\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435. \u041d\u043e \u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0443 \u043f\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430?<\/p>\n<p>\u0414\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u0434\u0430\u043c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u2014 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/\" rel=\"noopener noreferrer nofollow\"><u>Service<\/u><\/a>. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0434\u043e\u0432, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f, \u0438 \u0442\u0438\u043f\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u0434\u0443 \u0432 StatefulSet, \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 headless service \u2014 \u0431\u0435\u0437 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e IP \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0437\u0432\u043d\u0435:<\/p>\n<pre><code class=\"yaml\"># k8s\/mongodb-service.yaml apiVersion: v1 kind: Service metadata:   name: mongodb-service spec:   # ClusterIP \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439    # \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0430\u043c \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445   # \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043d\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432\u0438\u0434\u0435\u043d \u0441\u043d\u0430\u0440\u0443\u0436\u0438:   type: ClusterIP   clusterIP: None   selector:     app: mongodb-app<\/code><\/pre>\n<pre><code>kubectl apply -f k8s\/mongodb-service.yaml<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u0434\u0443 \u0441 \u0411\u0414 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c URL <code>&lt;pod\u00a0name>.&lt;service name>.&lt;namespace>.svc.cluster.local<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>mongodb-statefulset-0.mongodb-service.default.svc.cluster.local<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u043e, \u0437\u0430\u0439\u0434\u044f \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0434 \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 pymongo:<\/p>\n<pre><code>$ kubectl exec -it test-pod -- \/bin\/bash root@test-pod:\/# python -m pip install pymongo Collecting pymongo ... root@test-pod:\/# python -q >>> import pymongo >>> uri = \"mongodb:\/\/mongodb-statefulset-0.mongodb-service.default.svc.cluster.local\" >>> c = pymongo.MongoClient(uri) >>> c.some_database.some_collection.insert_one({\"foo\": \"bar\"}) &lt;pymongo.results.InsertOneResult object at 0x7f8906b0b2b0> >>> list(c.some_database.some_collection.find({})) [{'_id': ObjectId('3b9d88f84242424242424242'), 'foo': 'bar'}]<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u043f\u043e\u0434\u044b \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u043c\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0432 \u043a\u0440\u0430\u0448\u043b\u0443\u043f\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0436\u0438\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u0445\u043e\u0441\u0442\u043d\u0435\u0439\u043c \u043c\u043e\u043d\u0433\u0438 \u2014 <code>mongo<\/code>, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435, \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441 Docker Compose. \u042f \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435; \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <code>APP_ENV<\/code>. \u041c\u0435\u043d\u044f\u0442\u044c \u0444\u0430\u0439\u043b <code>k8s\/backend-deployment.yaml<\/code> \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e; \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043d\u0435\u0441\u0451\u043c \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl patch<\/code>:<\/p>\n<pre><code class=\"yaml\"># k8s\/backend-deployment-patch.yaml spec:   template:     spec:       containers:         - name: backend-container           env:             - name: APP_ENV               value: k8s<\/code><\/pre>\n<pre><code>kubectl patch deployment backend-deployment \\         --patch-file k8s\/backend-deployment-patch.yaml<\/code><\/pre>\n<p>\u0423\u0434\u043e\u0431\u043d\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 <code>kubectl patch<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <code>kubectl edit<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0442\u0438\u043f\u0430 vim, \u0430 \u0442\u0430\u043a\u0436\u0435 \u2014 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u2014 <code>kubectl\u00a0set\u00a0env<\/code>:<\/p>\n<pre><code>kubectl set env deployment\/backend-deployment APP_ENV=k8s<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043e\u0432 \u0441\u043d\u043e\u0432\u0430 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u00a0\u2014 Kubernetes \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 Service), \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e Kubernetes \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043b \u043f\u043e\u0434\u044b \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0443 \u043d\u0438\u0445 \u0441\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u043f\u0440\u043e\u043f\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<pre><code>$ kubectl get pods NAME                                 READY  STATUS   RESTARTS  AGE backend-deployment-7547fb8b7c-4k2x7  1\/1    Running  0         11s backend-deployment-7547fb8b7c-hhvhd  1\/1    Running  0         8s ...<\/code><\/pre>\n<p>\u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435!<\/p>\n<h2>\u041f\u0440\u044f\u0447\u0435\u043c \u0441\u0435\u043a\u0440\u0435\u0442\u044b<\/h2>\n<p>\u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u0431\u0430\u043b\u0443\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e production-ready \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0410 \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0431\u0430\u0437\u0435 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0430? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f!<\/p>\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u0438 \u043f\u0440\u043e\u0447\u0435\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 Kubernetes \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\" rel=\"noopener noreferrer nofollow\"><u>Secret<\/u><\/a>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0435\u043a\u0440\u0435\u0442:\u00a0<\/p>\n<pre><code class=\"bash\"># \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 echo -n \"$(openssl rand -hex 14)\" > password.txt  kubectl create secret generic mongodb-secret \\         --from-file password.txt<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u0435\u043a\u0440\u0435\u0442-\u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437\u0434\u0435\u043b (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 Docker\u00a0Compose), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>\u041f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e MongoDB, \u0447\u0442\u043e\u0431\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f root \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043f\u0430\u0440\u043e\u043b\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 MongoDB \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <code>MONGO_INITDB_ROOT_PASSWORD_FILE<\/code>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c <code>password.txt<\/code>:<\/p>\n<pre><code class=\"yaml\"># k8s\/mongodb-statefulset-v2.yaml ...         - env:           ...             - name: MONGO_INITDB_ROOT_PASSWORD_FILE               value: \"\/run\/secrets\/mongodb\/password.txt\"           ...            # \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 volumeMounts \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043c\u0430           # \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u043f\u0443\u0442\u044f\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u043e\u043c\u0430 \u043c\u043e\u0433\u0443\u0442           # \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441            # \u043e\u0434\u0438\u043d \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0439 \u0442\u043e\u043c \u0438 \u043e\u0434\u0438\u043d \u0442\u043e\u043c\u0438\u043a \u0441 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438).           # \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e\u043c, \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043e \u0432            # \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 volumes (\u043d\u0438\u0436\u0435).           volumeMounts:             - mountPath: \"\/data\/db\"               name: mongodb-pvc             - mountPath: \"\/run\/secrets\/mongodb\"               name: mongodb-secret-volume               readOnly: true ...       # \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 volumes \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e       # \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0432 \u043f\u043e\u043b\u0435       # volumeMounts.       volumes:         - name: mongodb-secret-volume           # \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043c\u0430 \u043d\u0430\u0434\u043e \u0432\u0437\u044f\u0442\u044c           # \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 Secret \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c mongodb-secret.           secret:             secretName: mongodb-secret             optional: false         # \u0410 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0439 \u0442\u043e\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u2014 Kubernetes         # \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0437\u0430 \u043d\u0430\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043e\u0432 \u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0435. ...<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0443\u043b\u044f, \u043d\u0430\u043c \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442 \u0438 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 (\u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435!):<\/p>\n<pre><code># \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442 (\u0430 \u0441 \u043d\u0438\u043c \u0438 \u043f\u043e\u0434) $ kubectl delete statefulset mongodb-statefulset statefulset.apps \"mongodb-statefulset\" deleted  # \u0423\u0434\u0430\u043b\u044f\u0435\u043c PersistentVolumeClaim, \u0447\u0442\u043e\u0431\u044b Kubernetes \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0430\u043c \u0442\u043e\u043c $ kubectl delete pvc mongodb-pvc-mongodb-statefulset-0  persistentvolumeclaim \"mongodb-pvc-mongodb-statefulset-0\" deleted  $ kubectl get persistentvolumes No resources found  # \u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0441\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0430 $ kubectl apply -f k8s\/mongodb-statefulset-v2.yaml statefulset.apps\/mongodb-statefulset created<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u044b \u0431\u044d\u043a\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl rollout restart deployment<\/code> \u2014 \u043e \u043d\u0435\u0439 \u043d\u0438\u0436\u0435), \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 <code>CrashLoopBackOff<\/code> \u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u043a \u0431\u0430\u0437\u0435 \u043d\u0443\u0436\u0435\u043d \u043f\u0430\u0440\u043e\u043b\u044c. \u042f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0435\u0449\u0451 \u043e\u0434\u0438\u043d <code>APP_ENV=k8s_secrets<\/code>, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044d\u043a\u0435\u043d\u0434 \u0431\u0435\u0440\u0451\u0442 \u043f\u0430\u0440\u043e\u043b\u044c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430. \u041d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c <code>APP_ENV<\/code> \u0438 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442:<\/p>\n<pre><code class=\"yaml\"># k8s\/backend-deployment-patch-2.yaml spec:   template:     spec:       containers:         - name: backend-container           env:             - name: APP_ENV               value: k8s_secrets           volumeMounts:             - mountPath: \"\/run\/secrets\/mongodb\"               name: mongodb-secret-volume               readOnly: true       volumes:         - name: mongodb-secret-volume           secret:             secretName: mongodb-secret             optional: false<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0430\u0442\u0447 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c!<\/p>\n<pre><code>$ kubectl patch deployment backend-deployment \\           --patch-file k8s\/backend-deployment-patch-2.yaml deployment.apps\/backend-deployment patched  $ kubectl get pods  NAME                                 READY  STATUS   RESTARTS  AGE backend-deployment-775d8c8b8f-m686f  1\/1    Running  0         9s backend-deployment-775d8c8b8f-zghvf  1\/1    Running  0         6s ...<\/code><\/pre>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u043e\u0443\u0442\u0438\u043d\u0433<\/h2>\n<p>\u0411\u044d\u043a\u0435\u043d\u0434 \u0438 \u0431\u0430\u0437\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u2014 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043f\u0440\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b (\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434, \u0432\u043e\u0440\u043a\u0435\u0440 \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0434\u0430\u0447 \u0434\u043b\u044f \u043d\u0435\u0433\u043e) \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u0438\u0445:<\/p>\n<pre><code>kubectl apply -f k8s\/frontend-deployment.yaml kubectl apply -f k8s\/worker-deployment.yaml kubectl apply -f k8s\/redis.yaml<\/code><\/pre>\n<p>(\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u044b \u0438 \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0448\u0438\u043c \u0434\u0432\u0443\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u2014 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0443, \u043e\u0442\u0434\u0430\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u0435\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c\u0443 JSON API.<\/p>\n<p>Kubernetes \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0440\u0443\u0436\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0440\u0443\u0442\u044f\u0449\u0438\u043c\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c, \u0438 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0434\u043b\u044f \u0441\u0443\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0430, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/p>\n<p><strong>\u0414\u043e\u0441\u0442\u0443\u043f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u0437\u0432\u043d\u0435<\/strong> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430 Service \u0442\u0438\u043f\u0430 LoadBalancer:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1 kind: Service metadata:   name: ... spec:   type: LoadBalancer   selector:     ...<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 (\u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0AWS \u0438\u043b\u0438 DigitalOcean), \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP \u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 <em>\u043d\u0435\u043a\u0438\u0439<\/em> (\u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430) \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 IP \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u043f\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440.<\/p>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 IP \u0441\u0442\u043e\u044f\u0442 \u0434\u0435\u043d\u0435\u0433, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0436 \u0434\u0432\u0443\u0445!) \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f <em>\u043e\u0434\u0438\u043d<\/em> \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0438\u043f\u0430 LoadBalancer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0440\u043e\u0443\u0442\u0438\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, nginx \u0438\u043b\u0438 traefik.\u00a0<\/p>\n<p><strong>\u0420\u043e\u0443\u0442\u0438\u043d\u0433 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/strong> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Service \u0442\u0438\u043f\u043e\u0432 ClusterIP \u0438\u043b\u0438 NodePort, \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/ingress\/\" rel=\"noopener noreferrer nofollow\"><u>Ingress<\/u><\/a> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u043d\u0433\u0440\u0435\u0441\u0441-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>Service, \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0432\u044b\u0448\u0435 \u2014 \u044d\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0435\u0440\u0432\u0438\u0441 \u2014 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HTTP \u0438\u043b\u0438 gRPC API. \u0412 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 Service \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u0446\u0435\u043b\u0438, \u043a\u0443\u0434\u0430 \u0440\u043e\u0443\u0442\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0418\u043d\u0433\u0440\u0435\u0441\u0441 \u2014 \u0440\u0435\u0441\u0443\u0440\u0441, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 nginx, \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0438\u043d\u0433\u0440\u0435\u0441\u0441\u0430 \u2014 \u0441\u0430\u0439\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>\/etc\/nginx\/conf.d\/sites-enabled<\/code>. \u041f\u0440\u043e\u0449\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u2014 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0433\u0440\u0435\u0441\u0441 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 <code>frontend-service<\/code>:<\/p>\n<pre><code class=\"yaml\"># k8s\/frontend-ingress.yaml apiVersion: networking.k8s.io\/v1 kind: Ingress metadata:   name: frontend-ingress   annotations:     # \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435     # \u0438\u043d\u0433\u0440\u0435\u0441\u0441-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442     # \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e nginx:     nginx.ingress.kubernetes.io\/from-to-www-redirect: \"true\" spec:   rules:     # \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u043e\u0432\u043d\u043e \u0442\u043e,     # \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u2014 \u0445\u043e\u0441\u0442, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043f\u0443\u0442\u0438, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439      # \u0441\u0435\u0440\u0432\u0438\u0441 (\u0438 \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0440\u0442) \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a:      - host: frontend.localhost       http:         paths:           - path: \/             pathType: Prefix             backend:               service:                 name: frontend-service                 port:                   number: 40002<\/code><\/pre>\n<p>\u0418\u043d\u0433\u0440\u0435\u0441\u0441-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0441\u043b\u0435\u0434\u044f\u0449\u0438\u0439 \u0437\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043d\u0433\u0440\u0435\u0441\u0441\u0430\u043c\u0438 \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0433\u0440\u0435\u0441\u0441-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430, \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u0438\u0448\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u0435\u0442\u0430\u043b\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435, \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 minikube \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u00a0\u2014 nginx. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440:<\/p>\n<pre><code>$ minikube addons enable ingress ... ?  The 'ingress' addon is enabled<\/code><\/pre>\n<p>(\u0423 \u043c\u0435\u043d\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u2026)<\/p>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u0432\u044b\u0448\u0435, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0442\u0438\u043f\u0430 Service, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u044b:<\/p>\n<pre><code class=\"yaml\"># k8s\/frontend-service.yaml apiVersion: v1 kind: Service metadata:   name: frontend-service spec:   # NodePort \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432   # \u0432 Kubernetes. \u0415\u0433\u043e \u0432\u044b\u0431\u043e\u0440 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438   # \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 minikube, \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e   # \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 type: ClusterIP.   type: NodePort   selector:     app: frontend-app   ports:     - protocol: TCP       port: 40002<\/code><\/pre>\n<pre><code>kubectl apply -f k8s\/frontend-service.yaml kubectl apply -f k8s\/backend-service.yaml<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438\u043d\u0433\u0440\u0435\u0441\u0441\u044b:<\/p>\n<pre><code>kubectl apply -f \"k8s\/*-ingress.yaml\"<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043d\u0433\u0440\u0435\u0441\u0441 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430 \u0434\u043b\u044f \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0445\u043e\u0441\u0442\u044b frontend.localhost \u0438 backend.localhost), \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0438 \u0445\u043e\u0441\u0442\u044b \u0432 <code>\/etc\/hosts<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e:<\/p>\n<pre><code class=\"bash\">echo -e \"127.0.0.1 frontend.localhost\\n127.0.0.1 backend.localhost\" | sudo tee -a \/etc\/hosts<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 127.0.0.1. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>minikube tunnel<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0440\u0435\u0437\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f:<\/p>\n<pre><code>$ minikube tunnel \u2705  Tunnel successfully started  ?  NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...  \u2757  The service\/ingress backend-ingress requires privileged ports to be exposed: [80 443] ?  sudo permission will be asked for it. \u2757  The service\/ingress frontend-ingress requires privileged ports to be exposed: [80 443] ?  Starting tunnel for service backend-ingress. ?  sudo permission will be asked for it. ?  Starting tunnel for service frontend-ingress.<\/code><\/pre>\n<p>(\u041d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c minikube \u0437\u0430\u043d\u044f\u0442\u044c 80-\u0439 \u043f\u043e\u0440\u0442.)<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c LoadBalancer, \u043a\u0430\u043a \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u2014 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f minikube + nginx.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442:<\/p>\n<pre><code>kubectl exec deploy\/backend-deployment -- \\     python -m tools.add_test_content<\/code><\/pre>\n<p>\u0418, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 <a href=\"http:\/\/frontend.localhost\/card\/helloworld\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/frontend.localhost\/card\/helloworld<\/u><\/a> \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cee\/885\/d9f\/cee885d9ffbcdba50bd0fc23b08d7e4a.png\" width=\"1600\" height=\"1156\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cee\/885\/d9f\/cee885d9ffbcdba50bd0fc23b08d7e4a.png\"\/><\/figure>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043a\u0435<\/h2>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0430\u043c\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437\u0443\u043f\u0440\u0435\u0447\u043d\u043e, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u0430. \u0427\u0442\u043e \u0443\u0436, \u044f \u0438 \u0441\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u043e\u043a\u0430 \u043f\u0438\u0441\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0441 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. <code>kubectl get pods<\/code> \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u044b \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b, \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u043d\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u0438, \u0447\u0442\u043e \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0430; \u0447\u0430\u0441\u0442\u044b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<pre><code>$ kubectl get pods NAME                                 READY STATUS  RESTARTS     AGE backend-deployment-775d8c8b8f-m686f  1\/1   Running 8 (5h2m ago) 8d backend-deployment-775d8c8b8f-zghvf  1\/1   Running 9 (5h2m ago) 8d frontend-deployment-8579847d7f-dxwst 1\/1   Running 0            66m frontend-deployment-8579847d7f-nbxrx 1\/1   Running 0            66m mongodb-statefulset-0                1\/1   Running 2 (2d4h ago) 8d redis-statefulset-0                  1\/1   Running 0            2d test-pod                             1\/1   Running 5 (2d ago)   28d worker-deployment-6cb87545d6-r2c2s   1\/1   Running 489 (2d ago) 54d worker-deployment-6cb87545d6-xtchk   1\/1   Running 489 (2d ago) 54d<\/code><\/pre>\n<p>(\u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u044b \u0432\u0441\u0435\u0433\u043e minikube: \u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0435\u0433\u043e \u0432\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 CPU.)<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u2014 \u043b\u043e\u0433\u0438. \u041c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u043a\u0430\u043a \u0432 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0442\u0435\u0439\u0442\u0444\u0443\u043b\u0441\u0435\u0442\u0435:<\/p>\n<pre><code>kubectl logs deployment\/backend-deployment kubectl logs statefulset\/mongodb-statefulset<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 (\u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043b\u043e\u0433 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430), \u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u043b\u043e\u0433\u0438 \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432:<\/p>\n<pre><code>kubectl logs backend-deployment-775d8c8b8f-m686f kubectl logs -c backend-container backend-deployment-775d8c8b8f-m686f kubectl logs --all-containers backend-deployment-775d8c8b8f-m686f<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434 \u0443\u043f\u0430\u043b \u0438 \u0443\u0436\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f, \u043b\u043e\u0433\u043e\u0432 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0432\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 <code>--previous<\/code>:<\/p>\n<pre><code>kubectl logs --previous backend-deployment-775d8c8b8f-m686f<\/code><\/pre>\n<p>(\u0412 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044f \u0441\u043c\u043e\u0433 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.)<\/p>\n<p>\u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435 out of memory (OOM). \u0422\u0443\u0442 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e \u0438 \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0447\u0435\u0440\u0435\u0437 <code>kubectl describe<\/code>:<\/p>\n<pre><code>$ kubectl describe pod oom-pod ... Events:   Type     Reason     Age                   From               Message   ----     ------     ----                  ----               -------   Normal   Scheduled  3m1s                  default-scheduler  Successfully assigned default\/oom-pod to minikube   Normal   Pulled     81s (x5 over 3m1s)    kubelet            Container image \"python:bullseye\" already present on machine   Normal   Created    81s (x5 over 3m1s)    kubelet            Created container python-container   Normal   Started    81s (x5 over 3m)      kubelet            Started container python-container   Warning  BackOff    80s (x10 over 2m58s)  kubelet            Back-off restarting failed container python-container in pod oom-pod_default(3251c975-d536-4d39-8754-8651e8bbde0a)<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0434\u0435\u0435, \u0432 Kubernetes \u0443 \u043f\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>OOMKilled<\/code>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0451\u043b OOM, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u0432\u0435\u043d\u0442. \u041d\u043e, \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 (\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 python-\u0441\u043a\u0440\u0438\u043f\u0442, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 2^40 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u0438 \u043c\u043e\u0451\u043c \u0442\u0440\u0443\u0434\u043e\u0432\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u0435\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c OOM-\u044b. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0435\u0441\u043b\u0438 Kubernetes \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0430 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u044f \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e OOM.<\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:<\/p>\n<pre><code>kubectl get events --sort-by='.metadata.creationTimestamp' -A<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u0438\u043d\u0433\u0440\u0435\u0441\u0441-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0423 \u043d\u0430\u0441 \u043e\u043d \u0436\u0438\u0432\u0451\u0442 \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 <code>ingress-nginx<\/code>:<\/p>\n<pre><code>$ kubectl -n ingress-nginx get pods NAME                                      READY STATUS    RESTARTS   AGE ingress-nginx-admission-create-wd4j2      0\/1   Completed 0          3d ingress-nginx-admission-patch-jfjrg       0\/1   Completed 0          3d ingress-nginx-controller-6cc5ccb977-s7659 1\/1   Running   1 (2d ago) 3d  $ kubectl -n ingress-nginx logs deployment\/ingress-nginx-controller ...<\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445; \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0438\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043e\u0431\u0432\u044f\u0437\u043e\u043a, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u044c <s>\u0432 \u0445\u0430\u0442\u0443<\/s> \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>kubectl\u00a0get\u00a0namespaces<\/code>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432\u043d\u0435 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <code>-n &lt;\u0438\u043c\u044f \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430><\/code>, \u0438\u043d\u0430\u0447\u0435 <code>kubectl get<\/code> \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<h2>\u041e \u0447\u0451\u043c \u0435\u0449\u0451 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c<\/h2>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u044f \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043b Kubernetes \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0437\u0434\u0435\u0441\u044c \u043e \u0444\u0438\u0447\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0435\u0441\u044c \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0438 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u0441\u044f \u0441\u0430\u043c Kubernetes.<\/p>\n<h3>\u0420\u0435\u043a\u0432\u0435\u0441\u0442\u044b \u0438 \u043b\u0438\u043c\u0438\u0442\u044b<\/h3>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435 \u2014 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u043e OOM. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u043f\u0430\u043b \u043f\u043e OOM, \u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u043d\u0430 \u0436\u0451\u0441\u0442\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043d\u043e\u0434\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0437\u0430\u043f\u0443\u0449\u0435\u043d; \u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u043c\u0438\u0440\u0430\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0436\u0440\u0430\u0432 \u0432\u0441\u044e \u043d\u043e\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 Kubernetes \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1 kind: Pod metadata:   name: test-pod spec:   containers:     - name: python-container       image: python:bullseye       command: [\"python3\", \"-m\", \"http.server\", \"8080\"]        resources:         requests:           memory: \"128Mi\"           cpu: \"250m\"         limits:           memory: \"256Mi\"           cpu: \"500m\"<\/code><\/pre>\n<p>\u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 resources \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439: requests \u0438 limits.\u00a0<\/p>\n<p><strong>Requests<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 CPU, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 <em>\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b<\/em> \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 \u043d\u043e\u0434\u0435 <em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em> \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 Kubernetes-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 CPU.<\/p>\n<p><strong>Limits<\/strong> \u2014 \u044d\u0442\u043e <em>\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435<\/em> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442 \u0438 CPU, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 requests, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043d\u043e\u0434\u0435 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u0430\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438, \u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u043d\u044f\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 limits, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0438\u0442. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0431\u0438\u0442 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043d\u043e\u0434\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u2014 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 requests.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 requests \u043f\u043e CPU \u0438 \u0440\u0435\u0441\u0443\u0440\u0441 CPU \u043d\u0430 \u043d\u043e\u0434\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f (\u0438\u043b\u0438 \u0443\u043f\u0451\u0440\u0441\u044f \u0432 limits), \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0430\u0447\u043d\u0451\u0442 \u0442\u0440\u043e\u0442\u043b\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0435\u0441\u0442\u044c Kubernetes \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u043f\u0430\u0443\u0437\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0432\u0430\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 Kubernetes \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0438 \u0442\u0440\u043e\u0442\u043b\u0438\u043d\u0433 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u044e latency \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Kubernetes \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u043d\u0430 \u0434\u043e\u0431\u0440\u044b\u0435 100\u00a0\u043c\u0441, \u0447\u0442\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0432 \u0440\u0430\u0437\u044b \u0432\u044b\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u044e\u0442 \u0432 Mi \u0438 Gi \u2014 \u044d\u0442\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b \u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044b \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (2^30 \u0438 2^40 \u0431\u0430\u0439\u0442). CPU \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u044e\u0442 \u0432 m \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u043d\u0430\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c 1000m \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u044f\u0434\u0440\u043e.<\/p>\n<h3>\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0430<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043c\u0435\u043d\u044f\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0432 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0440\u0441\u0438\u044e Docker-\u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u0432\u044b\u043a\u0430\u0442\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430, \u2014 Kubernetes \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u044b \u043f\u043e \u043d\u043e\u0432\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u2014 Kubernetes \u043d\u0430\u0447\u043d\u0451\u0442 \u0433\u0430\u0441\u0438\u0442\u044c 25% \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u043e\u0432\u044b\u0445, \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0433\u0430\u0441\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435. \u0427\u0438\u0441\u043b\u043e \u0432 25%, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u0438\u0447\u0451\u043c \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u2014 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043f\u043e\u0434\u043e\u0432 \u043e\u0442 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 (<code>maxUnavailable<\/code>) \u0438 \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u043e\u0434\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0435 (<code>maxSurge<\/code>):\u00a0<\/p>\n<pre><code class=\"yaml\">apiVersion: apps\/v1 kind: Deployment metadata:   name: backend-deployment spec:   replicas: 10   strategy:     rollingUpdate:       maxUnavailable: \"10%\"       maxSurge: \"50%\"   ...<\/code><\/pre>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c <code>maxUnavailable<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u043e\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u0441\u0432\u043e\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439); \u043c\u043e\u0436\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c <code>maxSurge<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u043f\u043e\u0434\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 100 \u043f\u043e\u0434\u043e\u0432, \u043b\u0438\u0448\u043d\u0438\u0435 25 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439); \u0438\u043b\u0438 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c <code>maxUnavailable<\/code> \u0438\/\u0438\u043b\u0438 <code>maxSurge<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0432\u044b\u043a\u0430\u0442\u043a\u0443.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0430\u043c\u0430\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"yaml\">apiVersion: apps\/v1 kind: Deployment metadata:   name: backend-deployment spec:   replicas: 10   strategy:     rollingUpdate:       maxUnavailable: 0       maxSurge: 1   ...<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Kubernetes \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u043e\u0434\u0443, \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043e\u0434\u043e\u0432. \u0427\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0435, \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u0432\u044b\u043a\u0430\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl rollout restart<\/code>:<\/p>\n<pre><code>kubectl rollout restart deployment backend-deployment<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 <code>backend-deployment<\/code> \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0435 <code>replicas<\/code>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u044f\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>kubectl get pods<\/code> \u0438 <code>kubectl get replicas<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438.<\/p>\n<h3>Liveness-\u043f\u0440\u043e\u0431\u044b<\/h3>\n<p>\u041f\u0440\u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u0432\u044b\u043a\u0430\u0442\u043a\u0435 Kubernetes \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u0441 <code>ContainerCreating<\/code> \u043d\u0430 <code>Running<\/code> \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u043a\u0430\u0442\u043a\u0438. \u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e?<\/p>\n<p>\u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f liveness-\u043f\u0440\u043e\u0431\u0430. \u042d\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 Kubernetes-\u0434\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b, HTTP- \u0438\u043b\u0438 gRPC-\u0437\u0430\u043f\u0440\u043e\u0441, \u2014 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0415\u0441\u043b\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 HTTP-\u0441\u0435\u0440\u0432\u0438\u0441, \u043d\u0430\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u043d \u0442\u0430\u043a:<\/p>\n<pre><code class=\"yaml\">apiVersion: v1 kind: Pod metadata:   name: test-pod spec:   containers:     - name: python-container       image: python:bullseye       command: [\"python3\", \"-m\", \"http.server\", \"8080\"]        livenessProbe:         httpGet:           path: \/ping           port: 8080           httpHeaders:           - name: X-Request-Reason             value: liveness-probe         initialDelaySeconds: 5         periodSeconds: 3         failureThreshold: 2<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442, \u043f\u0443\u0442\u044c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b) \u0438 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0443 (<code>initialDelaySeconds<\/code>), \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0443, \u0443\u0431\u0435\u0436\u0434\u0430\u044f\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0434 \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (<code>periodSeconds<\/code>), \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 \u043f\u0440\u043e\u0431\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0445\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434 \u0431\u044b\u043b \u0443\u0431\u0438\u0442 (<code>failureThreshold<\/code>). \u0421 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0432\u044b\u0448\u0435 Kubernetes \u043f\u043e\u0434\u043e\u0436\u0434\u0451\u0442 \u043f\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u043d\u0451\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 \u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0434\u0435\u043b\u0430\u0442\u044c GET-\u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0443\u0442\u0438 \/ping. \u0415\u0441\u043b\u0438 GET-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u0440\u044f\u0434 \u0432\u0435\u0440\u043d\u0451\u0442 \u0441\u0442\u0430\u0442\u0443\u0441, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442 200 (\u0438\u043b\u0438 \u0441\u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0438\u0442\u0441\u044f), \u043f\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0438\u0442 \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d.<\/p>\n<p>Liveness-\u043f\u0440\u043e\u0431\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u043d\u043e \u0438 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043f\u043e\u0434\u0430 \u2014 \u0442\u0430\u043a Kubernetes \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043d\u0430\u0441 \u043e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0434\u0435\u0434\u043b\u043e\u043a\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 (\u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u043c\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430) \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u043f\u0440\u043e\u0431 \u2014 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-startup-probes\/#define-startup-probes\" rel=\"noopener noreferrer nofollow\"><u>startupProbe<\/u><\/a> \u0438 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-startup-probes\/#define-readiness-probes\" rel=\"noopener noreferrer nofollow\"><u>readinessProbe<\/u><\/a>, \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0432\u0430\u0441 \u043f\u043e\u0449\u0430\u0436\u0443.\u00a0<\/p>\n<h3>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u0431\u044d\u043a\u0435\u043d\u0434 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl scale<\/code>:<\/p>\n<pre><code>kubectl scale deployment backend-deployment --replicas=6<\/code><\/pre>\n<p>\u041d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, 24\/7 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u043e\u043c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043f\u043b\u0438\u043a \u043d\u0430 \u0433\u043b\u0430\u0437 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c. \u0411\u043b\u0430\u0433\u043e, \u0432 Kubernetes \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\" rel=\"noopener noreferrer nofollow\"><u>HorizontalPodAutoscaler<\/u><\/a> (HPA):<\/p>\n<pre><code class=\"yaml\">apiVersion: autoscaling\/v2beta2 kind: HorizontalPodAutoscaler metadata:   name: backend-hpa spec:    # \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u0443\u044e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0432 \u043d\u0430\u0434\u043e \u0441\u043a\u0435\u0439\u043b\u0438\u0442\u044c:   scaleTargetRef:     apiVersion: apps\/v1     kind: Deployment     name: backend-deployment    # \u041d\u0438\u0436\u043d\u0438\u0439 \u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u043f\u043b\u0438\u043a,   # \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435 \u0441\u043e\u0436\u0440\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440:   minReplicas: 2   maxReplicas: 20    # \u041c\u0435\u0442\u0440\u0438\u043a\u0438, \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c   # \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438:   metrics:   - type: Resource     resource:       name: cpu       target:         type: Utilization         averageUtilization: 75   - type: Resource     resource:       name: memory       target:         type: AverageValue         averageValue: 400Mi<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0435\u0440 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU \u043f\u043e \u0432\u0441\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0434\u0430\u043c \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b\u0430 75% (\u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <code>requests<\/code>), \u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 400 \u041c\u0411. \u0410\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e\u0434\u043e\u0432 \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043a\u0435\u0439\u043b\u0438\u0442\u044c \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430.<\/p>\n<p>HPA \u2014 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0444\u0430\u0437\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0442\u044c. \u0417\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u044e \u043a <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a> \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0430\u0442\u044c\u044f\u043c \u043f\u043e \u0442\u0435\u043c\u0435.<\/p>\n<h3>\u0414\u0436\u043e\u0431\u044b<\/h3>\n<p>\u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0440\u043a\u0435\u0440, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0434\u0430\u0447 \u0438\u0437 Redis. \u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e\u0442 \u0441\u0442\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0434\u0435\u0439\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u0435\u043d \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\u00a0<\/p>\n<p>\u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e\/CPU, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u043c\u0435\u043b\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0447\u0442\u0438-\u0432-\u0440\u0435\u0436\u0438\u043c\u0435-\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e-\u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u0434\u0430\u043c\u043f\u044b \u0431\u0430\u0437\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/job\/\" rel=\"noopener noreferrer nofollow\"><u>Job<\/u><\/a>. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0436\u043e\u0431\u0435 \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043b\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u044b \u2014 \u043d\u043e \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0435\u0442\u0440\u0430\u044f\u0445.<\/p>\n<pre><code class=\"yaml\"># k8s\/test-job.yaml apiVersion: batch\/v1 kind: Job metadata:   name: test-job spec:   template:     spec:       containers:         - name: python-container           image: python:bullseye           command: [\"python3\", \"-c\", \"import math; print(math.pi)\"]        # restartPolicy \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432        # \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043e\u043a. Never \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438       # \u043f\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d; OnFailure \u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442        # Kubernetes \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440        # \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445       # \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432.       restartPolicy: Never    backoffLimit: 3    # \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0434\u0436\u043e\u0431\u0443, \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0435\u044e \u043f\u043e\u0434 \u0432 \u043d\u043e\u0432\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0441 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <code>Completed<\/code>:<\/p>\n<pre><code>$ kubectl apply -f k8s\/test-job.yaml job.batch\/test-job created  $ kubectl get pods NAME             READY   STATUS      RESTARTS   AGE ... test-job-rhddf   0\/1     Completed   0          60s ...  $ kubectl logs job\/test-job    3.141592653589793<\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u043d\u0438\u0432 \u0432 python-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u043f\u0435\u0447\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u043f\u0438 \u043d\u0430 \u0431\u0440\u043e\u0441\u043e\u043a \u044d\u043a\u0441\u0435\u043f\u0448\u043d\u0430 \u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0443\u0432\u0438\u0434\u0438\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u2014 Kubernetes \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0442\u0440\u0438 \u043f\u043e\u0434\u0430 (\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0434\u0436\u043e\u0431\u0435 <code>backoffLimit<\/code>) \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.<\/p>\n<pre><code>$ kubectl apply -f k8s\/fail-job.yaml job.batch\/fail-job created  $ kubectl get pods NAME             READY   STATUS      RESTARTS   AGE ... fail-job-fl7dg   0\/1     Error       0          18s fail-job-gz4nq   0\/1     Error       0          23s fail-job-shzs6   0\/1     Error       0          4s ...  $ kubectl get logs job\/fail-job Found 4 pods, using pod\/fail-job-gz4nq Traceback (most recent call last):   File \"&lt;string>\", line 1, in &lt;module> RuntimeError<\/code><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0425\u043e\u0442\u044f Kubernetes \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u043c \u0443\u0436 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u0438 \u0434\u0430\u0436\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0441\u043f\u0443\u0441\u0442\u0438\u0442 \u0437\u0430\u0432\u0435\u0441\u0443 \u0442\u0430\u0439\u043d\u044b \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043e\u0431 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u044b\u0448\u0430\u043b, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0442\u0435\u043c, \u043a\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Kubernetes \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p><em>P. S. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e @hexyo, @yesview \u0438 @dmtrskv \u0437\u0430 \u0432\u044b\u0447\u0438\u0442\u043a\u0443 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0441\u0442\u0430\u0442\u044c\u0435!<\/em><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/752586\/\"> https:\/\/habr.com\/ru\/articles\/752586\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043d\u0430 \u0432\u0438\u0434, \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab<a href=\"https:\/\/habr.com\/ru\/post\/444446\/\" rel=\"noopener noreferrer nofollow\"><u>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u044f<\/u><\/a>\u00bb \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c, \u0438 \u0441\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439. \u0412 \u043d\u0435\u0451 \u0432\u043e\u0448\u0451\u043b \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434, \u0432\u043e\u0440\u043a\u0435\u0440 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0430\u0436 \u0434\u0432\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 MongoDB \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0438 Redis \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0434\u0430\u0447. \u0412 \u00ab<a href=\"https:\/\/habr.com\/ru\/companies\/joom\/articles\/526550\/\" rel=\"noopener noreferrer nofollow\"><u>\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0432 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u043d\u0443\u043b\u044f<\/u><\/a>\u00bb \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0442\u0440\u0435\u0442\u044c\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u00a0\u2014 Elasticsearch.<\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Docker Compose. \u041d\u043e \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438? \u041a\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? \u041a\u0430\u043a \u0440\u0430\u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f?<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/\" rel=\"noopener noreferrer nofollow\"><u>minikube<\/u><\/a>. \u041c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 Kubernetes, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 Kubernetes \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u043c \u0432 \u0441\u0443\u0440\u043e\u0432\u043e\u043c \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e Kubernetes, \u043d\u043e \u0435\u0449\u0451 \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b Docker \u0438 Kubernetes<\/h2>\n<p>Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0432\u0435\u0431\u0435, \u0440\u0435\u0448\u0430\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447.\u00a0<\/p>\n<ol>\n<li>\n<p><strong>\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f<\/strong>: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044f \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0421\u0435\u0440\u0432\u0438\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u0440\u0442? \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0430\u0442\u0447\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b? \u0414\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a? \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/strong>: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c Docker daemon \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435? \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f? \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c<\/strong>: Docker \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0435\u0434\u0438\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>docker build<\/code> \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043f\u0443\u0448\u0438\u043c \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043f\u0443\u043b\u043b\u0438\u043c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u2014 \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0438 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437, \u0431\u0443\u0434\u044c \u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0440\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442, \u0438\u043b\u0438 \u0434\u0436\u043e\u0431\u0430, \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0438 \u0443\u043c\u0438\u0440\u0430\u044e\u0449\u0430\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 <em>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445<\/em> Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 \u043f\u043e\u043b\u0435 \u043d\u0435 \u0432\u043e\u0438\u043d, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0442\u043e\u044f\u0449\u0435\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Docker Compose; \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u0441\u043b\u0430\u0431\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0446\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c <code>docker compose up -d<\/code> \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041d\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e, \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0435\u0437\u043a\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><strong>Kubernetes<\/strong> \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u043c\u0430\u0448\u0438\u043d \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0444\u0438\u0447\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u2014 \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0432\u044b\u043a\u0430\u0442\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. Kubernetes \u0432\u0432\u043e\u0434\u0438\u0442 \u0440\u044f\u0434 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a \u043f\u043e\u0434 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441, \u0438 \u0434\u0430\u0451\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u041f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0441 \u043d\u0443\u043b\u044f \u2014 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u0434\u0435\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438\/DevOps. \u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e managed \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432 DigitalOcean \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u0430\u043c, \u0430 \u0441\u0430\u043c\u0438 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e\u0439 \u0434\u043b\u044f <s>\u0436\u0441\u043e\u043d\u043e\u0443\u043a\u043b\u0430\u0434\u0447\u0438\u043a\u0430<\/s> \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 minikube, \u043d\u043e \u0432\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043b\u044e\u0431\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0431\u043b\u0430\u0433\u043e, \u0442\u0430\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/\" rel=\"noopener noreferrer nofollow\"><u>kubectl<\/u><\/a> \u2014 command line interface \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c Kubernetes. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0431\u0443\u0434\u0435\u0442 <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\" rel=\"noopener noreferrer nofollow\"><u>minikube<\/u><\/a> \u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Kubernetes. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043d\u0430 Mac, \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c <\/p>\n<pre><code>brew install kubectl brew install minikube minikube start<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0447\u0435\u043a\u0430\u0443\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 GitHub \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0442\u043a\u0443:<\/p>\n<pre><code>git clone git@github.com:Saluev\/habr-app-demo.git cd habr-app-demo git checkout feature\/k8s<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u043a\u043e\u0434 \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043c\u043e-\u0430\u043f\u043f\u043a\u0438, \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/444446\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0446\u0438\u043a\u043b\u0430<\/a>, \u0438 \u0434\u043e\u043a\u0435\u0440\u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0438. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u043e\u0431\u043e \u0432\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a\u0430\u043a-\u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0451\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e; \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/github.com\/Saluev\/habr-app-demo\" rel=\"noopener noreferrer nofollow\"><u>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/u><\/a> \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0443.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u0441\u0435 YAML-\u0444\u0430\u0439\u043b\u044b, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <code>k8s\/log.sh<\/code>\u00a0\u2014 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<h2>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e<\/h2>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 <em>\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/em> \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u00f3\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b kubectl \u2014 \u044d\u0442\u043e CRUD-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 (Create, Read, Update, Delete).<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0440\u0430\u0441\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e <em>\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c \u0438\u043c\u0451\u043d<\/em> (namespace). \u0412 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u044f\u0445 \u041e\u041e\u041f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d \u2014 \u0442\u043e\u0436\u0435 \u0440\u0435\u0441\u0443\u0440\u0441. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0441 \u0442\u0438\u043f\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl get<\/code>:<\/p>\n<pre><code>$ kubectl get namespaces NAME              STATUS   AGE default           Active   1d kube-node-lease   Active   1d kube-public       Active   1d kube-system       Active   1d<\/code><\/pre>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b YAML\/JSON. \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl get<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c YAML \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 (\u0445\u043e\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u043e\u0432 \u043e\u043d \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439)\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f default:<\/p>\n<pre><code class=\"yaml\">$ kubectl get namespace -o yaml default  apiVersion: v1 kind: Namespace metadata:   creationTimestamp: \"2022-07-25T18:00:57Z\"   labels:     kubernetes.io\/metadata.name: default   name: default   resourceVersion: \"200\"   uid: 492e34b7-82e0-472b-9fb9-3ed7005a83eb spec:   finalizers:   - kubernetes status:   phase: Active<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>kind<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b. \u0424\u043b\u0430\u0433 <code>-o yaml<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430; \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d <code>-o json<\/code>:<\/p>\n<pre><code>$ kubectl get namespace -o json default | jq .status.phase \"Active\"<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>kubectl describe<\/code>:<\/p>\n<pre><code>$ kubectl describe namespace default  Name:         default Labels:       kubernetes.io\/metadata.name=default Annotations:  &lt;none> Status:       Active  No resource quota.  No LimitRange resource.<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0443\u0445\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 <code>kubectl get<\/code>, \u0437\u0434\u0435\u0441\u044c, \u043f\u043e\u043c\u0438\u043c\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u0441\u0430\u043c\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043e \u043d\u0438\u0445 \u043d\u0438\u0436\u0435) \u0438\u043b\u0438, \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, <code>LimitRange<\/code> (\u0447\u0442\u043e \u0431\u044b \u044d\u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e).\u00a0<\/p>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e CRUD-\u2060\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432; \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>kubectl api-resources<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445:<\/p>\n<pre><code>$ kubectl api-resources NAME              SHORTNAMES   APIVERSION   NAMESPACED   KIND bindings                       v1           true         Binding configmaps        cm           v1           true         ConfigMap endpoints         ep           v1           true         Endpoints events            ev           v1           true         Event namespaces        ns           v1           false        Namespace ...<\/code><\/pre>\n<p>\u0418\u0437 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u2014 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 <code>SHORTNAMES<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>kubectl\u00a0get\u00a0namespaces<\/code> \u0438 <code>kubectl\u00a0get\u00a0ns<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434<\/h2>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443\u0435\u0434\u0435\u0448\u044c. \u042f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0430\u043c Kubernetes \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u2014 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440!<\/p>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 Kubernetes \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <em>\u043f\u043e\u0434<\/em> (<a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/\" rel=\"noopener noreferrer nofollow\"><u>Pod<\/u><\/a>). \u041f\u043e\u0434 \u2014 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (<em>\u043d\u043e\u0434\u0435<\/em>), \u043a\u043e\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441; \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439\u00a0\u2014 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0438 \u0432\u0442\u043e\u0440\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043b\u043e\u0433\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 Filebeat.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0431\u044b \u043f\u0435\u0440\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434 \u0441\u043e <a href=\"https:\/\/docs.python.org\/3\/library\/http.server.html\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0432 python HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>kubectl apply<\/code>:<\/p>\n<pre><code class=\"bash\">kubectl apply -f - &lt;&lt;EOF apiVersion: v1 kind: Pod metadata:   name: test-pod spec:   containers:     - name: python-container       image: python:bullseye       command: [\"python3\", \"-m\", \"http.server\", \"8080\"] EOF<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u044d\u0442\u043e\u043c\u0443 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u043c\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c YAML \u0432 \u0444\u0430\u0439\u043b \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>kubectl apply -f path\/to\/filename.yaml<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 <code>pod\/test-pod created<\/code> \u0438 \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u043e\u0432:<\/p>\n<pre><code>$ kubectl get pods   NAME       READY   STATUS              RESTARTS   AGE test-pod   0\/1     ContainerCreating   0          69s<\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 minikube \u0441\u043a\u0430\u0447\u0430\u0435\u0442 Docker-\u043e\u0431\u0440\u0430\u0437 <code>python:bullseye<\/code>, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u0442 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 <code>Running<\/code>:<\/p>\n<pre><code>$ kubectl get pods  NAME       READY   STATUS    RESTARTS   AGE test-pod   1\/1     Running   0          4m20s<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Kubernetes \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f. \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 <code>kubectl describe<\/code>:<\/p>\n<pre><code>$ kubectl describe pod test-pod ... Events:   Type    Reason     Age     From          <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-402873","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/402873","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=402873"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/402873\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=402873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=402873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=402873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}