{"id":330739,"date":"2022-03-16T15:00:47","date_gmt":"2022-03-16T15:00:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=330739"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=330739","title":{"rendered":"<span>\u041a\u0430\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0430 \u0432 Kubernetes: \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 graceful shutdown \u0438 zero downtime \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442<\/span>"},"content":{"rendered":"<div><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=2004216989903634&amp;ev=habr_devops&amp;noscript=1\" width=\"1\" style=\"display: none;\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=2004216989903634&amp;ev=habr_k8s&amp;noscript=1\" width=\"1\" style=\"display: none;\"><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ph\/3s\/jo\/ph3sjojaeb1gtddulmpsbwhr4ks.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/ph\/3s\/jo\/ph3sjojaeb1gtddulmpsbwhr4ks.jpeg\" data-blurred=\"true\"\/><br \/>  <a href=\"https:\/\/www.deviantart.com\/maciejkuciara\/art\/Landing-deck-156346266\">Landing deck by maciejkuciara<\/a><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0432 \u2014 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Kubernetes. \u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 cron \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0415\u0449\u0435 \u043f\u043e\u0434\u044b \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0443\u0437\u0435\u043b \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 (unschedulable).<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/mcs.mail.ru\/containers\/\">Kubernetes aaS Mail.ru Cloud Solutions<\/a> \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0430.<\/p>\n<blockquote><p><b>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438:<\/b><\/p>\n<p>  <b>Graceful shutdown <\/b>\u2014 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.<\/p>\n<p>  <b>Zero downtime deploy <\/b>\u2014 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438.<\/p><\/blockquote>\n<p>  <a href=\"https:\/\/learnk8s.io\/a\/graceful-shutdown-and-zero-downtime-deployments-in-kubernetes\/graceful-shutdown.pdf\">\u041f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 (PDF)<\/a>.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430<\/h2>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">apiVersion: v1 kind: Pod metadata:   name: my-pod spec:   containers:     - name: web       image: nginx       ports:         - name: web           containerPort: 80<\/code><\/pre>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 YAML-\u0444\u0430\u0439\u043b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"plaintext\">$ kubectl apply -f pod.yaml<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f kubectl \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 \u0432 Kubernetes API.<\/p>\n<h2>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  API Kubernetes \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 YAML-\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 etcd. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u0439 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/scheduling-eviction\/scheduling-framework\/#scheduling-cycle-binding-cycle\">\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/a>.<\/p>\n<p>  \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a:  <\/p>\n<ol>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432 YAML-\u0444\u0430\u0439\u043b\u0435.  <\/li>\n<li>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.  <\/li>\n<li>\u0420\u0435\u0448\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0443\u0437\u0435\u043b \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0434\u0430 (<a href=\"https:\/\/kubernetes.io\/docs\/concepts\/scheduling-eviction\/scheduling-framework\/#extension-points\">\u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430\u043c\u0438<\/a>).  <\/li>\n<\/ol>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435:  <\/p>\n<ul>\n<li>\u041f\u043e\u0434 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 (scheduled) \u0432 etcd.  <\/li>\n<li>\u0414\u043b\u044f \u043f\u043e\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u0435\u043b.  <\/li>\n<li>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 etcd.  <\/li>\n<\/ul>\n<p>  <b>\u041d\u043e \u0441\u0430\u043c \u043f\u043e\u0434 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d!<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/az\/nd\/d7\/azndd7zjykxnepbhot9waoim6tu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/az\/nd\/d7\/azndd7zjykxnepbhot9waoim6tu.png\"\/><br \/>  <i>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b kubectl apply -f YAML-\u0444\u0430\u0439\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 Kubernetes API<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/93\/fs\/7z\/93fs7zkbw8g4b83rlwfkelxng2o.png\" data-src=\"https:\/\/habrastorage.org\/webt\/93\/fs\/7z\/93fs7zkbw8g4b83rlwfkelxng2o.png\"\/><br \/>  API \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0434 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 etcd<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bl\/o_\/nl\/blo_nlbirbztig1zfiltycjwi-m.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bl\/o_\/nl\/blo_nlbirbztig1zfiltycjwi-m.png\"\/><br \/>  \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0430, \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u00ab\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u00bb. \u041d\u043e \u043f\u043e\u0434 \u043f\u043e\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 etcd<\/i><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes<\/h2>\n<p>  \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u0432 Control Plane, \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0442\u043e \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u0434? Kubelet \u2014 \u0430\u0433\u0435\u043d\u0442 Kubernetes. \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 Control Plane. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c kubelet \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0442\u0440\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c:<\/p>\n<ol>\n<li><b>The Container Runtime Interface (CRI)<\/b> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0432.  <\/li>\n<li><b>The Container Network Interface (CNI)<\/b> \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0441 \u0441\u0435\u0442\u044c\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441\u0430.  <\/li>\n<li><b>The Container Storage Interface (CSI)<\/b> \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043c\u0430 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.  <\/li>\n<\/ol>\n<p>  \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 The Container Runtime Interface (CRI) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<pre><code class=\"plaintext\">$ docker run -d &lt;my-container-image>\u00a0<\/code><\/pre>\n<p>  The Container Network Interface (CNI) \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430:<\/p>\n<ol>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0430;  <\/li>\n<li>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.  <\/li>\n<\/ol>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043a \u0441\u0435\u0442\u0438 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u043c\u0443 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 IPv4 \u0438\u043b\u0438 IPv6, \u0438\u043b\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/archive.shivam.dev\/docker-networking-explained\/\">Docker<\/a> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 Ethernet \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0445 \u043a \u0441\u0435\u0442\u0438 \u043f\u043e \u0442\u0438\u043f\u0443 \u043c\u043e\u0441\u0442\u043e\u0432 (bridge). <a href=\"https:\/\/itnext.io\/kubernetes-is-hard-why-eks-makes-it-easier-for-network-and-security-architects-ea6d8b2ca965\">AWS-CNI<\/a> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u043a\u0430 (Virtual Private Cloud\/VPC).<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 CNI \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441. \u041d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: kubelet \u0437\u043d\u0430\u0435\u0442 \u043e\u0431 IP-\u0430\u0434\u0440\u0435\u0441\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043e\u043d \u0432\u044b\u0437\u0432\u0430\u043b Container Network Interface, \u0430 \u0432\u043e\u0442 Control Plane \u043d\u0435 \u0437\u043d\u0430\u0435\u0442. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0443\u0437\u043b\u0443, \u0447\u0442\u043e \u0443 \u043f\u043e\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043e\u043d \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u2014 \u0434\u043b\u044f Control Plane \u043f\u043e\u0434 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 kubelet \u2014 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 IP-\u0430\u0434\u0440\u0435\u0441, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Control Plane. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 etcd \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434, \u043d\u043e \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w6\/ea\/8c\/w6ea8cpyfpi4gxcuvsaldllq2eq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/w6\/ea\/8c\/w6ea8cpyfpi4gxcuvsaldllq2eq.png\"\/><br \/>  <i>Kubelet \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442 \u0443 Control Plane, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0i\/29\/rl\/0i29rlukot5b7xws_k9xl6lgfvk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/0i\/29\/rl\/0i29rlukot5b7xws_k9xl6lgfvk.png\"\/><br \/>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0443\u0437\u0435\u043b, kubelet \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043f\u043e\u0434\u0443<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fo\/lb\/js\/folbjs9at7sgdrxwvzotqrijfbi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fo\/lb\/js\/folbjs9at7sgdrxwvzotqrijfbi.png\"\/><br \/>  Kubelet \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0442\u0440\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c: Container Runtime Interface, Container Network Interface \u0438 Container Storage Interface<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/l4\/ro\/8r\/l4ro8rsi4exnm3yj-thdvcb7yk0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/l4\/ro\/8r\/l4ro8rsi4exnm3yj-thdvcb7yk0.png\"\/><br \/>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u043f\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0437\u043b\u0435 \u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f IP-\u0430\u0434\u0440\u0435\u0441<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ar\/d3\/g8\/ard3g8e1fojrj7ssrullzzii0dc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ar\/d3\/g8\/ard3g8e1fojrj7ssrullzzii0dc.png\"\/><br \/>  Kubelet \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0430 \u0432 Control Plane<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0434 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0442\u043e \u043f\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d \u0438 \u0433\u043e\u0442\u043e\u0432 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u043d \u0447\u0430\u0441\u0442\u044c c\u0435\u0440\u0432\u0438\u0441\u0430, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0433\u043e\u0432, \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h2>\u041f\u043e\u0434\u044b \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b<\/h2>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 c\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0439:<\/p>\n<ul>\n<li><b>selector <\/b>\u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0442\u0440\u0430\u0444\u0438\u043a.  <\/li>\n<li><b>targetPort <\/b>\u2014 \u043f\u043e\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430.  <\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e YAML-\u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1 kind: Service metadata: \u00a0\u00a0name: my-service spec: \u00a0\u00a0ports: \u00a0\u00a0- port: 80 \u00a0\u00a0\u00a0\u00a0targetPort: 3000 \u00a0\u00a0selector: \u00a0\u00a0\u00a0\u00a0name: app<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code> &lt;kubectl apply.><\/code> Kubernetes \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0435\u0442\u043a\u043e\u0439, \u0447\u0442\u043e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 selector (name: app), \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u044b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-startup-probes\/#define-a-tcp-liveness-probe\">readiness<\/a>-\u043f\u0440\u043e\u0431\u044b.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f endpoint. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441 \u2014 10.0.0.3, \u0430 targetPort \u2014 3000, \u0442\u043e Kubernetes \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0435\u0434\u0438\u043d\u044b\u0439 enpdoint.<\/p>\n<pre><code class=\"plaintext\">IP address + port = endpoint --------------------------------- 10.0.0.3 \u00a0 + 3000 = 10.0.0.3:3000<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c endpoint \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 etcd \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u2014 Endpoint.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/b> \u0412 Kubernetes \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f endpoint \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430 IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 (10.0.0.3:3000), \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 Endpoint, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c endpoint.<\/p>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442 Endpoint \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Kubernetes, \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 Kubernetes. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c Endpoint \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"plaintext\">$ kubectl get services,endpoints NAME \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 TYPE\u00a0 \u00a0 \u00a0 \u00a0 CLUSTER-IP \u00a0 \u00a0 EXTERNAL-IP \u00a0 PORT(S) service\/my-service-1 \u00a0 ClusterIP \u00a0 10.105.17.65 \u00a0 &lt;none>\u00a0 \u00a0 \u00a0 \u00a0 80\/TCP service\/my-service-2 \u00a0 ClusterIP \u00a0 10.96.0.1\u00a0 \u00a0 \u00a0 &lt;none>\u00a0 \u00a0 \u00a0 \u00a0 443\/TCP  NAME \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ENDPOINTS endpoints\/my-service-1 \u00a0 172.17.0.6:80,172.17.0.7:80 endpoints\/my-service-2 \u00a0 192.168.99.100:8443  $<\/code><\/pre>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442 Endpoint \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u043e\u0440\u0442\u044b \u043f\u043e\u0434\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430:<\/p>\n<ol>\n<li>\u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u043f\u043e\u0434;  <\/li>\n<li>\u0432\u044b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0435 \u043f\u043e\u0434;  <\/li>\n<li>\u043c\u0435\u0442\u043a\u0430 \u043f\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.  <\/li>\n<\/ol>\n<p>  \u0418\u0442\u0430\u043a, Kubernetes \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 Endpoint \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0443\u0437\u043b\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"plaintext\">$ kubectl get services,endpoints NAME \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 TYPE\u00a0 \u00a0 \u00a0 \u00a0 CLUSTER-IP \u00a0 \u00a0 EXTERNAL-IP \u00a0 PORT(S) service\/my-service-1 \u00a0 ClusterIP \u00a0 10.105.17.65 \u00a0 &lt;none>\u00a0 \u00a0 \u00a0 \u00a0 80\/TCP service\/my-service-2 \u00a0 ClusterIP \u00a0 10.96.0.1\u00a0 \u00a0 \u00a0 &lt;none>\u00a0 \u00a0 \u00a0 \u00a0 443\/TCP  NAME \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ENDPOINTS endpoints\/my-service-1 \u00a0 172.17.0.6:80,172.17.0.7:80,172.17.0.8:80 endpoints\/my-service-2 \u00a0 192.168.99.100:8443  $<\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, endpoint \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 Control Plane, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442 Endpoint \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qy\/uu\/jp\/qyuujp-nkrjmo8-6gmbygyiu5qs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qy\/uu\/jp\/qyuujp-nkrjmo8-6gmbygyiu5qs.png\"\/><br \/>  <i>\u0412 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u043e\u0434\u0438\u043d \u043f\u043e\u0434, \u043e\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443. \u0412 etcd \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a\u0430\u043a \u043e \u043f\u043e\u0434\u0435, \u0442\u0430\u043a \u0438 \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fe\/lv\/wa\/felvwayae_6f0k9wapvnykarjjg.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/fe\/lv\/wa\/felvwayae_6f0k9wapvnykarjjg.jpeg\" data-blurred=\"true\"\/><br \/>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/36\/eb\/i1\/36ebi1lnkewisocd6qylaq5sojs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/36\/eb\/i1\/36ebi1lnkewisocd6qylaq5sojs.png\"\/><br \/>  Kubernetes \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434 \u0438 \u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441, \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043a \u043d\u043e\u0432\u043e\u043c\u0443 endpoint. \u0422\u0430\u043a \u0447\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u043e\u0431\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sa\/r2\/7t\/sar27tb_y3vdqdkes3zzhk_uj90.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sa\/r2\/7t\/sar27tb_y3vdqdkes3zzhk_uj90.png\"\/><br \/>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/t5\/vy\/pg\/t5vypgfyh3e-nsrk1_bbzck2isy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/t5\/vy\/pg\/t5vypgfyh3e-nsrk1_bbzck2isy.png\"\/><br \/>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435: \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0430, \u0430 \u043d\u043e\u0432\u044b\u0439 endpoint \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/to\/vu\/zc\/tovuzc06uezq1ebrko7ckzqts04.png\" data-src=\"https:\/\/habrastorage.org\/webt\/to\/vu\/zc\/tovuzc06uezq1ebrko7ckzqts04.png\"\/><br \/>  \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/5_\/_u\/7h\/5__u7hlgseqjt8spqqq81iwbtjk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/5_\/_u\/7h\/5__u7hlgseqjt8spqqq81iwbtjk.png\"\/><br \/>  \u0421\u0435\u0440\u0432\u0438\u0441 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 endpoint, \u0438 \u043f\u043e\u0434 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/mr\/5t\/yw\/mr5tywxcera9xkls38rp5zdulz0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/mr\/5t\/yw\/mr5tywxcera9xkls38rp5zdulz0.png\"\/><br \/>  Kubernetes \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435<\/i><\/p>\n<p>  \u0413\u043e\u0442\u043e\u0432 \u043b\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e? \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u043a\u043e\u0435-\u0447\u0442\u043e!<\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 endpoint \u0432 Kubernetes<\/h2>\n<p>  Endpoint \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes.<\/p>\n<p>  <b>Kube-proxy<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 endpoint, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c iptables-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u0443\u0437\u043b\u0430\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 Endpoint \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, kube-proxy \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 iptables-\u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/id\/27\/ti\/id27tibauf-vfb6lmfdxh5jthzm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/id\/27\/ti\/id27tibauf-vfb6lmfdxh5jthzm.png\"\/><br \/>  <i>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0440\u0435\u0445\u0443\u0437\u043b\u043e\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0434\u0430\u043c\u0438 \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0432 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 etcd<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/up\/4m\/a8\/up4ma88c43janlgugcrytbbf9p8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/up\/4m\/a8\/up4ma88c43janlgugcrytbbf9p8.png\"\/><br \/>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 c\u0435\u0440\u0432\u0438\u0441?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/8r\/43\/yr\/8r43yrievrgvgjer_o0qsdhrxsy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/8r\/43\/yr\/8r43yrievrgvgjer_o0qsdhrxsy.png\"\/><br \/>  Kubernetes \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 Endpoint \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 endpoint (\u043f\u0430\u0440\u044b IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u043f\u043e\u0440\u0442\u043e\u0432) \u0438\u0437 \u043f\u043e\u0434\u043e\u0432<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bp\/6i\/-a\/bp6i-at726vievbq7qfqicabehk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bp\/6i\/-a\/bp6i-at726vievbq7qfqicabehk.png\"\/><br \/>  \u0414\u0435\u043c\u043e\u043d Kube-proxy \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Endpoint<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/cv\/ss\/fb\/cvssfbcu1rxpmp6w5onaznwlkdy.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/cv\/ss\/fb\/cvssfbcu1rxpmp6w5onaznwlkdy.jpeg\" data-blurred=\"true\"\/><br \/>  \u041a\u043e\u0433\u0434\u0430 Endpoint \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, kube-proxy \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a endpoint<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_e\/ik\/1w\/_eik1wqdaltt-myyzqyuwojo2wu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_e\/ik\/1w\/_eik1wqdaltt-myyzqyuwojo2wu.png\"\/><br \/>  Kube-proxy \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 endpoint \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f iptables-\u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0437\u043b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/i><\/p>\n<p>  <b>Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/b> \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043e\u043d \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a endpoint. \u041f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Ingress-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0432 \u043f\u043e\u043b\u0435 destination \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1 kind: Ingress metadata: \u00a0\u00a0name: my-ingress spec: \u00a0\u00a0rules: \u00a0\u00a0- http: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0paths: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- backend: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0service: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: my-service \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0port: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0number: 80 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0path: \/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pathType: Prefix<\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f Endpoint \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430.\u00a0<\/p>\n<p>  Ingress \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043f\u043e\u0434\u0443, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0432\u0438\u0441. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 Endpoint \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, Ingress \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043e\u0432.\u00a0<\/p>\n<p>  \u041d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Kubernetes, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 CoreDNS \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 DNS \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/#headless-services\">\u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0438\u043f\u0430 Headless<\/a>, CoreDNS \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u0438 \u0436\u0435 endpoint \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Service Mesh, \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Istio \u0438\u043b\u0438 Linkerd, \u2014 <a href=\"https:\/\/thebsdbox.co.uk\/2020\/03\/18\/Creating-a-Kubernetes-cloud-doesn-t-required-boiling-the-ocean\/\">\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0443\u0441\u043b\u0443\u0433 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0442\u0438\u043f\u0430 LoadBalancer<\/a> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b Kubernetes.<\/p>\n<p>  \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 endpoint \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ij\/nq\/w2\/ijnqw22bbbz2rfrvyoy3ierv6bu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ij\/nq\/w2\/ijnqw22bbbz2rfrvyoy3ierv6bu.png\"\/><br \/>  <i>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u043f\u043b\u0438\u043a \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sq\/x0\/tk\/sqx0tklsrztcatd9otsfs4mthhk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sq\/x0\/tk\/sqx0tklsrztcatd9otsfs4mthhk.png\"\/><br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043a \u043f\u043e\u0434\u0430\u043c \u0447\u0435\u0440\u0435\u0437 Ingress, \u0442\u043e \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u0435 \u044d\u0442\u043e \u0432 Ingress-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435 (YAML-\u0444\u0430\u0439\u043b\u0435)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/mf\/nq\/eo\/mfnqeoo9kzmyt0misxl-7bh_ube.png\" data-src=\"https:\/\/habrastorage.org\/webt\/mf\/nq\/eo\/mfnqeoo9kzmyt0misxl-7bh_ube.png\"\/><br \/>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 &lt;kubectl apply -f ingress.yaml>, Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0444\u0430\u0439\u043b \u043e\u0442 Control Plane<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tz\/6q\/rm\/tz6qrmdath4cn8rgth2orszk188.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tz\/6q\/rm\/tz6qrmdath4cn8rgth2orszk188.png\"\/><br \/>  \u0412 YAML-\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 Ingress \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e serviceName, \u043e\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/k3\/we\/2x\/k3we2xf2osl81ggovpcghhq9cze.png\" data-src=\"https:\/\/habrastorage.org\/webt\/k3\/we\/2x\/k3we2xf2osl81ggovpcghhq9cze.png\"\/><br \/>  Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a endpoint \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0433\u043e. \u0422\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a endpoint \u043f\u043e\u0434\u043e\u0432<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/g7\/ol\/jx\/g7oljxkdtipk-zgphsudgogs6sq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/g7\/ol\/jx\/g7oljxkdtipk-zgphsudgogs6sq.png\"\/><br \/>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/aq\/j_\/gj\/aqj_gjtxq3bugr3lsb2lbbsju74.png\" data-src=\"https:\/\/habrastorage.org\/webt\/aq\/j_\/gj\/aqj_gjtxq3bugr3lsb2lbbsju74.png\"\/><br \/>  \u0412\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a Kubernetes \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e endpoint<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bw\/43\/jl\/bw43jlp4wmntyk_ntmyip22-8yo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bw\/43\/jl\/bw43jlp4wmntyk_ntmyip22-8yo.png\"\/><br \/>  Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint. \u041f\u043e\u0441\u043b\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a endpoint<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/im\/av\/u3\/imavu3ga6ppamcyf2rngs3ma3om.png\" data-src=\"https:\/\/habrastorage.org\/webt\/im\/av\/u3\/imavu3ga6ppamcyf2rngs3ma3om.png\"\/><br \/>  Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043f\u043e\u0434\u0443<\/i><\/p>\n<h2>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0438\u0442\u043e\u0433<\/h2>\n<p>  \u0412\u043e\u0442 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443:<\/p>\n<ol>\n<li>\u041f\u043e\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 etcd.  <\/li>\n<li>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0437\u0435\u043b \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0443\u0437\u0435\u043b \u0432 etcd.  <\/li>\n<li>Kubelet \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u043d\u043e\u0432\u043e\u043c \u0438 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0435.  <\/li>\n<li>Kubelet \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 The Container Runtime Interface (CRI).  <\/li>\n<li>Kubelet \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 The Container Network Interface (CNI).  <\/li>\n<li>Kubelet \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u043c\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 The Container Storage Interface (CSI).  <\/li>\n<li>CSI \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441.  <\/li>\n<li>Kubelet \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441 Control Plane.  <\/li>\n<li>IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 etcd.  <\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u043e\u0434 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443:<\/p>\n<ol>\n<li>Kubelet \u0436\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f readiness-\u043f\u0440\u043e\u0431\u044b.  <\/li>\n<li>\u0412\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 Endpoint (\u043e\u0431\u044a\u0435\u043a\u0442\u044b) \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438.  <\/li>\n<li>\u0412 \u0441\u043f\u0438\u0441\u043e\u043a Endpoint \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 endpoint (\u043f\u0430\u0440\u0430 IP-\u0430\u0434\u0440\u0435\u0441 + \u043f\u043e\u0440\u0442).  <\/li>\n<li>Kube-proxy \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint. Kube-proxy \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 iptables-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430.  <\/li>\n<li>Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430.  <\/li>\n<li>CoreDNS \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint. \u0415\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441 headless, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c DNS \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.  <\/li>\n<li>\u041e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f Service \u2014 LoadBalancer, \u0442\u043e \u043d\u043e\u0432\u044b\u0439 endpoint \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.  <\/li>\n<li>\u0412\u0441\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint.  <\/li>\n<li>\u041b\u044e\u0431\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.  <\/li>\n<\/ol>\n<p>  <\/p>\n<h2>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430<\/h2>\n<p>  \u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:\u00a0<br \/>  \u00a0  <\/p>\n<ul>\n<li>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c endpoint \u0438\u0437 Endpoint (\u043e\u0431\u044a\u0435\u043a\u0442\u0430).  <\/li>\n<li>Readiness-\u043f\u0440\u043e\u0431\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438 endpoint \u0441\u0440\u0430\u0437\u0443 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 Control Plane. \u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 kube-proxy, Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, DNS, service mesh \u0438 \u0442. \u0434.  <\/li>\n<li>\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u043e\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u044e\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 IP-\u0430\u0434\u0440\u0435\u0441.  <\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043d\u044f\u0442\u044b \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lg\/v9\/gu\/lgv9guhbim9bo9sxpogbgi0nsis.png\" data-src=\"https:\/\/habrastorage.org\/webt\/lg\/v9\/gu\/lgv9guhbim9bo9sxpogbgi0nsis.png\"\/><br \/>  <i>\u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430  \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 API Kubernetes<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/15\/co\/_o\/15co_onu7b4ppcgzpst0v1goeos.png\" data-src=\"https:\/\/habrastorage.org\/webt\/15\/co\/_o\/15co_onu7b4ppcgzpst0v1goeos.png\"\/><br \/>  <i>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 Endpoint-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432 Control Plane<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0w\/nj\/ah\/0wnjahehbck5abq0eyvtj8zyfhw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/0w\/nj\/ah\/0wnjahehbck5abq0eyvtj8zyfhw.png\"\/><br \/>  <i>Endpoint-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 API \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u0438\u0437 Endpoint-\u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ip\/tk\/s5\/iptks504pmq9p3kmxubid0ejxxq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ip\/tk\/s5\/iptks504pmq9p3kmxubid0ejxxq.png\"\/><br \/>  <i>\u041a\u0442\u043e \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Endpoint? \u041e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0442 Kube-proxy, Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, CoreDNS \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rk\/jp\/km\/rkjpkmwcb1khj9qeg4hbt4ckcgk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rk\/jp\/km\/rkjpkmwcb1khj9qeg4hbt4ckcgk.png\"\/><br \/>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 kube-proxy, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445<\/i><\/p>\n<p>  Kubelet \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442:<\/p>\n<ol>\n<li>CSI \u2014 \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0442\u043e\u043c\u043e\u0432 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.  <\/li>\n<li>CNI \u2014 \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043e\u0442 \u0441\u0435\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u0430.  <\/li>\n<li>CRI \u2014 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.  <\/li>\n<\/ol>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, Kubernetes \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0448\u0430\u0433\u0438, \u043a\u0430\u043a \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0430, \u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cd\/ki\/qk\/cdkiqks6ducvweng4rz7x8d9p8w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cd\/ki\/qk\/cdkiqks6ducvweng4rz7x8d9p8w.png\"\/><br \/>  <i>\u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430  \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 API Kubernetes<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/iz\/to\/yx\/iztoyxta1vzwbsr0ycjexcsjsxe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/iz\/to\/yx\/iztoyxta1vzwbsr0ycjexcsjsxe.png\"\/><br \/>  <i>Kubelet \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 Control Plane \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2r\/ln\/jw\/2rlnjw-ufi2uofwmusxr4hdnat8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/2r\/ln\/jw\/2rlnjw-ufi2uofwmusxr4hdnat8.png\"\/><br \/>  Kubelet \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430 Container Runtime Interface, Container Network Interface \u0438 Container Storage Interface<\/i><\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0430, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 endpoint \u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f kubelet \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u043f\u043e\u0434 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, Kubernetes \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 kubelet \u0441\u043e\u043e\u0431\u0449\u0438\u0442 IP-\u0430\u0434\u0440\u0435\u0441, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 endpoint \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041d\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438.<br \/>  \u00a0<br \/>  \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d \u0434\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 endpoint?<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xp\/fc\/n7\/xpfcn7uf-s7h2cx3kgc-_a23rcw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/xp\/fc\/n7\/xpfcn7uf-s7h2cx3kgc-_a23rcw.png\"\/><br \/>  <i>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 endpoint \u0438 \u043f\u043e\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/-s\/ck\/g4\/-sckg4om4cf_fztf6ow5wadmy5s.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/-s\/ck\/g4\/-sckg4om4cf_fztf6ow5wadmy5s.jpeg\" data-blurred=\"true\"\/><br \/>  \u0417\u043d\u0430\u0447\u0438\u0442, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c endpoint \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a kube-proxy \u043e\u0431\u043d\u043e\u0432\u0438\u0442 iptables-\u043f\u0440\u0430\u0432\u0438\u043b\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zx\/25\/rm\/zx25rm04ig94s0tgjgbmwg4m9se.png\" data-src=\"https:\/\/habrastorage.org\/webt\/zx\/25\/rm\/zx25rm04ig94s0tgjgbmwg4m9se.png\"\/><br \/>  \u0418\u043b\u0438 \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0435\u0437\u0442\u0438 \u0438 \u043f\u043e\u0434 \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a endpoint \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/i><\/p>\n<h2>Graceful shutdown<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a endpoint \u0443\u0434\u0430\u043b\u0435\u043d \u0438\u0437 kube-proxy \u0438\u043b\u0438 Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0418, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b.<\/p>\n<p>  Kubernetes \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 IP-\u0430\u0434\u0440\u0435\u0441, \u043d\u043e \u043f\u043e\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, kube-proxy, CoreDNS \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u0412 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 Kubernetes \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a endpoint, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u043e\u0434. \u041d\u043e Kubernetes \u0442\u0430\u043a \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f endpoint. Endpoint-\u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/endpoint-slices\/\">Endpoint Slices<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e Kubernetes \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u0436\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f endpoint?<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b SIGTERM. \u0412\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e endpoint \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435:<\/p>\n<ol>\n<li>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c.  <\/li>\n<li>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 SIGTERM.  <\/li>\n<li>\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 WebSockets).  <\/li>\n<li>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.  <\/li>\n<\/ol>\n<p>  <b>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Kubernetes \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b SIGTERM \u0438 \u0436\u0434\u0435\u0442 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/b><\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c 15 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0445\u0432\u0430\u0442\u0438\u0442 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f endpoint \u0438\u0437 kube-proxy, Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, CoreDNS \u0438 \u0442. \u0434. \u0418 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043f\u043e\u0434 \u0434\u043e \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0427\u0435\u0440\u0435\u0437 15 \u0441\u0435\u043a\u0443\u043d\u0434 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0438\u043b\u0438 \u043b\u044e\u0431\u044b\u043c\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438) \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/b> \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0435\u0440\u0435\u0437 20 \u0438\u043b\u0438 25 \u0441\u0435\u043a\u0443\u043d\u0434. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435: Kubernetes \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0435\u0440\u0435\u0437 30 \u0441\u0435\u043a\u0443\u043d\u0434, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/#hook-handler-execution\">terminationGracePeriodSeconds<\/a>.<\/p>\n<h3>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f?<\/h3>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0436\u0434\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b SIGTERM Kubernetes \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0445\u0443\u043a preStop \u0432 \u043f\u043e\u0434\u0435. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c preStop \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0432 15 \u0441\u0435\u043a\u0443\u043d\u0434.\u00a0<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1 kind: Pod metadata: \u00a0\u00a0name: my-pod spec: \u00a0\u00a0containers: \u00a0\u00a0\u00a0\u00a0- name: web \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0image: nginx \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ports: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- name: web \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0containerPort: 80 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0lifecycle: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0preStop: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exec: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0command: [\"sleep\", \"15\"]<\/code><\/pre>\n<p>  \u0425\u0443\u043a preStop \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod-lifecycle\/\">\u0445\u0443\u043a\u043e\u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e\u0434\u0430<\/a>.<\/p>\n<h3>15-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u2014 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f?<\/h3>\n<p>  \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rl\/i6\/ox\/rli6oxnauypw_j3msc_beimjnzu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rl\/i6\/ox\/rli6oxnauypw_j3msc_beimjnzu.png\"\/><br \/>  <i>\u0412\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 kubelet \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ao\/gf\/ip\/aogfipoeaiv53k9wl7pkzwlsbxo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ao\/gf\/ip\/aogfipoeaiv53k9wl7pkzwlsbxo.png\"\/><br \/>  \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u0434\u0430 \u0435\u0441\u0442\u044c preStop-\u0445\u0443\u043a, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0435\u0440\u0432\u044b\u043c<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ae\/0j\/he\/ae0jhee0g5hljiwdut--fql4bha.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ae\/0j\/he\/ae0jhee0g5hljiwdut--fql4bha.png\"\/><br \/>  \u041a\u043e\u0433\u0434\u0430 preStop \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, kubelet \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0438\u0433\u043d\u0430\u043b SIGTERM. \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 long-lived-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wf\/a4\/h2\/wfa4h2ikqeqeoyfdzegjm2f6zh8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wf\/a4\/h2\/wfa4h2ikqeqeoyfdzegjm2f6zh8.png\"\/><br \/>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0435\u0441\u0442\u044c 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0445\u0443\u043a preStop. \u0415\u0441\u043b\u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f, \u0442\u043e kubelet \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b SIGKILL \u0438 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ml\/86\/mm\/ml86mmhf7vfatp4ocazfzszrpli.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ml\/86\/mm\/ml86mmhf7vfatp4ocazfzszrpli.png\"\/><br \/>  Kubelet \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 Control Plane \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430<\/i><\/p>\n<h2>Grace periods \u0438 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u0435\u043d? \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442\u0435, Kubernetes \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u043e\u0434.<\/p>\n<p>  Kubernetes \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0437 \u0432 \u0441\u0432\u043e\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438, Kubernetes \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e.\u00a0<\/p>\n<pre><code class=\"plaintext\">apiVersion: apps\/v1 kind: Deployment metadata: \u00a0\u00a0name: app spec: \u00a0\u00a0replicas: 3 \u00a0\u00a0selector: \u00a0\u00a0\u00a0\u00a0matchLabels: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: app \u00a0\u00a0template: \u00a0\u00a0\u00a0\u00a0metadata: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0labels: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: app \u00a0\u00a0\u00a0\u00a0spec: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0containers: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- name: app \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# image: nginx:1.18 OLD \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0image: nginx:1.19 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ports: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- containerPort: 3000<\/code><\/pre>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0438, \u0438 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 YAML-\u0444\u0430\u0439\u043b, Kubernetes:<\/p>\n<ul>\n<li>\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441 \u043d\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430;  <\/li>\n<li>\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440;  <\/li>\n<li>\u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0430.  <\/li>\n<\/ul>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u044d\u0442\u0438 \u0448\u0430\u0433\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b. Kubernetes \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0446\u0438\u043a\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434 \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 readiness-\u043f\u0440\u043e\u0431\u044b.<\/p>\n<h3>\u0416\u0434\u0435\u0442 \u043b\u0438 Kubernetes \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443?<\/h3>\n<p>  \u041d\u0435\u0442, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 10 \u043f\u043e\u0434\u043e\u0432 \u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 20 \u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f, \u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u043e\u0434 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.  <\/li>\n<li>\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434 \u0433\u043e\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e Kubernetes \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439.  <\/li>\n<li>\u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0436\u0438\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 20 \u0441\u0435\u043a\u0443\u043d\u0434.  <\/li>\n<\/ol>\n<p>  \u0427\u0435\u0440\u0435\u0437 20 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438, \u0430 \u0432\u0441\u0435 10 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0434\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u0412 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432 \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 10 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0438 10 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e\u0434\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/p5\/hy\/_z\/p5hy_zdpjsm9majnoltj3qz7uec.png\" data-src=\"https:\/\/habrastorage.org\/webt\/p5\/hy\/_z\/p5hy_zdpjsm9majnoltj3qz7uec.png\"\/><\/p>\n<p>  \u0427\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 graceful-\u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 readiness-\u043f\u0440\u043e\u0431\u043e\u0439, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e (\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e) \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<h3>\u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e?<\/h3>\n<p>  \u041d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 long-running-\u0437\u0430\u0434\u0430\u0447<\/h2>\n<p>  \u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b? \u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430?<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0442\u0440\u0435\u043c\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u043c\u0438. \u041a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e, \u0438 \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0443 \u043f\u043e\u0434\u043e\u0432 \u0435\u0441\u0442\u044c 30 \u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b.<\/p>\n<h3>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0434\u0430?<\/h3>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c terminationGracePeriodSeconds \u0434\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432. \u041d\u043e endpoint \u043f\u043e\u0434\u0430 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qo\/mb\/gb\/qombgbji46zgk0wkkwgm9gvqii0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qo\/mb\/gb\/qombgbji46zgk0wkkwgm9gvqii0.png\"\/><\/p>\n<p>  \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c \u043f\u043e\u0434\u0430. \u041f\u043e\u0447\u0435\u043c\u0443?<\/p>\n<p>  \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u043e\u0434\u0435 Prometheus \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u043d\u044f endpoint \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0435 \u043f\u043e\u0434, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 endpoint \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430 Prometheus!<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 terminationGracePeriodSeconds \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u043c. \u0422\u043e \u0435\u0441\u0442\u044c long-running-\u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0438\u0434\u0435\u043e. \u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0438\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/484344\/\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043f\u043b\u0438\u043a \u0434\u043e \u043d\u0443\u043b\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447.\u00a0<\/p>\n<blockquote><p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/484344\/\">\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p><\/blockquote>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <b>rainbow deployment<\/b>. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u043e\u0434\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 gracePeriod.<\/p>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 WebSocket \u2014 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437. \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043d\u044f, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u2014 \u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439, \u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440.<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u0436\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u043e\u0434\u044b, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043f\u043b\u0438\u043a \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0448\u043b\u044b\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435: \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0432 \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0438\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0438\u043b\u0438 \u0436\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c preStop-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<p>  \u041f\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0435 endpoint \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0431\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432 kube-proxy, Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, CoreDNS \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u043f\u043e\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 long-running \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0438\u043b\u0438 WebSockets, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c rainbow deployment. \u0412 rainbow deployment \u0432\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0435\u0435 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f long-running-\u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043f\u043b\u0438\u043a \u0434\u043e \u043d\u0443\u043b\u044f.<\/p>\n<blockquote><p>\u041c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 <a href=\"https:\/\/mcs.mail.ru\/containers\/\">\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 Kubernetes aaS<\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/519366\/\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u0411\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u0435\u0433\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0435 \u0438 \u0434\u0430\u0434\u0438\u0442\u0435 \u043d\u0430\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f 3000 \u0431\u043e\u043d\u0443\u0441\u043d\u044b\u0445 \u0440\u0443\u0431\u043b\u0435\u0439.<\/p><\/blockquote>\n<p>  <b>\u0427\u0442\u043e \u0435\u0449\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c:<\/b><\/p>\n<ol>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/559370\/\">Self-Hosted, \u0438\u043b\u0438 Kubernetes \u0434\u043b\u044f \u0431\u043e\u0433\u0430\u0442\u044b\u0445: \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u2014 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c<\/a>  <\/li>\n<li><a href=\"https:\/\/mcs.mail.ru\/blog\/launching-a-project-in-kubernetes\">\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Kubernetes \u0437\u0430 60 \u043c\u0438\u043d\u0443\u0442<\/a>  <\/li>\n<li><a href=\"https:\/\/t.me\/k8s_mail\">\u041d\u0430\u0448 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b \u0441 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 \u043e Kubernetes<\/a>  <\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/company\/vk\/blog\/654471\/\"> https:\/\/habr.com\/ru\/company\/vk\/blog\/654471\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=2004216989903634&amp;ev=habr_devops&amp;noscript=1\" width=\"1\" style=\"display: none;\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=2004216989903634&amp;ev=habr_k8s&amp;noscript=1\" width=\"1\" style=\"display: none;\"><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ph\/3s\/jo\/ph3sjojaeb1gtddulmpsbwhr4ks.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/ph\/3s\/jo\/ph3sjojaeb1gtddulmpsbwhr4ks.jpeg\" data-blurred=\"true\"\/><br \/>  <a href=\"https:\/\/www.deviantart.com\/maciejkuciara\/art\/Landing-deck-156346266\">Landing deck by maciejkuciara<\/a><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0432 \u2014 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Kubernetes. \u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 cron \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0415\u0449\u0435 \u043f\u043e\u0434\u044b \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0443\u0437\u0435\u043b \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 (unschedulable).<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/mcs.mail.ru\/containers\/\">Kubernetes aaS Mail.ru Cloud Solutions<\/a> \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0430.<\/p>\n<blockquote><p><b>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438:<\/b><\/p>\n<p>  <b>Graceful shutdown <\/b>\u2014 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.<\/p>\n<p>  <b>Zero downtime deploy <\/b>\u2014 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438.<\/p><\/blockquote>\n<p>  <a href=\"https:\/\/learnk8s.io\/a\/graceful-shutdown-and-zero-downtime-deployments-in-kubernetes\/graceful-shutdown.pdf\">\u041f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0430 (PDF)<\/a>.  <\/p>\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-330739","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330739","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=330739"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330739\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=330739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=330739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=330739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}