{"id":341079,"date":"2022-11-10T15:00:27","date_gmt":"2022-11-10T15:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=341079"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=341079","title":{"rendered":"<span>\u0421\u0430\u043c\u043e\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e (\u043f\u043e\u0447\u0442\u0438 \u0ca0 \u035c\u0296 \u0ca0 ) Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e5\/4f8\/f63\/4e54f8f6300fecbf8b89c5dcd432095a.gif\" width=\"592\" height=\"403\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e5\/4f8\/f63\/4e54f8f6300fecbf8b89c5dcd432095a.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/577964\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u043e\u043c. \u041f\u0440\u043e\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f, \u043e\u043f\u0430\u043b\u0438 \u043b\u0438\u0441\u0442\u044c\u044f&#8230; \u0438 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0437\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b. \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0430\u0436\u0435 \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438. \u041e\u0434\u043d\u043e \u0434\u0435\u043b\u043e \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0430 \u043a\u0430\u043a \u0436\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432? \u041f\u0440\u043e \u044d\u0442\u043e \u0438 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442! \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u0438 \u0432\u043e\u0442, \u0441\u043f\u0443\u0441\u0442\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u043c\u0435\u043d, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439\u0448\u0435\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e <em>highly available <\/em>\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Kubespray.<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"#1\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#3\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Ansible-\u043c\u0430\u0448\u0438\u043d\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#6\">\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#7\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 worker node<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#8\">\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 worker node<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#9\">\u0417\u0430\u043c\u0435\u043d\u0430 master node<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#10\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a><\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 (aka high-availability) &#8212; \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0448\u0430\u0436\u043e\u043a \u043a production-ready \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443. \u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/kubernetes.io\/docs\/setup\/production-environment\/#production-considerations\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439<\/a> \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0437\u043d\u0430\u0447\u0438\u0442:<\/p>\n<ol>\n<li>\n<p>\u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043c\u0430\u0441\u0442\u0435\u0440) \u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u043f\u043b\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 API Kubernetes<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443, \u0442\u043e \u043d\u0430\u0448 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 <em>\u043a\u0432\u0430\u0437\u0438<\/em> high-available (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437-\u0437\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430). \u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0443\u0437\u043b\u043e\u0432 \u2014 \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445. \u041c\u0430\u0448\u0438\u043d\u044b \u0441 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0447\u0438\u0435, \u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0430\u0431\u0435\u0435 \u2014 \u043a\u0430\u043a \u043c\u0430\u0441\u0442\u0435\u0440\u0430. \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430. <\/p>\n<p>\u0421\u0435\u0442\u0430\u043f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<ol>\n<li>\n<p>Kubenetes version &#8212; 1.23.7<\/p>\n<\/li>\n<li>\n<p>\u0421ontainer runtime &#8212;\u00a0\u0421ontainerd 1.6.4<\/p>\n<\/li>\n<li>\n<p>Network plugin &#8212; Calico 3.22.3<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0438 \u0438 \u0438\u0445 \u0440\u043e\u043b\u0438 \u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>IP 185.186.142.53 &#8212; Master #1<\/p>\n<\/li>\n<li>\n<p>IP 185.186.142.5 &#8212; Master #2<\/p>\n<\/li>\n<li>\n<p>IP 46.8.19.144 &#8212; Worker #1<\/p>\n<\/li>\n<li>\n<p>IP 46.8.19.244 &#8212; Worker #2<\/p>\n<\/li>\n<\/ol>\n<p>\u0423 \u0432\u0441\u0435\u0445 \u043c\u0430\u0448\u0438\u043d \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438: 2 CPU 3,0 \u0413\u0413\u0446, 4 \u0413\u0431 RAM, 100 \u0413\u0431 HDD, \u041e\u0421 Ubuntu 20.04. \u041d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 3,6 \u0413\u0413\u0446, \u0445\u043e\u0442\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>grep MHz \/proc\/cpuinfo<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 3 \u0413\u0413\u0446 (\u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0430\u0445 \u0438 \u0442\u043e\u0433\u043e \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435). \u041f\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u043c\u0435\u0441\u044f\u0446 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 2700 \u0440\u0443\u0431. (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043a\u0438\u0434\u043a\u0438 \u0437\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u043d\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0432\u043f\u0435\u0440\u0451\u0434). \u0425\u043e\u0447\u0443 \u043e\u043f\u044f\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u043e\u0439 handmade \u0434\u0435\u0448\u0435\u0432\u043b\u0435 Kubernetes-as-a-Service \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0430\u0436 \u043d\u0430 75%! <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e (\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448 VPS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0441\u043d\u0438\u043c\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u044d\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u043c \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (\u0434\u0430\u043b\u0435\u0435 \u2014 Ansible-\u043c\u0430\u0448\u0438\u043d\u0430). \u041d\u0430 \u043d\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c Python, Ansible \u0432\u0435\u0440\u0441\u0438\u0438 2.4 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435, \u0438 Jinja (\u044d\u0442\u043e \u0432\u0441\u0451 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435). <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kubernetes \u043d\u0430 &#171;\u0433\u043e\u043b\u043e\u0435&#187; \u0436\u0435\u043b\u0435\u0437\u043e &#8212; \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u00a0<strong>GKE<\/strong>\u00a0\u0438\u043b\u0438\u00a0<strong>AWS <\/strong>\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a<strong> <\/strong>\u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ce0\/da1\/6ed\/ce0da16ed7023c2d59bd42fb82f0a98e.jpeg\" width=\"auto\" height=\"auto\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce0\/da1\/6ed\/ce0da16ed7023c2d59bd42fb82f0a98e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/577964\">\u0441\u0432\u043e\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#a-pure-software-solution-metallb\">\u0440\u0435\u0448\u0430\u043b<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MetalLb, \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#via-the-host-network\">\u0434\u0440\u0443\u0433\u043e\u0439<\/a> \u043f\u043e\u0434\u0445\u043e\u0434. \u0412\u0441\u0435 4 \u0443\u0437\u043b\u0430 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u0432\u043d\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0434\u044b ingress-nginx \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0437\u043b\u0435 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 Daemonset) \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0440\u0442 80\/443 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/c1c\/0ef\/fe5\/c1c0effe5a87ed38a1bdcedf4ad322e5.jpeg\" width=\"756\" height=\"462\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c1c\/0ef\/fe5\/c1c0effe5a87ed38a1bdcedf4ad322e5.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#via-the-host-network\">\u0446\u0438\u0442\u0430\u0442\u0443<\/a> \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<blockquote>\n<p>Enabling this option\u00a0<strong>exposes every system daemon to the NGINX Ingress controller<\/strong>\u00a0on any network interface, including the host&#8217;s loopback. Please evaluate the impact this may have on the security of your system carefully.<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0442\u0440\u0438\u0445 &#8212; \u044f \u0437\u0430\u043a\u0430\u0437\u0430\u043b \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f <em>awesomeservice.pro<\/em> \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 4 IP \u0430\u0434\u0440\u0435\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c DNS <a href=\"https:\/\/kb.selectel.ru\/docs\/networks-services\/dns\/manage-records\/dns-balancing\/\">\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443<\/a> \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 Round Robin \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0437\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0434\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u042d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043d\u0430\u0448\u0435\u043b \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 DNS \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u044b\u0439\u0434\u0435\u0442 <em>\u043f\u043e\u0447\u0442\u0438<\/em> \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c. \u0414\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043c\u0438\u043d\u0443\u0441\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u043b\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 DNS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0441\u043e\u0444\u0442, \u043f\u043b\u044e\u0441 \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c TTL \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0435\u0433\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u043d\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0432\u044b\u0439\u0434\u0435\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, DNS \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441. \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0435\u0451 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e <a href=\"#%D1%82%D0%B5%D1%81%D1%82\">\u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e<\/a> \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448 VPS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <a href=\"https:\/\/gcore.com\/support\/articles\/4405866963345\/\">Virtual IP<\/a>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u043e \u0432\u0441\u0435\u043c 4 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0430\u044f DNS \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u041c\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443. \u0410 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0438\u0447\u0430 VPS \u0441\u0442\u043e\u044f\u0442 \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0434\u0435\u043b\u0443. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/1ca\/78f\/4fe\/1ca78f4feaa0490a5c4d7ebb57a60901.jpeg\" width=\"1200\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ca\/78f\/4fe\/1ca78f4feaa0490a5c4d7ebb57a60901.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/h2>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u043b\u0430\u0432\u044b \u043b\u0435\u0436\u0438\u0442 \u044d\u0442\u0430 <a href=\"https:\/\/schoolofdevops.github.io\/ultimate-kubernetes-bootcamp\/cluster_setup_kubespray\/\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>, \u043d\u043e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b.<a href=\"#0\">\u2191<\/a><\/p>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c SSH-\u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ssh-copy-id<\/code> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">ssh-copy-id root@185.186.142.53<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f:<\/p>\n<pre><code class=\"bash\">ssh root@185.186.142.53<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c Python:<\/p>\n<pre><code>sudo apt update sudo apt install python<\/code><\/pre>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e IPv4:<\/p>\n<pre><code class=\"bash\">echo \"net.ipv4.ip_forward=1\" >> \/etc\/sysctl.conf<\/code><\/pre>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"bash\">swapoff -a<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u21161<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043f\u043e\u043b\u0430\u0433\u0430\u043b, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043e\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0447\u0438\u0441\u0442\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u041e\u0421. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430\u043a. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Kubernetes \u043d\u0430 VPS \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432. \u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u0437-\u0437\u0430 \u043d\u0438\u0437\u043a\u043e\u0439 \u0446\u0435\u043d\u044b) \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0438\u0437-\u0437\u0430 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0443\u043f\u043e\u0440\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0444\u0430\u0439\u043b resolv.conf \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 1.1.1.1 \u0438\u043b\u0438 8.8.8.8. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0443 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u041e\u0421, \u0438 \u0444\u0430\u0439\u043b \/etc\/resolv.conf \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 simlink. \u041e \u0447\u0451\u043c \u043d\u0435\u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<pre><code class=\"bash\"># This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run \"resolvectl status\" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at \/etc\/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for \/etc\/resolv.conf.  nameserver 127.0.0.53 options edns0 trust-ad search template <\/code><\/pre>\n<p>\u0418 \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u0438\u0445 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c simlink \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u043e\u0432 (\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e 1.1.1.1 \u0438\u043b\u0438 8.8.8.8).<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">nameserver 127.0.0.53 options edns0 trust-ad search template  nameserver 8.8.8.8 nameserver 1.1.1.1<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Kubernetes. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041f\u0440\u0438\u0447\u0451\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c SSH-\u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u044c. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c VPS (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e <u>vmmanager)<\/u>. <\/p>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Ansible-\u043c\u0430\u0448\u0438\u043d\u044b<\/h3>\n<p>\u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f Kubernetes. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Kubespray:<\/p>\n<pre><code class=\"bash\">git clone git@github.com:kubernetes-sigs\/kubespray.git cd kubespray<\/code><\/pre>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041b\u0438\u0431\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0435\u0442, \u043b\u0438\u0431\u043e \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0432 \u0441\u0435\u0431\u0435 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043d\u0435\u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u043a\u0438, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u043c\u0430\u0441\u0442\u0435\u0440-\u0432\u0435\u0442\u043a\u0443. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 tag v2.19.0. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>git checkout tags\/v2.19.0<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c, \u0448\u0430\u0431\u043b\u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 sample, \u043c\u044b \u0435\u0433\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435:<\/p>\n<pre><code class=\"bash\">cp -rfp inventory\/sample inventory\/k8s<\/code><\/pre>\n<p>\u0414\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f k8s<em>. <\/em>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>IPS<\/code> \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">declare -a IPS=(185.186.142.5 185.186.142.53 46.8.19.144 46.8.19.244)<\/code><\/pre>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c:<\/p>\n<pre><code class=\"bash\">CONFIG_FILE=inventory\/k8s\/hosts.yaml python3 contrib\/inventory_builder\/inventory.py ${IPS[@]}<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e62\/9b2\/a1a\/e629b2a1ab6faeb4e8c16a3c9f9130d0.png\" width=\"1962\" height=\"718\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e62\/9b2\/a1a\/e629b2a1ab6faeb4e8c16a3c9f9130d0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0411\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"bash\">nano inventory\/k8s\/hosts.yaml<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0423 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0444\u0438\u0433 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">all:   hosts:     node1:       ansible_host: 185.186.142.5       ip: 185.186.142.5       access_ip: 185.186.142.5     node2:       ansible_host: 185.186.142.53       ip: 185.186.142.53       access_ip: 185.186.142.53     node3:       ansible_host: 46.8.19.144       ip: 46.8.19.144       access_ip: 46.8.19.144     node4:       ansible_host: 46.8.19.244       ip: 46.8.19.244       access_ip: 46.8.19.244   children:     kube_control_plane:       hosts:         node1:         node2:     kube_node:       hosts:         node1:         node2:         node3:         node4:     etcd:       hosts:         node1:         node2:         node3:     k8s_cluster:       children:         kube_control_plane:         kube_node:     calico_rr:       hosts: {}<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <code>kube_control_plane<\/code>,<em> <\/em>\u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e node1 \u0438 node2.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 Kubernetes-\u0443\u0437\u043b\u0430: node1, node2, node3 \u0438 node4.<\/p>\n<\/li>\n<li>\n<p>Etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 \u0442\u0440\u0438 \u0445\u043e\u0441\u0442\u0430: node1, node2 \u0438 node3. \u0422\u0440\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u043b\u044f etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043a\u0432\u043e\u0440\u0443\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0445\u043e\u0441\u0442\u043e\u0432 \u0432 <code>etcd:hosts<\/code>, \u0442\u043e Ansible-\u0440\u043e\u043b\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/h3>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 group_vars. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Helm \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 addons.yaml \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>helm_enable<\/code> \u0440\u0430\u0432\u043d\u044b\u043c <code>true<\/code>:<\/p>\n<pre><code># Helm deployment helm_enabled: true<\/code><\/pre>\n<p>\u0412 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 addons.yaml \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c nginx-ingress, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>ingress_nginx_host_network, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0443\u0437\u043b\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043f\u043e\u0434\u0430 <\/em>nginx-ingress:<\/p>\n<pre><code># Nginx ingress controller deployment ingress_nginx_enabled: true ingress_nginx_host_network: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>--- # Kubernetes dashboard # RBAC required. see docs\/getting-started.md for access details. # dashboard_enabled: false  # Helm deployment helm_enabled: true  # Registry deployment registry_enabled: false # registry_namespace: kube-system # registry_storage_class: \"\" # registry_disk_size: \"10Gi\"  # Metrics Server deployment metrics_server_enabled: false # metrics_server_container_port: 4443 # metrics_server_kubelet_insecure_tls: true # metrics_server_metric_resolution: 15s # metrics_server_kubelet_preferred_address_types: \"InternalIP,ExternalIP,Hostname\"  # Rancher Local Path Provisioner local_path_provisioner_enabled: false # local_path_provisioner_namespace: \"local-path-storage\" # local_path_provisioner_storage_class: \"local-path\" # local_path_provisioner_reclaim_policy: Delete # local_path_provisioner_claim_root: \/opt\/local-path-provisioner\/ # local_path_provisioner_debug: false # local_path_provisioner_image_repo: \"rancher\/local-path-provisioner\" # local_path_provisioner_image_tag: \"v0.0.21\" # local_path_provisioner_helper_image_repo: \"busybox\" # local_path_provisioner_helper_image_tag: \"latest\"  # Local volume provisioner deployment local_volume_provisioner_enabled: false # local_volume_provisioner_namespace: kube-system # local_volume_provisioner_nodelabels: #   - kubernetes.io\/hostname #   - topology.kubernetes.io\/region #   - topology.kubernetes.io\/zone # local_volume_provisioner_storage_classes: #   local-storage: #     host_dir: \/mnt\/disks #     mount_dir: \/mnt\/disks #     volume_mode: Filesystem #     fs_type: ext4 #   fast-disks: #     host_dir: \/mnt\/fast-disks #     mount_dir: \/mnt\/fast-disks #     block_cleaner_command: #       - \"\/scripts\/shred.sh\" #       - \"2\" #     volume_mode: Filesystem #     fs_type: ext4 # local_volume_provisioner_tolerations: #   - effect: NoSchedule #     operator: Exists  # CSI Volume Snapshot Controller deployment, set this to true if your CSI is able to manage snapshots # currently, setting cinder_csi_enabled=true would automatically enable the snapshot controller # Longhorn is an extenal CSI that would also require setting this to true but it is not included in kubespray # csi_snapshot_controller_enabled: false # csi snapshot namespace # snapshot_controller_namespace: kube-system  # CephFS provisioner deployment cephfs_provisioner_enabled: false # cephfs_provisioner_namespace: \"cephfs-provisioner\" # cephfs_provisioner_cluster: ceph # cephfs_provisioner_monitors: \"172.24.0.1:6789,172.24.0.2:6789,172.24.0.3:6789\" # cephfs_provisioner_admin_id: admin # cephfs_provisioner_secret: secret # cephfs_provisioner_storage_class: cephfs # cephfs_provisioner_reclaim_policy: Delete # cephfs_provisioner_claim_root: \/volumes # cephfs_provisioner_deterministic_names: true  # RBD provisioner deployment rbd_provisioner_enabled: false # rbd_provisioner_namespace: rbd-provisioner # rbd_provisioner_replicas: 2 # rbd_provisioner_monitors: \"172.24.0.1:6789,172.24.0.2:6789,172.24.0.3:6789\" # rbd_provisioner_pool: kube # rbd_provisioner_admin_id: admin # rbd_provisioner_secret_name: ceph-secret-admin # rbd_provisioner_secret: ceph-key-admin # rbd_provisioner_user_id: kube # rbd_provisioner_user_secret_name: ceph-secret-user # rbd_provisioner_user_secret: ceph-key-user # rbd_provisioner_user_secret_namespace: rbd-provisioner # rbd_provisioner_fs_type: ext4 # rbd_provisioner_image_format: \"2\" # rbd_provisioner_image_features: layering # rbd_provisioner_storage_class: rbd # rbd_provisioner_reclaim_policy: Delete  # Nginx ingress controller deployment ingress_nginx_enabled: true ingress_nginx_host_network: true ingress_publish_status_address: \"\" # ingress_nginx_nodeselector: #   kubernetes.io\/os: \"linux\" # ingress_nginx_tolerations: #   - key: \"node-role.kubernetes.io\/master\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" #   - key: \"node-role.kubernetes.io\/control-plane\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" # ingress_nginx_namespace: \"ingress-nginx\" # ingress_nginx_insecure_port: 80 # ingress_nginx_secure_port: 443 # ingress_nginx_configmap: #   map-hash-bucket-size: \"128\" #   ssl-protocols: \"TLSv1.2 TLSv1.3\" # ingress_nginx_configmap_tcp_services: #   9000: \"default\/example-go:8080\" # ingress_nginx_configmap_udp_services: #   53: \"kube-system\/coredns:53\" # ingress_nginx_extra_args: #   - --default-ssl-certificate=default\/foo-tls # ingress_nginx_termination_grace_period_seconds: 300 # ingress_nginx_class: nginx  # ALB ingress controller deployment ingress_alb_enabled: false # alb_ingress_aws_region: \"us-east-1\" # alb_ingress_restrict_scheme: \"false\" # Enables logging on all outbound requests sent to the AWS API. # If logging is desired, set to true. # alb_ingress_aws_debug: \"false\"  # Cert manager deployment cert_manager_enabled: false # cert_manager_namespace: \"cert-manager\" # cert_manager_tolerations: #   - key: node-role.kubernetes.io\/master #     effect: NoSchedule #   - key: node-role.kubernetes.io\/control-plane #     effect: NoSchedule # cert_manager_affinity: #  nodeAffinity: #    preferredDuringSchedulingIgnoredDuringExecution: #    - weight: 100 #      preference: #        matchExpressions: #        - key: node-role.kubernetes.io\/control-plane #          operator: In #          values: #          - \"\" # cert_manager_nodeselector: #   kubernetes.io\/os: \"linux\"  # cert_manager_trusted_internal_ca: | #   -----BEGIN CERTIFICATE----- #   [REPLACE with your CA certificate] #   -----END CERTIFICATE----- # cert_manager_leader_election_namespace: kube-system  # MetalLB deployment metallb_enabled: false metallb_speaker_enabled: true # metallb_ip_range: #   - \"10.5.0.50-10.5.0.99\" # metallb_pool_name: \"loadbalanced\" # matallb_auto_assign: true # metallb_speaker_nodeselector: #   kubernetes.io\/os: \"linux\" # metallb_controller_nodeselector: #   kubernetes.io\/os: \"linux\" # metallb_speaker_tolerations: #   - key: \"node-role.kubernetes.io\/master\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" #   - key: \"node-role.kubernetes.io\/control-plane\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" # metallb_controller_tolerations: #   - key: \"node-role.kubernetes.io\/master\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" #   - key: \"node-role.kubernetes.io\/control-plane\" #     operator: \"Equal\" #     value: \"\" #     effect: \"NoSchedule\" # metallb_version: v0.12.1 # metallb_protocol: \"layer2\" # metallb_port: \"7472\" # metallb_memberlist_port: \"7946\" # metallb_additional_address_pools: #   kube_service_pool: #     ip_range: #       - \"10.5.1.50-10.5.1.99\" #     protocol: \"layer2\" #     auto_assign: false # metallb_protocol: \"bgp\" # metallb_peers: #   - peer_address: 192.0.2.1 #     peer_asn: 64512 #     my_asn: 4200000000 #   - peer_address: 192.0.2.2 #     peer_asn: 64513 #     my_asn: 4200000000   argocd_enabled: false # argocd_version: v2.1.6 # argocd_namespace: argocd # Default password: #   - https:\/\/argoproj.github.io\/argo-cd\/getting_started\/#4-login-using-the-cli #   --- #   The initial password is autogenerated to be the pod name of the Argo CD API server. This can be retrieved with the command: #   kubectl get pods -n argocd -l app.kubernetes.io\/name=argocd-server -o name | cut -d'\/' -f 2 #   --- # Use the following var to set admin password # argocd_admin_password: \"password\"  # The plugin manager for kubectl krew_enabled: false krew_root_dir: \"\/usr\/local\/krew\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Ansible \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u043f\u043e SSH:<\/p>\n<pre><code>nano ansible.cfg<\/code><\/pre>\n<p>\u0412 \u0433\u0440\u0443\u043f\u043f\u0435 <code>ssh_connection<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>remote_user<\/code>, \u0440\u0430\u0432\u043d\u044b\u0439 <code>root<\/code>:<\/p>\n<pre><code>remote_user=root<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[ssh_connection] pipelining=True ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=\/dev\/null #control_path = ~\/.ssh\/ansible-%%r@%%h:%%p [defaults] # https:\/\/github.com\/ansible\/ansible\/issues\/56930 (to ignore group names with - and .) force_valid_group_names = ignore  host_key_checking=False gathering = smart fact_caching = jsonfile fact_caching_connection = \/tmp fact_caching_timeout = 7200 stdout_callback = default display_skipped_hosts = no library = .\/library callback_whitelist = profile_tasks,ara_default roles_path = roles:$VIRTUAL_ENV\/usr\/local\/share\/kubespray\/roles:$VIRTUAL_ENV\/usr\/local\/share\/ansible\/roles:\/usr\/share\/kubespray\/roles deprecation_warnings=False inventory_ignore_extensions = ~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo, .creds, .gpg remote_user=root [inventory] ignore_patterns = artifacts, credentials<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0435\u0451 \u0432 \u043a\u043e\u0440\u043d\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 kubespray:<\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml cluster.yml<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0441\u0430 \u0434\u043e \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u0447\u0430\u0441\u043e\u0432, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ca\/7ae\/1a9\/2ca7ae1a9126b949545eca51d2e773d8.png\" width=\"2824\" height=\"1048\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ca\/7ae\/1a9\/2ca7ae1a9126b949545eca51d2e773d8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">kubectl get nodes<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/009\/60a\/11a\/00960a11a383a2db5a12ba92cfd05ae5.png\" width=\"1000\" height=\"224\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/009\/60a\/11a\/00960a11a383a2db5a12ba92cfd05ae5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u043e\u0434\u044b (coredns, kube-controller-manager, kube-scheduler \u0438 \u0442\u0434.):<\/p>\n<pre><code>kubectl get pods -n kube-system<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/011\/cba\/de5\/011cbade5b50da3ed6fb8436c2d4ba7b.png\" width=\"1390\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/011\/cba\/de5\/011cbade5b50da3ed6fb8436c2d4ba7b.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430 CrashLoopBackOff (\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u21162)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 CrashLoopBackOff \u0443 coredns \u0438 nodelocaldns:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cef\/cb1\/0c7\/cefcb10c78f7a827ffe9562cb3eba716.png\" width=\"1614\" height=\"940\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cef\/cb1\/0c7\/cefcb10c78f7a827ffe9562cb3eba716.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043b\u0435\u0433\u043a\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f, \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/coredns.io\/plugins\/loop\/#troubleshooting-loops-in-kubernetes-clusters\">\u0442\u0443\u0442<\/a>. \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e kubelet:<\/p>\n<pre><code class=\"bash\">nano \/etc\/kubernetes\/kubelet-config.yaml<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 <code>resolvConf<\/code> \u043d\u0430:<\/p>\n<pre><code class=\"bash\">resolvConf: \"\/etc\/resolv.conf\"<\/code><\/pre>\n<p>\u0418 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443:<\/p>\n<pre><code class=\"bash\">reboot<\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u044d\u0442\u043e \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445, \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u044f\u0442\u0441\u044f \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a85\/1c8\/344\/a851c8344245ae8ea647583974c80b10.png\" width=\"1390\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a85\/1c8\/344\/a851c8344245ae8ea647583974c80b10.png\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D1%82%D0%B5%D1%81%D1%82\" id=\"\u0442\u0435\u0441\u0442\"><\/a><\/p>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439, \u0442\u043e \u0431\u0438\u0448\u044c high-availability.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ea\/188\/958\/2ea188958b86ec30e3f1772a646b73fd.png\" width=\"480\" height=\"365\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ea\/188\/958\/2ea188958b86ec30e3f1772a646b73fd.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/551332\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e GET-\u0440\u0443\u0447\u043a\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 UUID. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u2014 deployment:<\/p>\n<pre><code>kubectl create deployment uuid-server --image=mopckou\/sticky-session:0.0.5<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u2014 Service \u0441 \u0442\u0438\u043f\u043e\u043c LoadBalancer: <\/p>\n<pre><code>kubectl expose deployment uuid-server --type=LoadBalancer --port=8080<\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 ingress \u0441 \u0445\u043e\u0441\u0442\u043e\u043c uuid.awesomeservice.pro, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b:<\/p>\n<pre><code>cat &lt;&lt;EOF> ingress.yaml apiVersion: networking.k8s.io\/v1 kind: Ingress metadata:   name: uuid-server-ingress spec:   rules:     - host: uuid.awesomeservice.pro       http:         paths:           - path: \/             pathType: Prefix             backend:               service:                 name: uuid-server                 port:                   number: 8080 EOF<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code>kubectl apply -f ingress.yaml<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 ingress:<\/p>\n<pre><code class=\"bash\">kubectl get ingress<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a28\/21c\/444\/a2821c444c0bde9b7fda8394bba29fad.png\" width=\"2214\" height=\"114\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a28\/21c\/444\/a2821c444c0bde9b7fda8394bba29fad.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 &#8212; \u0432\u0441\u0435 4 \u0443\u0437\u043b\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a. \u041d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0440\u0430\u0444\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0434\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b 185.186.142.53 \u0438 185.186.142.5. \u0412\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u044f \u0437\u0430\u0432\u044f\u0437\u0430\u043b \u043d\u0430 \u0434\u043e\u043c\u0435\u043d <em>uuid.awesomeservice.pro<\/em> \u0443 \u0441\u0432\u043e\u0435\u0433\u043e DNS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/186\/6e4\/cb4\/1866e4cb47e271e01e9aaa61882aa410.png\" width=\"2110\" height=\"312\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/186\/6e4\/cb4\/1866e4cb47e271e01e9aaa61882aa410.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0443\u0437\u0435\u043b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cec\/2a8\/33d\/cec2a833d91f83c749ade52a9c9fe268.png\" width=\"2394\" height=\"1020\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cec\/2a8\/33d\/cec2a833d91f83c749ade52a9c9fe268.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u0432\u0435\u0442\u0438\u043b\u0430 node1 (185.186.142.5). \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 (Safari):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0dc\/fbd\/218\/0dcfbd218cb968c43b38bc93b7973c48.png\" width=\"2014\" height=\"1056\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0dc\/fbd\/218\/0dcfbd218cb968c43b38bc93b7973c48.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 Safari \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0443\u0437\u043b\u043e\u043c node2 (185.186.142.53). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u043e\u0434\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e DNS-\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0432\u043d\u0435\u0448\u0442\u0430\u0442\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0437\u043b\u043e\u0432 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c. \u042f \u0440\u0443\u043a\u0430\u043c\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0437\u0435\u043b \u0441\u043c\u043e\u0442\u0440\u044e \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\/r\/w1560\/getpro\/habr\/upload_files\/b1e\/34d\/b4e\/b1e34db4e847dc18234e7c2d46a5bef5.png\" width=\"1436\" height=\"218\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1e\/34d\/b4e\/b1e34db4e847dc18234e7c2d46a5bef5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a3\/95f\/222\/8a395f22277a208242be852734ce7d5e.png\" width=\"2334\" height=\"1028\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a3\/95f\/222\/8a395f22277a208242be852734ce7d5e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0440\u0430\u043d\u044c\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 Chrome \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0443\u0437\u043b\u043e\u043c node1 (185.186.142.5), \u0430 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0442\u043e\u0442 \u0441\u0442\u0430\u043b \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0448\u043b\u0438 \u043d\u0430 \u0443\u0437\u0435\u043b node2 (185.186.142.53). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0432\u0438\u0434\u0438\u043c\u043e <a href=\"https:\/\/www.cloudns.net\/wiki\/article\/188\/\">TTL<\/a> \u0438\u0441\u0442\u0435\u043a \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u044d\u0448 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a DNS \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0434\u0440\u0435\u0441. \u0421\u0442\u043e\u0438\u0442 \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 (185.186.142.5) \u0438 \u0442\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0434\u0432\u0438\u0441\u0430\u0435\u0442 \u043d\u0430 1 \u043c\u0438\u043d\u0443\u0442\u0443, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0431\u0435\u0440\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u043b\u0438\u043b\u0430\u0441\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd7\/eae\/c4e\/bd7eaec4e1d1a4a59abbf5cb56a87066.png\" width=\"2606\" height=\"792\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd7\/eae\/c4e\/bd7eaec4e1d1a4a59abbf5cb56a87066.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fee\/202\/433\/fee202433466097f6f4213a63be1b44d.png\" width=\"2636\" height=\"758\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fee\/202\/433\/fee202433466097f6f4213a63be1b44d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0412\u042b\u0421\u041e\u041a\u041e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439. \u0415\u0441\u043b\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u0437 4 \u0443\u0437\u043b\u043e\u0432, \u043e\u0434\u0438\u043d \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c 25% \u0434\u043e\u043b\u0433\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u0441\u0451 \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c\u0438. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0432 2-\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0438 \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0441\u0434\u0435\u043b\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 Python \u0441\u043a\u0440\u0438\u043f\u0442\u0435 &#8212; \u0442\u0430\u043c, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0434\u043e\u043b\u0433\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439 \u0440\u0435\u0448\u0430\u0439\u0442\u0435, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0432\u0430\u043c \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<p><a class=\"anchor\" name=\"6\" id=\"6\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h2>\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/h2>\n<p><a class=\"anchor\" name=\"7\" id=\"7\"><\/a><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0431\u044b\u043b \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u044d\u0442\u043e\u0439 <a href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\/blob\/master\/docs\/nodes.md#1-change-order-of-current-control-planes\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0438 <a href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\/issues\/3471\">issue<\/a>, \u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 worker node<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b, \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0443\u0436\u043d\u043e <a href=\"#3\">\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c<\/a>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438: \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c \u043d\u043e\u0432\u044b\u0439 \u0445\u043e\u0441\u0442. \u0412 \u0444\u0430\u0439\u043b\u0435 hosts.yaml \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b <code>all.hosts<\/code>, \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0445\u043e\u0441\u0442 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u2014 <code>all.children.kube_node.hosts<\/code><em>. <\/em>\u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u044f\u0442\u044b\u0439 \u0443\u0437\u0435\u043b \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c 46.8.19.76.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u0444\u0430\u0439\u043b hosts.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>all:   hosts:     node1:       ansible_host: 185.186.142.5       ip: 185.186.142.5       access_ip: 185.186.142.5     node2:       ansible_host: 185.186.142.53       ip: 185.186.142.53       access_ip: 185.186.142.53     node3:       ansible_host: 46.8.19.144       ip: 46.8.19.144       access_ip: 46.8.19.144     node4:       ansible_host: 46.8.19.244       ip: 46.8.19.244       access_ip: 46.8.19.244     node5:       ansible_host: 46.8.19.76       ip: 46.8.19.76       access_ip: 46.8.19.76   children:     kube_control_plane:       hosts:         node1:         node2:     kube_node:       hosts:         node1:         node2:         node3:         node4:         node5:     etcd:       hosts:         node1:         node2:         node3:     k8s_cluster:       children:         kube_control_plane:         kube_node:     calico_rr:       hosts: {}<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043b\u0435\u0439\u0431\u0443\u043a \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443: <\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml facts.yml<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/418\/d5c\/596\/418d5c596ea7f9a7259f0e824957779c.png\" width=\"1998\" height=\"434\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/418\/d5c\/596\/418d5c596ea7f9a7259f0e824957779c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0441\u0431\u043e\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043e\u043d \u043d\u0435 \u0437\u0430\u0439\u043c\u0451\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c <code>--limit<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e worker-\u0443\u0437\u043b\u0430 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043b\u044b. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0441\u0431\u043e\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043b\u0435\u0439\u0431\u0443\u043a \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f worker-\u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml --limit=node5 scale.yml<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u21163<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 resolved service. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440:<\/p>\n<pre><code class=\"bash\"> systemctl enable systemd-resolved.service<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"8\" id=\"8\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h2>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 worker node<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0443\u0437\u0435\u043b, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043b\u0435\u0439\u0431\u0443\u043a\u043e\u043c:<\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml -e node=node5 remove-node.yml<\/code><\/pre>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 10 \u043c\u0438\u043d\u0443\u0442. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0435\u0439\u0431\u0443\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/922\/098\/022\/922098022936bbd4aaad897fb5617804.png\" width=\"2130\" height=\"728\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/922\/098\/022\/922098022936bbd4aaad897fb5617804.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u0435\u0439\u0431\u0443\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 worker-\u0443\u0437\u0435\u043b \u0436\u0438\u0432. \u0415\u0441\u043b\u0438 \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439, \u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0437\u0430\u043c\u0435\u043d\u0443 master-\u0443\u0437\u043b\u0430, \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0443\u0437\u0435\u043b.<\/p>\n<p><a class=\"anchor\" name=\"9\" id=\"9\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h3>\u0417\u0430\u043c\u0435\u043d\u0430 master node<\/h3>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0438 \u043d\u0435 \u043d\u0430 \u0441\u0432\u044f\u0437\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e kubespray \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043f\u043b\u0435\u0439\u0431\u0443\u043a remove-node.yaml, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b facts.yml, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b upgrade-cluster.yaml \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442 \u043d\u0430 \u043e\u043f\u0440\u043e\u0441\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043d\u043e\u0434\u044b. \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u042d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u044f \u0434\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c issue github, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u0430\u043a \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b, \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0443\u0437\u043b\u043e\u0432: \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0430\u0448\u0438\u043d:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c64\/516\/c8e\/c64516c8e0ec640072a5cc92724f67f0.png\" width=\"1050\" height=\"218\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c64\/516\/c8e\/c64516c8e0ec640072a5cc92724f67f0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0438 \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0440\u0443\u0447\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443 \u0443\u0437\u0435\u043b \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a &#171;Not Ready&#187;:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fb2\/353\/91a\/fb235391ad9f6478a43e0ee4f4bf6e08.png\" width=\"1118\" height=\"220\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb2\/353\/91a\/fb235391ad9f6478a43e0ee4f4bf6e08.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u043b\u0438 \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0435\u0433\u043e \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c:<\/p>\n<pre><code class=\"bash\">kubectl cordon node1 kubectl drain node1 --ignore-daemonsets<\/code><\/pre>\n<p>\u041a\u043b\u044e\u0447 <code>--ignore-daemonsets<\/code> \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u043e\u0434\u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>drain<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 (Ctl+C). \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 NotReady, SchedulingDisabled. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea1\/df9\/7f0\/ea1df97f0cdadf54c32f0f5fa0a967a4.png\" width=\"1310\" height=\"220\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea1\/df9\/7f0\/ea1df97f0cdadf54c32f0f5fa0a967a4.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0434\u0430\u043b\u0438\u043c \u0443\u0437\u0435\u043b:<\/p>\n<pre><code class=\"bash\">kubectl delete node node1<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/228\/6f9\/16e\/2286f916e6f617a696c0026e719cc26d.png\" width=\"1288\" height=\"78\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/228\/6f9\/16e\/2286f916e6f617a696c0026e719cc26d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c cluset-info, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 <code>server<\/code> \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"bash\">kubectl edit cm -n kube-public cluster-info<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/71a\/da5\/763\/71ada57636f262309b2fee7a80579377.png\" width=\"1330\" height=\"596\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/71a\/da5\/763\/71ada57636f262309b2fee7a80579377.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042f \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u043d\u0430 185.186.142.53 (node2), \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0436\u0438\u0432\u043e\u0439 \u043c\u0430\u0441\u0442\u0435\u0440. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0435 \u0435\u0449\u0451 \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u0430\u044f \u0430\u0432\u0430\u0440\u0438\u044f \u0437\u0430\u0434\u0435\u043b\u0430 \u0438 etcd-\u0443\u0437\u0435\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 node1 kubernetes. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 etcd-1. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"bash\">nano \/etc\/kubernetes\/manifests\/kube-apiserver.yaml<\/code><\/pre>\n<p>\u0418 \u0443\u0434\u0430\u043b\u0438\u043c \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 etcd-\u0443\u0437\u0435\u043b \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <code>--etcd-servers<\/code>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e4f\/ee1\/984\/e4fee1984f0551c8e2e06d5183e00f37.png\" width=\"1786\" height=\"464\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e4f\/ee1\/984\/e4fee1984f0551c8e2e06d5183e00f37.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c etcd-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code>nano \/etc\/etcd.env<\/code><\/pre>\n<p>\u0418 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e etcd-\u043d\u043e\u0434\u0443 \u0432 \u043f\u043e\u043b\u0435 <code>ETCD_INITIAL_CLUSTER<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4c0\/48d\/bb8\/4c048dbb8b2d81a4f959847393233317.png\" width=\"1908\" height=\"426\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c0\/48d\/bb8\/4c048dbb8b2d81a4f959847393233317.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0434\u044b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 etcdctl \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 etcd. \u042d\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0430\u0445. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 etcd-\u0443\u0437\u043b\u044b:<\/p>\n<pre><code class=\"bash\">etcdctl member list --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node2.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node2-key.pem<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d5\/3ea\/984\/2d53ea98478e9d265852a8d2c61a356b.png\" width=\"2544\" height=\"152\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d5\/3ea\/984\/2d53ea98478e9d265852a8d2c61a356b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043b\u044e\u0447\u0438 <code>--cacert<\/code>, <code>--cert<\/code> \u0438 <code>--key<\/code> \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u0438 \u044d\u0442\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0443\u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b kubespray \u0438 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \/etc\/ssl\/etcd\/ssl\/ \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0433\u0434\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0434\u0430\u043b\u0438\u043c \u0438\u0437 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0443\u0437\u0435\u043b:<\/p>\n<pre><code>etcdctl member remove 4f211fee4e79e7e7 --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node2.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node2-key.pem<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3cc\/aaf\/ca1\/3ccaafca1f53137fdeb57ddfd94830b1.png\" width=\"2068\" height=\"76\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3cc\/aaf\/ca1\/3ccaafca1f53137fdeb57ddfd94830b1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u0447\u0442\u043e etcd-\u0443\u0437\u0435\u043b \u0443\u0434\u0430\u043b\u0451\u043d. \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 host \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 hosts.yaml:<\/p>\n<pre><code>nano inventory\/k8s\/hosts.yaml<\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438\u0437 children.kube_control_plane.hosts, children.kube_node.hosts \u0438 children.etcd.hosts (\u0432 all.hosts \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0445\u043e\u0441\u0442 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/732\/81a\/fb7\/73281afb768d03f74b339476da432e99.png\" width=\"1440\" height=\"838\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/732\/81a\/fb7\/73281afb768d03f74b339476da432e99.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 hosts.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>all:   hosts:     node1:       ansible_host: 185.186.142.5       ip: 185.186.142.5       access_ip: 185.186.142.5     node2:       ansible_host: 185.186.142.53       ip: 185.186.142.53       access_ip: 185.186.142.53     node3:       ansible_host: 46.8.19.144       ip: 46.8.19.144       access_ip: 46.8.19.144     node4:       ansible_host: 46.8.19.244       ip: 46.8.19.244       access_ip: 46.8.19.244     node5:       ansible_host: 46.8.19.76       ip: 46.8.19.76       access_ip: 46.8.19.76   children:     kube_control_plane:       hosts:         node2:     kube_node:       hosts:         node2:         node3:         node4:     etcd:       hosts:         node2:         node3:     k8s_cluster:       children:         kube_control_plane:         kube_node:     calico_rr:       hosts: {}<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Ansible-\u0440\u043e\u043b\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (upgrade-cluster.yml). \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u0447\u0451\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 etcd-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 <code>ignore_assert_errors<\/code>. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u043e\u043b\u0438:<\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml -e ignore_assert_errors=yes upgrade-cluster.yml<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b53\/6ac\/c6f\/b536acc6fb63a82788040938c84a046d.png\" width=\"2520\" height=\"730\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b53\/6ac\/c6f\/b536acc6fb63a82788040938c84a046d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438 <a href=\"#3\">\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c<\/a> \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. \u042f \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043d\u0430 node1 (185.186.142.5) \u043d\u0430\u043a\u0430\u0442\u0438\u043b \u0441\u043d\u0438\u043c\u043e\u043a \u041e\u0421 \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0441\u0435\u0442\u0430\u043f\u043e\u043c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kubernetes. \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c hosts.yaml:<\/p>\n<pre><code>nano inventory\/k8s\/hosts.yaml<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 host (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e node1) \u0432 all.hosts \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044b children.kube_control_plane.hosts, children.kube_node.hosts \u0438 children.etcd.hosts<em>. <\/em>\u041d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <a href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\/blob\/master\/docs\/nodes.md#1-change-order-of-current-control-planes\">\u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442<\/a> \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0445\u043e\u0441\u0442 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u0444\u0430\u0439\u043b hosts.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>all:   hosts:     node1:       ansible_host: 185.186.142.5       ip: 185.186.142.5       access_ip: 185.186.142.5     node2:       ansible_host: 185.186.142.53       ip: 185.186.142.53       access_ip: 185.186.142.53     node3:       ansible_host: 46.8.19.144       ip: 46.8.19.144       access_ip: 46.8.19.144     node4:       ansible_host: 46.8.19.244       ip: 46.8.19.244       access_ip: 46.8.19.244     node5:       ansible_host: 46.8.19.76       ip: 46.8.19.76       access_ip: 46.8.19.76   children:     kube_control_plane:       hosts:         node2:         node1:     kube_node:       hosts:         node2:         node3:         node4:         node1:     etcd:       hosts:         node2:         node3:         node1:     k8s_cluster:       children:         kube_control_plane:         kube_node:     calico_rr:       hosts: {}<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043b\u0435\u0439\u0431\u0443\u043a cluster.yaml. \u0412 \u043a\u043b\u044e\u0447\u0435 <code>--limit<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c etcd \u0438 kube_control_plane, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c worker-\u0443\u0437\u043b\u043e\u0432 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<pre><code class=\"bash\">ansible-playbook -i inventory\/k8s\/hosts.yaml --limit=etcd,kube_control_plane cluster.yml<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/427\/852\/806\/4278528062f93e0230c3dd62465799e7.png\" width=\"2632\" height=\"684\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/427\/852\/806\/4278528062f93e0230c3dd62465799e7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e, \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d! <\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430, \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u041d\u043e \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0441 \u0442\u0435\u043c \u0436\u0435 IP, \u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0423 \u043c\u0435\u043d\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bf\/858\/23b\/6bf85823bb6e66968523bea6e42b0634.png\" width=\"2432\" height=\"696\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bf\/858\/23b\/6bf85823bb6e66968523bea6e42b0634.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 etcd-\u0443\u0437\u043b\u0430 \u043a etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u043e\u0433\u0438 etcd \u043d\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 node1: <\/p>\n<pre><code>journalctl -n 100 --unit=etcd<\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430:<\/p>\n<pre><code class=\"bash\">\"error\":\"error validating peerURLs {ClusterID:95417c89898c861a Members:[&amp;{ID:5baef32decc40060 RaftAttributes:{PeerURLs:[https:\/\/185.186.142.53:2380] IsLearner:false} Attributes:{Name:etcd1 ClientURLs:[https:\/\/185.186.142.53:2379]}} &amp;{ID:80fbe9a8863e9bfe RaftAttributes:{PeerURLs:[https:\/\/46.8.19.144:2380] IsLearner:false} Attributes:{Name:etcd2 ClientURLs:[https:\/\/46.8.19.144:2379]}}] RemovedMemberIDs:[]}: member count is unequal\"<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0433\u0443\u0433\u043b\u0438\u0432 \u043e\u0448\u0438\u0431\u043a\u0443 &#171;member count is unequal&#187;, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 <a href=\"https:\/\/member%20count%20is%20unequal\">\u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/a>. \u0412 \u043d\u0451\u043c \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c IP, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0442 \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e. \u042d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0442\u0435\u0437\u0438\u0441, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0445\u043e\u0441\u0442 \u0441 \u043d\u043e\u0432\u044b\u043c IP, \u0442\u043e Ansible-\u0440\u043e\u043b\u044c \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043a Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u041c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u044b\u043a\u0430 \u044f \u043d\u0430\u0448\u0451\u043b \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e etcd-\u0443\u0437\u0435\u043b \u043a etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Ansible-\u0440\u043e\u043b\u044c cluster.yaml, \u0438 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043a Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443. <\/p>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0448\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0435 (node1). \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 etcd-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code>nano \/etc\/etcd.env<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/931\/36e\/5d0\/93136e5d0e0da7de6a51d73ea0221784.png\" width=\"1996\" height=\"460\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/931\/36e\/5d0\/93136e5d0e0da7de6a51d73ea0221784.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e\u0432\u044b\u0439 etcd-\u0443\u0437\u0435\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a etcd3, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u044d\u0442\u043e \u0438\u043c\u044f. \u0412\u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443:<\/p>\n<pre><code>etcdctl member add etcd3 --endpoints=185.186.142.53:2379,46.8.19.144:2379 --peer-urls=https:\/\/185.186.142.5:2380 --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node3.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node3-key.pem<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432 \u043a\u043b\u044e\u0447\u0435 <code>--endpoints<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043b\u044b etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0432 <code>--peer-urls<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 \u043d\u043e\u0432\u043e\u0433\u043e etcd-\u0443\u0437\u043b\u0430 (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u044b, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043a\u043b\u044e\u0447\u0435 2379, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 2380). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u2014 \u044d\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b kubespray, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e etc\/ssl\/etcd\/ssl\/.<em> <\/em>\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/176\/ae0\/222\/176ae02226fc8b6a33565e236a858a4c.png\" width=\"2296\" height=\"284\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/176\/ae0\/222\/176ae02226fc8b6a33565e236a858a4c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Etcdctl \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u043e \u043d\u043e\u0432\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0435 \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0435\u0433\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u043b\u0443\u0436\u0431\u0430 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0432 \u0444\u043e\u043d\u0435, \u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f.\u00a0\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0435 \u0436\u0435, \u043a\u0430\u043a \u0432 \/etc\/etcd.env;<em> <\/em>\u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043d\u0443\u0436\u043d\u043e<em> <\/em>\u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0430 <strong>\u0432\u0441\u0435\u0445<\/strong> \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0433\u0434\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 etcd, \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code>etcdctl member list --endpoints=185.186.142.53:2379,46.8.19.144:2379  --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node3.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node3-key.pem<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/20c\/d65\/74e\/20cd6574e5a5cf6abd42bc6edc595492.png\" width=\"2148\" height=\"190\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/20c\/d65\/74e\/20cd6574e5a5cf6abd42bc6edc595492.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Etcd-\u0443\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u0433\u043b\u044f\u043d\u0443\u0442\u044c, \u043a\u0430\u043a \u0434\u0435\u043b\u0430 \u0441\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">etcdctl endpoint health --endpoints=https:\/\/185.186.142.53:2379,https:\/\/46.8.19.144:2379,https:\/\/185.186.142.5:2379  --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node2.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node2-key.pem<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5de\/2a4\/498\/5de2a4498071dff314d6fa8fb7affff7.png\" width=\"1754\" height=\"186\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5de\/2a4\/498\/5de2a4498071dff314d6fa8fb7affff7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Etcd-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Ansible-\u0440\u043e\u043b\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u0435\u043b \u043a Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443.<\/p>\n<pre><code>ansible-playbook -i inventory\/k8s\/hosts.yaml --limit=etcd,kube_control_plane cluster.yml<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e14\/452\/6c6\/e144526c643855cab6a96bb4fe016b5a.png\" width=\"2632\" height=\"684\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e14\/452\/6c6\/e144526c643855cab6a96bb4fe016b5a.png\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<p><a class=\"anchor\" name=\"10\" id=\"10\"><\/a><\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/h2>\n<p>\u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f. <\/p>\n<p>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u043b\u043e\u0433\u043e\u0432 etcd, kubelet:<\/p>\n<pre><code>journalctl --unit=etcd -n 100 journalctl --unit=kubelet -n 100<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043b\u0443\u0436\u0431\u044b:<\/p>\n<pre><code>systemctl status kubelet systemctl restart kubelet<\/code><\/pre>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0441 etcd- \u0443\u0437\u043b\u0430. \u0412\u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>ETCDCTL_API=3 etcdctl --endpoints https:\/\/185.186.142.53:2379 snapshot save snapshot.db --cacert=\/etc\/ssl\/etcd\/ssl\/ca.pem  --cert=\/etc\/ssl\/etcd\/ssl\/admin-node2.pem  --key=\/etc\/ssl\/etcd\/ssl\/admin-node2-key.pem<\/code><\/pre>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0438:<\/p>\n<pre><code>wget -qO- bench.sh | bash<\/code><\/pre>\n<p>\u041a \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e <a href=\"#0\">\u2191<\/a><\/p>\n<hr\/>\n<p>\u0410 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u041f\u0438\u0448\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e (\u0438, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u0435\u0437 \u0434\u0435\u0440\u0433\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0433\u043b\u0430\u0437\u0430) \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439, \u043a\u043e\u043d\u0435\u0447\u043d\u043e!). \u0425\u043e\u0447\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0431\u044b\u043b\u0430 \u0431\u043b\u0438\u0436\u0435 \u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u044f\u0433\u0430\u043c ?, \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 Enterprise-\u0440\u0435\u0448\u0435\u043d\u0438\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u044f\u0442\u0430\u044f, \u044e\u0431\u0438\u043b\u0435\u0439\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc5\/dae\/ca2\/fc5daeca2212b5be3f4feda8e99b982d.gif\" width=\"730\" height=\"548\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc5\/dae\/ca2\/fc5daeca2212b5be3f4feda8e99b982d.gif\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/682364\/\"> https:\/\/habr.com\/ru\/company\/domclick\/blog\/682364\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/577964\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u043e\u043c. \u041f\u0440\u043e\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f, \u043e\u043f\u0430\u043b\u0438 \u043b\u0438\u0441\u0442\u044c\u044f&#8230; \u0438 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0437\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b. \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0430\u0436\u0435 \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438. \u041e\u0434\u043d\u043e \u0434\u0435\u043b\u043e \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0430 \u043a\u0430\u043a \u0436\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432? \u041f\u0440\u043e \u044d\u0442\u043e \u0438 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442! \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u0438 \u0432\u043e\u0442, \u0441\u043f\u0443\u0441\u0442\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u043c\u0435\u043d, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439\u0448\u0435\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e <em>highly available <\/em>\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Kubespray.<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"#1\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#3\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Ansible-\u043c\u0430\u0448\u0438\u043d\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#6\">\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#7\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 worker node<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#8\">\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 worker node<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#9\">\u0417\u0430\u043c\u0435\u043d\u0430 master node<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#10\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a><\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 (aka high-availability) &#8212; \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0448\u0430\u0436\u043e\u043a \u043a production-ready \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443. \u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/kubernetes.io\/docs\/setup\/production-environment\/#production-considerations\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439<\/a> \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0437\u043d\u0430\u0447\u0438\u0442:<\/p>\n<ol>\n<li>\n<p>\u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043c\u0430\u0441\u0442\u0435\u0440) \u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u043f\u043b\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 API Kubernetes<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443, \u0442\u043e \u043d\u0430\u0448 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 <em>\u043a\u0432\u0430\u0437\u0438<\/em> high-available (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437-\u0437\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430). \u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0443\u0437\u043b\u043e\u0432 \u2014 \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445. \u041c\u0430\u0448\u0438\u043d\u044b \u0441 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0447\u0438\u0435, \u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0430\u0431\u0435\u0435 \u2014 \u043a\u0430\u043a \u043c\u0430\u0441\u0442\u0435\u0440\u0430. \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430. <\/p>\n<p>\u0421\u0435\u0442\u0430\u043f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<ol>\n<li>\n<p>Kubenetes version &#8212; 1.23.7<\/p>\n<\/li>\n<li>\n<p>\u0421ontainer runtime &#8212;\u00a0\u0421ontainerd 1.6.4<\/p>\n<\/li>\n<li>\n<p>Network plugin &#8212; Calico 3.22.3<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0438 \u0438 \u0438\u0445 \u0440\u043e\u043b\u0438 \u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>IP 185.186.142.53 &#8212; Master #1<\/p>\n<\/li>\n<li>\n<p>IP 185.186.142.5 &#8212; Master #2<\/p>\n<\/li>\n<li>\n<p>IP 46.8.19.144 &#8212; Worker #1<\/p>\n<\/li>\n<li>\n<p>IP 46.8.19.244 &#8212; Worker #2<\/p>\n<\/li>\n<\/ol>\n<p>\u0423 \u0432\u0441\u0435\u0445 \u043c\u0430\u0448\u0438\u043d \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438: 2 CPU 3,0 \u0413\u0413\u0446, 4 \u0413\u0431 RAM, 100 \u0413\u0431 HDD, \u041e\u0421 Ubuntu 20.04. \u041d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 3,6 \u0413\u0413\u0446, \u0445\u043e\u0442\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>grep MHz \/proc\/cpuinfo<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 3 \u0413\u0413\u0446 (\u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0437\u043b\u0430\u0445 \u0438 \u0442\u043e\u0433\u043e \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435). \u041f\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u043c\u0435\u0441\u044f\u0446 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 2700 \u0440\u0443\u0431. (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043a\u0438\u0434\u043a\u0438 \u0437\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u043d\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0432\u043f\u0435\u0440\u0451\u0434). \u0425\u043e\u0447\u0443 \u043e\u043f\u044f\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u043e\u0439 handmade \u0434\u0435\u0448\u0435\u0432\u043b\u0435 Kubernetes-as-a-Service \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0430\u0436 \u043d\u0430 75%! <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e (\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448 VPS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0441\u043d\u0438\u043c\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u044d\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u043c \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (\u0434\u0430\u043b\u0435\u0435 \u2014 Ansible-\u043c\u0430\u0448\u0438\u043d\u0430). \u041d\u0430 \u043d\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c Python, Ansible \u0432\u0435\u0440\u0441\u0438\u0438 2.4 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435, \u0438 Jinja (\u044d\u0442\u043e \u0432\u0441\u0451 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435). <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kubernetes \u043d\u0430 &#171;\u0433\u043e\u043b\u043e\u0435&#187; \u0436\u0435\u043b\u0435\u0437\u043e &#8212; \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u00a0<strong>GKE<\/strong>\u00a0\u0438\u043b\u0438\u00a0<strong>AWS <\/strong>\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a<strong> <\/strong>\u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/577964\">\u0441\u0432\u043e\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#a-pure-software-solution-metallb\">\u0440\u0435\u0448\u0430\u043b<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MetalLb, \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#via-the-host-network\">\u0434\u0440\u0443\u0433\u043e\u0439<\/a> \u043f\u043e\u0434\u0445\u043e\u0434. \u0412\u0441\u0435 4 \u0443\u0437\u043b\u0430 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u0432\u043d\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0434\u044b ingress-nginx \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0437\u043b\u0435 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 Daemonset) \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0440\u0442 80\/443 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 <a href=\"https:\/\/kubernetes.github.io\/ingress-nginx\/deploy\/baremetal\/#via-the-host-network\">\u0446\u0438\u0442\u0430\u0442\u0443<\/a> \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<blockquote>\n<p>Enabling this option\u00a0<strong>exposes every system daemon to the NGINX Ingress controller<\/strong>\u00a0on any network interface, including the host&#8217;s loopback. Please evaluate the impact this may have on the security of your system carefully.<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0442\u0440\u0438\u0445 &#8212; \u044f \u0437\u0430\u043a\u0430\u0437\u0430\u043b \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f <em>awesomeservice.pro<\/em> \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 4 IP \u0430\u0434\u0440\u0435\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c DNS <a href=\"https:\/\/kb.selectel.ru\/docs\/networks-services\/dns\/manage-records\/dns-balancing\/\">\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443<\/a> \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 Round Robin \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0437\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0434\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u042d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043d\u0430\u0448\u0435\u043b \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 DNS \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u044b\u0439\u0434\u0435\u0442 <em>\u043f\u043e\u0447\u0442\u0438<\/em> \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c. \u0414\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043c\u0438\u043d\u0443\u0441\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u043b\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 DNS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0441\u043e\u0444\u0442, \u043f\u043b\u044e\u0441 \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c TTL \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0435\u0433\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u043d\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0432\u044b\u0439\u0434\u0435\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, DNS \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441. \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u0435\u0451 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e <a href=\"#%D1%82%D0%B5%D1%81%D1%82\">\u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e<\/a> \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448 VPS \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <a href=\"https:\/\/gcore.com\/support\/articles\/4405866963345\/\">Virtual IP<\/a>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u043e \u0432\u0441\u0435\u043c 4 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0430\u044f DNS \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u041c\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443. \u0410 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0438\u0447\u0430 VPS \u0441\u0442\u043e\u044f\u0442 \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0434\u0435\u043b\u0443. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/h2>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u043b\u0430\u0432\u044b \u043b\u0435\u0436\u0438\u0442 \u044d\u0442\u0430 <a href=\"https:\/\/schoolofdevops.github.io\/ultimate-kubernetes-bootcamp\/cluster_setup_kubespray\/\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>, \u043d\u043e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b.<a href=\"#0\">\u2191<\/a><\/p>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c SSH-\u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ssh-copy-id<\/code> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">ssh-copy-id root@185.186.142.53<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f:<\/p>\n<pre><code class=\"bash\">ssh root@185.186.142.53<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c Python:<\/p>\n<pre><code>sudo apt update sudo apt install python<\/code><\/pre>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e IPv4:<\/p>\n<pre><code class=\"bash\">echo \"net.ipv4.ip_forward=1\" >> \/etc\/sysctl.conf<\/code><\/pre>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"bash\">swapoff -a<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u21161<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043f\u043e\u043b\u0430\u0433\u0430\u043b, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043e\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0447\u0438\u0441\u0442\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u041e\u0421. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430\u043a. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Kubernetes \u043d\u0430 VPS \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432. \u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u0437-\u0437\u0430 \u043d\u0438\u0437\u043a\u043e\u0439 \u0446\u0435\u043d\u044b) \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0438\u0437-\u0437\u0430 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0443\u043f\u043e\u0440\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0444\u0430\u0439\u043b resolv.conf \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 1.1.1.1 \u0438\u043b\u0438 8.8.8.8. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0443 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u041e\u0421, \u0438 \u0444\u0430\u0439\u043b \/etc\/resolv.conf \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 simlink. \u041e \u0447\u0451\u043c \u043d\u0435\u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<pre><code class=\"bash\"># This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run \"resolvectl status\" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at \/etc\/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for \/etc\/resolv.conf.  nameserver 127.0.0.53 options edns0 trust-ad search template <\/code><\/pre>\n<p>\u0418 \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u0438\u0445 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c simlink \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u043e\u0432 (\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e 1.1.1.1 \u0438\u043b\u0438 8.8.8.8).<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">nameserver 127.0.0.53 options edns0 trust-ad search template  nameserver 8.8.8.8 nameserver 1.1.1.1<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Kubernetes. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041f\u0440\u0438\u0447\u0451\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c SSH-\u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u044c. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c VPS (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e <u>vmmanager)<\/u>. <\/p>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<p><a href=\"#0\">\u2191<\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Ansible-\u043c\u0430\u0448\u0438\u043d\u044b<\/h3>\n<p>\u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f Kubernetes. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Kubespray:<\/p>\n<pre><code class=\"bash\">git clone git@github.com:kubernetes-sigs\/kubespray.git cd kubespray<\/code><\/pre>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041b\u0438\u0431\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0435\u0442, \u043b\u0438\u0431\u043e \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0432 \u0441\u0435\u0431\u0435 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043d\u0435\u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u043a\u0438, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u043c\u0430\u0441\u0442\u0435\u0440-\u0432\u0435\u0442\u043a\u0443. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 tag v2.19.0. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>git checkout tags\/v2.19.0<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c, \u0448\u0430\u0431\u043b\u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 sample, \u043c\u044b \u0435\u0433\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435:<\/p>\n<pre><code class=\"bash\">cp -rfp inventory\/sample inventory\/k8s<\/code><\/pre>\n<p>\u0414\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f k8s<em>. <\/em>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>IPS<\/code> \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">declare -a IPS=(185.186.142.5 185.186.142.53 46.8.19.144 46.8.19.244)<\/code><\/pre>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c:<\/p>\n<pre><code class=\"bash\">CONFIG_FILE=inventory\/k8s\/hosts.yaml python3 contrib\/inventory_builder\/inventory.py ${IPS[@]}<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0411\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"bash\">nano inventory\/k8s\/hosts.yaml<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0423 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0444\u0438\u0433 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">all:   hosts:     node1:       ansible_host: 185.186.142.5       ip: 185.186.142.5       access_ip: 185.186.142.5     node2:       ansible_host: 185.186.142.53       ip: 185.186.142.53       access_ip: 185.186.142.53     node3:       ansible_host: 46.8.19.144       ip: 46.8.19.144       access_ip: 46.8.19.144     node4:       ansible_host: 46.8.19.244       ip: 46.8.19.244       access_ip: 46.8.19.244   children:     kube_control_plane:       hosts:         node1:         node2:<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-341079","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/341079","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=341079"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/341079\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=341079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=341079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=341079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}