{"id":321348,"date":"2021-04-13T09:00:42","date_gmt":"2021-04-13T09:00:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321348"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321348","title":{"rendered":"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 k3s"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Kubernetes \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e kubespray \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c kubectl, \u0432\u0435\u0434\u044c \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e <a href=\"https:\/\/slurm.io\/slurm?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=intensive_kubernetes_bazovyi&amp;utm_content=post_12-04-2021&amp;utm_term=demkovich\">\u043e\u0431\u043a\u0430\u0442\u0430\u043d<\/a>. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0444\u0435\u0440\u043c\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438?<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/k3s.io\/\">k3s<\/a>, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 Kubernetes, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0442\u0438\u043f\u0430 Raspberry Pi \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0442\u0430\u043a \u0438 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445. \u0414\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes on-premise \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/k3s.io\/\">k3s<\/a>, \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d ingress \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Contour, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a Metallb, \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Headlamp, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043c\u0430\u043c\u0438 Longhorn \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0430\u043d\u0435\u043b\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0441 \u0446\u0435\u043b\u044c\u044e \u0438\u0445 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043a\u0430\u0442\u043a\u0438 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043d\u0430 <strong>\u00ab<\/strong>\u0431\u043e\u043b\u044c\u0448\u0438\u0445<strong>\u00bb<\/strong> \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u041f\u041e \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a \u0436\u0435\u043b\u0435\u0437\u0443, \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u0435\u0449\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0446\u0438\u043a\u043b\u0430 \u043d\u0430<a href=\"http:\/\/github.com\/\"> <\/a>GitHub, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u043f\u0440\u043e\u0448\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.  <\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f  <\/h2>\n<p>\u041d\u0443\u0436\u043d\u043e \u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0435), \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f Metallb, \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Debian 10 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d swap. \u0418\u043c\u0435\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 k3s1, k3s2 \u0438 k3s3, \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0434\u043d\u0441 *.example.com \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 ip \u043e\u0442 metallb. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/alexellis\/arkade\">arkade<\/a>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 k3sup, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c \u043f\u043e ssh \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f root.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 k3s<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 k3sup. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/p>\n<pre><code>#!\/bin\/bash #set -e  export NODE_1=\"k3s1\" export NODE_2=\"k3s2\" export NODE_3=\"k3s3\" export USER=root  # The first server starts the cluster k3sup install \\   --cluster \\   --user $USER \\   --host $NODE_1 \\   --k3s-extra-args '--disable servicelb --disable traefik '  # The second node joins k3sup join \\   --server \\   --host $NODE_2 \\   --user $USER \\   --server-user $USER \\   --server-host $NODE_1  # The third node joins k3sup join \\   --server \\   --host $NODE_3 \\   --user $USER \\   --server-user $USER \\   --server-host $NODE_1<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:<\/p>\n<pre><code>$ .\/bootstrap-k8s.sh Running: k3sup install 2021\/02\/27 15:28:38 k3s1 Public IP: k3s1 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Result: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s  Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service.  Saving file to: \/home\/user\/kubeconfig  # Test your cluster with: export KUBECONFIG=\/home\/user\/kubeconfig kubectl config set-context default kubectl get node -o wide Running: k3sup join Server IP: k3s1 K101de86a6148782e7d364df3657cbea52faf809c688be697c5d5d37ccb76c4fdae::server:021aeff4097220f3dc94145842b7bf40 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Logs: Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. Output: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s Running: k3sup join Server IP: k3s1 K101de86a6148782e7d364df3657cbea52faf809c688be697c5d5d37ccb76c4fdae::server:021aeff4097220f3dc94145842b7bf40 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Logs: Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. Output: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s $ export KUBECONFIG=kubeconfig $ kubectl get node NAME   STATUS   ROLES         AGE   VERSION k3s1   Ready    etcd,master   92s   v1.19.8+k3s1 k3s2   Ready    etcd,master   60s   v1.19.8+k3s1 k3s3   Ready    etcd,master   30s   v1.19.8+k3s1<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0438 \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<pre><code>$ sed s\/127.0.0.1\/k3s1\/ -i kubeconfig $ export KUBECONFIG=kubeconfig $ kubectl delete svc\/traefik-prometheus -n kube-system service \"traefik-prometheus\" deleted $ kubectl delete svc\/traefik -n kube-system service \"traefik\" deleted $ kubectl delete deployment.apps\/traefik -n kube-system deployment.apps \"traefik\" deleted<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Metallb<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c namespace \u0438 configmap, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 metallb.yaml:<\/p>\n<pre><code>apiVersion: v1 kind: ConfigMap metadata:   namespace: metallb-system   name: config data:   config: |     address-pools:     - name: default       protocol: layer2       addresses:       - &lt;\u0442\u0443\u0442 \u043d\u0430\u0434\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c ip, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f metallb&gt;\/32<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<pre><code>$ kubectl apply -f metallb.yaml namespace\/metallb-system created configmap\/config created $ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey=\"$(openssl rand -base64 128)\" secret\/memberlist created $ kubectl apply -f https:\/\/raw.githubusercontent.com\/metallb\/metallb\/v0.9.5\/manifests\/metallb.yaml podsecuritypolicy.policy\/controller created podsecuritypolicy.policy\/speaker created serviceaccount\/controller created serviceaccount\/speaker created clusterrole.rbac.authorization.k8s.io\/metallb-system:controller created clusterrole.rbac.authorization.k8s.io\/metallb-system:speaker created role.rbac.authorization.k8s.io\/config-watcher created role.rbac.authorization.k8s.io\/pod-lister created clusterrolebinding.rbac.authorization.k8s.io\/metallb-system:controller created clusterrolebinding.rbac.authorization.k8s.io\/metallb-system:speaker created rolebinding.rbac.authorization.k8s.io\/config-watcher created rolebinding.rbac.authorization.k8s.io\/pod-lister created daemonset.apps\/speaker created deployment.apps\/controller created<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Contour<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code>$ kubectl apply -f https:\/\/projectcontour.io\/quickstart\/contour.yaml namespace\/projectcontour created serviceaccount\/contour created serviceaccount\/envoy created configmap\/contour created customresourcedefinition.apiextensions.k8s.io\/extensionservices.projectcontour.io created customresourcedefinition.apiextensions.k8s.io\/httpproxies.projectcontour.io created customresourcedefinition.apiextensions.k8s.io\/tlscertificatedelegations.projectcontour.io created serviceaccount\/contour-certgen created rolebinding.rbac.authorization.k8s.io\/contour created role.rbac.authorization.k8s.io\/contour-certgen created job.batch\/contour-certgen-v1.13.0 created clusterrolebinding.rbac.authorization.k8s.io\/contour created clusterrole.rbac.authorization.k8s.io\/contour created service\/contour created service\/envoy created deployment.apps\/contour created daemonset.apps\/envoy created<\/code><\/pre>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 cert-manager<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code>$ kubectl apply -f https:\/\/github.com\/jetstack\/cert-manager\/releases\/download\/v1.2.0\/cert-manager.yaml customresourcedefinition.apiextensions.k8s.io\/certificaterequests.cert-manager.io created customresourcedefinition.apiextensions.k8s.io\/certificates.cert-manager.io created customresourcedefinition.apiextensions.k8s.io\/challenges.acme.cert-manager.io created customresourcedefinition.apiextensions.k8s.io\/clusterissuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io\/issuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io\/orders.acme.cert-manager.io created namespace\/cert-manager created serviceaccount\/cert-manager-cainjector created serviceaccount\/cert-manager created serviceaccount\/cert-manager-webhook created clusterrole.rbac.authorization.k8s.io\/cert-manager-cainjector created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-issuers created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-clusterissuers created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-certificates created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-orders created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-challenges created clusterrole.rbac.authorization.k8s.io\/cert-manager-controller-ingress-shim created clusterrole.rbac.authorization.k8s.io\/cert-manager-view created clusterrole.rbac.authorization.k8s.io\/cert-manager-edit created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-cainjector created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-issuers created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-clusterissuers created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-certificates created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-orders created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-challenges created clusterrolebinding.rbac.authorization.k8s.io\/cert-manager-controller-ingress-shim created role.rbac.authorization.k8s.io\/cert-manager-cainjector:leaderelection created role.rbac.authorization.k8s.io\/cert-manager:leaderelection created role.rbac.authorization.k8s.io\/cert-manager-webhook:dynamic-serving created rolebinding.rbac.authorization.k8s.io\/cert-manager-cainjector:leaderelection created rolebinding.rbac.authorization.k8s.io\/cert-manager:leaderelection created rolebinding.rbac.authorization.k8s.io\/cert-manager-webhook:dynamic-serving created service\/cert-manager created service\/cert-manager-webhook created deployment.apps\/cert-manager-cainjector created deployment.apps\/cert-manager created deployment.apps\/cert-manager-webhook created mutatingwebhookconfiguration.admissionregistration.k8s.io\/cert-manager-webhook created validatingwebhookconfiguration.admissionregistration.k8s.io\/cert-manager-webhook created<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Headlamp<\/h2>\n<p>Headlamp \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c k8s. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0451 \u0438 \u0432\u044b\u0434\u0430\u0434\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f:<\/p>\n<pre><code>$ kubectl -n kube-system create serviceaccount headlamp-admin serviceaccount\/headlamp-admin created $ kubectl create clusterrolebinding headlamp-admin --serviceaccount=kube-system:headlamp-admin --clusterrole=cluster-admin clusterrolebinding.rbac.authorization.k8s.io\/headlamp-admin created<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e <strong>\u00ab<\/strong>\u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c<strong>\u00bb<\/strong> \u043d\u0430\u0440\u0443\u0436\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ingress, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b headlamp-ingress.yaml \u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f ssl \u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b):  <\/p>\n<pre><code>kind: Ingress apiVersion: extensions\/v1beta1 metadata:   name: headlamp   namespace: kube-system   annotations:     kubernetes.io\/tls-acme: \"false\" spec:   rules:   -     host: headlamp.example.com     http:       paths:       -         path: \/         backend:           serviceName: headlamp           servicePort: 80<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 ingress:  <\/p>\n<pre><code>$ kubectl apply -f headlamp-ingress.yaml ingress.extensions\/headlamp created<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d. \u0427\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code>$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secrets | grep -oP headlamp-admin-token-[a-z0-9]+) | awk '\/^token\/ {print $2}'<\/code><\/pre>\n<p>\u0412\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0432 \u0444\u043e\u0440\u043c\u0443 headlamp \u0438 \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9c1\/19e\/a6c\/9c119ea6c58aa5852ca6f6b8dba0e342.png\" width=\"1784\" height=\"589\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/055\/8ad\/c1e\/0558adc1e393686003bbd408874c76f2.png\" width=\"1748\" height=\"969\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dc8\/6dc\/ee9\/dc86dcee9c5d792e3cc52a1388ba4d0f.png\" width=\"1819\" height=\"881\"><figcaption><\/figcaption><\/figure>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Longhorn<\/h2>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/var\/lib\/longhorn (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e), \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0443 \u043c\u0435\u043d\u044f \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u043e\u043c LVM2 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 ext4:<\/p>\n<pre><code>k3s1 # df -h | grep longhorn \/dev\/mapper\/vg-longhorn    37G          74M   37G            1% \/var\/lib\/longhorn<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 iscsiadm, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Debian \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <code>open-iscsi<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Longhorn \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u043a:<\/p>\n<pre><code>$ kubectl apply -f https:\/\/raw.githubusercontent.com\/longhorn\/longhorn\/v1.1.0\/deploy\/longhorn.yaml namespace\/longhorn-system created serviceaccount\/longhorn-service-account created clusterrole.rbac.authorization.k8s.io\/longhorn-role created clusterrolebinding.rbac.authorization.k8s.io\/longhorn-bind created customresourcedefinition.apiextensions.k8s.io\/engines.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/replicas.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/settings.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/volumes.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/engineimages.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/nodes.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/instancemanagers.longhorn.io created customresourcedefinition.apiextensions.k8s.io\/sharemanagers.longhorn.io created configmap\/longhorn-default-setting created podsecuritypolicy.policy\/longhorn-psp created role.rbac.authorization.k8s.io\/longhorn-psp-role created rolebinding.rbac.authorization.k8s.io\/longhorn-psp-binding created configmap\/longhorn-storageclass created daemonset.apps\/longhorn-manager created service\/longhorn-backend created deployment.apps\/longhorn-ui created service\/longhorn-frontend created deployment.apps\/longhorn-driver-deployer created<\/code><\/pre>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043c\u0430\u043c\u0438. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0438\u0437\u0432\u043d\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c ingress \u0442\u0430\u043a\u043e\u0435:<\/p>\n<pre><code>kind: Ingress apiVersion: extensions\/v1beta1 metadata:   name: longhorn   namespace: longhorn-system   annotations:     kubernetes.io\/tls-acme: \"false\" spec:   rules:   -     host: longhorn.example.com     http:       paths:       -         path: \/         backend:           serviceName: longhorn-frontend           servicePort: 80<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 ingress:<\/p>\n<pre><code>$ kubectl apply -f longhorn-ingress.yaml ingress.extensions\/longhorn created<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/583\/dd6\/817\/583dd6817be1e8a9625e51b0bfd8e611.png\" width=\"1853\" height=\"908\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e0\/c62\/b7a\/8e0c62b7ae11bc5c6e708068920e6890.png\" width=\"1864\" height=\"684\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/149\/75a\/d41\/14975ad410c9d587faf875389f8b2fb2.png\" width=\"1876\" height=\"576\"><figcaption><\/figcaption><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 k3s. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a \u043d\u0435\u043c\u0443 \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ssl \u0434\u043b\u044f Headlamp \u0438 Longhorn, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c basic auth \u043a \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 Longhorn.<\/p>\n<p><strong>\u0422\u0435\u043c\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0446\u0438\u043a\u043b\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 CI\/CD.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p> \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\/southbridge\/blog\/551214\/\"> https:\/\/habr.com\/ru\/company\/southbridge\/blog\/551214\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Kubernetes \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e kubespray \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c kubectl, \u0432\u0435\u0434\u044c \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e <a href=\"https:\/\/slurm.io\/slurm?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=intensive_kubernetes_bazovyi&amp;utm_content=post_12-04-2021&amp;utm_term=demkovich\">\u043e\u0431\u043a\u0430\u0442\u0430\u043d<\/a>. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0444\u0435\u0440\u043c\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438?<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/k3s.io\/\">k3s<\/a>, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 Kubernetes, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0442\u0438\u043f\u0430 Raspberry Pi \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0442\u0430\u043a \u0438 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445. \u0414\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes on-premise \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/k3s.io\/\">k3s<\/a>, \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d ingress \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Contour, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a Metallb, \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Headlamp, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043c\u0430\u043c\u0438 Longhorn \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0430\u043d\u0435\u043b\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0441 \u0446\u0435\u043b\u044c\u044e \u0438\u0445 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043a\u0430\u0442\u043a\u0438 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043d\u0430 <strong>\u00ab<\/strong>\u0431\u043e\u043b\u044c\u0448\u0438\u0445<strong>\u00bb<\/strong> \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u041f\u041e \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a \u0436\u0435\u043b\u0435\u0437\u0443, \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u0435\u0449\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0446\u0438\u043a\u043b\u0430 \u043d\u0430<a href=\"http:\/\/github.com\/\"> <\/a>GitHub, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u043f\u0440\u043e\u0448\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.  <\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f  <\/h2>\n<p>\u041d\u0443\u0436\u043d\u043e \u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0435), \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f Metallb, \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Debian 10 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d swap. \u0418\u043c\u0435\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 k3s1, k3s2 \u0438 k3s3, \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0434\u043d\u0441 *.example.com \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 ip \u043e\u0442 metallb. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/alexellis\/arkade\">arkade<\/a>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 k3sup, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c \u043f\u043e ssh \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f root.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 k3s<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 k3sup. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/p>\n<pre><code>#!\/bin\/bash #set -e  export NODE_1=\"k3s1\" export NODE_2=\"k3s2\" export NODE_3=\"k3s3\" export USER=root  # The first server starts the cluster k3sup install \\   --cluster \\   --user $USER \\   --host $NODE_1 \\   --k3s-extra-args '--disable servicelb --disable traefik '  # The second node joins k3sup join \\   --server \\   --host $NODE_2 \\   --user $USER \\   --server-user $USER \\   --server-host $NODE_1  # The third node joins k3sup join \\   --server \\   --host $NODE_3 \\   --user $USER \\   --server-user $USER \\   --server-host $NODE_1<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:<\/p>\n<pre><code>$ .\/bootstrap-k8s.sh Running: k3sup install 2021\/02\/27 15:28:38 k3s1 Public IP: k3s1 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Result: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s  Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service.  Saving file to: \/home\/user\/kubeconfig  # Test your cluster with: export KUBECONFIG=\/home\/user\/kubeconfig kubectl config set-context default kubectl get node -o wide Running: k3sup join Server IP: k3s1 K101de86a6148782e7d364df3657cbea52faf809c688be697c5d5d37ccb76c4fdae::server:021aeff4097220f3dc94145842b7bf40 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Logs: Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. Output: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s Running: k3sup join Server IP: k3s1 K101de86a6148782e7d364df3657cbea52faf809c688be697c5d5d37ccb76c4fdae::server:021aeff4097220f3dc94145842b7bf40 [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. [INFO]  systemd: Starting k3s Logs: Created symlink \/etc\/systemd\/system\/multi-user.target.wants\/k3s.service \u2192 \/etc\/systemd\/system\/k3s.service. Output: [INFO]  Finding release for channel v1.19 [INFO]  Using v1.19.8+k3s1 as release [INFO]  Downloading hash https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/sha256sum-amd64.txt [INFO]  Downloading binary https:\/\/github.com\/rancher\/k3s\/releases\/download\/v1.19.8+k3s1\/k3s [INFO]  Verifying binary download [INFO]  Installing k3s to \/usr\/local\/bin\/k3s [INFO]  Creating \/usr\/local\/bin\/kubectl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/crictl symlink to k3s [INFO]  Creating \/usr\/local\/bin\/ctr symlink to k3s [INFO]  Creating killall script \/usr\/local\/bin\/k3s-killall.sh [INFO]  Creating uninstall script \/usr\/local\/bin\/k3s-uninstall.sh [INFO]  env: Creating environment file \/etc\/systemd\/system\/k3s.service.env [INFO]  systemd: Creating service file \/etc\/systemd\/system\/k3s.service [INFO]  systemd: Enabling k3s unit [INFO]  systemd: Starting k3s $ export KUBECONFIG=kubeconfig $ kubectl get node NAME   STATUS   ROLES         AGE   VERSION k3s1   Ready    etcd,master   92s   v1.19.8+k3s1 k3s2   Ready    etcd,master   60s   v1.19.8+k3s1 k3s3   Ready    etcd,master   30s   v1.19.8+k3s1<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0438 \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<pre><code>$ sed s\/127.0.0.1\/k3s1\/ -i kubeconfig $ export KUBECONFIG=kubeconfig $ kubectl delete svc\/traefik-prometheus -n kube-system service \"traefik-prometheus\" deleted $ kubectl delete svc\/traefik -n kube-system service \"traefik\" deleted $ kubectl delete deployment.apps\/traefik -n kube-system<\/code><\/pre>\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-321348","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321348","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=321348"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321348\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}