{"id":347876,"date":"2023-05-25T09:04:29","date_gmt":"2023-05-25T09:04:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=347876"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=347876","title":{"rendered":"<span>\u041a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e etcd \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432<\/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<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0410 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439) \u043a\u043e\u043b\u043b\u0430\u043f\u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u043c \u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 etcd \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043e\u0431\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u2014 \u0438\u043c \u043c\u044b \u0443\u0434\u0435\u043b\u0438\u043c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.&nbsp;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e7\/306\/ce0\/5e7306ce0101b3d9f3e62a8ab048e811.png\" width=\"1858\" height=\"1046\"><\/figure>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 etcd \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438:&nbsp;<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u2014 \u0441\u043d\u044f\u0442\u044c snapshot etcd \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0435 \u043e \u043d\u0435\u043c.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0438\u00bb etcd \u043d\u0430 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes. \u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u043e\u0438 StatefulSet\u2019\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 k8s, \u0430 \u0443\u0436\u0435 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0435\u0434\u0438\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd. \u0423 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a\u0438: \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u0437\u0430\u2019affect\u2019\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 etcd, \u043d\u043e \u0437\u0430\u0442\u043e \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e etcd \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u044b \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/daa\/317\/d61\/daa317d617db6e70ec03b55069ade268.jpg\" width=\"700\" height=\"298\"><\/figure>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/em>\u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Yandex \u0421loud, \u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u044b k8s \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445&nbsp; \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/deckhouse.ru\/\"><u>Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Deckhouse<\/u><\/a>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p><strong>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e etcd \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043d\u0438\u043c. \u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <\/strong><a href=\"https:\/\/etcd.io\/docs\/v3.5\/\"><strong><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 etcd<\/u><\/strong><\/a><strong>.<\/strong><\/p>\n<h2>\u0428\u0430\u0433 1. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439: \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b etcd<\/h2>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/em>\u0435\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 etcd \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0432\u0438\u0437\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u2014 \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u043e \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b etcd. \u0415\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u044d\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 bootstrap\u2019\u0430 \u043d\u043e\u0432\u044b\u0445 \u043d\u043e\u0434 \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b.<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u0435\u0432\u0438\u0437\u0438\u044e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>etcdctl<\/code>:<\/p>\n<pre><code class=\"bash\"># etcdctl get \/ --prefix --keys-only \/main_production\/main\/config  \/main_production\/main\/failover  \/main_production\/main\/history \u2026<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u044e\u0447 \u0432 JSON-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"json\"># etcdctl get \/main_production\/main\/history -w=json {\"header\":{\"cluster_id\":13812367153619139789,\"member_id\":7168735187350299418,\"revision\":5828757,..<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u0435\u0432\u0438\u0437\u0438\u044e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e 5828757<em>.&nbsp;<\/em><\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0447\u0442\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0435\u0432\u0438\u0437\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c: \u043f\u043e \u043e\u043f\u044b\u0442\u0443, \u0442\u044b\u0441\u044f\u0447\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>etcdctl compaction<\/code><em> <\/em>\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"># etcdctl compaction 5827757<\/code><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 etcd, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0434\u0435.<em> <\/em>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0443 <code>compaction<\/code><em> <\/em>(\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 <code>etcdctl<\/code>)<em> <\/em>\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/etcd.io\/docs\/v3.5\/op-guide\/maintenance\/#history-compaction-v3-api-key-value-database\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>defrag<\/code><em>:<\/em><\/p>\n<pre><code class=\"bash\"># etcdctl defrag --command-timeout=90s<\/code><\/pre>\n<p>\u042d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0434\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0432\u0441\u0435\u0445 \u043d\u043e\u0434\u0430\u0445 \u043a\u0440\u043e\u043c\u0435 \u043b\u0438\u0434\u0435\u0440\u0430, \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u043e\u0434\u0443 \u0441 \u0443\u0436\u0435 \u043e\u0447\u0438\u0449\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>etcdctl move-leader<\/code><em>. <\/em>\u0418 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u043d\u043e\u0434\u0435.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b \u0441 800 \u041c\u0431\u0430\u0439\u0442 \u0434\u043e ~700 \u041a\u0431\u0430\u0439\u0442, \u0447\u0442\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438.<\/p>\n<h3>\u0427\u0430\u0440\u0442 etcd, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/h3>\n<p>etcd \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c StatefulSet\u2019\u0430. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 StatefulSet\u2019\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- apiVersion: apps\/v1 kind: StatefulSet metadata:   name: etcd   labels:     app: etcd spec:   serviceName: etcd   selector:     matchLabels:       app: etcd   replicas: 3   template:     metadata:       labels:         app: etcd     spec:       affinity:         podAntiAffinity:           requiredDuringSchedulingIgnoredDuringExecution:           - labelSelector:               matchExpressions:               - key: app                 operator: In                 values:                 - etcd             topologyKey: kubernetes.io\/hostname       imagePullSecrets:       - name: registrysecret       containers:       - name: etcd         image: quay.io\/coreos\/etcd:v3.4.18         command:         - sh         args:         - -c         - |           stop_handler() {               &gt;&amp;2 echo \"Caught SIGTERM signal!\"               kill -TERM \"$child\"           }            trap stop_handler SIGTERM SIGINT            etcd \\           --name=$HOSTNAME \\           --initial-advertise-peer-urls=http:\/\/$HOSTNAME.etcd:2380 \\           --initial-cluster-token=etcd-cortex-prod \\           --initial-cluster etcd-0=http:\/\/etcd-0.etcd:2380,etcd-1=http:\/\/etcd-1.etcd:2380,etcd-2=http:\/\/etcd-2.etcd:2380 \\           --advertise-client-urls=http:\/\/$HOSTNAME.etcd:2379 \\           --listen-client-urls=http:\/\/0.0.0.0:2379 \\           --listen-peer-urls=http:\/\/0.0.0.0:2380 \\           --auto-compaction-mode=revision \\           --auto-compaction-retention=1000 &amp;           child=$!           wait \"$child\"         env:         - name: ETCD_DATA_DIR           value: \/var\/lib\/etcd         - name: ETCD_HEARTBEAT_INTERVAL           value: 200         - name: ETCD_ELECTION_TIMEOUT           value: 2000         resources:           requests:             cpu: 50m             memory: 1Gi           limits:             memory: 1gi         volumeMounts:         - name: data           mountPath: \/var\/lib\/etcd         ports:         - name: etcd-server           containerPort: 2380         - name: etcd-client           containerPort: 2379         readinessProbe:           exec:             command:             - \/bin\/bash             - -c             - \/usr\/local\/bin\/etcdctl endpoint health           initialDelaySeconds: 10           periodSeconds: 10           timeoutSeconds: 10   volumeClaimTemplates:   - metadata:       name: data     spec:       accessModes: [ \"ReadWriteOnce\" ]       resources:         requests:           storage: 2Gi --- apiVersion: v1 kind: Service metadata:   name: etcd spec:   clusterIP: None   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     app: etcd <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a \u0432\u0430\u0436\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0440\u0442\u0430 \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u0428\u0430\u0433 2. \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0434 etcd \u0441\u043d\u0430\u0440\u0443\u0436\u0438<\/h2>\n<p>\u0415\u0441\u043b\u0438 etcd \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes, \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043f\u043e\u0434\u044b. \u041d\u043e \u0434\u043b\u044f bootstrap\u2019\u0430 \u043d\u043e\u0432\u044b\u0445 \u043d\u043e\u0434 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 IP. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0439 etcd-\u043d\u043e\u0434\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e: \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/#type-nodeport\"><u>NodePort<\/u><\/a> \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0436\u0435\u0441\u0442\u043a\u0438\u043c\u0438 NodeSelector\u2019\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0432. \u0412 \u043e\u0431\u043b\u0430\u043a\u0435, \u0433\u0434\u0435 \u043f\u043e\u0434 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443 \u0431\u0435\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e IP, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c.<\/p>\n<p><em>\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443:<\/em> \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441 \u0442\u0438\u043f\u043e\u043c LoadBalancer \u2014 \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u00ab\u0442\u0440\u0435\u0445\u0433\u043e\u043b\u043e\u0432\u044b\u043c\u00bb etcd. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u044b LB \u0432 \u043d\u0430\u0448\u0435\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0430\u0440\u0442\u0430:<\/p>\n<pre><code class=\"yaml\">--- apiVersion: v1 kind: Service metadata:   name: etcd-0   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-0   type: LoadBalancer --- apiVersion: v1 kind: Service metadata:   name: etcd-1   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-1   type: LoadBalancer --- apiVersion: v1 kind: Service metadata:   name: etcd-2   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-2   type: LoadBalancer <\/code><\/pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>yandex.cloud\/load-balancer-type<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u0430\u043d LB \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c IP. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0442\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f LB. \u0422\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/deckhouse.ru\/documentation\/v1\/kubernetes.html\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Deckhouse<\/u><\/a>.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a1\/920\/5ee\/1a19205eeee4fe85447dee6d49281892.png\" width=\"750\" height=\"57\"><\/figure>\n<p>\u0412 \u043e\u0431\u043b\u0430\u043a\u0435 (\u043e\u0434\u0438\u043d \u0438\u0437 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 LB):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f0c\/e8c\/f74\/f0ce8cf7494a79ba8b8f1986d3d86cb7.png\" width=\"635\" height=\"169\"><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"bash\"># telnet 10.100.0.47 2379 Trying 10.100.0.47... Connected to 10.100.0.47. Escape character is '^]'.<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043d\u0430\u0448\u0438 \u043d\u043e\u0434\u044b etcd \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437\u0432\u043d\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p><em>\u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: <\/em>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 k8s, StatefulSet<em> <\/em>\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0440\u0430\u043d\u043e.<\/p>\n<p>\u0412 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c StatefulSet<em> <\/em>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c. hostname \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d \u043d\u043e\u0434 etcd.&nbsp;<\/p>\n<p>StatefulSet<em> <\/em>\u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <code>etcd-main<\/code> (\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0438\u043c\u0435\u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<pre><code class=\"bash\">\u2026 name: etcd-main-0 \u2026   selector:     statefulset.kubernetes.io\/pod-name: etcd-main-0 \u2026<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u0445 <code>yandex.cpi.flant.com\/listener-subnet-id<\/code><em> <\/em>\u0438<em> <\/em><code>yandex.cpi.flant.com\/target-group-network-id<\/code><em> <\/em>\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 ID \u0441\u0435\u0442\u0435\u0439 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8b\/035\/944\/f8b035944c1799ddf270d5b827638834.png\" width=\"811\" height=\"53\"><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/842\/095\/8eb\/8420958eb0379eea17ff4db6c9004b8d.png\" width=\"628\" height=\"147\"><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0449\u0435 \u043d\u0435\u0442 \u043f\u043e\u0434\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432\u0435\u0434\u0443\u0442.<\/p>\n<h2>\u0428\u0430\u0433 3. \u0414\u0435\u043b\u0430\u0435\u043c \u043c\u0430\u0433\u0438\u044e \u0441 DNS<\/h2>\n<p>\u041c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043d\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 etcd. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<pre><code class=\"yaml\">--name=$HOSTNAME \\ --initial-advertise-peer-urls=http:\/\/$HOSTNAME.etcd:2380 \\ --advertise-client-urls=http:\/\/$HOSTNAME.etcd:2379 \\<\/code><\/pre>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435: \u043f\u0440\u043e \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/etcd.io\/docs\/v3.3\/op-guide\/\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>. \u041d\u0430\u043c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0438\u043c\u044f \u043d\u043e\u0434\u044b \u2014 \u044d\u0442\u043e hostname \u043f\u043e\u0434\u0430. \u0410 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u043d\u043e\u0434\u044b \u043f\u043e FQDN \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>&lt;hostname&gt;.&lt;namespace&gt;<\/code>. \u0427\u0442\u043e\u0431\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c FQDN \u0438\u0437 \u043f\u043e\u0434\u043e\u0432. \u042d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.&nbsp;<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 <code>\/etc\/hosts<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0434\u043e\u0432, \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0432 StatefulSet. \u041c\u0438\u043d\u0443\u0441 \u0441\u043f\u043e\u0441\u043e\u0431\u0430: \u043e\u043d \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u043e\u0434\u043e\u0432.<\/p>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 kube-dns. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0434\u0443\u043b\u044f kube-dns:<\/p>\n<pre><code class=\"yaml\">spec:   settings:     hosts:     - domain: etcd-main-0       ip: 10.106.0.34     - domain: etcd-main-1       ip: 10.106.0.42     - domain: etcd-main-2       ip: 10.106.0.47     - domain: etcd-main-0.etcd-main       ip: 10.106.0.34     - domain: etcd-main-1.etcd-main       ip: 10.106.0.42     - domain: etcd-main-2.etcd-main       ip: 10.106.0.47<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c resolve \u0438\u0437 \u043f\u043e\u0434\u0430:<\/p>\n<pre><code class=\"bash\"># host etcd-main-0 etcd-main-0 has address 10.106.0.34 # host etcd-main-0.etcd-main etcd-main-0.etcd-main has address 10.106.0.34<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043d\u043e\u0434 etcd \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code class=\"yaml\">spec:   settings:     hosts:     - domain: etcd-0       ip: 10.100.0.47     - domain: etcd-1       ip: 10.100.0.46     - domain: etcd-2       ip: 10.100.0.37     - domain: etcd-0.etcd       ip: 10.100.0.47     - domain: etcd-1.etcd       ip: 10.100.0.46     - domain: etcd-2.etcd       ip: 10.100.0.37<\/code><\/pre>\n<h2>\u0428\u0430\u0433 4. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043d\u043e\u0434\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd<\/h2>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043d\u043e\u0434\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd, \u00ab\u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0432\u00bb \u0435\u0433\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u043e\u0432 etcd \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">etcdctl member add etcdt-main-0 --peer-urls=http:\/\/etcd-main-0.etcd-main :2380<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438, \u0447\u0442\u043e StatefulSet<em> <\/em>\u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f etcd-main, \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043e\u0432.<\/p>\n<p><em>\u0412\u0430\u0436\u043d\u043e\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435: <\/em>\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u043d\u043e\u0434\u044b \u0440\u0430\u0437\u043e\u043c?\u00bb. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0442 \u0432 \u0447\u0435\u043c: \u0443 \u043d\u0430\u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u0437 6 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432, \u0435\u0433\u043e \u043a\u0432\u043e\u0440\u0443\u043c \u2014 4.&nbsp; \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c 4 \u043d\u043e\u0434\u044b, \u043a\u0432\u043e\u0440\u0443\u043c \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043e\u0442\u043a\u0430\u0437\u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043d\u043e\u0434.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0447\u0430\u0440\u0442 \u0434\u043b\u044f \u0434\u0435\u043f\u043b\u043e\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<pre><code class=\"yaml\">--- apiVersion: apps\/v1 kind: StatefulSet metadata:   name: etcd-main   labels:     app: etcd-main spec:   serviceName: etcd   selector:     matchLabels:       app: etcd   replicas: 1   template:     metadata:       labels:         app: etcd     spec:       affinity:         podAntiAffinity:           requiredDuringSchedulingIgnoredDuringExecution:           - labelSelector:               matchExpressions:               - key: app                 operator: In                 values:                 - etcd             topologyKey: kubernetes.io\/hostname       imagePullSecrets:       - name: registrysecret       containers:       - name: etcd         image: quay.io\/coreos\/etcd:v3.4.18         command:         - sh         args:         - -c         - |           stop_handler() {               &gt;&amp;2 echo \"Caught SIGTERM signal!\"               kill -TERM \"$child\"           }            trap stop_handler SIGTERM SIGINT            etcd \\           --name=$HOSTNAME \\           --initial-advertise-peer-urls=http:\/\/$HOSTNAME.etcd-main:2380 \\           --initial-cluster-state existing \\           --initial-cluster-token=etcd-cortex-prod \\           --initial-cluster etcd-main-0=http:\/\/etcd-main-0.etcd-main:2380,etcd-0=http:\/\/etcd-0.etcd:2380,etcd-1=http:\/\/etcd-1.etcd:2380,etcd-2=http:\/\/etcd-2.etcd:2380 \\           --advertise-client-urls=http:\/\/$HOSTNAME.etcd:2379 \\           --listen-client-urls=http:\/\/0.0.0.0:2379 \\           --listen-peer-urls=http:\/\/0.0.0.0:2380 \\           --auto-compaction-mode=revision \\           --auto-compaction-retention=1000 &amp;           child=$!           wait \"$child\"         env:         - name: ETCD_DATA_DIR           value: \/var\/lib\/etcd         - name: ETCD_HEARTBEAT_INTERVAL           value: 200         - name: ETCD_ELECTION_TIMEOUT           value: 2000         resources:           requests:             cpu: 50m             memory: 1Gi           limits:             memory: 1gi         volumeMounts:         - name: data           mountPath: \/var\/lib\/etcd         ports:         - name: etcd-server           containerPort: 2380         - name: etcd-client           containerPort: 2379         readinessProbe:           exec:             command:             - \/bin\/bash             - -c             - \/usr\/local\/bin\/etcdctl endpoint health           initialDelaySeconds: 10           periodSeconds: 10           timeoutSeconds: 10   volumeClaimTemplates:   - metadata:       name: data     spec:       accessModes: [ \"ReadWriteOnce\" ]       resources:         requests:           storage: 2Gi <\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f, \u043d\u043e \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0439 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c:&nbsp;<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u0444\u043b\u0430\u0433 <code>--initial-cluster-state existing<\/code><em>: <\/em>\u043e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b bootstrap&#8217;\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0430 \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/etcd.io\/docs\/v3.3\/op-guide\/configuration\/#--initial-cluster-state\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>).&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>--initial-advertise-peer-urls<\/code><em>, <\/em>\u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0438\u043c\u044f StatefulSet\u2019\u0430<em>.&nbsp;<\/em><\/p>\n<\/li>\n<li>\n<p>\u0418 \u0433\u043b\u0430\u0432\u043d\u043e\u0435: \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0444\u043b\u0430\u0433 <code>--initial-cluster<\/code><em> \u2014 <\/em>\u0432 \u043d\u0435\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443 etcd-main-0.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e\u0434\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0434\u0435\u043f\u043b\u043e\u0435 \u043a\u043b\u044e\u0447 <code>replicas<\/code><em> <\/em>\u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>etcdctl endpoint status<\/code><em> <\/em>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u043d\u043e\u0434\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0430\u0441\u044c \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03c\/93b\/2c4\/03c93b2c4969e3e363ee4e70dd023f9d.png\" width=\"1381\" height=\"157\"><\/figure>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0449\u0435 2 \u043d\u043e\u0434\u044b. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u0442\u043e\u0439, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u044b\u0448\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>etcdctl member add<\/code><em>.<\/em><\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 StatefulSet<em>: <\/em>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u044e\u0447 <code>--initial-cluster<\/code><em>, <\/em>\u0432\u043d\u0435\u0441\u044f \u0442\u0443\u0434\u0430 \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0434\u044b \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 etcd.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0412\u0430\u0436\u043d\u043e\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/em> \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>kubectl scale statefulset<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u043f\u043b\u0438\u043a \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 \u043d\u043e\u0432\u043e\u043c StatefulSet\u2019\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78c\/335\/5c9\/78c3355c9c8b3ca5cd465a4c50b07cb9.png\" width=\"1411\" height=\"195\"><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u0438\u0434\u0435\u0440\u0430 etcd \u043d\u0430 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u043e\u0432\u044b\u0445 \u043d\u043e\u0434. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>etcdctl<\/code><em>:<\/em><\/p>\n<pre><code class=\"bash\">etcdctl move-leader 60ce6ed30863955f --endpoints=etcd-0:2379,etcd-1:2379,etcd-2:2379,etcd-main-0:2379,etcd-main-1:2379,etcd-main-2:2379<\/code><\/pre>\n<h2>\u0428\u0430\u0433 5. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 etcd<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 etcd \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 endpoint\u2019\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u044f\u0432\u043b\u044f\u043b\u0441\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440 PostgreSQL \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Patroni (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438).<\/p>\n<h2>\u0428\u0430\u0433 6. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0435 \u043d\u043e\u0434\u044b \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 etcd<\/h2>\n<p>\u041f\u0440\u0438\u0448\u0435\u043b \u0447\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u043d\u043e\u0434\u044b. \u0423\u0434\u0430\u043b\u044f\u0442\u044c \u0438\u0445, \u043a\u0430\u043a \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u0439, \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0432\u043e\u0440\u0443\u043c\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e:<\/p>\n<ul>\n<li>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043e\u0434\u043e\u0432, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044f StatefulSet \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 k8s:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">kubectl scale sts etcd \u2013replicas=2<\/code><\/pre>\n<ul>\n<li>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u043c member\u2019\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 etcd:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">etcdctl member remove e93f626220dffb --endpoints=etcd-0:2379,etcd-1:2379,etcd-main-0:2379,etcd-main-1:2379,etcd-main-2:2379<\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 etcd:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">etcdctl endpoint health<\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441:<\/em> \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c Persistent Volumes \u043e\u0442 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043e\u0434\u043e\u0432, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0430\u0442 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0434 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 etcd \u0432 StatefulSet\u2019\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes (\u0443\u0431\u0435\u0440\u0435\u043c \u043e\u0442\u0442\u0443\u0434\u0430 \u044d\u0442\u0438 \u043d\u043e\u0434\u044b):<\/p>\n<h2>\u0428\u0430\u0433 7. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b etcd \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd \u00ab\u043e\u0442\u0441\u0442\u043e\u044f\u043b\u0441\u044f\u00bb \u0438 \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u0440\u043e\u0433\u043e etcd (Persistent Volume, Service \u0438 \u0434\u0440.). \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043f\u043e\u0441\u043e\u0431 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 etcd \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c. \u041d\u043e \u043e\u043d \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e. \u0410 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 k8s \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0448\u0430 <a href=\"https:\/\/deckhouse.io\/\"><u>Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 Deckhouse<\/u><\/a>.&nbsp;&nbsp;&nbsp;<\/p>\n<h2>P.S.<\/h2>\n<p>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/flant\/articles\/450662\/\">\u00ab\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f RabbitMQ \u0432 Kubernetes\u00bb<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/flant\/articles\/715908\/\"><u>\u00ab\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 OpenShift \u0432 \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u0439\u00bb Kubernetes\u00bb<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/flant\/articles\/707422\/\"><u>\u00ab\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Deckhouse \u0432 Yandex Cloud\u00bb<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/flant\/articles\/676860\/\"><u>\u00ab\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 PostgreSQL \u0441 AWS RDS \u043d\u0430 \u0441\u0432\u043e\u044e (self-hosted) \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e\u00bb<\/u><\/a><\/p>\n<\/li>\n<\/ul>\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\/companies\/flant\/articles\/737204\/\"> https:\/\/habr.com\/ru\/companies\/flant\/articles\/737204\/<\/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<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0410 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439) \u043a\u043e\u043b\u043b\u0430\u043f\u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u043c \u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 etcd \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043e\u0431\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u2014 \u0438\u043c \u043c\u044b \u0443\u0434\u0435\u043b\u0438\u043c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.&nbsp;<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 etcd \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438:&nbsp;<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u2014 \u0441\u043d\u044f\u0442\u044c snapshot etcd \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0435 \u043e \u043d\u0435\u043c.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0438\u00bb etcd \u043d\u0430 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes. \u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u043e\u0438 StatefulSet\u2019\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 k8s, \u0430 \u0443\u0436\u0435 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0435\u0434\u0438\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd. \u0423 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a\u0438: \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u0437\u0430\u2019affect\u2019\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 etcd, \u043d\u043e \u0437\u0430\u0442\u043e \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e etcd \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u044b \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/em>\u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Yandex \u0421loud, \u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u044b k8s \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445&nbsp; \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/deckhouse.ru\/\"><u>Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Deckhouse<\/u><\/a>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p><strong>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e etcd \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043d\u0438\u043c. \u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <\/strong><a href=\"https:\/\/etcd.io\/docs\/v3.5\/\"><strong><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 etcd<\/u><\/strong><\/a><strong>.<\/strong><\/p>\n<h2>\u0428\u0430\u0433 1. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439: \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b etcd<\/h2>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/em>\u0435\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 etcd \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0432\u0438\u0437\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u2014 \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u043e \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b etcd. \u0415\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u044d\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 bootstrap\u2019\u0430 \u043d\u043e\u0432\u044b\u0445 \u043d\u043e\u0434 \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b.<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u0435\u0432\u0438\u0437\u0438\u044e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>etcdctl<\/code>:<\/p>\n<pre><code class=\"bash\"># etcdctl get \/ --prefix --keys-only \/main_production\/main\/config  \/main_production\/main\/failover  \/main_production\/main\/history \u2026<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u044e\u0447 \u0432 JSON-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"json\"># etcdctl get \/main_production\/main\/history -w=json {\"header\":{\"cluster_id\":13812367153619139789,\"member_id\":7168735187350299418,\"revision\":5828757,..<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0440\u0435\u0432\u0438\u0437\u0438\u044e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e 5828757<em>.&nbsp;<\/em><\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0447\u0442\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0435\u0432\u0438\u0437\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c: \u043f\u043e \u043e\u043f\u044b\u0442\u0443, \u0442\u044b\u0441\u044f\u0447\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>etcdctl compaction<\/code><em> <\/em>\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"># etcdctl compaction 5827757<\/code><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 etcd, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0434\u0435.<em> <\/em>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0443 <code>compaction<\/code><em> <\/em>(\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 <code>etcdctl<\/code>)<em> <\/em>\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/etcd.io\/docs\/v3.5\/op-guide\/maintenance\/#history-compaction-v3-api-key-value-database\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>defrag<\/code><em>:<\/em><\/p>\n<pre><code class=\"bash\"># etcdctl defrag --command-timeout=90s<\/code><\/pre>\n<p>\u042d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0434\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0432\u0441\u0435\u0445 \u043d\u043e\u0434\u0430\u0445 \u043a\u0440\u043e\u043c\u0435 \u043b\u0438\u0434\u0435\u0440\u0430, \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u043e\u0434\u0443 \u0441 \u0443\u0436\u0435 \u043e\u0447\u0438\u0449\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>etcdctl move-leader<\/code><em>. <\/em>\u0418 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u043d\u043e\u0434\u0435.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0437\u044b \u0441 800 \u041c\u0431\u0430\u0439\u0442 \u0434\u043e ~700 \u041a\u0431\u0430\u0439\u0442, \u0447\u0442\u043e \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438.<\/p>\n<h3>\u0427\u0430\u0440\u0442 etcd, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/h3>\n<p>etcd \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c StatefulSet\u2019\u0430. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 StatefulSet\u2019\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- apiVersion: apps\/v1 kind: StatefulSet metadata:   name: etcd   labels:     app: etcd spec:   serviceName: etcd   selector:     matchLabels:       app: etcd   replicas: 3   template:     metadata:       labels:         app: etcd     spec:       affinity:         podAntiAffinity:           requiredDuringSchedulingIgnoredDuringExecution:           - labelSelector:               matchExpressions:               - key: app                 operator: In                 values:                 - etcd             topologyKey: kubernetes.io\/hostname       imagePullSecrets:       - name: registrysecret       containers:       - name: etcd         image: quay.io\/coreos\/etcd:v3.4.18         command:         - sh         args:         - -c         - |           stop_handler() {               &gt;&amp;2 echo \"Caught SIGTERM signal!\"               kill -TERM \"$child\"           }            trap stop_handler SIGTERM SIGINT            etcd \\           --name=$HOSTNAME \\           --initial-advertise-peer-urls=http:\/\/$HOSTNAME.etcd:2380 \\           --initial-cluster-token=etcd-cortex-prod \\           --initial-cluster etcd-0=http:\/\/etcd-0.etcd:2380,etcd-1=http:\/\/etcd-1.etcd:2380,etcd-2=http:\/\/etcd-2.etcd:2380 \\           --advertise-client-urls=http:\/\/$HOSTNAME.etcd:2379 \\           --listen-client-urls=http:\/\/0.0.0.0:2379 \\           --listen-peer-urls=http:\/\/0.0.0.0:2380 \\           --auto-compaction-mode=revision \\           --auto-compaction-retention=1000 &amp;           child=$!           wait \"$child\"         env:         - name: ETCD_DATA_DIR           value: \/var\/lib\/etcd         - name: ETCD_HEARTBEAT_INTERVAL           value: 200         - name: ETCD_ELECTION_TIMEOUT           value: 2000         resources:           requests:             cpu: 50m             memory: 1Gi           limits:             memory: 1gi         volumeMounts:         - name: data           mountPath: \/var\/lib\/etcd         ports:         - name: etcd-server           containerPort: 2380         - name: etcd-client           containerPort: 2379         readinessProbe:           exec:             command:             - \/bin\/bash             - -c             - \/usr\/local\/bin\/etcdctl endpoint health           initialDelaySeconds: 10           periodSeconds: 10           timeoutSeconds: 10   volumeClaimTemplates:   - metadata:       name: data     spec:       accessModes: [ \"ReadWriteOnce\" ]       resources:         requests:           storage: 2Gi --- apiVersion: v1 kind: Service metadata:   name: etcd spec:   clusterIP: None   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     app: etcd <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a \u0432\u0430\u0436\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0440\u0442\u0430 \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u0428\u0430\u0433 2. \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0434 etcd \u0441\u043d\u0430\u0440\u0443\u0436\u0438<\/h2>\n<p>\u0415\u0441\u043b\u0438 etcd \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes, \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043f\u043e\u0434\u044b. \u041d\u043e \u0434\u043b\u044f bootstrap\u2019\u0430 \u043d\u043e\u0432\u044b\u0445 \u043d\u043e\u0434 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 IP. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0439 etcd-\u043d\u043e\u0434\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e: \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/#type-nodeport\"><u>NodePort<\/u><\/a> \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0436\u0435\u0441\u0442\u043a\u0438\u043c\u0438 NodeSelector\u2019\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0432. \u0412 \u043e\u0431\u043b\u0430\u043a\u0435, \u0433\u0434\u0435 \u043f\u043e\u0434 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443 \u0431\u0435\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e IP, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c.<\/p>\n<p><em>\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443:<\/em> \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441 \u0442\u0438\u043f\u043e\u043c LoadBalancer \u2014 \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u00ab\u0442\u0440\u0435\u0445\u0433\u043e\u043b\u043e\u0432\u044b\u043c\u00bb etcd. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u044b LB \u0432 \u043d\u0430\u0448\u0435\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0430\u0440\u0442\u0430:<\/p>\n<pre><code class=\"yaml\">--- apiVersion: v1 kind: Service metadata:   name: etcd-0   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-0   type: LoadBalancer --- apiVersion: v1 kind: Service metadata:   name: etcd-1   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-1   type: LoadBalancer --- apiVersion: v1 kind: Service metadata:   name: etcd-2   annotations:     yandex.cloud\/load-balancer-type: Internal     yandex.cpi.flant.com\/listener-subnet-id: e9b***ho7k     yandex.cpi.flant.com\/target-group-network-id: enp***5q7 spec:   externalTrafficPolicy: Local   loadBalancerSourceRanges:   - 0.0.0.0\/0   ports:   - name: etcd-server     port: 2380   - name: etcd-client     port: 2379   selector:     statefulset.kubernetes.io\/pod-name: etcd-2   type: LoadBalancer <\/code><\/pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>yandex.cloud\/load-balancer-type<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u0430\u043d LB \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c IP. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0442\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f LB. \u0422\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/deckhouse.ru\/documentation\/v1\/kubernetes.html\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Deckhouse<\/u><\/a>.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u043e\u0431\u043b\u0430\u043a\u0435 (\u043e\u0434\u0438\u043d \u0438\u0437 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 LB):<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"bash\"># telnet 10.100.0.47 2379 Trying 10.100.0.47... Connected to 10.100.0.47. Escape character is '^]'.<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043d\u0430\u0448\u0438 \u043d\u043e\u0434\u044b etcd \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437\u0432\u043d\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p><em>\u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441: <\/em>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 k8s, StatefulSet<em> <\/em>\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0440\u0430\u043d\u043e.<\/p>\n<p>\u0412 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c StatefulSet<em> <\/em>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c. hostname \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d \u043d\u043e\u0434 etcd.&nbsp;<\/p>\n<p>StatefulSet<em> <\/em>\u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <code>etcd-main<\/code> (\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0438\u043c\u0435\u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<pre><code class=\"bash\">\u2026 name: etcd-main-0 \u2026   selector:     statefulset.kubernetes.io\/pod-name: etcd-main-0 \u2026<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u0445 <code>yandex.cpi.flant.com\/listener-subnet-id<\/code><em> <\/em>\u0438<em> <\/em><code>yandex.cpi.flant.com\/target-group-network-id<\/code><em> <\/em>\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 ID \u0441\u0435\u0442\u0435\u0439 \u0432<\/p>\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-347876","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/347876","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=347876"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/347876\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=347876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=347876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=347876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}