{"id":377042,"date":"2024-05-25T21:00:09","date_gmt":"2024-05-25T21:00:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=377042"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-25T21:00:09","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=377042","title":{"rendered":"<span>\u0422\u0440\u0438 \u043e\u0442\u0442\u0435\u043d\u043a\u0430 Kubernetes Operator, \u0438\u043b\u0438 \u0447\u0435\u043c \u0441\u043b\u0443\u0448\u0430\u0435\u0442 Prometheus<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>00. \u041e \u0447\u0451\u043c<\/h2>\n<p>\u0412\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u043a\u0430\u043a \u0432 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0435\u043c-\u0442\u043e, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c Golang \u0441\u043e\u0440\u0441-\u043a\u043e\u0434 Prometheus \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Hashicorp Vault \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kubernetes API \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c.<\/p>\n<p>\u0418 \u0445\u043e\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430, \u0441\u043a\u043e\u0440\u0435\u0435, \u043d\u0430\u0431\u0440\u043e\u0441\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 &#8212; \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0432 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0432\u0441\u0451 \u0436\u0435, \u0443\u0432\u0435\u0440\u0435\u043d, \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0439\u0434\u0443\u0442 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u0432\u043e\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0441\u0442\u0435\u0441\u043d\u044f\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u0438 \u0438\u0445 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0442\u0435\u043a\u0441\u0442\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0441\u043a\u043e\u0431\u043e\u0447\u043a\u0430\u0445.<\/p>\n<p>\u042d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0433\u0430\u0439\u0434 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0410\u041f\u0418 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0432 \u043d\u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0418 \u0434\u0430, \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043b\u0438\u0448\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u044b \u0432 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u043e\u0442\u0430\u0442\u044c \u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0437\u0440\u0435\u0435\u0442\u0435 \u043d\u0435\u0447\u0442\u043e \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b &#8212; \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u0439\u0434\u043a\u0430\u0440-\u0418\u043d\u0436\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432<\/p>\n<\/li>\n<\/ol>\n<h2>01. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/h2>\n<p>\u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0438 \u0441\u0430\u043c\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0434\u043b\u044f maintainance \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0442\u043d\u043e\u0433\u043e (\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e) Kubernetes \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>$  k api-resources &#8212;api-group=monitoring.coreos.com<\/p>\n<pre><code>NAME                  SHORTNAMES   APIVERSION                       NAMESPACED   KIND ... podmonitors           pmon         monitoring.coreos.com\/v1         true         PodMonitor probes                prb          monitoring.coreos.com\/v1         true         Probe prometheuses          prom         monitoring.coreos.com\/v1         true         Prometheus ... servicemonitors       smon         monitoring.coreos.com\/v1         true         ServiceMonitor thanosrulers          ruler        monitoring.coreos.com\/v1         true         ThanosRuler<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0430\u043f\u0438\u0433\u0440\u0443\u043f\u043f\u0430 (\u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442) \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043e\u0431 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<p>$  k get prometheuses.monitoring.coreos.com -o yaml<\/p>\n<pre><code>kind: Prometheus ... podMonitorSelector:     matchLabels: { team: main } serviceMonitorNamespaceSelector: {} serviceMonitorSelector:     matchLabels: { team: main } ...<\/code><\/pre>\n<p>\u041e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0432 \u043d\u0435\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0436\u0435\u043b\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 mongodb) \u0434\u043b\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u0432\u043e\u0438\u0445 MLops \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 &#171;\u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c&#187; \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/\" rel=\"noopener noreferrer nofollow\">https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/<\/a><\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0425-\u0410-\u0412-\u0421<\/p>\n<p><code>\u0425- deploy app mongodb + service\/\/ default app<br \/> A- deploy exporter = \/metrics\/\/ +1 POD<br \/> B- expose exporter\/\/ +1 SVC<br \/> C- deploy servicemonitor\/\/ +1 custom resource<\/code><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u0434\u0430 (\u0410) \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (\u0412), \u044d\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 (\u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441), \u0443\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (mongodb), \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 Prometheus-like \u0444\u043e\u0440\u043c\u0430\u0442 \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043f\u043e\u0440\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \/metrics), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u043e\u0436\u0438\u0434\u0430\u0435\u0442&#187; \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (\u0412) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e, &#171;\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c&#187;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0446\u0435\u043d\u0438\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u0435\u043f\u043b\u043e\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0438 \u043f\u043e\u0434\u0430, \u043d\u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0442\u043e\u0447\u043d\u044e \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043e\u043d\u0438 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187; \u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c (\u0441 \u0440\u0430\u0432\u043d\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e) \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 &#171;\u0441\u0432\u043e\u0438&#187; \u043f\u043e\u0434\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f mongodb-exporter<\/p>\n<p>$   k get service | grep mongodb<\/p>\n<pre><code>NAMEAGE my-exporter-prometheus-mongodb-exporter11s<\/code><\/pre>\n<p>$   k describe service my-exporter-prometheus-mongodb-exporter<\/p>\n<pre><code>Name:              my-exporter ... Labels:            app.kubernetes.io\/instance=my-exporter                    app.kubernetes.io\/managed-by=Helm                    app.kubernetes.io\/name=prometheus-mongodb-exporter ... Selector:          app.kubernetes.io\/instance=my-exporter,                    app.kubernetes.io\/name=prometheus-mongodb-exporter Type:              ClusterIP ... Port:              metrics  9216\/TCP TargetPort:        metrics\/TCP Endpoints:         192.168.1.8:9216<\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b &#171;\u0445\u0440\u0430\u043d\u044f\u0442&#187; (\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442) \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u041f\u043e\u0434\u0430\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0415\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0438\u0436\u0435.<br \/> \u041b\u0435\u0439\u0431\u043b \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e (\u043e\u0434\u0438\u043d \u0440\u0430\u0437), \u0447\u0442\u043e\u0431\u044b &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u043b IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0434\u043e\u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b (\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437).<\/p>\n<p>$  k get endpoints my-exporter-prometheus-mongodb-exporter<\/p>\n<pre><code>NAME                    ENDPOINTS           AGE my-exporter-...         192.168.1.8:921611s<\/code><\/pre>\n<p>$  k get pods &#8212;selector name=prometheus-mongodb-exporter -o wide<\/p>\n<pre><code>NAME                    READYSTATUS AGEIP my-exporter-...         1\/1Running11s192.168.1.8<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0435 (\u0410,\u0412,\u0421). \u0427\u0442\u043e\u0431\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 (\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439) \u0440\u0435\u0441\u0443\u0440\u0441 servicemonitor (\u0437\u0432\u0435\u043d\u043e \u0421), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 &#171;\u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c&#187; \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435 (\u0412). \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c servicemonitor, \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0440\u0430\u0437\u0443 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e \u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0438\u043d\u0444\u043e \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438, \u0438\u0437 \u043d\u0435\u0433\u043e \u0437\u0430\u0431\u0435\u0440\u0451\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0434\u043e\u0432, \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u041d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438 \u0441\u0442\u044f\u043d\u0435\u0442 endpoint\u044b \u0438 \u0437\u0430\u0432\u0435\u0434\u0451\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0422\u0430\u0440\u0433\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0438\u0434 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 podmonitor, \u043e\u043d \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u043e\u0434\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a servicemonitor \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 &#8212; \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043f\u043e\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/\" rel=\"noopener noreferrer nofollow\">https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/<\/a>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442, \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0437\u0430 \u044d\u0442\u043e\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>{team: mlops}<\/code><\/p>\n<pre><code># set configs for MLops team  helm repo add prometheus-community https:\/\/prometheus-community.github.io\/helm-charts helm show values prometheus-community\/prometheus-mongodb-exporter > values.yaml   # values.yaml ...   serviceMonitor:     additionalLabels:#&lt;-- discover new ServiceMonitor   team: mlops#&lt;-- match labels key-value ...  # install exporter MLops team  helm install mongodb-exporter prometheus-community\/prometheus-mongodb-exporter -f values.yaml<\/code><\/pre>\n<p>\u0425\u0435\u043b\u044c\u043c \u0441\u043e\u0437\u0434\u0430\u043b \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 service (\u0437\u0432\u0435\u043d\u043e \u0412) \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 servicemonitor (\u0437\u0432\u0435\u043d\u043e \u0421)<\/p>\n<p>$  k get service | grep exporter<\/p>\n<pre><code>NAMEAGE mongodb-exporter-prometheus-mongodb-exporter10s ... ...<\/code><\/pre>\n<p>$  k get servicemonitors<\/p>\n<pre><code>NAMEAGE mongodb-exporter-prometheus-mongodb-exporter11s prometheus-kube-prometheus-alertmanager2... prometheus-kube-prometheus-apiserver2... ... prometheus-kube-prometheus-kube-etcd2... prometheus-kube-prometheus-kube-proxy2... prometheus-kube-prometheus-kube-scheduler2... prometheus-kube-prometheus-operator2... prometheus-kube-prometheus-prometheus2... ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 (\u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0410,\u0412,\u0421), \u043c\u044b \u0447\u0435\u0440\u0435\u0437 \u0425\u0435\u043b\u044c\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 3 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043b\u0435\u0439\u0431\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f servicemonitor (\u0421)<\/p>\n<details class=\"spoiler\">\n<summary># A. exporter-pod.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Pod metadata:   ...   labels:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter-86cfc677c9-ml4d6   namespace: gpt-24 ... spec:   containers:   - name: mongodb-exporter     args:     - --web.listen-address=:9216     ...     env:     ...     ports:     ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary># B. exporter-service.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Service metadata:   ...   labels:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter   namespace: gpt-24   ... spec:   clusterIP: ...   ports:   - ...   selector:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   sessionAffinity: None   type: ClusterIP<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary># C. smon.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: monitoring.coreos.com\/v1 kind: ServiceMonitor metadata:   ...   labels:     team: mlops                     #&lt;--- TEAM LABEL     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter   namespace: gpt-24                 #&lt;--- EXPORTER NAMESPACE   ... spec:   ...   namespaceSelector:   ...   selector:                         #&lt;--- DISCOVER SERVICE(B)     matchLabels:       app.kubernetes.io\/instance: mongodb-exporter       app.kubernetes.io\/name: prometheus-mongodb-exporter<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>C\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0432\u0441\u0451, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439, \u044d\u0442\u043e \u0441\u043a\u0440\u0435\u0439\u043f\u0438\u0442\u044c \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a. \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438, \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0442\u043e-\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c. &#171;\u0421\u043b\u0443\u0448\u0430\u0442\u044c&#187; \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0438 \u043f\u043e\u0434\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0438\u0437 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u043d \u0438\u0449\u0435\u0442 \u0438\u043d\u0444\u043e \u043f\u0440\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043a\u043b\u0430\u0434\u0451\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441, \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u0446\u0435\u043b\u0438.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u044d\u0442\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Go), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, &#171;\u0441\u043b\u0443\u0448\u0430\u0435\u0442&#187; \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0430, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, &#171;\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434&#187; \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043e\u0442 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0435\u0439 \u0432\u0438\u0434\u0430 <strong>deployment + service + \u043a\u043e\u043d\u0444\u0438\u0433\u0438<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c \u043c\u044b \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c YAML-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#171;\u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c&#187; \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043e\u043d\u0438 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0445\u043e\u0434\u044f\u0442 \u0410\u043b\u0435\u0440\u0442\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438, \u0413\u0440\u0430\u0444\u0430\u043d\u0430 \u0441 \u0434\u044d\u0448\u0431\u043e\u0440\u0434\u0430\u043c\u0438 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0437\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0422\u0430\u0440\u0433\u0435\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0434\u0432\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 &#8212; <strong>ServiceMonitor<\/strong> \u0438 <strong>Podmonitor<\/strong>, \u044d\u0442\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 (\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435) \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0442\u0435\u043a\u0430 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043f\u043e\u0434\u044b \u0438 \u0438\u0445 \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438. <strong>ServiceMonitor<\/strong> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0438\u0437 \u0441\u043e\u0440\u0441-\u043a\u043e\u0434\u0430 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>servicemonitor.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/prometheus-operator\/...\/v1  package v1 import ( metav1 \"k8s.io\/apimachinery\/pkg\/apis\/meta\/v1\" ... )  type ServiceMonitorSpec struct { \/\/ ...label from the Kubernetes Service \/\/ will be used as the job label for all metrics. JobLabel string              `json:\"jobLabel,omitempty\"`  \/\/ List of endpoints... Endpoints    []Endpoint    `json:\"endpoints\"`  \/\/ ...select the Endpoints objects. Selector metav1.LabelSelector `json:\"selector\"`  \/\/ ...namespaces the Endpoints objects are discovered from. NamespaceSelectorNamespaceSelector`json:\"namespaceSelector,omitempty\"`          \/\/ ... ... }   \/\/--- kubectl apply -f servicemonitor.yaml   package v1 import ( ... v1 \"k8s.io\/client-go\/applyconfigurations\/meta\/v1\" )  \/\/ ...declarative configuration of the ServiceMonitor type for... apply. type ServiceMonitorApplyConfiguration struct { v1.TypeMetaApplyConfiguration    `json:\",inline\"` *v1.ObjectMetaApplyConfiguration `json:\"metadata,omitempty\"` Spec  *ServiceMonitorSpecApplyConfiguration `json:\"spec,omitempty\"` }   func ServiceMonitor(name, namespace string) *ServiceMonitorApplyConfiguration { b := &amp;ServiceMonitorApplyConfiguration{} b.WithName(name) b.WithNamespace(namespace)\/\/&lt;--- \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \"\u0436\u0438\u0432\u0443\u0442\" \u0432 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 b.WithKind(\"ServiceMonitor\") b.WithAPIVersion(\"monitoring.coreos.com\/v1\") return b }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0446\u0435\u043b\u044f\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u043a\u0430\u043a \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0434\u043b\u044f \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043b\u0435\u0439\u0431\u043b \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>main: &lt;LIST-1>, mlops: &lt;LIST-2>, frontend: &lt;LIST-...<\/code>  ),  \u0430 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0434\u043e\u043b\u0436\u0435\u043d &#171;\u0441\u043b\u0443\u0448\u0430\u0442\u044c&#187; \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f Namespace \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0438, \u0435\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0435\u043c\u0443 \u043b\u0435\u0439\u0431\u043b, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u0430\u043a\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0435\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u0435\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435. \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 <strong>TeamLabelMonitor<\/strong>, \u0432 \u043d\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u043b\u0435\u0439\u0431\u043b\u044b \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<details class=\"spoiler\">\n<summary>teamlabelmonitor-example.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: ... kind: TeamLabelMonitor ... spec: namespace: ... teamReferences: - team: mlops   accounts: [ \"kubeflow\", \"spark\", \"sa-gpu\", \"mlops\", ... ] - team: frontend   accounts: [ \"web\", \"frontend\", ...] - ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>teamlabelmonitor.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>package v1 import ( metav1 \"k8s.io\/apimachinery\/pkg\/apis\/meta\/v1\" ... )  type TeamLabelMonitor struct { metav1.TypeMeta`json:\",inline\"` metav1.ObjectMeta`json:\"metadata,omitempty\"` Spec TeamLabelMonitorSpec`json:\"spec\"` } ... type TeamLabelMonitorSpec struct { ... \/\/ Team selector... TeamReference objects. TeamReferences []TeamReference`json:\"teamReferences\"`  \/\/ Self object namespace where monitor located. Namespacestring`json:\"namespace\"` ... }  type TeamReference struct { \/\/ will be used as value of label to match Namespaces. Team         string`json:\"team\"`  \/\/ List of Kubernetes Service Account resources. Accounts    []string`json:\"accounts\"` }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440. \u0414\u0430\u0431\u044b \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043e\u0442 \u0434\u0435\u043f\u043b\u043e\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 custom resource definitions (CRD), \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043f\u0435\u0440\u0432\u0430 \u043e\u043f\u0438\u0441\u0430\u0442\u044c json-\u0441\u0445\u0435\u043c\u0443 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u0443 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0440\u044f\u0442\u044c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043b\u0438 \u043f\u043e\u043b\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c, \u0442\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0432 CRD. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438) \u043b\u044e\u0431\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0440\u043e\u043b\u0435\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0445\u0435\u043c CRD \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p>\u0410 \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0432\u0435\u0440\u0445\u044d\u0434 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0410\u041f\u0418 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e, \u0432\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445<\/p>\n<ul>\n<li>\n<p>\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (\u043e\u0431\u044a\u0435\u043a\u0442\u044b) \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 1 \u0432\u0438\u0434\/\u0433\u0440\u0443\u043f\u043f\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 1 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043a\u044d\u0448\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u0438\u043b\u0443 \u0441\u0432\u043e\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438, \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u044f\u0437\u0430\u043d &#171;\u0443\u043c\u0435\u0442\u044c&#187; \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0430\u0441\u0441\u043e\u0440\u0442\u0438\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0438 \u0434\u043b\u044f \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u043e\u0440\u0441-\u043a\u043e\u0434\u0430<\/p>\n<details class=\"spoiler\">\n<summary>operator.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/prometheus-operator\/...\/server  ... \/\/ waits for the informers' caches to be synced. func (c *Operator) waitForCacheSync(ctx context.Context) error { for _, infs := range []struct { name                 string informersForResource *informers.ForResource }{ {\"PrometheusAgent\", c.promInfs}, {\"ServiceMonitor\", c.smonInfs}, \/\/&lt;--- \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 {\"PodMonitor\", c.pmonInfs},\/\/&lt;--- \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u043e\u0434\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 {\"Probe\", c.probeInfs}, {\"ScrapeConfig\", c.sconInfs}, {\"ConfigMap\", c.cmapInfs}, {\"Secret\", c.secrInfs}, {\"StatefulSet\", c.ssetInfs}, } { \/\/ Skipping informers that were not started. if infs.informersForResource == nil { continue } ... } } <\/code><\/pre>\n<\/p>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0435\u0449\u0451 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043f\u043e &#171;\u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c&#187; \u043b\u0435\u0439\u0431\u043b\u0430\u043c \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 &#171;\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438&#187; \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c\u0438, \u0442\u043e \u0432 Prometheus \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043b\u0435\u0439\u0431\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043d\u0430\u0431\u043e\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0440\u0443\u0442\u0438\u043d\u044b: \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 &#171;\u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435&#187; \u043b\u0435\u0439\u0431\u043b\u044b \u0432 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f (&#171;\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435&#187;) \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (ServiceMonitor, Podmonitor). \u0422\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d (\u043b\u044e\u0431\u043e\u0433\u043e) \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441.<\/p>\n<h2>02. \u0418\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/h2>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 2 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439<\/p>\n<ul>\n<li>\n<p>\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \/\/ \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u043c\u0430\u043f\u043e\u0432, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0432 \u0432\u0438\u0434\u0435 YAML-\u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u0447\u043a\u0430\u043c\u0438 (\u0440\u0435\u0434\u043a\u043e)<\/p>\n<\/li>\n<li>\n<p>\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \/\/ \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0430\u0434\u0440\u0435\u0441\u0430 \u0446\u0435\u043b\u0435\u0439, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0435\u0442\u0440\u0438\u043a, \u0433\u0435\u043d\u0435\u0440\u044f\u0442\u0441\u044f &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 (\u0447\u0430\u0441\u0442\u043e)<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437 \u0441\u043e\u0440\u0441-\u043a\u043e\u0434\u0430 \u043f\u0440\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u044d\u0448\u0435\u0439 (\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432\u044b\u0448\u0435, smonInfs, pmonInfs, informers&#8230;) \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f, \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 &#171;\u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0435&#187; \u0437\u043d\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u0443\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u0441\u0432\u043e\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u0418\u043d\u0444\u043e\u0440\u043c\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 &#171;\u0441\u043b\u0443\u0448\u0430\u0442\u044c&#187; \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c &#171;\u0437\u043d\u0430\u043d\u0438\u044f&#187; \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. Prometheus Operator \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u0437\u0430\u0442\u043e\u0447\u0435\u043d&#187; \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 (persisted) \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 &#171;\u043f\u043e\u0441\u0442-\u0444\u0430\u043a\u0442\u0443\u043c&#187; \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438).<\/p>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u044b (\u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0435\u0439 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0435 (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430).<br \/> \u041e\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 10 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432), \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430\u043c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0446\u0435\u043b\u0435\u0439.<br \/> \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440, \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0443\u0436\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0412 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u044f \u043d\u0430\u0431\u0440\u0430\u043b 5 \u043f\u0443\u043d\u043a\u0442\u043e\u0432:<\/p>\n<p><strong>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 (\u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0432 YAML)<\/strong><br \/>1. \u0432 Prometheus \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b<br \/>     # \u0438\u043d\u0444\u043e \u0438\u0437 \u043a\u0430\u043a\u0438\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b<br \/> 2. \u0432 Monitors \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b<br \/>    # \u043a\u0430\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b (\u0438\u043b\u0438 \u043f\u043e\u0434\u044b)<br \/> 3. C\u0435\u0440\u0432\u0438\u0441\u044b (\u0438\u043b\u0438 \u043f\u043e\u0434\u044b) \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<br \/>    # \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 (\u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430)<br \/><strong>\u0414\u0430\u043b\u044c\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u0441\u044f \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e<\/strong><br \/> 4. \u043d\u0430 servicemonitor \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440<br \/>    # \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0438\u0437 servicemonitor, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 &#171;\u0441\u043b\u0443\u0448\u0430\u0442\u044c&#187; \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<br \/> 5. \u043d\u0430 informer \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u044d\u043d\u0434\u043b\u0435\u0440<br \/>    # \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u0437\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043e\u043d &#171;\u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442&#187; \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u043a\u044d\u0448), \u0438 \u043f\u043e\u0437\u0436\u0435 \u0432\u0441\u0435 \u043a\u044d\u0448\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u043a\u0430\u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u0441\u043c. \u0432\u044b\u0448\u0435). \u0412 \u043a\u043e\u0434\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0424\u0430\u0431\u0440\u0438\u043a\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>operator.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/prometheus-operator\/...\/server   \/\/ ...creates a new controller. func New(ctx context.Context, c operator.Config,..) (*Operator, error) { ... o := &amp;Operator{ config: prompkg.Config{ ... Annotations:      c.Annotations,\/\/&lt;--- \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 Annotations Labels:           c.Labels,\/\/&lt;--- \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 Labels }, ... } ... o.smonInfs, err = informers.NewInformersForResource(  \/\/&lt;--- \u0441\u0435\u0440\u0432\u0438\u0441-\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b  informers.NewMonitoringInformerFactories( c.Namespaces.AllowList,\/\/&lt;--- \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u041d\u0421 c.Namespaces.DenyList,\/\/&lt;--- \u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 mclient, resyncPeriod,\/\/&lt;--- \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 ... ), monitoringv1.SchemeGroupVersion.WithResource(monitoringv1.ServiceMonitorName), ) if err != nil { return nil, fmt.Errorf(\"error creating servicemonitor informers: %w\", err) } ... }   \/\/ addHandlers adds the eventhandlers to the informers. func (c *Operator) addHandlers() { ... c.smonInfs.AddEventHandler(operator.NewEventHandler( c.logger, ... monitoringv1.ServiceMonitorsKind,\/\/&lt;--- \u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 c.enqueueForMonitorNamespace,\/\/&lt;--- \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0443 ))  c.pmonInfs.AddEventHandler(operator.NewEventHandler( c.logger, ... monitoringv1.PodMonitorsKind,\/\/&lt;--- \u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0434\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 c.enqueueForMonitorNamespace,\/\/&lt;--- \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0443 )) ... }   \/\/ Run the controller. func (c *Operator) Run(ctx context.Context) error { go c.rr.Run(ctx)\/\/&lt;--- \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b Reconciler defer c.rr.Stop() ... go c.smonInfs.Start(ctx.Done())\/\/&lt;--- \u0441\u0442\u0430\u0440\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 go c.pmonInfs.Start(ctx.Done())\/\/&lt;--- \u0441\u0442\u0430\u0440\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 ... if err := c.waitForCacheSync(ctx); err != nil {\/\/&lt;--- \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f return err } c.addHandlers()\/\/&lt;--- \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u043e\u0432 ... &lt;-ctx.Done() return nil } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u0430\u043c\u0438 \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u043d\u043e \u0432 \u0445\u043e\u0440\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0445 &#171;\u043d\u0435\u0432\u0430\u0436\u043d\u043e \u043a\u0435\u043c&#187;, \u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 &#171;\u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442&#187;, \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0412 \u044d\u0442\u043e\u043c \u0436\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0431\u0430\u0433\u0430 \u0438 \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433\u0430, \u043a\u043e\u0433\u0434\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u0430\u0432\u0442\u043e-\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a \u0435\u0451 \u043e\u0436\u0438\u0434\u0430\u043b\u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0435, \u043a\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0441\u0432\u043e\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u0438\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 servicemonitor \u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445. \u0418\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 &#171;\u0434\u043e\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f&#187; \u0434\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430, \u0433\u0434\u0435 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0435\u043d servicemonitor, \u0438 \u0442\u043e\u0433\u0434\u0430 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 servicemonitor, \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440 \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u0422\u0430\u0440\u0433\u0435\u0442 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0435, \u0432 \u0413\u0440\u0430\u0444\u0430\u043d\u0443 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0443\u0447\u043a\u0430\u043c\u0438 (\u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435, \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e), \u043a\u043e\u0433\u0434\u0430 \u0438\u0434\u0435\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430\u0447\u043d\u0451\u0442 \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u0438\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ol>\n<li>\n<p><strong>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438<\/strong><br \/>\u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 matchLabels: <code>{ team=aaa }<\/code>, \u043d\u043e \u0438 \u0441 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438 <code>{ team=bbb }<\/code>, \u0430 \u043f\u043e\u0437\u0436\u0435 \u0438 \u0441 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438 <code>{ team=\u0441\u0441\u0441 }<\/code>, \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 <code>team=bbb<\/code> \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 <code>team=ttt<\/code>&#8230;<\/p>\n<\/li>\n<li>\n<p><strong>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/strong><br \/>\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u0435\u0448\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><strong>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u0440\u043e\u043b\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/strong><br \/>\u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u043c\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c\u0438 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/p>\n<\/li>\n<li>\n<p><strong>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043f\u043b\u043e\u044f<\/strong><br \/>\u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 \u0441 \u0448\u0430\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u043c\u0438\u0440\u0430\u044e\u0442 \u0432 \u0440\u0430\u0437\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u0438\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c) \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c &#171;\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e&#187; \u0441\u043a\u0440\u0435\u0439\u043f\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0435\u043c \u043d\u0443\u0436\u043d\u043e, \u043a\u0430\u043a-\u0442\u043e, \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u043b\u0435\u0439, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0410,\u0412,\u0421)<\/p>\n<p><code>\u0425- deploy app mongodb + service\/\/<br \/> A- deploy exporter = \/metrics\/\/<br \/> B- expose exporter\/\/<br \/> C- deploy servicemonitor\/\/ +1 custom resource  &lt;-- auto?<\/code><\/p>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b CICD, \u0447\u0442\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0435\u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0437\u0430\u043f\u0443\u0441\u043a Helm-\u0447\u0430\u0440\u0442\u0430 \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 CICD \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0437\u0430 \u043f\u0443\u043d\u043a\u0442\u043e\u043c (\u0421).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u044b \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b? \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0432 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043c\u0430\u043d\u0434\u0435 (team:mlops) \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0439\u0431\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b (team:mlops)<\/p>\n<\/li>\n<li>\n<p>\u0432 \u044d\u0442\u043e\u043c \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f servicemonitor \u0441 \u043b\u0435\u0439\u0431\u043b\u043e\u043c (team:mlops)<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0435 \u0440\u043e\u043b\u0438 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (team:mlops) \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u044d\u0442\u043e\u0442 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0438 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 Kubernetes Operator, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u0434\u043b\u044f <code>(team:mlops)<\/code> <\/p>\n<details class=\"spoiler\">\n<summary>namespace-mlops.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Namespace metadata:   name: gpt-24   labels:     team: mlops     app.kubernetes.io\/name: gpt-24<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u043d\u0430\u0448 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c 2 \u0432\u0435\u0449\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438)<br \/> 1) \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0441 \u043b\u0435\u0439\u0431\u043b\u043e\u043c <code>(team:mlops)<\/code><\/p>\n<details class=\"spoiler\">\n<summary>servicemonitor-mlops.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: monitoring.coreos.com\/v1 kind: ServiceMonitor metadata:   ...   labels:     team: mlops                     #&lt;--- TEAM LABEL   name: mlops-gpt-24   namespace: gpt-24                 #&lt;--- NAMESPACE TO INSTALL   ... spec:   ...   namespaceSelector:                #&lt;--- NAMESPACE TO LISTEN     matchLabels:       app.kubernetes.io\/name: gpt-24   selector:                         #&lt;--- MATCH ALL SERVICES   ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>2) \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>(team:mlops)<\/code>.  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u044b\u0445 \u0440\u043e\u043b\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>cluster-role-binding.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>--- # shared-cluster-role apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRole metadata:   name: watcher rules: - apiGroups: [\"\"]   resources: [\"pods\", \"jobs\", \"namespaces\"]   verbs: [\"get\", \"watch\", \"list\"] - apiGroups: [\"monitoring.coreos.com\"]   resources: [\"smon\", \"pmon\"]   verbs: [\"get\", \"watch\", \"list\"] - ...  --- # service-accounts-binding apiVersion: rbac.authorization.k8s.io\/v1     kind: RoleBinding     metadata:       name: gpt-24-rolebinding       namespace: gpt-24     roleRef:       apiGroup: rbac.authorization.k8s.io       kind: ClusterRole       name: watcher     subjects:     - kind: ServiceAccount       name: mlops       namespace: mlops     - kind: ServiceAccount       name: mlops-prom       namespace: mlops-metrics ... #&lt;--- add mlops accounts<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0432 \u043b\u044e\u0431\u044b\u0445 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445 \u0441 \u043b\u0435\u0439\u0431\u043b\u043e\u043c <code>{ team: main }<\/code>.<\/p>\n<p>$  k get prometheuses.monitoring.coreos.com -o yaml<\/p>\n<pre><code>kind: Prometheus ... podMonitorSelector:     matchLabels: { team: main } serviceMonitorNamespaceSelector: {} serviceMonitorSelector:     matchLabels: { team: main } ...<\/code><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u0412 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0442\u043e\u043d\u0430, \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432 \u043f\u043e\u043a\u043e\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 <strong>serviceMonitorNamespaceSelector<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u0435\u0439\u0431\u043b\u044b \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 Kubernetes \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442, \u0438 \u0434\u043b\u044f &#171;\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0445&#187; \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f, &#171;\u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u0430\u044f&#187; \u043f\u043e\u0434 \u043b\u0435\u0439\u0431\u043b\u044b \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0427\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0440\u0441-\u043a\u043e\u0434 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>listwatch.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/prometheus-operator\/...\/listwatch  package listwatch import ( ... \"k8s.io\/apimachinery\/pkg\/watch\" \"k8s.io\/client-go\/tools\/cache\" corev1 \"k8s.io\/client-go\/kubernetes\/typed\/core\/v1\"  \"github.com\/prometheus-operator\/prometheus-operator\/pkg\/k8sutil\" )   func NewNamespaceListWatchFromClient( ctx context.Context, corev1Client corev1.CoreV1Interface, ...map[string]struct{} ) (cache.ListerWatcher, bool, error) { ... listWatchAllowed, reasons, err := k8sutil.IsAllowed( ctx, ssarClient, nil, \/\/ namespaces is a cluster-scoped resource. k8sutil.ResourceAttribute{ Resource: \"namespaces\", Verbs:    []string{\"list\", \"watch\"}, }, ) ... return cache.NewFilteredListWatchFromClient( corev1Client.RESTClient(), \"namespaces\", metav1.NamespaceAll,.. ), true, nil ... }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438 \u044d\u0442\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441\u044b \u0441\u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0435 \u043c\u0435\u0448\u0430\u044f \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u0422\u043e\u0433\u0434\u0430 \u043d\u0430\u0448 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c RBAC-\u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c,\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (ServiceMonitor, TeamLabelMonitor), \u0430, \u0437\u043d\u0430\u0447\u0438\u0442, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, &#171;\u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439&#187; \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043e\u0441\u0442\u0444\u0430\u043a\u0442\u0443\u043c-\u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0438, \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c &#171;\u0441\u043b\u0443\u0448\u0430\u0442\u044c&#187; \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>Namespace, ServiceAccount<br \/>  \/\/ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0432 Golang \u043f\u0430\u043a\u0435\u0442\u0435 listwatch (\u043a\u043e\u0434 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p>ServiceMonitor<br \/>  \/\/ \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>TeamLabelMonitor<br \/>  \/\/ \u0434\u043b\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u0447\u0438\u043d\u0433 \u043b\u0435\u0439\u0431\u043b\u043e\u0432 \u0438 \u0440\u043e\u043b\u0435\u0439 (\u0441\u043c.\u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441\u043e\u0440\u0441-\u043a\u043e\u0434\u0430 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0432\u044b\u0448\u0435, \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u044b (\u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u0434\u0430\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0433\u0438\u044e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u0441\u043c\u0435\u0442\u0447\u0438\u0442\u044c \u043b\u0435\u0439\u0431\u043b \u0438\u0437 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e Namespace \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0438\u0437 TeamLabelMonitor<\/p>\n<\/li>\n<li>\n<p>\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0447 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432 \u043d\u0430 Namespace \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 ServiceAccount<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0442\u0447 \u0432 \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0434\u0435\u043f\u043b\u043e\u0439<br \/>\/\/ \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 (\u0441\u043c. \u043d\u0438\u0436\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c ServiceMonitor<br \/>\/\/ \u0431\u044b\u043b\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b  # client-go\/applyconfigurations<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 TeamLabelMonitor CRD, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0438 \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043d\u0435\u0441\u0443\u0442 \u0442\u0443\u0434\u0430 \u0441\u0432\u043e\u0438 \u043b\u0435\u0439\u0431\u043b\u044b \u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0438\u043c \u0440\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0448 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0447\u043d\u0451\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u043b\u0435\u0439\u0431\u043b\u043e\u0432 \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430\u0445, \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0443\u043a\u0430\u0437\u0430\u043d \u043b\u0438 \u0432 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u043b\u0435\u0439\u0431\u043b <code>{team:xxx}<\/code>. \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u043b\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043b\u0435\u0439\u0431\u043b\u044b \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 Namespace \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441, \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0448\u0430\u0433 \u0440\u0430\u043d\u044c\u0448\u0435, \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f (persisted) \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0431\u0430\u0437\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u042d\u0442\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0432\u0435\u0434\u0430\u044e\u0442 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b <strong>Admission Controllers<\/strong>.<\/p>\n<h2>03. \u0421\u0430\u0439\u0434\u043a\u0430\u0440-\u0418\u043d\u0436\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432<\/h2>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 Admission \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u0430\u043f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 (persisted), \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u0434\u0430\u043b\u044c\u0448\u0435, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0444\u0430\u043a\u0442\u0443\u043c-\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u0410 \u043f\u043e\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0434\u043e\u0448\u0451\u043b \u0434\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (persisted), \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0436\u043d\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e Admission \u0446\u0435\u043f\u043e\u0447\u043a\u0435.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 Namespace \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 1.30 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043b\u0435\u0439\u0431\u043b\u043e\u0432 <code>{team:xxx}<\/code> \u043d\u0430 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u044d\u0442\u0430\u043f\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0432 <strong>Admission Validation Policy<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e YAML. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043f\u043e\u043b\u0438\u0441\u0438 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0441\u0442\u0435  <a href=\"https:\/\/habr.com\/ru\/articles\/811075\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/articles\/811075\/<\/a><\/p>\n<p>\u0410\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u043a\u0435\u043c-\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u0435\u0439\u0431\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 Namespace \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>admission-validating-policy-namespaces.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: admissionregistration.k8s.io\/v1 kind: ValidatingAdmissionPolicy ... spec:   failurePolicy: Fail   matchConstraints:     resourceRules:     - apiGroups:   [\"\"]       apiVersions: [\"v1\"]       operations:  [\"CREATE\", \"UPDATE\"]       resources:   [\"namespaces\"]   variables:   - name: labels     expression: \"object.metadata.labels\"   validations:     - expression: \"!('team' in labels)\"       messageExpression: \"'Missing Label: team'\"  --- # TODO: # kind: ValidatingAdmissionPolicyBinding<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u0438\u0441\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430\u0448 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e, \u0432\u044b\u0434\u043e\u0445\u043d\u0435\u0442 \u0438 \u043d\u0430\u0447\u043d\u0451\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u0435\u0439\u0431\u043b\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u043d\u0430 \u0430\u0434\u043c\u0438\u0448\u0435\u043d \u044d\u0442\u0430\u043f, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f; \u043d\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438 \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c, \u0438\u0431\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0432\u0435\u043d\u043e exporter (\u0410,\u0412), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0443\u0447\u043a\u0430\u043c\u0438:<\/p>\n<p><code>\u0425- deploy app mongodb + service\/\/<br \/> A- deploy exporter = \/metrics\/\/ +1 POD<br \/> B- expose exporter\/\/ +1 SVC<br \/> C- deploy servicemonitor\/\/<\/code><\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u0432\u0441\u0442\u0440\u043e\u0435\u043d&#187; \u0432 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u043c DevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c, \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u0438\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 (\u0410,\u0412) \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0434\u0435\u043f\u043b\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, ML\/AI \u0434\u0430\u0436\u0435 \u0434\u043b\u044f, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439, \u0430 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435, &#171;\u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445&#187; \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u0410 \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ol>\n<li>\n<p>\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442\u0430<br \/> \/\/ \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u0445<br \/> \/\/ \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0440\u0442, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432<br \/> \/\/ \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u043c\u0438\u0434\u0436 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u043e\u0434\u043d\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b<br \/> \/\/ \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u043e\u043c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u043e\u0434\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u044d\u0442\u0430\u043f\u0435. \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0410\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 YAML-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0445, \u041a\u0443\u0431\u0435\u0440\u0435\u043d\u0435\u0442\u0435\u0441 \u0410\u041f\u0418 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438. \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 YAML-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 (\u043b\u044e\u0431\u044b\u0445) \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u043e\u0433 \u0438\u0445 &#171;\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c&#187; \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Ingress Controller, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441, \u0443\u043c\u0435\u0435\u0442 &#171;\u0432\u0438\u0434\u0435\u0442\u044c&#187; Ingress \u0440\u0435\u0441\u0443\u0440\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>ingress.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: extensions\/v1beta1 kind: Ingress metadata: name: my-test-ingress spec:     ingressClassName: nginx     rules:     - http:         paths:         - path: \/records           pathType: Prefix           backend:             service:               name: records-back <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u044d\u0442\u043e\u0433\u043e Ingress \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u0430\u0441 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441<\/p>\n<p>$  k get svc -n ingress-nginx<\/p>\n<pre><code>NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                    ingress-nginx-controller             NodePort    10.10.88.88    &lt;none>        80:30080\/TCP,.. ingress-nginx-controller-admiss...<\/code><\/pre>\n<p>$  curl -L http:\/\/10.10.88.88:80\/records<\/p>\n<pre><code>&lt;!doctype html> &lt;title>Hello from Records Backend&lt;\/title> &lt;body style=\"...\"><\/code><\/pre>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c &#171;\u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c&#187;, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0441\u0443\u0431\u0434\u043e\u043c\u0435\u043d<\/p>\n<p>$  REDIRECT=&#187;nginx.ingress.kubernetes.io\/temporal-redirect&#187;<br \/>$  k annotate ingress my-test-ingress $REDIRECT=&#8217;https:\/\/apps.company.ru&#8217;<\/p>\n<details class=\"spoiler\">\n<summary>ingress-with-annotaion.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: extensions\/v1beta1 kind: Ingress metadata: name: my-test-ingress annotations: nginx.ingress.kubernetes.io\/temporal-redirect: https:\/\/apps.company.ru spec:     ingressClassName: nginx     rules:     - http:         paths:         - path: \/records ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>Ingress Controller \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u044d\u0442\u0443 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0438 &#171;\u0441\u0430\u043c&#187; \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0432 \u043f\u043e\u0434\u0435 ingress-nginx-controller \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \/etc\/&#8230;\/nginx.conf \u0438 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0438 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432\u0435\u0440\u043d\u0451\u0442 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<p>$  curl -L http:\/\/10.10.88.88:80\/records<\/p>\n<pre><code>&lt;!doctype html> &lt;head>&lt;meta content=\"...Company has many features what you're looking for.\" &lt;title>Apps Company Ru&lt;\/title> &lt;body style=\"...\"><\/code><\/pre>\n<p>\u042d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0438 \u0431\u044b\u043b\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0441\u043a\u0440\u044b\u0442\u044b \u043f\u043e\u0434 \u043d\u0443\u0436\u043d\u0443\u044e \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0432 YAML-\u0444\u0430\u0439\u043b\u0435. \u0414\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 Ingress Nginx \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 <a href=\"https:\/\/github.com\/kubernetes\/ingress-nginx\/blob\/main\/docs\/user-guide\/nginx-configuration\/annotations.md\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/kubernetes\/ingress-nginx\/blob\/main\/docs\/user-guide\/nginx-configuration\/annotations.md<\/a><\/p>\n<p>Hashicorp Vault-K8S, \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u044d\u0442\u0430\u043f\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432 \u041f\u043e\u0434\u0430\u0445 \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b &#171;\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c&#187; (\u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c) \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b, \u0430, \u043c\u043e\u0436\u0435\u0442, \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c (\u0430\u0433\u0435\u043d\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432. Vault \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 (\u0431\u043e\u043b\u044c\u0448\u0435 50) \u0438 \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 agent-cache, ca, cert, cpu, mem, auth, \u0438 \u0442.\u0434. \u0412 \u0441\u043e\u0440\u0441-\u043a\u043e\u0434\u0435 \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>annotations.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/hashicorp\/vault-k8s\/...\/agent  package agent import ...  \/\/ Agent is the top level structure holding all the \/\/ configurations for the Vault Agent container. type Agent struct { Annotations map[string]string Inject bool\/\/ flag Namespace string\/\/ request from Pod *corev1.Pod\/\/ origin pod spec Secrets []*Secret\/\/ path in Vault &amp; filename Vault Vault\/\/ vault config ... }  const ( \/\/ ...is added to a pod after an injection is done. \/\/ There's only one valid status we care about: \"injected\". AnnotationAgentStatus = \"vault.hashicorp.com\/agent-inject-status\"  \/\/ ...should be true or false value, as parseable by parseutil.ParseBool AnnotationAgentInject = \"vault.hashicorp.com\/agent-inject\"  \/\/ ...any unique string after \"vault.hashicorp.com\/agent-inject-secret-\", \/\/ path in Vault where the secret is located. AnnotationAgentInjectSecret = \"vault.hashicorp.com\/agent-inject-secret\"  \/\/ ...configures what template to use for rendering the secrets. \/\/ should map to ...value provided in \"vault.hashicorp.com\/agent-inject-secret-\". AnnotationAgentInjectTemplate = \"vault.hashicorp.com\/agent-inject-template\"  \/\/ ...configures what template on disk to use for rendering the secrets. \/\/ should map to ...value provided in \"vault.hashicorp.com\/agent-inject-secret-\". AnnotationAgentInjectTemplateFile = \"vault.hashicorp.com\/agent-inject-template-file\"  \/\/ ...configures ...run a command after the secret is rendered. \/\/ should map to ...value provided in \"vault.hashicorp.com\/agent-inject-secret-\". AnnotationAgentInjectCommand = \"vault.hashicorp.com\/agent-inject-command\" ... )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0433\u043e some-application Vault Operator \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f pod, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044f \u0438\u0445 \u043d\u0430 3 \u0447\u0430\u0441\u0442\u0438<\/p>\n<ul>\n<li>\n<p>vault.hashicorp.com   # \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431-\u0445\u0443\u043a\u0430 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435)<\/p>\n<\/li>\n<li>\n<p>\/agent-inject               # \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>&#171;true&#187;                          # \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0435\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>someapp-deployment.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>... spec:   template:     metadata:       annotaions:         vault.hashicorp.com\/role: \"someapp\"         vault.hashicorp.com\/agent-inject: \"true\"         vault.hashicorp.com\/agent-inject-secret-frontend-conf.txt: \"someapp\/data\/frontend\/conf\" ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 Vault Operator &#171;\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b&#187;, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e Vault \u0438 \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0430\u043f\u0438\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u0427\u0435\u0440\u0435\u0437 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0438\u0437 Vault \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e some-application \u0432 \u0444\u0430\u0439\u043b\u0438\u043a\u0435 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0447\u0442\u043e, \u043a\u0430\u043a \u0431\u044b, \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442 \u043d\u0430 \u0431\u0435\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 &#171;\u0437\u0430\u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c&#187; \u043b\u044e\u0431\u043e\u0439 (\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439) \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441<\/p>\n<p>$  kubectl exec some-application &#8212; cat \/vault\/secrets\/frontend-conf.txt<\/p>\n<pre><code>  data: map[pass:my-password user:my-user]   metadata: ...<\/code><\/pre>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0434\u0435\u043f\u043b\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u043c\u0435\u0442\u0440\u0438\u043a (\u0410,\u0412) \u0442\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0434\u0435\u043f\u043b\u043e\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432 \u0441\u043f\u0435\u043a\u0438 \u043f\u043e\u0434\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u043c\u0443 &#171;\u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u043c\u0443&#187; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u043c\u044b &#171;\u043f\u0440\u043e\u0441\u0438\u043c&#187; \u0435\u0433\u043e \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 Vault Operator, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u0433\u0434\u0435 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>{inject:\"true\"}<\/code> \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d (\u0437\u0430\u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c) \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/p>\n<ol>\n<li>\n<p>\u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0440\u0442, \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/li>\n<li>\n<p>\u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043c\u0438\u0434\u0436 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u043e\u043c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e<\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>pod-with-annotations.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>...     metadata:       annotaions:         some-exporter.io\/inject: \"true\" some-exporter.io\/inject-image: &lt;EXPORTER-IMAGE>         some-exporter.io\/metrics-port: \"28888\"         some-exporter.io\/metrics-path: \"\/custom-metrics\"         some-exporter.io\/team-123: \"mlops\" ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>sidecar-with-annotations.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/hashicorp\/vault-k8s\/...\/agent  package agent import ...  type Agent struct {     Annotations map[string]string ImageNamestring     Inject      string     Metrics     []string     Pod         *corev1.Pod     ...     Team        []string }   const (     AnnotationInject      = \"some-exporter.io\/inject\" AnnotationInjectStatus= \"some-exporter.io\/inject-status\"     AnnotationInjectImage= \"some-exporter.io\/inject-image\"     AnnotationMetricsPath= \"some-exporter.io\/metrics-path\"     AnnotationMetricsPort= \"some-exporter.io\/metrics-port\"     AnnotationTeam= \"some-exporter.io\/team\" )   func New(pod *corev1.Pod) (*Agent, error) { sa, err := serviceaccount(pod) ... agent := &amp;{ Annotations: pod.Annotations, ImageName: pod.Annotations[AnnotationInjectImage], ... Pod: pod, Containers: []string{}, ... ServiceAccountToken: sa, Status: pod.Annotations[AnnotationInjectStatus], } ...     agent.Inject  = agent.inject()     agent.Metrics = agent.metrics()     agent.Team    = agent.team() ... return agent, nil }   func (a *Agent) inject() (string, error) {     raw, ok := a.Annotations[AnnotationInject]     if !ok {         return \"false\", nil     }     if raw == \"true\" || raw == \"1\" {         return \"true\", nil     }     if raw == \"false\" || raw == \"0\" {         return \"false\", nil     }     return \"\", errorBoolString() }   func (a *Agent) metrics() ([]string, error) {     path, ok := a.Annotations[AnnotationMetricsPath]     ...     port, ok := a.Annotations[AnnotationMetricsPort]     ...     return []string{port, path}, nil    \/\/&lt;--- [\"28888\", \"\/custom-metrics\"] }   func (a *Agent) team() ([]string, error) {     var Team []string     for annotation, value := range a.Annotations {         team, ok := strings.CutPrefix( annotation, AnnotationTeam+\"-\" )         if !ok {             continue         }         Team = []string{team, value}    \/\/&lt;--- [\"123\", \"mlops\"]         break     }     return Team, nil } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438\u043d\u0436\u0435\u043a\u0442\u0430, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Vault (\u0441\u043e\u0440\u0441-\u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u044b\u0448\u0435). \u042d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u043e\u0433 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>some-exporter.io\/inject-status: \"injected\"<\/code><br \/> \/\/ \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0448 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u044d\u0442\u0430\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440<\/p>\n<\/li>\n<li>\n<p><code>some-exporter.io\/inject-status: \"install\"<\/code><br \/> \/\/ \u0442\u0430\u043a \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u0447\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0444\u0430\u043a\u0442\u0443\u043c<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439, \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043d\u0435\u0433\u043e sidecar-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0438\u0434\u0436\u0435\u043c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438. \u0412 \u043a\u043e\u0434\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0432\u044d\u043b\u044c\u044e\u0441\u044b \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0440\u0443\u0440\u0430 \u0430\u043f\u0438-\u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 ( corev1.Container ) \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u043f\u0430\u0442\u0447\u0435\u043c. \u041a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u0438\u043c\u0438\u0434\u0436 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e exporter-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0433\u0434\u0435-\u0442\u043e \u0432 \u0440\u0435\u0434\u0436\u0438\u0441\u0442\u0440\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u043e\u0442 \u0442\u0430\u043a \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442 \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Vault Operator<\/p>\n<details class=\"spoiler\">\n<summary>sidecar-container<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/hashicorp\/vault-k8s\/...\/agent package agent import ( ... jsonpatch \"github.com\/evanphx\/json-patch\" corev1 \"k8s.io\/api\/core\/v1\" )   \/\/ ContainerSidecar creates a new container to be added to the pod... func (a *Agent) ContainerSidecar() (corev1.Container, error) { ... lifecycle := a.createLifecycle()\/\/&lt;--- helper func  newContainer := corev1.Container{ Name:         \"vault-agent\", Image:        a.ImageName,\/\/&lt;--- sidecar Env:          envs, Resources:    resources, VolumeMounts: volumeMounts, Lifecycle:    &amp;lifecycle, Command:      []string{\"\/bin\/sh\", \"-ec\"}, Args:         []string{arg}, } ... containerJson, err := json.Marshal(newContainer) ... patch, err := jsonpatch.DecodePatch([]byte(a.JsonPatch)) if err != nil { ...\"failed to decode JSON patch: %w\", err } newContainerJson, err := patch.Apply(containerJson) if err != nil { ...\"failed to apply JSON patch: %w\", err } newContainer = corev1.Container{} err = json.Unmarshal(newContainerJson, &amp;newContainer) if err != nil { return newContainer, err } return newContainer, nil }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c \u0434\u0435\u043f\u043b\u043e\u044f. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u044b\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u043d\u0435\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u0443 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c &#171;\u0437\u0430\u0442\u043e\u0447\u0435\u043d&#187; \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f. Kubernetes API \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \/mutate, \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u0410 \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b, \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Vault Injector \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (WebHook Server), \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440-\u0432\u0435\u0431\u0445\u0443\u043a<\/p>\n<details class=\"spoiler\">\n<summary>vault-injector<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/hashicorp\/vault-k8s\/...\/injector  package injector import ...  type Command struct { ... flagListen      string \/\/ Address of Vault Server flagVaultAuthTypestring \/\/ Type of Vault Auth Method to use flagVaultAuthPathstring \/\/ Mount path of the Vault Auth Method flagVaultNamespacestring \/\/ Vault enterprise namespace ... cert atomic.Value\/\/&lt;--- rewrite support  }   func (c *Command) Run(args []string) int { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() ... \/\/ Build the HTTP handler and server injector := agentInject.Handler{ VaultAddress:               c.flagVaultService, VaultAuthType:              c.flagVaultAuthType, VaultAuthPath:              c.flagVaultAuthPath, VaultNamespace:             c.flagVaultNamespace, ... }  mux := http.NewServeMux() mux.HandleFunc(\"\/mutate\", injector.Handle) mux.HandleFunc(\"\/health\/ready\", c.handleReady) ... mux.Handle(c.flagTelemetry.., promhttp.Handler())  \/\/ expose metrics ... var handler http.Handler = mux server := &amp;http.Server{ Addr:      c.flagListen, Handler:   handler, TLSConfig: tlsConfig, ... } injector.Log.Info(\"Starting handler..\") ... return 0 }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0431\u0445\u0443\u043a. \u041f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 Vault Agent Inject, \u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0437 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u041f\u043e\u0434 \u0441 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043f\u0430\u0442\u0447\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0441\u0445\u0435\u043c\u0435 \u041f\u043e\u0434\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 admission responce \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, &#171;\u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f&#187; \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u041f\u043e\u0434\u0430 \u0438 \u0437\u0430\u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0438\u043c\u0438\u0434\u0436\u0435\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430.<br \/> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c (<strong>WebHook Server<\/strong>), \u0438, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u0432\u0435\u0431\u0445\u0443\u043a\u0430 \u0441 \u0440\u043e\u043b\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u043f\u0438\u0433\u0440\u0443\u043f\u043f\u043e\u0439 <strong>admissionregistration<\/strong> \u0432 Kubernetes API. \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d (\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d) \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432, \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c. \u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435 \u0432 \u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>mutate-webhook<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/&lt;--- https:\/\/github.com\/hashicorp\/vault-k8s\/...\/agent-inject  package agent_inject import ( ... \"github.com\/hashicorp\/vault-k8s\/agent-inject\/agent\" admissionv1 \"k8s.io\/api\/admission\/v1\" corev1 \"k8s.io\/api\/core\/v1\" \"k8s.io\/client-go\/kubernetes\" )  \/\/ Handler is the HTTP handler for admission webhooks. type Handler struct { RequireAnnotationbool VaultAddress        string VaultAuthPath       string ... Clientset           *kubernetes.Clientset ... }   \/\/ http.HandlerFunc implementation webhook request for admission control. \/\/ ...should be registered or served via an HTTP server. func (h *Handler) Handle(w http.ResponseWriter, r *http.Request) { h.Log.Info(\"Request received\", \"Method\", r.Method, \"URL\", r.URL) ... var admResp admissionv1.AdmissionReview ... admResp.Response = h.Mutate(admReq.Request) ... resp, err := json.Marshal(&amp;admResp) ... if _, err := w.Write(resp); err != nil { h.Log.Error(\"error writing response\", \"Error\", err) } }   \/\/ Mutate takes an admission request and performs mutation if necessary, \/\/ returning the final API response. func (h *Handler) Mutate( req *admissionv1.AdmissionRequest ) *admissionv1.AdmissionResponse { \/\/ Decode the pod from the request var pod corev1.Pod if err := json.Unmarshal(req.Object.Raw, &amp;pod); err != nil { h.Log.Error(\"could not unmarshal request to pod: %s\", err) h.Log.Debug(\"%s\", req.Object.Raw) return &amp;admissionv1.AdmissionResponse{ UID: req.UID, Result: &amp;metav1.Status{ Message: err.Error(), }, } } ... \/\/&lt;--- build the basic response resp := &amp;admissionv1.AdmissionResponse{ Allowed: true, UID:     req.UID, }  \/\/&lt;--- checking if should inject agent inject, err := agent.ShouldInject(&amp;pod) ... agent.Init(&amp;pod, cfg) agentSidecar, err := agent.New(&amp;pod)  \/\/&lt;--- validating agent configuration ... agentSidecar.Validate() ...  \/\/&lt;--- creating patches for the pod patch, err := agentSidecar.Patch() resp.Patch = patch patchType := admissionv1.PatchTypeJSONPatch resp.PatchType = &amp;patchType  return resp }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u0430\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431\u0445\u0443\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0430\u0439\u0434\u043a\u0430\u0440-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445). \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c &#171;\u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u0437\u0430 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441&#187;, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u043c DevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u044d\u0442\u0430\u043f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0442\u043e \u0432 \u044d\u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440 &#171;\u0441\u0447\u0438\u0442\u0430\u0435\u0442&#187; \u0432\u0435\u0431-\u0445\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0430. \u0418 \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043a\u0438\u0439 \u0432\u0435\u0431\u0445\u0443\u043a \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u043d\u0451\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e (\u0432 \u0441\u0438\u043b\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d), \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>kubectl apply -f ...<\/code> \u043d\u0430\u0447\u043d\u0451\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f, \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043b\u0438\u043c\u0438\u0442\u0430\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0432\u0435\u0431\u0445\u0443\u043a-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 (\u0440\u0435\u043f\u043b\u0438\u043a \u043f\u043e\u0434\u043e\u0432) \u0438 \u044d\u043a\u0441\u043f\u043e\u0437\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c &#171;\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439&#187; \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438 \u043f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0435\u0431\u0445\u0443\u043a\u0430 \u0440\u0443\u0447\u043a\u0443 \/mutate \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u043c\u043e\u0436\u0435\u0442 (\u0431\u043e\u043b\u0435\u0435 \u0443\u043c\u043d\u043e) \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438 (<strong>WebHook Server<\/strong>) \u0438 \u043d\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0430\u0434\u043c\u0438\u0448\u0435\u043d-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443. \u0414\u043b\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0431\u043b\u0448\u0443\u0442\u0438\u043d\u0433\u0430 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043d\u043e, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043b\u043e\u0433\u043e\u0432 \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441-\u0430\u043f\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u0432 webhook. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0442\u0435\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u043a \u0441\u0445\u0435\u043c\u0435 \u0434\u0435\u043f\u043b\u043e\u044f, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u0435\u043f\u043b\u043e\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u043c\u0435\u0442\u0440\u0438\u043a.<\/p>\n<details class=\"spoiler\">\n<summary>deploy-exporter-injector.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: apps\/v1 kind: Deployment metadata:   name: exporter-injector ... spec:   replicas: 2   selector: ...   template: ...     spec:       serviceAccountName: \"exporter-injector\"       containers:         - name: sidecar           image: &lt;EXPORTER-IMAGE>           env:   ...  --- apiVersion: v1 kind: Service metadata:   name: exporter-agent-injector-svc   namespace: some-exporter ... spec:   ports: ...   selector: ...  --- apiVersion: v1 kind: ServiceAccount metadata:   name: exporter-injector ...  --- apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRole metadata:   name: exporter-injector-clusterrole ... rules: - apiGroups: [\"admissionregistration.k8s.io\"]   resources: [\"mutatingwebhookconfigurations\"]   verbs:      - \"get\"     - \"list\"     - \"watch\"     - \"patch\"  --- apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRoleBinding metadata:   name: exporter-injector-binding ... roleRef:   kind: ClusterRole   name: exporter-injector-clusterrole  --- apiVersion: rbac.authorization.k8s.io\/v1 kind: Role metadata:   name: exporter-injector-role ... rules: - apiGroups: [\"\"]   resources: [\"pods\"]   verbs:     - \"get\"     - \"patch\"     - \"delete\"  --- apiVersion: rbac.authorization.k8s.io\/v1 kind: RoleBinding metadata:   name: exporter-injector-rolebinding ... roleRef:   kind: Role   name: exporter-injector-role  --- apiVersion: admissionregistration.k8s.io\/v1 kind: MutatingWebhookConfiguration metadata:   name: exporter-agent-injector-cfg ... webhooks:   - name: some-exporter.io      \/\/&lt;--- \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438     admissionReviewVersions:       - \"v1\"       - \"v1beta1\"     clientConfig:       service:         name: exporter-agent-injector-svc         path: \"\/mutate\"         namespace: \"some-exporter\" ...     rules:       - operations: [\"CREATE\", \"UPDATE\"]         apiGroups: [\"\"]         apiVersions: [\"v1\"]         resources: [\"deployments\", \"jobs\", \"pods\", \"statefulsets\"] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u0442\u043e, \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u043f\u043e\u0434\u0441\u0442\u0443\u043f\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043e\u0441\u0438\u043b\u0438\u0442\u044c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0430 Golang \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0443\u0431\u0431\u0438\u043b\u0434\u0435\u0440\u0430 <a href=\"https:\/\/book.kubebuilder.io\" rel=\"noopener noreferrer nofollow\">https:\/\/book.kubebuilder.io<\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c67\/753\/9fa\/c677539fa474a4bcb1937b65006844ae.png\" alt=\"Admission Review Request\" title=\"Admission Review Request\" width=\"1337\" height=\"752\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c67\/753\/9fa\/c677539fa474a4bcb1937b65006844ae.png\"\/><\/p>\n<div><figcaption>Admission Review Request<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0435 \u0442\u0430\u043a\u043e\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0441\u0438\u0442 \u0432 \u0431\u044d\u043a\u043b\u043e\u0433\u0435 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e, \u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u0438, \u043a\u0430\u043a-\u0442\u043e, &#171;\u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u044f\u0442&#187;. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u043f\u043e\u0434\u043a\u0438\u043d\u0443\u0442 \u0432\u0430\u043c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0438 \u0434\u0435\u0440\u0437\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u0433\u0430\u0439\u0434\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0432\u0441\u0435\u043c \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Kubernetes API, \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043c\u0430\u0433\u0438\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u0430 \u0441 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u043a\u0443\u0440\u0441\u0430 \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p><strong>P.S.<\/strong> \u0418, \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e, \u043d\u0435 \u0441\u043a\u0443\u043f\u0438\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u043a\u0443 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u0430\u043a \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0434\u0430\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u0438\u0441\u043b\u0438\u0434\u0438\u043d\u0433 \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u044b \u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0430\u043b\u0438\u0430\u0441 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b<br \/> <code>$ alias k=kubectl<\/code><\/p>\n<p><strong>P.P.S.<\/strong> \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 Go, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0430\u0441\u043a\u0430\u043c\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f LLM, \u043d\u043e \u043f\u043e\u043a\u0430 &#171;\u043d\u0435 \u0434\u043e\u0441\u0443\u0433&#187;, \u043f\u0438\u0448\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u0442\u043e-\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u043c\u044b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u043c, \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/817091\/\"> https:\/\/habr.com\/ru\/articles\/817091\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>00. \u041e \u0447\u0451\u043c<\/h2>\n<p>\u0412\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u043a\u0430\u043a \u0432 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043a\u0435\u043c-\u0442\u043e, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c Golang \u0441\u043e\u0440\u0441-\u043a\u043e\u0434 Prometheus \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Hashicorp Vault \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kubernetes API \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c.<\/p>\n<p>\u0418 \u0445\u043e\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430, \u0441\u043a\u043e\u0440\u0435\u0435, \u043d\u0430\u0431\u0440\u043e\u0441\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 &#8212; \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0432 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0432\u0441\u0451 \u0436\u0435, \u0443\u0432\u0435\u0440\u0435\u043d, \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0439\u0434\u0443\u0442 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u0432\u043e\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0441\u0442\u0435\u0441\u043d\u044f\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u0438 \u0438\u0445 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0442\u0435\u043a\u0441\u0442\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0441\u043a\u043e\u0431\u043e\u0447\u043a\u0430\u0445.<\/p>\n<p>\u042d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0433\u0430\u0439\u0434 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u0410\u041f\u0418 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0432 \u043d\u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0418 \u0434\u0430, \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0435\u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043b\u0438\u0448\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u044b \u0432 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u043e\u0442\u0430\u0442\u044c \u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0437\u0440\u0435\u0435\u0442\u0435 \u043d\u0435\u0447\u0442\u043e \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b &#8212; \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u0439\u0434\u043a\u0430\u0440-\u0418\u043d\u0436\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432<\/p>\n<\/li>\n<\/ol>\n<h2>01. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/h2>\n<p>\u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0438 \u0441\u0430\u043c\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0434\u043b\u044f maintainance \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0442\u043d\u043e\u0433\u043e (\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e) Kubernetes \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u043f\u0438\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>$  k api-resources &#8212;api-group=monitoring.coreos.com<\/p>\n<pre><code>NAME                  SHORTNAMES   APIVERSION                       NAMESPACED   KIND ... podmonitors           pmon         monitoring.coreos.com\/v1         true         PodMonitor probes                prb          monitoring.coreos.com\/v1         true         Probe prometheuses          prom         monitoring.coreos.com\/v1         true         Prometheus ... servicemonitors       smon         monitoring.coreos.com\/v1         true         ServiceMonitor thanosrulers          ruler        monitoring.coreos.com\/v1         true         ThanosRuler<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0430\u043f\u0438\u0433\u0440\u0443\u043f\u043f\u0430 (\u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442) \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043e\u0431 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<p>$  k get prometheuses.monitoring.coreos.com -o yaml<\/p>\n<pre><code>kind: Prometheus ... podMonitorSelector:     matchLabels: { team: main } serviceMonitorNamespaceSelector: {} serviceMonitorSelector:     matchLabels: { team: main } ...<\/code><\/pre>\n<p>\u041e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0432 \u043d\u0435\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0436\u0435\u043b\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 mongodb) \u0434\u043b\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u0432\u043e\u0438\u0445 MLops \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 &#171;\u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c&#187; \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/\" rel=\"noopener noreferrer nofollow\">https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/<\/a><\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u043a\u0443\u0431-\u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0425-\u0410-\u0412-\u0421<\/p>\n<p><code>\u0425- deploy app mongodb + service\/\/ default app<br \/> A- deploy exporter = \/metrics\/\/ +1 POD<br \/> B- expose exporter\/\/ +1 SVC<br \/> C- deploy servicemonitor\/\/ +1 custom resource<\/code><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u0434\u0430 (\u0410) \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (\u0412), \u044d\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 (\u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441), \u0443\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (mongodb), \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 Prometheus-like \u0444\u043e\u0440\u043c\u0430\u0442 \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043f\u043e\u0440\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \/metrics), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u043e\u0436\u0438\u0434\u0430\u0435\u0442&#187; \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (\u0412) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e, &#171;\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c&#187;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0446\u0435\u043d\u0438\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u0435\u043f\u043b\u043e\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0438 \u043f\u043e\u0434\u0430, \u043d\u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0442\u043e\u0447\u043d\u044e \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043e\u043d\u0438 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187; \u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c (\u0441 \u0440\u0430\u0432\u043d\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e) \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 &#171;\u0441\u0432\u043e\u0438&#187; \u043f\u043e\u0434\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f mongodb-exporter<\/p>\n<p>$   k get service | grep mongodb<\/p>\n<pre><code>NAMEAGE my-exporter-prometheus-mongodb-exporter11s<\/code><\/pre>\n<p>$   k describe service my-exporter-prometheus-mongodb-exporter<\/p>\n<pre><code>Name:              my-exporter ... Labels:            app.kubernetes.io\/instance=my-exporter                    app.kubernetes.io\/managed-by=Helm                    app.kubernetes.io\/name=prometheus-mongodb-exporter ... Selector:          app.kubernetes.io\/instance=my-exporter,                    app.kubernetes.io\/name=prometheus-mongodb-exporter Type:              ClusterIP ... Port:              metrics  9216\/TCP TargetPort:        metrics\/TCP Endpoints:         192.168.1.8:9216<\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b &#171;\u0445\u0440\u0430\u043d\u044f\u0442&#187; (\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442) \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u041f\u043e\u0434\u0430\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0415\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0438\u0436\u0435.<br \/> \u041b\u0435\u0439\u0431\u043b \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e (\u043e\u0434\u0438\u043d \u0440\u0430\u0437), \u0447\u0442\u043e\u0431\u044b &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u043b IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0434\u043e\u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b (\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437).<\/p>\n<p>$  k get endpoints my-exporter-prometheus-mongodb-exporter<\/p>\n<pre><code>NAME                    ENDPOINTS           AGE my-exporter-...         192.168.1.8:921611s<\/code><\/pre>\n<p>$  k get pods &#8212;selector name=prometheus-mongodb-exporter -o wide<\/p>\n<pre><code>NAME                    READYSTATUS AGEIP my-exporter-...         1\/1Running11s192.168.1.8<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0435 (\u0410,\u0412,\u0421). \u0427\u0442\u043e\u0431\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 (\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439) \u0440\u0435\u0441\u0443\u0440\u0441 servicemonitor (\u0437\u0432\u0435\u043d\u043e \u0421), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 &#171;\u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c&#187; \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435 (\u0412). \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c servicemonitor, \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0440\u0430\u0437\u0443 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e \u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0438\u043d\u0444\u043e \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438, \u0438\u0437 \u043d\u0435\u0433\u043e \u0437\u0430\u0431\u0435\u0440\u0451\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0434\u043e\u0432, \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f. \u041d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438 \u0441\u0442\u044f\u043d\u0435\u0442 endpoint\u044b \u0438 \u0437\u0430\u0432\u0435\u0434\u0451\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0422\u0430\u0440\u0433\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0438\u0434 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 podmonitor, \u043e\u043d \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u043e\u0434\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a servicemonitor \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 &#8212; \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043f\u043e\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0438 \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/\" rel=\"noopener noreferrer nofollow\">https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/<\/a>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \u0425\u0435\u043b\u044c\u043c-\u0447\u0430\u0440\u0442, \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0437\u0430 \u044d\u0442\u043e\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>{team: mlops}<\/code><\/p>\n<pre><code># set configs for MLops team  helm repo add prometheus-community https:\/\/prometheus-community.github.io\/helm-charts helm show values prometheus-community\/prometheus-mongodb-exporter > values.yaml   # values.yaml ...   serviceMonitor:     additionalLabels:#&lt;-- discover new ServiceMonitor   team: mlops#&lt;-- match labels key-value ...  # install exporter MLops team  helm install mongodb-exporter prometheus-community\/prometheus-mongodb-exporter -f values.yaml<\/code><\/pre>\n<p>\u0425\u0435\u043b\u044c\u043c \u0441\u043e\u0437\u0434\u0430\u043b \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 service (\u0437\u0432\u0435\u043d\u043e \u0412) \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 servicemonitor (\u0437\u0432\u0435\u043d\u043e \u0421)<\/p>\n<p>$  k get service | grep exporter<\/p>\n<pre><code>NAMEAGE mongodb-exporter-prometheus-mongodb-exporter10s ... ...<\/code><\/pre>\n<p>$  k get servicemonitors<\/p>\n<pre><code>NAMEAGE mongodb-exporter-prometheus-mongodb-exporter11s prometheus-kube-prometheus-alertmanager2... prometheus-kube-prometheus-apiserver2... ... prometheus-kube-prometheus-kube-etcd2... prometheus-kube-prometheus-kube-proxy2... prometheus-kube-prometheus-kube-scheduler2... prometheus-kube-prometheus-operator2... prometheus-kube-prometheus-prometheus2... ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 (\u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0410,\u0412,\u0421), \u043c\u044b \u0447\u0435\u0440\u0435\u0437 \u0425\u0435\u043b\u044c\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 3 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043b\u0435\u0439\u0431\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f servicemonitor (\u0421)<\/p>\n<details class=\"spoiler\">\n<summary># A. exporter-pod.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Pod metadata:   ...   labels:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter-86cfc677c9-ml4d6   namespace: gpt-24 ... spec:   containers:   - name: mongodb-exporter     args:     - --web.listen-address=:9216     ...     env:     ...     ports:     ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary># B. exporter-service.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Service metadata:   ...   labels:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter   namespace: gpt-24   ... spec:   clusterIP: ...   ports:   - ...   selector:     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   sessionAffinity: None   type: ClusterIP<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary># C. smon.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: monitoring.coreos.com\/v1 kind: ServiceMonitor metadata:   ...   labels:     team: mlops                     #&lt;--- TEAM LABEL     app.kubernetes.io\/instance: mongodb-exporter     app.kubernetes.io\/name: prometheus-mongodb-exporter   name: mongodb-exporter-prometheus-mongodb-exporter   namespace: gpt-24                 #&lt;--- EXPORTER NAMESPACE   ... spec:   ...   namespaceSelector:   ...   selector:                         #&lt;--- DISCOVER SERVICE(B)     matchLabels:       app.kubernetes.io\/instance: mongodb-exporter       app.kubernetes.io\/name: prometheus-mongodb-exporter<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>C\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0432\u0441\u0451, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439, \u044d\u0442\u043e \u0441\u043a\u0440\u0435\u0439\u043f\u0438\u0442\u044c \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a. \u0422\u0430\u0440\u0433\u0435\u0442\u044b \u041f\u0440\u043e\u043c\u0435\u0442\u0435\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441-\u0434\u0438\u0441\u043a\u0430\u0432\u0435\u0440\u0438, \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0442\u043e-\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-377042","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/377042","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=377042"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/377042\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=377042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=377042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=377042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}