{"id":338670,"date":"2022-09-23T09:00:34","date_gmt":"2022-09-23T09:00:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=338670"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=338670","title":{"rendered":"<span>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0430: \u043a\u0430\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c Kubernetes \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430\u0445 \u0441 Gentoo<\/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<p>\u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435, \u0441\u0443\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Kubernetes \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430\u0445 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0431\u044b\u043b \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 i386. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e <em>Kubernetes The Hard Way<\/em>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0430\u0445 \u2014 Gentoo (\u0434\u0430, \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c). \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0434\u043a\u043e\u0440!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cf\/9fe\/e26\/1cf9fee26671ba48f34b79b86084b6db.png\" width=\"1878\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1cf\/9fe\/e26\/1cf9fee26671ba48f34b79b86084b6db.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/kelseyhightower\"><u>\u041a\u0435\u043b\u0441\u0438 \u0425\u0430\u0439\u0442\u0430\u0443\u044d\u0440\u0430<\/u><\/a> \u2014 <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\"><em>Kubernetes The Hard Way<\/em><\/a>, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 K8s \u0431\u0435\u0437 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u043d\u0435\u0439 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Kubernetes \u043d\u0430 Google Cloud Platform (GCP). \u041d\u043e \u0434\u0430\u0436\u0435 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c 300 USD, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u0430\u0440\u043e\u043a \u0437\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435.<\/p>\n<p>\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u044b\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043a\u0435, \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044c-\u0442\u0430\u043a\u0438<em> <\/em>Kubernetes \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e?<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c!<\/p>\n<p><strong>\u0412\u0430\u0436\u043d\u043e:<\/strong> \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u041a\u0435\u043b\u0441\u0438 \u0425\u0430\u0439\u0442\u0430\u0443\u044d\u0440\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a GCP, \u043d\u043e \u0438 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0436\u0435\u043b\u0435\u0437\u0443 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c, \u0445\u043e\u0442\u044f \u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h2>\n<p>\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Gentoo Linux:<\/p>\n<ul>\n<li>\n<p>Dell G3 3590 \u043d\u0430 \u0431\u0430\u0437\u0435 Intel Core i5-9300H (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 AMD64) (\u0434\u0430\u043b\u0435\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e dell);<\/p>\n<\/li>\n<li>\n<p>HP Compaq 6720s \u043d\u0430 \u0431\u0430\u0437\u0435 Intel Core2 Duo (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 i686) (\u0434\u0430\u043b\u0435\u0435 \u2014 hpcom).<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0442\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:AMD64\"><u>amd64<\/u><\/a> \u0438 <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:X86\/Full\/Installation\"><u>x32<\/u><\/a>. \u041d\u043e \u044f\u0434\u0440\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f <a href=\"https:\/\/wiki.gentoo.org\/wiki\/IPSet\"><u>IPSet<\/u><\/a> \u0438 <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Docker\"><u>Docker<\/u><\/a>. \u0414\u043b\u044f kube-proxy \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 <code>NETFILTER_XT_MATCH_COMMENT<\/code> \u0438 <code>NETFILTER_XT_MATCH_STATISTIC<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u043e\u0439 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0435\u0439, \u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433 \u0444\u043e\u0440\u0443\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 Gentoo. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0438: <a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-1083076-start-0.html\"><u>\u0447\u0435\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 GRUB<\/u><\/a> \u0438 <a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-1051792-start-0.html\"><u>\u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u200b\u200bnon-PAE kernel<\/u><\/a>.<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0435: <\/p>\n<ul>\n<li>\n<p>\u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 Kubernetes.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c<\/h2>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043e\u0442\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0432\u043d\u0435\u0441 \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Kubernetes. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u043a\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0434\u0430\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Kubernetes<\/h2>\n<h3>Prerequisites<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/01-prerequisites.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u0434\u0443\u0448\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<h3>Installing the Client Tools<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/02-client-tools.md\"><u>\u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e<\/u><\/a>.<\/p>\n<h3>Provisioning Compute Resources<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/03-compute-resources.md\"><u>\u042d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/u><\/a> \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0435 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a: hpcom \u2014 <code>192.168.1.71<\/code>, dell \u2014 <code>192.168.1.253<\/code>).<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0444\u0430\u0439\u043b\u0438\u043a <code>node_list.txt<\/code>:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | tee node_list.txt dell 192.168.1.253 # \u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0438\u043c\u0435\u043d\u0430 hpcom 192.168.1.71 EOF<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 Load Balancer\u2019\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c NGINX. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>nginx.conf<\/code> \u0441\u0442\u0440\u043e\u043a\u0443 <code>include passthrough.conf<\/code> (\u043d\u0430 Linux \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 NGINX \u2014 <code>\/etc\/nginx\/<\/code>, \u0430 \u043d\u0430 macOS \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 brew \u2014 <code>\/opt\/homebrew\/etc\/<\/code>).<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u044f\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>passthrough.conf<\/code>. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e NGINX-\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0445\u043e\u0441\u0442\u0430\u043c\u0438 \u043d\u0430 \u0432\u0430\u0448\u0438):<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | tee \/opt\/homebrew\/etc\/nginx\/passthrough.conf stream {     upstream kube { $(cat node_list.txt | cut -d\" \" -f2 | xargs -I{} echo \"$(printf '%8s')server {}:6443;\")     }      server {         listen       443;         proxy_pass kube;         proxy_next_upstream on;     } }  EOF<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044e High-Availability-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (HA). \u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h3>Provisioning a CA and Generating TLS Certificates<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/04-certificate-authority.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u043f\u0443\u043d\u043a\u0442\u0430 <em>The Kubelet Client Certificates<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0437\u043b\u043e\u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">for instance in $(cat node_list.txt | cut -d\" \" -f1); do cat > ${instance}-csr.json &lt;&lt;EOF {   \"CN\": \"system:node:${instance}\",   \"key\": {     \"algo\": \"rsa\",     \"size\": 2048   },   \"names\": [     {       \"C\": \"US\",       \"L\": \"Portland\",       \"O\": \"system:nodes\",       \"OU\": \"Kubernetes The Hard Way\",       \"ST\": \"Oregon\"     }   ] } EOF  INTERNAL_IP=$(cat node_list.txt | grep $instance | cut -d\" \" -f2)  cfssl gencert \\   -ca=ca.pem \\   -ca-key=ca-key.pem \\   -config=ca-config.json \\   -hostname=${instance},${INTERNAL_IP},127.0.0.1 \\   -profile=kubernetes \\   ${instance}-csr.json | cfssljson -bare ${instance} done<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u043c \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u0443\u043d\u043a\u0442\u0430 <em>The Kubernetes API Server Certificate<\/em>. \u0417\u0434\u0435\u0441\u044c \u043c\u0435\u043d\u044f\u0435\u043c \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<pre><code class=\"bash\">{  KUBERNETES_HOSTNAMES=kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.svc.cluster.local  cat > kubernetes-csr.json &lt;&lt;EOF {   \"CN\": \"kubernetes\",   \"key\": {     \"algo\": \"rsa\",     \"size\": 2048   },   \"names\": [     {       \"C\": \"US\",       \"L\": \"Portland\",       \"O\": \"Kubernetes\",       \"OU\": \"Kubernetes The Hard Way\",       \"ST\": \"Oregon\"     }   ] } EOF  cfssl gencert \\   -ca=ca.pem \\   -ca-key=ca-key.pem \\   -config=ca-config.json \\   -hostname=$(cut -d\" \" -f2 node_list.txt| tr '\\n' ',')127.0.0.1,${KUBERNETES_HOSTNAMES} \\   -profile=kubernetes \\   kubernetes-csr.json | cfssljson -bare kubernetes  }<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, <em>The Service Account Key Pair<\/em>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0432 <em>Distribute the Client and Server Certificates<\/em> \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u043e\u0441\u0438\u043c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e \u0443\u0437\u043b\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e scp. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>~\/.ssh\/config<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">cat node_list.txt | xargs -n2 bash -c 'echo -e \"Host $0\\n\\tHostname $1\\n\\tUser &lt;\u0412\u0430\u0448 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u0437\u043b\u0430\u0445>\"' | tee ~\/.ssh\/config<\/code><\/pre>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0443\u0437\u043b\u044b:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cut -d\" \" -f1 node_list.txt); do   scp node_list.txt ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem service-account-key.pem service-account.pem ca.pem ${instance}-key.pem ${instance}.pem node_list.txt \\ # \u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0444\u0430\u0439\u043b \u0441 IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. ${instance}:~\/ done }<\/code><\/pre>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 master\u2019\u0430 \u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f control plane, \u043d\u043e \u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432.<\/p>\n<h3>Generating Kubernetes Configuration Files for Authentication<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/05-kubernetes-configuration-files.md\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0443\u043d\u043a\u0442 \u043f\u0440\u043e <em>Kubernetes Public IP Address<\/em>, \u0430 \u0432 <em>The kubelet Kubernetes Configuration File<\/em> \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<pre><code class=\"bash\">for instance in $(cat node_list.txt | cut -d\" \" -f1); do   kubectl config set-cluster kubernetes-the-hard-way \\     --certificate-authority=ca.pem \\     --embed-certs=true \\     --server=https:\/\/127.0.0.1:443 \\     --kubeconfig=${instance}.kubeconfig    kubectl config set-credentials system:node:${instance} \\     --client-certificate=${instance}.pem \\     --client-key=${instance}-key.pem \\     --embed-certs=true \\     --kubeconfig=${instance}.kubeconfig    kubectl config set-context default \\     --cluster=kubernetes-the-hard-way \\     --user=system:node:${instance} \\     --kubeconfig=${instance}.kubeconfig    kubectl config use-context default --kubeconfig=${instance}.kubeconfig done<\/code><\/pre>\n<p>\u0418 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f <em>The kube-proxy Kubernetes Configuration File<\/em>:<\/p>\n<pre><code class=\"bash\"> kubectl config set-cluster kubernetes-the-hard-way \\     --certificate-authority=ca.pem \\     --embed-certs=true \\     --server=https:\/\/127.0.0.1:443 \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config set-credentials system:kube-proxy \\     --client-certificate=kube-proxy.pem \\     --client-key=kube-proxy-key.pem \\     --embed-certs=true \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config set-context default \\     --cluster=kubernetes-the-hard-way \\     --user=system:kube-proxy \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u0443\u0437\u043b\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cat node_list.txt | cut -d\" \" -f1); do   scp ${instance}.kubeconfig kube-proxy.kubeconfig admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}:~\/ done }<\/code><\/pre>\n<h3>Generating the Data Encryption Config and Key<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/06-data-encryption-keys.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0451 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0443\u0437\u043b\u0430\u043c. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cat node_list.txt | cut -d\" \" -f1); do   scp encryption-config.yaml ${instance}:~\/ done }<\/code><\/pre>\n<h3>Bootstrapping the etcd Cluster<\/h3>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/07-bootstrapping-etcd.md\"><u>\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a> \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0443\u0437\u0435\u043b (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430):<\/p>\n<pre><code class=\"bash\">ssh hpcom<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo emerge --sync &amp;&amp; emerge --ask dev-vcs\/git sys-devel\/make net-misc\/wget net-misc\/curl dev-lang\/go app-shells\/bash-completion<\/code><\/pre>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c etcd:<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/etcd-io\/etcd.git cd etcd git checkout v3.4.15 go mod vendor .\/build sudo mv bin\/etcd* \/usr\/local\/bin\/<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 etcd. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b:<\/p>\n<pre><code class=\"bash\">{   sudo mkdir -p \/etc\/etcd \/var\/lib\/etcd   sudo chmod 700 \/var\/lib\/etcd   sudo cp ca.pem kubernetes-key.pem kubernetes.pem \/etc\/etcd\/ }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u0438\u043c\u044f \u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"bash\">INTERNAL_IP=$(grep $(hostname -s) node_list.txt | cut -d' ' -f2) ETCD_NAME=$(hostname -s)<\/code><\/pre>\n<p>\u0418 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c Unit \u0434\u043b\u044f systemd:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/systemd\/system\/etcd.service [Unit] Description=etcd Documentation=https:\/\/github.com\/etcd-io\/etcd  [Service] Type=notify Environment=\"ETCD_UNSUPPORTED_ARCH=386\" # \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b i386, \u0434\u043b\u044f amd64 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c. ExecStart=\/usr\/local\/bin\/etcd \\\\   --name ${ETCD_NAME} \\\\   --cert-file=\/etc\/etcd\/kubernetes.pem \\\\   --key-file=\/etc\/etcd\/kubernetes-key.pem \\\\   --peer-cert-file=\/etc\/etcd\/kubernetes.pem \\\\   --peer-key-file=\/etc\/etcd\/kubernetes-key.pem \\\\   --trusted-ca-file=\/etc\/etcd\/ca.pem \\\\   --peer-trusted-ca-file=\/etc\/etcd\/ca.pem \\\\   --peer-client-cert-auth \\\\   --client-cert-auth \\\\   --initial-advertise-peer-urls https:\/\/${INTERNAL_IP}:2380 \\\\   --listen-peer-urls https:\/\/${INTERNAL_IP}:2380 \\\\   --listen-client-urls https:\/\/${INTERNAL_IP}:2379,https:\/\/127.0.0.1:2379 \\\\   --advertise-client-urls https:\/\/${INTERNAL_IP}:2379 \\\\   --initial-cluster-token etcd-cluster-0 \\\\   --initial-cluster $(cat node_list.txt | sed 's# #=https:\/\/#g' | tr '\\n' ',' | sed 's#,#:2380,#g' | sed 's#,$##g') \\\\   --initial-cluster-state new \\\\   --data-dir=\/var\/lib\/etcd Restart=on-failure RestartSec=5  [Install] WantedBy=multi-user.target EOF<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u043d\u043a\u0442\u0430 <em>Start the etcd Server<\/em> \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h3>Bootstrapping the Kubernetes Control Plane<\/h3>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0443\u0437\u0435\u043b (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430):<\/p>\n<pre><code class=\"bash\">ssh hpcom<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">sudo mkdir -p \/etc\/kubernetes\/config<\/code><\/pre>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Kubernetes \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c control plane:<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/kubernetes\/kubernetes.git cd kubernetes &amp;&amp; git checkout v1.21.0 make kube-scheduler kube-apiserver kube-controller-manager kubectl cd _output\/bin chmod +x kube-apiserver kube-controller-manager kube-scheduler kubectl sudo mv kube-apiserver kube-controller-manager kube-scheduler kubectl \/usr\/local\/bin\/<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b:<\/p>\n<pre><code class=\"bash\">{ sudo mkdir -p \/var\/lib\/kubernetes\/ cd &amp;&amp; sudo mv ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem \\     service-account-key.pem service-account.pem \\     encryption-config.yaml \/var\/lib\/kubernetes\/ }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f HA \u0441\u0442\u0430\u0432\u0438\u043c NGINX (\u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0432 \u0444\u0430\u0439\u043b \u0434\u043b\u044f USE-\u0444\u043b\u0430\u0433\u043e\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Gentoo):<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/portage\/package.use\/nginx www-servers\/nginx NGINX_MODULES_HTTP: access gzip gzip_static gunzip proxy push_stream stub_status upstream_check upstream_hash upstream_ip_hash upstream_keepalive upstream_least_conn upstream_zone www-servers\/nginx NGINX_MODULES_STREAM: access geo limit_conn map return split_clients upstream_hash upstream_least_conn upstream_zone geoip realip ssl_preread geoip2 javascript EOF  sudo emerge --ask www-servers\/nginx<\/code><\/pre>\n<p>\u0412 <code>nginx.conf<\/code> \u0432 \u0431\u043b\u043e\u043a <code>http<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>server { listen 127.0.0.1:80; server_name localhost;  access_log \/var\/log\/nginx\/localhost.access_log main; error_log \/var\/log\/nginx\/localhost.error_log info;  location \/nginx_status {         stub_status on;          access_log off;         allow 127.0.0.1;         deny all; }<\/code><\/pre>\n<p>\u0418 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 <code>include<\/code><strong> <\/strong>\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 Provisioning Compute Resources \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"bash\">echo include passthrough.conf; | sudo tee -a \/etc\/nginx\/nginx.conf<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0440\u044f\u0434\u043e\u043c \u0444\u0430\u0439\u043b <code>passthrough.conf<\/code>:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/nginx\/passthrough.conf stream {     upstream kube { $(cat node_list.txt | cut -d\" \" -f2 | xargs -I{} echo \"$(printf '%8s')server {}:6443;\")     }      server {         listen       443;         proxy_pass kube;         proxy_next_upstream on;     } } EOF<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c API-\u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430:<\/p>\n<pre><code class=\"bash\">INTERNAL_IP=$(grep $(hostname -s) node_list.txt | cut -d' ' -f2) KUBERNETES_PUBLIC_ADDRESS=127.0.0.1<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c Unit \u0434\u043b\u044f systemd:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/systemd\/system\/kube-apiserver.service [Unit] Description=Kubernetes API Server Documentation=https:\/\/github.com\/kubernetes\/kubernetes  [Service] ExecStart=\/usr\/local\/bin\/kube-apiserver \\\\   --advertise-address=${INTERNAL_IP} \\\\   --allow-privileged=true \\\\   --apiserver-count=$(cat node_list.txt | wc -l) \\\\   --audit-log-maxage=30 \\\\   --audit-log-maxbackup=3 \\\\   --audit-log-maxsize=100 \\\\   --audit-log-path=\/var\/log\/audit.log \\\\   --authorization-mode=Node,RBAC \\\\   --bind-address=0.0.0.0 \\\\   --client-ca-file=\/var\/lib\/kubernetes\/ca.pem \\\\   --enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \\\\   --etcd-cafile=\/var\/lib\/kubernetes\/ca.pem \\\\   --etcd-certfile=\/var\/lib\/kubernetes\/kubernetes.pem \\\\   --etcd-keyfile=\/var\/lib\/kubernetes\/kubernetes-key.pem \\\\   --etcd-servers=$(cut -d' ' -f2 node_list.txt | sed 's#^#https:\/\/#g' | sed 's#$#:2379#g' | xargs | tr ' ' ',') \\\\   --event-ttl=1h \\\\   --encryption-provider-config=\/var\/lib\/kubernetes\/encryption-config.yaml \\\\   --kubelet-certificate-authority=\/var\/lib\/kubernetes\/ca.pem \\\\   --kubelet-client-certificate=\/var\/lib\/kubernetes\/kubernetes.pem \\\\   --kubelet-client-key=\/var\/lib\/kubernetes\/kubernetes-key.pem \\\\   --runtime-config='api\/all=true' \\\\   --service-account-key-file=\/var\/lib\/kubernetes\/service-account.pem \\\\   --service-account-signing-key-file=\/var\/lib\/kubernetes\/service-account-key.pem \\\\   --service-account-issuer=https:\/\/${KUBERNETES_PUBLIC_ADDRESS}:6443 \\\\   --service-cluster-ip-range=10.32.0.0\/24 \\\\   --service-node-port-range=30000-32767 \\\\   --tls-cert-file=\/var\/lib\/kubernetes\/kubernetes.pem \\\\   --tls-private-key-file=\/var\/lib\/kubernetes\/kubernetes-key.pem \\\\   --v=2 Restart=on-failure RestartSec=5  [Install] WantedBy=multi-user.target EOF<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0451 <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/08-bootstrapping-kubernetes-controllers.md\"><u>\u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a> \u0434\u043e \u043f\u0443\u043d\u043a\u0442\u0430 <em>The Kubernetes Frontend Load Balancer<\/em>. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c balancer \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c MetalLB \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0411\u043b\u043e\u043a <em>Verification<\/em> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 NGINX.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">curl --cacert \/var\/lib\/kubernetes\/ca.pem  https:\/\/127.0.0.1:443\/healthz<\/code><\/pre>\n<h3>Bootstrapping the Kubernetes Worker Nodes<\/h3>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code class=\"bash\">ssh hpcom sudo emerge --ask net-misc\/socat net-firewall\/conntrack-tools net-firewall\/ipset sys-fs\/btrfs-progs<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438:<\/p>\n<pre><code class=\"bash\">sudo mkdir -p \\   \/etc\/cni\/net.d \\   \/opt\/cni\/bin \\   \/var\/lib\/kubelet \\   \/var\/lib\/kube-proxy \\   \/var\/lib\/kubernetes \\   \/var\/run\/kubernetes<\/code><\/pre>\n<p>crictl \u0434\u043b\u044f i386:<\/p>\n<pre><code class=\"bash\">wget -q --show-progress --https-only --timestamping https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v1.21.0\/crictl-v1.21.0-linux-386.tar.gz tar -xvf crictl-v1.21.0-linux-386.tar.gz &amp;&amp; sudo mv crictl \/usr\/local\/bin\/<\/code><\/pre>\n<p>\u0418 \u0434\u043b\u044f\u00a0 amd64:<\/p>\n<pre><code class=\"bash\">https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v1.21.0\/crictl-v1.21.0-linux-amd64.tar.gz tar -xvf crictl-v1.21.0-linux-amd64.tar.gz &amp;&amp; sudo mv crictl \/usr\/local\/bin\/<\/code><\/pre>\n<p>runc:<\/p>\n<pre><code class=\"bash\">cd &amp;&amp; git clone git@github.com:opencontainers\/runc.git &amp;&amp; cd runc &amp;&amp; git checkout v1.0.0-rc93 make sudo make install<\/code><\/pre>\n<p>CNI plugins:<\/p>\n<pre><code class=\"bash\">cd &amp;&amp; git clone git@github.com:containernetworking\/plugins.git &amp;&amp; cd plugins &amp;&amp; git checkout v0.9.1 .\/build_linux.sh sudo mv bin\/* \/opt\/cni\/bin\/<\/code><\/pre>\n<p>containerd requirements \u0434\u043b\u044f i386:<\/p>\n<pre><code class=\"bash\">cd &amp;&amp; wget -c https:\/\/github.com\/google\/protobuf\/releases\/download\/v3.11.4\/protoc-3.11.4-linux-x86_32.zip sudo unzip protoc-3.11.4-linux-x86_32.zip -d \/usr\/local<\/code><\/pre>\n<p>\u0418 \u0434\u043b\u044f amd64:<\/p>\n<pre><code class=\"bash\">cd &amp;&amp; wget -c  https:\/\/github.com\/google\/protobuf\/releases\/download\/v3.11.4\/protoc-3.11.4-linux-x86_64.zip sudo unzip protoc-3.11.4-linux-x86_64.zip -d \/usr\/local<\/code><\/pre>\n<p>containerd:<\/p>\n<pre><code class=\"bash\">cd &amp;&amp; git clone git@github.com:containerd\/containerd.git &amp;&amp; cd containerd  git clone git@github.com:containerd\/containerd.git &amp;&amp; cd containerd\/ make  sudo make install<\/code><\/pre>\n<p>K8s:<\/p>\n<pre><code class=\"bash\">cd ~\/kubernetes &amp;&amp; git checkout v1.21.0 make kubelet kube-proxy cd _output\/bin chmod +x kubelet kube-proxy sudo mv kubelet kube-proxy \/usr\/local\/bin\/<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c CNI-\u043f\u043b\u0430\u0433\u0438\u043d:<\/p>\n<pre><code class=\"bash\">POD_CIDR=10.200.$(grep -n $(hostname -s) node_list.txt | cut -d':' -f1).0\/24 cat &lt;&lt;EOF | sudo tee \/etc\/cni\/net.d\/10-bridge.conf {     \"cniVersion\": \"0.4.0\",     \"name\": \"bridge\",     \"type\": \"bridge\",     \"bridge\": \"cnio0\",     \"isGateway\": true,     \"ipMasq\": true,     \"ipam\": {         \"type\": \"host-local\",         \"ranges\": [           [{\"subnet\": \"${POD_CIDR}\"}]         ],         \"routes\": [{\"dst\": \"0.0.0.0\/0\"}]     } } EOF  cat &lt;&lt;EOF | sudo tee \/etc\/cni\/net.d\/99-loopback.conf {     \"cniVersion\": \"0.4.0\",     \"name\": \"lo\",     \"type\": \"loopback\" } EOF<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c containerd (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f):<\/p>\n<pre><code class=\"bash\">sudo mkdir -p \/etc\/containerd\/  cat &lt;&lt; EOF | sudo tee \/etc\/containerd\/config.toml version = 2 [plugins.\"io.containerd.grpc.v1.cri\"]   sandbox_image = \"docker.io\/alexeymakhonin\/pause:i386\" # k8s.gcr.io\/pause:3.7 \u0434\u043b\u044f amd64    [plugins.\"io.containerd.grpc.v1.cri\".containerd]     snapshotter = \"overlayfs\"     [plugins.\"io.containerd.grpc.v1.cri\".containerd.default_runtime]       runtime_type = \"io.containerd.runtime.v1.linux\"       runtime_engine = \"\/usr\/local\/sbin\/runc\"       runtime_root = \"\" EOF<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <code>pause<\/code> (\u043e\u043d \u0436\u0435 <code>sandbox_image<\/code> \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 containerd) \u043e\u0442 K8s \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f i386-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437 \u043c\u043e\u0435\u0433\u043e Docker Hub\u2019\u0430: <a href=\"http:\/\/docker.io\/alexeymakhonin\/pause:i386\"><strong>docker.io\/alexeymakhonin\/pause:i386<\/strong><\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u043d\u0430 \u0443\u0437\u043b\u0435 \u0441 i386-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a:<\/p>\n<pre><code class=\"bash\">cd ~\/kubernetes\/build\/pause &amp;&amp; mkdir bin gcc -Os -Wall -Werror -static -DVERSION=v3.6-bbc2dbb9801 -o bin\/pause-linux-i386 linux\/pause.c<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0438 \u0432\u0441\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0441 <a href=\"https:\/\/docs.docker.com\/buildx\/working-with-buildx\/\"><u>Docker Buildx<\/u><\/a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0437:<\/p>\n<pre><code class=\"bash\">scp -r hpcom:~\/kubernetes\/build\/pause .\/ &amp;&amp; cd pause docker buildx build --pull --output=type=docker --platform linux\/i386                 -t docker.io\/&lt;DockerHub username>\/pause:i386 --build-arg BASE=scratch --build-arg ARCH=i386 . docker push docker.io\/&lt;DockerHub username>\/pause:i386<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 containerd \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <code>sandbox_image<\/code> \u043d\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c Unit containerd \u0434\u043b\u044f systemd:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/systemd\/system\/containerd.service [Unit] Description=containerd container runtime Documentation=https:\/\/containerd.io After=network.target  [Service] ExecStartPre=\/sbin\/modprobe overlay ExecStart=\/usr\/local\/bin\/containerd Restart=always RestartSec=5 Delegate=yes KillMode=process OOMScoreAdjust=-999 LimitNOFILE=1048576 LimitNPROC=infinity LimitCORE=infinity  [Install] WantedBy=multi-user.target EOF<\/code><\/pre>\n<p>\u0421\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c kubelet \u0438 kube-proxy \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/09-bootstrapping-kubernetes-workers.md\"><u>\u043f\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a>. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e <code>ca.pem<\/code> \u0443\u0436\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d \u0432 <code>\/var\/lib\/kubernetes<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>mv<\/code> \u0443\u043f\u0430\u0434\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">kubectl get node --kubeconfig ~\/admin.kubeconfig<\/code><\/pre>\n<h3>Configuring kubectl for Remote Access<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/10-configuring-kubectl.md\"><u>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430<\/u><\/a> \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u2014 \u043f\u0443\u043d\u043a\u0442 <em>The Admin Kubernetes Configuration File<\/em>. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"bash\">{   KUBERNETES_PUBLIC_ADDRESS=127.0.0.1    kubectl config set-cluster kubernetes-the-hard-way \\     --certificate-authority=ca.pem \\     --embed-certs=true \\     --server=https:\/\/${KUBERNETES_PUBLIC_ADDRESS}:443    kubectl config set-credentials admin \\     --client-certificate=admin.pem \\     --client-key=admin-key.pem    kubectl config set-context kubernetes-the-hard-way \\     --cluster=kubernetes-the-hard-way \\     --user=admin    kubectl config use-context kubernetes-the-hard-way }  <\/code><\/pre>\n<h3>Provisioning Pod Network Routes<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/11-pod-network-routes.md\">\u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<h3>Deploying the DNS Cluster Add-on<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/12-dns-addon.md\"><u>\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a> \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438. \u0414\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 amd64 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0451, \u043a\u0430\u043a \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435, \u0430 \u0432\u043e\u0442 \u0434\u043b\u044f i386 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0435\u043c. \u041e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u044d\u0442\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 coredns \u0434\u043b\u044f i386 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u043c (\u0438\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0443\u0436\u0435 <a href=\"http:\/\/docker.io\/alexeymakhonin\/coredns:i386\"><u>\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439<\/u><\/a>). \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441 <a href=\"https:\/\/docs.docker.com\/buildx\/working-with-buildx\/\"><u>Docker Buildx<\/u><\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">git clone git@github.com:coredns\/coredns.git &amp;&amp; cd coredns &amp;&amp; git checkout v1.8.3 make CGO_ENABLED=0 GOOS=linux GOARCH=386 docker buildx build --pull --output=type=docker --platform linux\/i386 -t docker.io\/&lt;DockerHub username>\/coredns:i386 . docker push docker.io\/&lt;DockerHub username>\/coredns:i386<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u043d\u0430\u0448 \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"bash\">curl -L https:\/\/storage.googleapis.com\/kubernetes-the-hard-way\/coredns-1.8.yaml --silent -o - | sed 's#image: coredns\/coredns:1.8.3#image: docker.io\/&lt;DockerHub username>\/coredns:i386#g' | kubectl apply -f -<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0430\u0442\u0447 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 <code>i386<\/code> \u0438\u043b\u0438 <code>amd64<\/code> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0443\u0437\u0435\u043b \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c coredns \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | yq -ojson  | tee patch.json spec:   template:     spec:       nodeSelector:         kubernetes.io\/arch: \"386\"      EOF  kubectl patch -n kube-system deployments.apps coredns --patch-file patch.json<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.\u00a0<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430: Pod\u2019\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <code>ContainerCreating<\/code> \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">cgroups: cgroup mountpoint does not exist: unknown.<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">sudo mkdir \/sys\/fs\/cgroup\/systemd sudo mount -t cgroup -o none,name=systemd cgroup \/sys\/fs\/cgroup\/systemd<\/code><\/pre>\n<h3>Smoke Test<\/h3>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/13-smoke-test.md\"><u>\u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a>, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432. <\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">ssh hpcom sudo ETCDCTL_API=3 etcdctl get \\   --endpoints=https:\/\/127.0.0.1:2379 \\   --cacert=\/etc\/etcd\/ca.pem \\   --cert=\/etc\/etcd\/kubernetes.pem \\   --key=\/etc\/etcd\/kubernetes-key.pem\\   \/registry\/secrets\/default\/kubernetes-the-hard-way | hexdump -C<\/code><\/pre>\n<p>\u0414\u043b\u044f <code>NODE_PORT<\/code>-\u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<pre><code class=\"bash\">curl -I  http:\/\/$(grep hpcom node_list.txt | cut -d' ' -f2):${NODE_PORT}<\/code><\/pre>\n<h3>Cleaning up<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/14-cleanup.md\"><u>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435<\/u><\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \ud83d\ude42<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u044f \u0438 \u043d\u0435 \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0436\u0435\u043b\u0435\u0437\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u043a\u043b\u0430\u0434\u043e\u0432\u043a\u0443, \u0430 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0440\u0443\u043a\u0438 \u043d\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c Kubernetes \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 <em>Kubernetes The Hard Way<\/em> \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u044b\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b i386: \u0445\u043e\u0442\u044f \u043e\u043d\u0430 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0442\u0435\u043c, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0432\u043b\u0435\u0437\u0442\u044c \u0432 Kubernetes \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443.<\/p>\n<h2>P.S.<\/h2>\n<p>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/572188\/\">\u00ab<u>Kubernetes \u0432 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0435 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430: k0s, MicroK8s, kind, k3s \u0438 Minikube<\/u>\u00bb<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/583660\/\">\u00ab<u>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c<\/u>\u00bb<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/544306\/\">\u00ab<u>Kubernetes \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u043e\u043a\u0435\u0430\u043d\u0430\u0440\u0438\u0443\u043c<\/u>\u00bb<\/a>.<\/p>\n<\/li>\n<\/ul>\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\/flant\/blog\/685616\/\"> https:\/\/habr.com\/ru\/company\/flant\/blog\/685616\/<\/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<p>\u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435, \u0441\u0443\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Kubernetes \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430\u0445 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0431\u044b\u043b \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 i386. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e <em>Kubernetes The Hard Way<\/em>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0430\u0445 \u2014 Gentoo (\u0434\u0430, \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c). \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0434\u043a\u043e\u0440!<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/kelseyhightower\"><u>\u041a\u0435\u043b\u0441\u0438 \u0425\u0430\u0439\u0442\u0430\u0443\u044d\u0440\u0430<\/u><\/a> \u2014 <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\"><em>Kubernetes The Hard Way<\/em><\/a>, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 K8s \u0431\u0435\u0437 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u043d\u0435\u0439 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Kubernetes \u043d\u0430 Google Cloud Platform (GCP). \u041d\u043e \u0434\u0430\u0436\u0435 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c 300 USD, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u0430\u0440\u043e\u043a \u0437\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435.<\/p>\n<p>\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0445 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u044b\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043a\u0435, \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044c-\u0442\u0430\u043a\u0438<em> <\/em>Kubernetes \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e?<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c!<\/p>\n<p><strong>\u0412\u0430\u0436\u043d\u043e:<\/strong> \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u041a\u0435\u043b\u0441\u0438 \u0425\u0430\u0439\u0442\u0430\u0443\u044d\u0440\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a GCP, \u043d\u043e \u0438 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0436\u0435\u043b\u0435\u0437\u0443 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c, \u0445\u043e\u0442\u044f \u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h2>\n<p>\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Gentoo Linux:<\/p>\n<ul>\n<li>\n<p>Dell G3 3590 \u043d\u0430 \u0431\u0430\u0437\u0435 Intel Core i5-9300H (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 AMD64) (\u0434\u0430\u043b\u0435\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e dell);<\/p>\n<\/li>\n<li>\n<p>HP Compaq 6720s \u043d\u0430 \u0431\u0430\u0437\u0435 Intel Core2 Duo (\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 i686) (\u0434\u0430\u043b\u0435\u0435 \u2014 hpcom).<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0442\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:AMD64\"><u>amd64<\/u><\/a> \u0438 <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Handbook:X86\/Full\/Installation\"><u>x32<\/u><\/a>. \u041d\u043e \u044f\u0434\u0440\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f <a href=\"https:\/\/wiki.gentoo.org\/wiki\/IPSet\"><u>IPSet<\/u><\/a> \u0438 <a href=\"https:\/\/wiki.gentoo.org\/wiki\/Docker\"><u>Docker<\/u><\/a>. \u0414\u043b\u044f kube-proxy \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 <code>NETFILTER_XT_MATCH_COMMENT<\/code> \u0438 <code>NETFILTER_XT_MATCH_STATISTIC<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u043e\u0439 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0435\u0439, \u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433 \u0444\u043e\u0440\u0443\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 Gentoo. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0438: <a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-1083076-start-0.html\"><u>\u0447\u0435\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 GRUB<\/u><\/a> \u0438 <a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-1051792-start-0.html\"><u>\u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u200b\u200bnon-PAE kernel<\/u><\/a>.<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0435: <\/p>\n<ul>\n<li>\n<p>\u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 Kubernetes.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c<\/h2>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043e\u0442\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0432\u043d\u0435\u0441 \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Kubernetes. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u043a\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0434\u0430\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Kubernetes<\/h2>\n<h3>Prerequisites<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/01-prerequisites.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u0434\u0443\u0448\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<h3>Installing the Client Tools<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/02-client-tools.md\"><u>\u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e<\/u><\/a>.<\/p>\n<h3>Provisioning Compute Resources<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/03-compute-resources.md\"><u>\u042d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/u><\/a> \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0435 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a: hpcom \u2014 <code>192.168.1.71<\/code>, dell \u2014 <code>192.168.1.253<\/code>).<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0444\u0430\u0439\u043b\u0438\u043a <code>node_list.txt<\/code>:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | tee node_list.txt dell 192.168.1.253 # \u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0438\u043c\u0435\u043d\u0430 hpcom 192.168.1.71 EOF<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 Load Balancer\u2019\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c NGINX. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>nginx.conf<\/code> \u0441\u0442\u0440\u043e\u043a\u0443 <code>include passthrough.conf<\/code> (\u043d\u0430 Linux \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 NGINX \u2014 <code>\/etc\/nginx\/<\/code>, \u0430 \u043d\u0430 macOS \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 brew \u2014 <code>\/opt\/homebrew\/etc\/<\/code>).<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u044f\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>passthrough.conf<\/code>. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e NGINX-\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0445\u043e\u0441\u0442\u0430\u043c\u0438 \u043d\u0430 \u0432\u0430\u0448\u0438):<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | tee \/opt\/homebrew\/etc\/nginx\/passthrough.conf stream {     upstream kube { $(cat node_list.txt | cut -d\" \" -f2 | xargs -I{} echo \"$(printf '%8s')server {}:6443;\")     }      server {         listen       443;         proxy_pass kube;         proxy_next_upstream on;     } }  EOF<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044e High-Availability-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (HA). \u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h3>Provisioning a CA and Generating TLS Certificates<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/04-certificate-authority.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u043f\u0443\u043d\u043a\u0442\u0430 <em>The Kubelet Client Certificates<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0437\u043b\u043e\u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">for instance in $(cat node_list.txt | cut -d\" \" -f1); do cat > ${instance}-csr.json &lt;&lt;EOF {   \"CN\": \"system:node:${instance}\",   \"key\": {     \"algo\": \"rsa\",     \"size\": 2048   },   \"names\": [     {       \"C\": \"US\",       \"L\": \"Portland\",       \"O\": \"system:nodes\",       \"OU\": \"Kubernetes The Hard Way\",       \"ST\": \"Oregon\"     }   ] } EOF  INTERNAL_IP=$(cat node_list.txt | grep $instance | cut -d\" \" -f2)  cfssl gencert \\   -ca=ca.pem \\   -ca-key=ca-key.pem \\   -config=ca-config.json \\   -hostname=${instance},${INTERNAL_IP},127.0.0.1 \\   -profile=kubernetes \\   ${instance}-csr.json | cfssljson -bare ${instance} done<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u043c \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u0443\u043d\u043a\u0442\u0430 <em>The Kubernetes API Server Certificate<\/em>. \u0417\u0434\u0435\u0441\u044c \u043c\u0435\u043d\u044f\u0435\u043c \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<pre><code class=\"bash\">{  KUBERNETES_HOSTNAMES=kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.svc.cluster.local  cat > kubernetes-csr.json &lt;&lt;EOF {   \"CN\": \"kubernetes\",   \"key\": {     \"algo\": \"rsa\",     \"size\": 2048   },   \"names\": [     {       \"C\": \"US\",       \"L\": \"Portland\",       \"O\": \"Kubernetes\",       \"OU\": \"Kubernetes The Hard Way\",       \"ST\": \"Oregon\"     }   ] } EOF  cfssl gencert \\   -ca=ca.pem \\   -ca-key=ca-key.pem \\   -config=ca-config.json \\   -hostname=$(cut -d\" \" -f2 node_list.txt| tr '\\n' ',')127.0.0.1,${KUBERNETES_HOSTNAMES} \\   -profile=kubernetes \\   kubernetes-csr.json | cfssljson -bare kubernetes  }<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, <em>The Service Account Key Pair<\/em>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0432 <em>Distribute the Client and Server Certificates<\/em> \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u043e\u0441\u0438\u043c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e \u0443\u0437\u043b\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e scp. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>~\/.ssh\/config<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">cat node_list.txt | xargs -n2 bash -c 'echo -e \"Host $0\\n\\tHostname $1\\n\\tUser &lt;\u0412\u0430\u0448 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u0437\u043b\u0430\u0445>\"' | tee ~\/.ssh\/config<\/code><\/pre>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0443\u0437\u043b\u044b:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cut -d\" \" -f1 node_list.txt); do   scp node_list.txt ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem service-account-key.pem service-account.pem ca.pem ${instance}-key.pem ${instance}.pem node_list.txt \\ # \u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0444\u0430\u0439\u043b \u0441 IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. ${instance}:~\/ done }<\/code><\/pre>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 master\u2019\u0430 \u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f control plane, \u043d\u043e \u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0443\u0437\u043b\u043e\u0432.<\/p>\n<h3>Generating Kubernetes Configuration Files for Authentication<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/05-kubernetes-configuration-files.md\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0443\u043d\u043a\u0442 \u043f\u0440\u043e <em>Kubernetes Public IP Address<\/em>, \u0430 \u0432 <em>The kubelet Kubernetes Configuration File<\/em> \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<pre><code class=\"bash\">for instance in $(cat node_list.txt | cut -d\" \" -f1); do   kubectl config set-cluster kubernetes-the-hard-way \\     --certificate-authority=ca.pem \\     --embed-certs=true \\     --server=https:\/\/127.0.0.1:443 \\     --kubeconfig=${instance}.kubeconfig    kubectl config set-credentials system:node:${instance} \\     --client-certificate=${instance}.pem \\     --client-key=${instance}-key.pem \\     --embed-certs=true \\     --kubeconfig=${instance}.kubeconfig    kubectl config set-context default \\     --cluster=kubernetes-the-hard-way \\     --user=system:node:${instance} \\     --kubeconfig=${instance}.kubeconfig    kubectl config use-context default --kubeconfig=${instance}.kubeconfig done<\/code><\/pre>\n<p>\u0418 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f <em>The kube-proxy Kubernetes Configuration File<\/em>:<\/p>\n<pre><code class=\"bash\"> kubectl config set-cluster kubernetes-the-hard-way \\     --certificate-authority=ca.pem \\     --embed-certs=true \\     --server=https:\/\/127.0.0.1:443 \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config set-credentials system:kube-proxy \\     --client-certificate=kube-proxy.pem \\     --client-key=kube-proxy-key.pem \\     --embed-certs=true \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config set-context default \\     --cluster=kubernetes-the-hard-way \\     --user=system:kube-proxy \\     --kubeconfig=kube-proxy.kubeconfig    kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u0443\u0437\u043b\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cat node_list.txt | cut -d\" \" -f1); do   scp ${instance}.kubeconfig kube-proxy.kubeconfig admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}:~\/ done }<\/code><\/pre>\n<h3>Generating the Data Encryption Config and Key<\/h3>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/06-data-encryption-keys.md\"><u>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435<\/u><\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0451 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0443\u0437\u043b\u0430\u043c. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">{ for instance in $(cat node_list.txt | cut -d\" \" -f1); do   scp encryption-config.yaml ${instance}:~\/ done }<\/code><\/pre>\n<h3>Bootstrapping the etcd Cluster<\/h3>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e <a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\/blob\/master\/docs\/07-bootstrapping-etcd.md\"><u>\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/u><\/a> \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0443\u0437\u0435\u043b (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430):<\/p>\n<pre><code class=\"bash\">ssh hpcom<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo emerge --sync &amp;&amp; emerge --ask dev-vcs\/git sys-devel\/make net-misc\/wget net-misc\/curl dev-lang\/go app-shells\/bash-completion<\/code><\/pre>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c etcd:<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/etcd-io\/etcd.git cd etcd git checkout v3.4.15 go mod vendor .\/build sudo mv bin\/etcd* \/usr\/local\/bin\/<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 etcd. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b:<\/p>\n<pre><code class=\"bash\">{   sudo mkdir -p \/etc\/etcd \/var\/lib\/etcd   sudo chmod 700 \/var\/lib\/etcd   sudo cp ca.pem kubernetes-key.pem kubernetes.pem \/etc\/etcd\/ }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u0438\u043c\u044f \u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"bash\">INTERNAL_IP=$(grep $(hostname -s) node_list.txt | cut -d' ' -f2) ETCD_NAME=$(hostname -s)<\/code><\/pre>\n<p>\u0418 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c Unit \u0434\u043b\u044f systemd:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | sudo tee \/etc\/systemd\/system\/etcd.service [Unit] Description=etcd Documentation=https:\/\/github.com\/etcd-io\/etcd  [Service] Type=notify Environment=\"ETCD_UNSUPPORTED_ARCH=386\" # \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b i386, \u0434\u043b\u044f amd64 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c. ExecStart=\/usr\/local\/bin\/etcd \\\\   --name ${ETCD_NAME} \\\\   --cert-file=\/etc\/etcd\/kubernetes.pem \\\\   --key-file=\/etc\/etcd\/kubernetes-key.pem \\\\   --peer-cert-file=\/etc\/etcd\/kubernetes.pem \\\\   --peer-key-file=\/etc\/etcd\/kubernetes-key.pem \\\\   --trusted-ca-file=\/etc\/etcd\/ca.pem \\\\   --peer-trusted-ca-file=\/etc\/etcd\/ca.pem \\\\<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-338670","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338670","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=338670"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338670\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}