{"id":290285,"date":"2018-10-03T23:15:02","date_gmt":"2018-10-03T19:15:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=290285"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=290285","title":{"rendered":"\u0421\u0442\u0440\u043e\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0443\u044e \u043f\u043e \u0441\u0435\u0442\u0438 \u0444\u0435\u0440\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0434\u043b\u044f Kubernetes \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LTSP"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8bb\/8a3\/0c9\/8bb8a30c990d198d478d1062f444b7a7.svg\"><\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e\u0434\u043d\u0443 \u043a\u0440\u0443\u0442\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e, \u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0435 \u0434\u043b\u044f Kubernetes. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u041e\u0421 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0434\u0443. \u0417\u0430\u0447\u0435\u043c? \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 Dockerfile!<\/p>\n<p>  <\/p>\n<p>\u0422\u043e\u0442 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0443\u043f\u0438\u0442\u044c \u0441\u043e\u0442\u043d\u044e \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0447\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0435!<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0438\u043d\u0442\u0440\u0438\u0433\u043e\u0432\u0430\u043b? \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"rezyume\">\u0420\u0435\u0437\u044e\u043c\u0435<\/h1>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u043e\u0434 \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441 \u041e\u0421, Docker, Kubelet \u0438 \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c.<br \/>  \u042d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u044f\u0434\u0440\u043e\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 CI, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Dockerfile.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043d\u043e\u0434\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u041e\u0421 \u0438 \u044f\u0434\u0440\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u044f\u043c\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 overlayfs \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b (\u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438).<br \/>  \u0415\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f ssh-\u043a\u043b\u044e\u0447\u0430 \u0438 <code>kubeadm join<\/code>)<\/p>\n<p>  <\/p>\n<h2 id=\"process-podgotovki-obraza\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430<\/h2>\n<p>  <\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 LTSP, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<br \/>  \u0412 \u0446\u0435\u043b\u043e\u043c LTSP \u044d\u0442\u043e \u043f\u0430\u0447\u043a\u0430 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0436\u0438\u0437\u043d\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  <\/p>\n<p>\u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c initramfs, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u043d\u0435\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c init.<\/p>\n<p>  <\/p>\n<p><strong>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430:<\/strong><\/p>\n<p>  <\/p>\n<ul>\n<li>\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 chroot-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438.<\/li>\n<li>\u0412\u043d\u043e\u0441\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0444\u0442.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ltsp-build-image<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0441\u0436\u0430\u0442\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e chroot \u0441\u043e \u0432\u0441\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0444\u0442\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438.<br \/>  \u041a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0437 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 rootfs.<br \/>  \u0414\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u043e\u0434\u0443, \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f rootfs.<\/p>\n<p>  <\/p>\n<h2 id=\"servernye-komponenty\">\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/h2>\n<p>  <\/p>\n<p><strong>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c LTSP \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430:<\/strong><\/p>\n<p>  <\/p>\n<ul>\n<li><strong>TFTP-\u0441\u0435\u0440\u0432\u0435\u0440<\/strong> \u2014 TFTP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430, initramfs \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u2014 lts.conf.<\/li>\n<li><strong>NBD-\u0441\u0435\u0440\u0432\u0435\u0440<\/strong> \u2014 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b NBD, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 rootfs \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 NFS \u0438\u043b\u0438 AoE.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>DHCP-\u0441\u0435\u0440\u0432\u0435\u0440<\/strong> \u2014 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c IP-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043d\u0430\u0448\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u0442\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0448\u0435\u0433\u043e LTSP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"process-zagruzki-nody\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0434\u044b<\/h2>\n<p>  <\/p>\n<p><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0434\u044b<\/strong><\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u043e\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442 \u0441 DHCP IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043e\u043f\u0446\u0438\u0438 <code>next-server<\/code>,<code>filename<\/code>.<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c \u043d\u043e\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a (pxelinux \u0438\u043b\u0438 grub)<\/li>\n<li>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u0441 \u044f\u0434\u0440\u043e\u043c \u0438 initramfs.<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c \u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u044f\u0434\u0440\u043e \u0438 initramfs \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u044f\u0434\u0440\u0430.<\/li>\n<li>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 initramfs \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 cmdline \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 nbd-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0432\u0430, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 overlay rootfs \u0438 \u0442. \u0434.<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e init, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 ltsp-init.<\/li>\n<li>\u0421\u043a\u0440\u0438\u043f\u0442\u044b ltsp-init \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044f\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 init. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u0438 \u0438\u0437 lts.conf (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438): \u044d\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 fstab \u0438 rc.local \u0438 \u0442.\u043f.<\/li>\n<li>\u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e init (systemd), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u0437 fstab, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0442\u0430\u0440\u0433\u0435\u0442\u044b \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 rc.local.<\/li>\n<li>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"podgotovka-servera\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h1>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u044e LTSP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e squashed \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Dockerfile. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435\u043f\u043b\u043e\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u0448\u0430\u0433\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0432\u0430\u0448\u0435\u043c git \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u044d\u0433\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c CI \u0438 \u0432\u0441\u0435 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0431\u044b \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 Docker-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c LTSP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432.<br \/>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c LTSP \u0431\u0435\u0437 Dockerfile.<\/p>\n<p>  <\/p>\n<h2 id=\"spisok-ispolzovannyh-patchey\">\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 LTSP \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0445\u043e\u0442\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e LTSP \u043b\u0435\u0433\u043a\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0438\u0445 \u0437\u0434\u0435\u0441\u044c.<br \/>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u044f \u0441\u043e\u0437\u0440\u0435\u044e \u043d\u0430 \u0444\u043e\u0440\u043a, \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u043f\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0442 \u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/kvaps\/ltsp\/compare\/feature-grub.diff\">feature-grub.diff<\/a><br \/>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e LTSP \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 EFI, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u043f\u0430\u0442\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 GRUB2 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 EFI.<\/li>\n<li><a href=\"https:\/\/github.com\/kvaps\/ltsp\/compare\/feature_preinit.diff\">feature_preinit.diff<\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043f\u0446\u0438\u044e PREINIT \u0432 lts.conf, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e init. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 systemd \u044e\u043d\u0438\u0442\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e.<\/li>\n<li><a href=\"https:\/\/github.com\/kvaps\/ltsp\/compare\/feature_initramfs_params_from_lts_conf.diff\">feature_initramfs_params_from_lts_conf.diff<\/a><br \/>  \u0420\u0435\u0448\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043e\u043f\u0446\u0438\u0435\u0439 NBD_TO_RAM, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0435 \u0432 lts.conf \u0432\u043d\u0443\u0442\u0440\u0438 chroot. (\u043d\u0435 \u0442\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 tftp)<\/li>\n<li><a href=\"https:\/\/gist.githubusercontent.com\/kvaps\/1a6a7d8b73bf7444f0f99b22379c9e4e\/raw\/eb0d60c638ef72b7e28438b7f4d2beda89c41f75\/nbd-server-wrapper.sh\">nbd-server-wrapper.sh<\/a><br \/>  \u042d\u0442\u043e \u043d\u0435 \u043f\u0430\u0442\u0447, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e shell-\u0441\u043a\u0440\u0438\u043f\u0442, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c nbd-server \u0432 foregroud, \u043e\u043d \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c nbd-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"dockerfile-stages\">Dockerfile stages<\/h2>\n<p>  <\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.docker.com\/develop\/develop-images\/multistage-build\/\">stage building<\/a> \u0432 \u043d\u0430\u0448\u0435\u043c Dockerfile \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e docker-\u043e\u0431\u0440\u0430\u0437\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<p>  <\/p>\n<pre><code>ltsp-base (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0434\u043b\u044f ltsp \u0441\u0435\u0440\u0432\u0435\u0440\u0430)    |    |---basesystem    |   (\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 chroot-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u043e\u0444\u0442\u043e\u043c \u0438 \u044f\u0434\u0440\u043e\u043c)    |     |    |     |---builder    |     |   (\u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438)    |     |    |     '---ltsp-image    |         (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430, docker, kubelet \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 squashed \u043e\u0431\u0440\u0430\u0437\u0430)    |    '---final-stage        (\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 squashed \u043e\u0431\u0440\u0430\u0437\u0430, \u044f\u0434\u0440\u0430 \u0438 initramfs \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 stage)<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"stage-1-ltsp-base\">Stage 1: ltsp-base<\/h3>\n<p>  <\/p>\n<p>\u041e\u041a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0435\u043c, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e Dockerfile:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">FROM ubuntu:16.04 as ltsp-base  ADD nbd-server-wrapper.sh \/bin\/ ADD \/patches\/feature-grub.diff \/patches\/feature-grub.diff RUN apt-get -y update \\  &amp;&amp; apt-get -y install \\       ltsp-server \\       tftpd-hpa \\       nbd-server \\       grub-common \\       grub-pc-bin \\       grub-efi-amd64-bin \\       curl \\       patch \\  &amp;&amp; sed -i 's|in_target mount|in_target_nofail mount|' \\       \/usr\/share\/debootstrap\/functions \\   # \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 EFI \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a Grub (#1745251)  &amp;&amp; patch -p2 -d \/usr\/sbin &lt; \/patches\/feature-grub.diff \\  &amp;&amp; rm -rf \/var\/lib\/apt\/lists \\  &amp;&amp; apt-get clean<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0448 docker-\u043e\u0431\u0440\u0430\u0437 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>NBD-\u0441\u0435\u0440\u0432\u0435\u0440<\/li>\n<li>TFTP-\u0441\u0435\u0440\u0432\u0435\u0440<\/li>\n<li>LTSP-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 grub (\u0434\u043b\u044f EFI)<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"stage-2-basesystem\">Stage 2: basesystem<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c chroot \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043e\u0444\u0442 \u0441 \u044f\u0434\u0440\u043e\u043c.<br \/>  \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>debootstrap<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>ltsp-build-client<\/strong> \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <strong>ltsp-build-client<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 GUI \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u044f\u0432\u043d\u0430 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">FROM ltsp-base as basesystem  ARG DEBIAN_FRONTEND=noninteractive  # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 RUN mkdir -p \/opt\/ltsp\/amd64\/proc\/self\/fd \\  &amp;&amp; touch \/opt\/ltsp\/amd64\/proc\/self\/fd\/3 \\  &amp;&amp; debootstrap --arch amd64 xenial \/opt\/ltsp\/amd64 \\  &amp;&amp; rm -rf \/opt\/ltsp\/amd64\/proc\/*  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f RUN echo \"\\       deb http:\/\/archive.ubuntu.com\/ubuntu xenial main restricted universe multiverse\\n\\       deb http:\/\/archive.ubuntu.com\/ubuntu xenial-updates main restricted universe multiverse\\n\\       deb http:\/\/archive.ubuntu.com\/ubuntu xenial-security main restricted universe multiverse\" \\       &gt; \/opt\/ltsp\/amd64\/etc\/apt\/sources.list \\  &amp;&amp; ltsp-chroot apt-get -y update \\  &amp;&amp; ltsp-chroot apt-get -y upgrade  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b LTSP RUN ltsp-chroot apt-get -y install ltsp-client-core  # \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043f\u0430\u0442\u0447\u0438 initramfs # 1: \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \/etc\/lts.conf \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (#1680490) # 2: \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 PREINIT \u043e\u043f\u0446\u0438\u0439 \u0432 lts.conf ADD \/patches \/patches RUN patch -p4 -d \/opt\/ltsp\/amd64\/usr\/share &lt; \/patches\/feature_initramfs_params_from_lts_conf.diff \\  &amp;&amp; patch -p3 -d \/opt\/ltsp\/amd64\/usr\/share &lt; \/patches\/feature_preinit.diff  # \u0417\u0430\u043f\u0438\u0448\u0435\u043c LTSP_NBD_TO_RAM \u043e\u043f\u0446\u0438\u044e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 ram: RUN echo \"[Default]\\nLTSP_NBD_TO_RAM = true\" \\       &gt; \/opt\/ltsp\/amd64\/etc\/lts.conf  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b RUN echo 'APT::Install-Recommends \"0\";\\nAPT::Install-Suggests \"0\";' \\       &gt;&gt; \/opt\/ltsp\/amd64\/etc\/apt\/apt.conf.d\/01norecommend \\  &amp;&amp; ltsp-chroot apt-get -y install \\       software-properties-common \\       apt-transport-https \\       ca-certificates \\       ssh \\       bridge-utils \\       pv \\       jq \\       vlan \\       bash-completion \\       screen \\       vim \\       mc \\       lm-sensors \\       htop \\       jnettop \\       rsync \\       curl \\       wget \\       tcpdump \\       arping \\       apparmor-utils \\       nfs-common \\       telnet \\       sysstat \\       ipvsadm \\       ipset \\       make  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u044f\u0434\u0440\u043e RUN ltsp-chroot apt-get -y install linux-generic-hwe-16.04<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 lvm2, \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u043d\u0435\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c chroot. \u0418\u0445 postinstall-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u0441\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f\u0434\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, lvm2)<\/li>\n<li>\u041d\u043e \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/askubuntu.com\/a\/482936\/327437\">\u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0442\u044c<\/a> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0435\u0437 postinstall-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"stage-3-builder\">Stage 3: builder<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0441\u043e\u0444\u0442 \u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u043e\u0447\u0435\u043d\u044c \u043a\u043b\u0430\u0441\u0441\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<br \/>  \u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u044d\u0442\u0430\u043f \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u043b\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 MLNX_EN \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">FROM basesystem as builder  # \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c cpuinfo (\u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432) RUN cp \/proc\/cpuinfo \/opt\/ltsp\/amd64\/proc\/cpuinfo  # \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c Mellanox driver RUN ltsp-chroot sh -cx \\    '  VERSION=4.3-1.0.1.0-ubuntu16.04-x86_64 \\    &amp;&amp; curl -L http:\/\/www.mellanox.com\/downloads\/ofed\/MLNX_EN-${VERSION%%-ubuntu*}\/mlnx-en-${VERSION}.tgz \\       | tar xzf - \\    &amp;&amp; export \\         DRIVER_DIR=\"$(ls -1 | grep \"MLNX_OFED_LINUX-\\|mlnx-en-\")\" \\         KERNEL=\"$(ls -1t \/lib\/modules\/ | head -n1)\" \\    &amp;&amp; cd \"$DRIVER_DIR\" \\    &amp;&amp; .\/*install --kernel \"$KERNEL\" --without-dkms --add-kernel-support \\    &amp;&amp; cd - \\    &amp;&amp; rm -rf \"$DRIVER_DIR\" \/tmp\/mlnx-en* \/tmp\/ofed*'  # \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 RUN ltsp-chroot sh -c \\     ' export KERNEL=\"$(ls -1t \/usr\/src\/ | grep -m1 \"^linux-headers\" | sed \"s\/^linux-headers-\/\/g\")\" \\    &amp;&amp; tar cpzf \/modules.tar.gz \/lib\/modules\/${KERNEL}\/updates' <\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"stage-4-ltsp-image\">Stage 4: ltsp-image<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">FROM basesystem as ltsp-image  # \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 COPY --from=builder \/opt\/ltsp\/amd64\/modules.tar.gz \/opt\/ltsp\/amd64\/modules.tar.gz  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 RUN ltsp-chroot sh -c \\     ' export KERNEL=\"$(ls -1t \/usr\/src\/ | grep -m1 \"^linux-headers\" | sed \"s\/^linux-headers-\/\/g\")\" \\    &amp;&amp; tar xpzf \/modules.tar.gz \\    &amp;&amp; depmod -a \"${KERNEL}\" \\    &amp;&amp; rm -f \/modules.tar.gz'<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043d\u0435\u0441\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0430\u0448 LTSP-\u043e\u0431\u0440\u0430\u0437:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c docker RUN ltsp-chroot sh -c \\    '  curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | apt-key add - \\    &amp;&amp; echo \"deb https:\/\/download.docker.com\/linux\/ubuntu xenial stable\" \\         &gt; \/etc\/apt\/sources.list.d\/docker.list \\    &amp;&amp; apt-get -y update \\    &amp;&amp; apt-get -y install \\         docker-ce=$(apt-cache madison docker-ce | grep 18.06 | head -1 | awk \"{print $ 3}\")'  # \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f docker RUN DOCKER_OPTS=\"$(echo \\       --storage-driver=overlay2 \\       --iptables=false \\       --ip-masq=false \\       --log-driver=json-file \\       --log-opt=max-size=10m \\       --log-opt=max-file=5 \\       )\" \\  &amp;&amp; sed \"\/^ExecStart=\/ s|$| $DOCKER_OPTS|g\" \\       \/opt\/ltsp\/amd64\/lib\/systemd\/system\/docker.service \\       &gt; \/opt\/ltsp\/amd64\/etc\/systemd\/system\/docker.service  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c kubeadm, kubelet \u0438 kubectl RUN ltsp-chroot sh -c \\       '  curl -s https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg | apt-key add - \\       &amp;&amp; echo \"deb http:\/\/apt.kubernetes.io\/ kubernetes-xenial main\" \\            &gt; \/etc\/apt\/sources.list.d\/kubernetes.list \\       &amp;&amp; apt-get -y update \\       &amp;&amp; apt-get -y install kubelet kubeadm kubectl cri-tools'  # \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f RUN rm -f \/opt\/ltsp\/amd64\/etc\/apt\/apt.conf.d\/20auto-upgrades  # \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0438 apparmor RUN ltsp-chroot find \/etc\/apparmor.d \\       -maxdepth 1 \\       -type f \\       -name \"sbin.*\" \\       -o -name \"usr.*\" \\       -exec ln -sf \"{}\" \/etc\/apparmor.d\/disable\/ \\;  # \u041e\u043f\u0438\u0448\u0435\u043c \u043e\u043f\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 (cmdline) RUN KERNEL_OPTIONS=\"$(echo \\       init=\/sbin\/init-ltsp \\       forcepae \\       console=tty1 \\       console=ttyS0,9600n8 \\       nvme_core.default_ps_max_latency_us=0 \\     )\" \\  &amp;&amp; sed -i \"\/^CMDLINE_LINUX_DEFAULT=\/ s|=.*|=\\\"${KERNEL_OPTIONS}\\\"|\" \\       \"\/opt\/ltsp\/amd64\/etc\/ltsp\/update-kernels.conf\"<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c squased-\u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e chroot:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448\u0438 RUN rm -rf \/opt\/ltsp\/amd64\/var\/lib\/apt\/lists \\  &amp;&amp; ltsp-chroot apt-get clean  # \u0421\u043e\u0431\u0435\u0440\u0435\u043c squashed \u043e\u0431\u0440\u0430\u0437 RUN ltsp-update-image<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"stage-5-final-stage\">Stage 5: Final stage<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448 squashed-\u043e\u0431\u0440\u0430\u0437 \u0438 \u044f\u0434\u0440\u043e \u0441 initramfs<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">FROM ltsp-base COPY --from=ltsp-image \/opt\/ltsp\/images \/opt\/ltsp\/images COPY --from=ltsp-image \/etc\/nbd-server\/conf.d \/etc\/nbd-server\/conf.d COPY --from=ltsp-image \/var\/lib\/tftpboot \/var\/lib\/tftpboot<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c docker-\u043e\u0431\u0440\u0430\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li>TFTP-\u0441\u0435\u0440\u0432\u0435\u0440<\/li>\n<li>NBD-\u0441\u0435\u0440\u0432\u0435\u0440<\/li>\n<li>\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a<\/li>\n<li>\u044f\u0434\u0440\u043e \u0441 initramfs<\/li>\n<li>squashed \u043e\u0431\u0440\u0430\u0437 rootfs<\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"ispolzovanie\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<p>\u041e\u041a, \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0448 Docker-\u043e\u0431\u0440\u0430\u0437 \u0441 LTSP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u044f\u0434\u0440\u043e\u043c, initramfs \u0438 squashed rootfs \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043e\u0442\u043e\u0432, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c deployment \u0441 \u043d\u0438\u043c.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0435\u0448\u0438\u0442\u044c.<br \/>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Kubernetes service \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e deployment, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0434\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e Kubernetes \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c externalIP, \u043d\u043e Kubernetes \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 NAT \u0434\u043b\u044f externalIP \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u042f \u0437\u043d\u0430\u044e \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0447\u0442\u043e \u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>hostNetwork: true<\/code> \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/dreamcat4\/docker-images\/blob\/master\/pipework\/3.%20Examples.md#kubernetes\">pipework<\/a>, \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0442.\u043a. \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u0430\u0437\u0430 IP-\u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u0435\u0434\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043d\u043e\u0434\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e pipework \u2014 \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438 \u043c\u0435\u043d\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.<br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043e \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u043e \u043d\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 deployment \u0441 hostNetwork:<\/p>\n<p>  <\/p>\n<pre><code>apiVersion: extensions\/v1beta1 kind: Deployment metadata:   name: ltsp-server   labels:       app: ltsp-server spec:   selector:     matchLabels:       name: ltsp-server   replicas: 1   template:     metadata:       labels:         name: ltsp-server     spec:       hostNetwork: true       containers:       - name: tftpd         image: registry.example.org\/example\/ltsp:latest         command: [ \"\/usr\/sbin\/in.tftpd\", \"-L\", \"-u\", \"tftp\", \"-a\", \":69\", \"-s\", \"\/var\/lib\/tftpboot\" ]         lifecycle:           postStart:             exec:               command: [\"\/bin\/sh\", \"-c\", \"cd \/var\/lib\/tftpboot\/ltsp\/amd64; ln -sf config\/lts.conf .\" ]         volumeMounts:         - name: config           mountPath: \"\/var\/lib\/tftpboot\/ltsp\/amd64\/config\"        - name: nbd-server         image: registry.example.org\/example\/ltsp:latest         command: [ \"\/bin\/nbd-server-wrapper.sh\" ]        volumes:       - name: config         configMap:           name: ltsp-config<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f configmap \u0441 <strong>lts.conf<\/strong> \u0444\u0430\u0439\u043b\u043e\u043c.<br \/>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430:<\/p>\n<p>  <\/p>\n<pre><code>apiVersion: v1 kind: ConfigMap metadata:   name: ltsp-config data:   lts.conf: |     [default]     KEEP_SYSTEM_SERVICES           = \"ssh ureadahead dbus-org.freedesktop.login1 systemd-logind polkitd cgmanager ufw rpcbind nfs-kernel-server\"      PREINIT_00_TIME                = \"ln -sf \/usr\/share\/zoneinfo\/Europe\/Prague \/etc\/localtime\"     PREINIT_01_FIX_HOSTNAME        = \"sed -i '\/^127.0.0.2\/d' \/etc\/hosts\"     PREINIT_02_DOCKER_OPTIONS      = \"sed -i 's|^ExecStart=.*|ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --storage-driver overlay2 --iptables=false --ip-masq=false --log-driver=json-file --log-opt=max-size=10m --log-opt=max-file=5|' \/etc\/systemd\/system\/docker.service\"      FSTAB_01_SSH                   = \"\/dev\/data\/ssh     \/etc\/ssh          ext4 nofail,noatime,nodiratime 0 0\"     FSTAB_02_JOURNALD              = \"\/dev\/data\/journal \/var\/log\/journal  ext4 nofail,noatime,nodiratime 0 0\"     FSTAB_03_DOCKER                = \"\/dev\/data\/docker  \/var\/lib\/docker   ext4 nofail,noatime,nodiratime 0 0\"      # Each command will stop script execution when fail     RCFILE_01_SSH_SERVER           = \"cp \/rofs\/etc\/ssh\/*_config \/etc\/ssh; ssh-keygen -A\"     RCFILE_02_SSH_CLIENT           = \"mkdir -p \/root\/.ssh\/; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBSLYRaORL2znr1V4a3rjDn3HDHn2CsvUNK1nv8+CctoICtJOPXl6zQycI9KXNhANfJpc6iQG1ZPZUR74IiNhNIKvOpnNRPyLZ5opm01MVIDIZgi9g0DUks1g5gLV5LKzED8xYKMBmAfXMxh\/nsP9KEvxGvTJB3OD+\/bBxpliTl5xY3Eu41+VmZqVOz3Yl98+X8cZTgqx2dmsHUk7VKN9OZuCjIZL9MtJCZyOSRbjuo4HFEssotR1mvANyz+BUXkjqv2pEa0I2vGQPk1VDul5TpzGaN3nOfu83URZLJgCrX+8whS1fzMepUYrbEuIWq95esjn0gR6G4J7qlxyguAb9 admin@kubernetes' &gt;&gt; \/root\/.ssh\/authorized_keys\"     RCFILE_03_KERNEL_DEBUG         = \"sysctl -w kernel.unknown_nmi_panic=1 kernel.softlockup_panic=1; modprobe netconsole netconsole=@\/vmbr0,@10.9.0.15\/\"     RCFILE_04_SYSCTL               = \"sysctl -w fs.file-max=20000000 fs.nr_open=20000000 net.ipv4.neigh.default.gc_thresh1=80000 net.ipv4.neigh.default.gc_thresh2=90000 net.ipv4.neigh.default.gc_thresh3=100000\"     RCFILE_05_FORWARD              = \"echo 1 &gt; \/proc\/sys\/net\/ipv4\/ip_forward\"     RCFILE_06_MODULES              = \"modprobe br_netfilter\"     RCFILE_07_JOIN_K8S             = \"kubeadm join --token 2a4576.504356e45fa3d365 10.9.0.20:6443 --discovery-token-ca-cert-hash sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><strong>KEEP_SYSTEM_SERVICES<\/strong> \u2014 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 LTSP \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0434\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/li>\n<li><b>PREINIT_*<\/b> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c systemd (\u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 <a href=\"#used-patches-list\">feature_preinit.diff<\/a> \u043f\u0430\u0442\u0447\u0435\u043c)<\/li>\n<li><b>FSTAB_*<\/b> \u2014 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 <code>\/etc\/fstab<\/code> \u0444\u0430\u0439\u043b.<br \/>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>nofail<\/code> \u043e\u043f\u0446\u0438\u044e, \u043e\u043d\u0430 \u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.<\/li>\n<li><b>RCFILE_*<\/b> \u2014 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 <code>rc.local<\/code> \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d systemd \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<br \/>  \u0422\u0443\u0442 \u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 sysctl-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e <code>kubeadm join<\/code> \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0434\u0443 \u0432 kubernetes \u043a\u043b\u0430\u0441\u0442\u0435\u0440.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 <a href=\"http:\/\/manpages.ubuntu.com\/manpages\/xenial\/man5\/lts.conf.5.html\">lts.conf \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0430\u0448 DHCP. \u041f\u043e \u0441\u0443\u0442\u0438 \u0432\u0447\u0435 \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>next-server<\/code> \u0438 <code>filename<\/code> \u043e\u043f\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ISC-DHCP \u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 <code>dhcpd.conf<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>shared-network ltsp-netowrk {     subnet 10.9.0.0 netmask 255.255.0.0 {         authoritative;         default-lease-time -1;         max-lease-time -1;          option domain-name              \"example.org\";         option domain-name-servers      10.9.0.1;         option routers                  10.9.0.1;         next-server                     ltsp-1;  # write ltsp-server hostname here          if option architecture = 00:07 {             filename \"\/ltsp\/amd64\/grub\/x86_64-efi\/core.efi\";         } else {             filename \"\/ltsp\/amd64\/grub\/i386-pc\/core.0\";         }          range 10.9.200.0 10.9.250.254;      }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0433\u043e, \u043d\u043e \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ltsp-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0434\u044b \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible-\u043f\u043b\u0435\u0439\u0431\u0443\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0430\u0448\u0443 \u043f\u0435\u0440\u0432\u0443\u044e \u043d\u043e\u0434\u0443 \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u043d\u0435\u0439. \u041d\u043e\u0434\u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 Kubernetes \u043a\u043b\u0430\u0441\u0442\u0435\u0440.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e LTSP \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u043d\u0443\u0436\u0434\u044b. \u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0442\u0430\u043c \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 Telegram-\u043a\u0430\u043d\u0430\u043b\u0443: <a href=\"https:\/\/t.me\/ltsp_ru\">@ltsp_ru<\/a>.<\/p>\n<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <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\/post\/423785\/\"> https:\/\/habr.com\/post\/423785\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8bb\/8a3\/0c9\/8bb8a30c990d198d478d1062f444b7a7.svg\"><\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e\u0434\u043d\u0443 \u043a\u0440\u0443\u0442\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e, \u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0435 \u0434\u043b\u044f Kubernetes. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u041e\u0421 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0434\u0443. \u0417\u0430\u0447\u0435\u043c? \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 Dockerfile!<\/p>\n<p>  <\/p>\n<p>\u0422\u043e\u0442 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0443\u043f\u0438\u0442\u044c \u0441\u043e\u0442\u043d\u044e \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0447\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0435!<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0438\u043d\u0442\u0440\u0438\u0433\u043e\u0432\u0430\u043b? \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-290285","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290285","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=290285"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290285\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=290285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=290285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=290285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}