{"id":455520,"date":"2025-04-11T09:05:18","date_gmt":"2025-04-11T09:05:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=455520"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=455520","title":{"rendered":"<span>Kubernetes \u0432 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438: \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e\u00a0\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c Kubernetes \u0431\u0435\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e kubeadm init \u043f\u043b\u044e\u0441 \u043f\u0430\u0440\u0430 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0447\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451?<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 DevOps\u00a0\u2014 \u043d\u0435\u00a0\u0442\u043e\u0442, \u043a\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0430\u00a0\u0442\u043e\u0442, \u043a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c production\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u00a0\u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0439 \u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 3G\u2011\u043c\u043e\u0434\u0435\u043c,<\/p>\n<\/li>\n<li>\n<p>\u0432\u00a0\u043f\u043e\u0434\u0432\u0430\u043b\u0435 \u0431\u0430\u043d\u043a\u0430 \u0441\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u0431\u0435\u0442\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b\u00a0\u2014 \u0432\u0430\u0448 \u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u0439 \u043d\u043e\u0436 \u0434\u043b\u044f\u00a0Kubernetes \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 apt\u2011get update\u00a0\u2014 \u044d\u0442\u043e \u0440\u043e\u0441\u043a\u043e\u0448\u044c. \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u0438\u043b \u041c\u0438\u0440\u043e\u043d\u044e\u043a, DevOps \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435 Polymatica EPM. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Kubernetes\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5eb\/e85\/133\/5ebe8513313536192097bad5bee79a41.png\" width=\"740\" height=\"417\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5eb\/e85\/133\/5ebe8513313536192097bad5bee79a41.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5eb\/e85\/133\/5ebe8513313536192097bad5bee79a41.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>1. \u0410\u043d\u0441\u0438\u0431\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0442\u0440\u044e\u043a \u0431\u0435\u0437 \u0410\u043d\u0441\u0438\u0431\u043b\u0430: \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u043c\u0438<\/h2>\n<p><strong>\u0427\u0442\u043e\u00a0\u0441\u0434\u0435\u043b\u0430\u043d\u043e: <\/strong>\u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u00a0\u2014 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0440\u0432\u0435\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u00a0\u043f\u043e\u043b\u043f\u0443\u0442\u0438, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441\u00a0\u0447\u0438\u0441\u0442\u043e\u0433\u043e\u00a0\u043b\u0438\u0441\u0442\u0430.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f cleanup() \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u2014 \u043e\u043d\u0430 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0448\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435:<\/p>\n<pre><code class=\"bash\"># \u0416\u0451\u0441\u0442\u043a\u0438\u0439 reset \u0434\u043b\u044f etcd (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 kubeadm \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f) sudo find \/var\/lib\/etcd\/ -mindepth 1 -delete  # \u0414\u0440\u0430\u043a\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 sudo ip link delete cni0 2&gt;\/dev\/null || true sudo ip link delete flannel.1 2&gt;\/dev\/null || true<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e: <\/strong>\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0440\u0430\u0437 \u043d\u0430 \u00ab\u0433\u0440\u044f\u0437\u043d\u043e\u0439\u00bb \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0437 Ansible.<\/p>\n<h2>2. \u0422\u0430\u043d\u0446\u044b \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438: \u043a\u0430\u043a \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c dependency hell \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0441\u0440\u0435\u0434\u0435<\/h2>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430:<\/strong> \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 apt\u2011get install \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0440\u0435\u0436\u0438\u043c\u0435\u00a0\u2014 \u044d\u0442\u043e \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u0440\u0443\u043b\u0435\u0442\u043a\u0430 \u0441\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430: <\/strong>\u0436\u0451\u0441\u0442\u043a\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f:<\/p>\n<pre><code class=\"bash\"># \u041d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e cri-o, \u043d\u043e \u0438 \u0435\u0433\u043e \u043b\u0438\u0431\u044b \u0441 \u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 sudo -u _apt apt-get download \\     cri-o=1.24.0~rc2-1.1 \\     cri-o-runc=1.24.0~rc2-1.1 \\     containernetworking-plugins=1.4.0-1.1<\/code><\/pre>\n<p><strong>\u0424\u0438\u0448\u043a\u0430:<\/strong> c\u043a\u0440\u0438\u043f\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 conntrack=1:1.4.6\u20132\u00a0\u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c kube\u2011proxy.<\/p>\n<h2>3. Registry \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442: \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448 \u043e\u0431\u0440\u0430\u0437 \u2014 \u044d\u0442\u043e .tar<\/h2>\n<p><strong>\u041b\u0430\u0439\u0444\u0445\u0430\u043a:<\/strong> \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b\u00a0\u2014 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"># \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0430\u043c registry \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0437 sudo docker save -o \/opt\/offline\/images\/registry.tar registry:2  # \u041d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435:  docker load -i registry.tar docker run -v \/opt\/offline\/images\/registry:\/var\/lib\/registry ...<\/code><\/pre>\n<p><strong>\u0417\u0430\u0447\u0435\u043c:<\/strong> \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0430\u0448 registry\u00a0\u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b? \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435.tar\u2011\u0444\u0430\u0439\u043b.<\/p>\n<h2>4. kubeadm hack: \u041f\u043e\u0434\u043c\u0435\u043d\u0430 imageRepository \u0434\u043e\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p><strong>\u041c\u0430\u0433\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">apiVersion: kubeadm.k8s.io\/v1beta3 imageRepository: localhost:5000<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c:<\/strong><\/p>\n<ol>\n<li>\n<p>kubeadm \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u044f\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0437 <a href=\"http:\/\/registry.k8s.io\/kube-apiserver:v1.30.9\">registry.k8s.io\/kube\u2011apiserver:v1.30.9<\/a><\/p>\n<\/li>\n<li>\n<p>containerd \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry \u0447\u0435\u0440\u0435\u0437 mirror<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437\u00a0\u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u041d\u043e\u0443\u2011\u0445\u0430\u0443: <\/strong>\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437\u00a0\u043f\u0440\u0430\u0432\u043a\u0438 \/etc\/containerd\/config.toml\u00a0\u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 kubeadm.<\/p>\n<h2>5. Retry-\u043b\u043e\u0433\u0438\u043a\u0430: \u041a\u043e\u0433\u0434\u0430 etcd \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u00ab\u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f\u00bb<\/h2>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 kubeadm init\u00a0\u2014 \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u00a0\u0443\u043c\u043e\u043c:<\/p>\n<pre><code class=\"bash\">init_cluster() {     for i in {1..3}; do         cleanup         if kubeadm init ...; then             return 0         else             sleep $((i*10))  # \u042d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f backoff-\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430         fi     done }<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a:<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f etcd \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432. 10\u201320\u201330\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u00a0\u2014 \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0443\u043c.<\/p>\n<h2>6. CRI-O \u0432\u043c\u0435\u0441\u0442\u043e Docker: \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430<\/h2>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 CRI\u2011O:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043d\u0430 40% \u043c\u0435\u043d\u044c\u0448\u0435 RAM \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043d\u043e\u0434\u0435,<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043e\u0432 \u0437\u0430 120\u00a0ms \u0432\u043c\u0435\u0441\u0442\u043e 200\u00a0ms \u0443\u00a0Docker,<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0Kubernetes \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041d\u043e\u00a0\u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435:<\/strong><\/p>\n<pre><code class=\"bash\"># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 sudo dpkg -i cri-o_1.24*.deb cri-o-runc_1.24*.deb<\/code><\/pre>\n<p><strong>\u0424\u0438\u0448\u043a\u0430:<\/strong> \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e CRI\u2011O, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0442\u0435\u0441\u0442\u044b \u0441\u00a0k8s 1.30.9\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e.<\/p>\n<h2>7. \u0422\u0440\u044e\u043a \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438: \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b overlay \u0438 br_netfilter<\/h2>\n<p><strong>\u041d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo modprobe br_netfilter echo 1 &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u044d\u0442\u043e \u0434\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438,<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0443 Network Policies \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 iptables,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0CNI \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 Calico.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0430\u0436\u043d\u043e: <\/strong>\u0431\u0435\u0437\u00a0\u044d\u0442\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432\u0430\u0448 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e\u00a0\u0441\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.<\/p>\n<h2>8. Security-first \u043f\u043e\u0434\u0445\u043e\u0434: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438<\/h2>\n<p><strong>\u0427\u0442\u043e\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u00a0\u043a\u0443\u043b\u0438\u0441\u0430\u043c\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 registry \u043a\u0430\u043a\u00a0\u043d\u0435\u2011root \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c,<\/p>\n<\/li>\n<li>\n<p>\u0438\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0447\u0435\u0440\u0435\u0437 AppArmor\u2011\u043f\u0440\u043e\u0444\u0438\u043b\u0438,<\/p>\n<\/li>\n<li>\n<p>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 seccomp \u0434\u043b\u044f\u00a0kubelet.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u0430\u043a:<\/strong> \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b systemd \u0434\u043b\u044f\u00a0CRI\u2011O:<\/p>\n<pre><code class=\"bash\">[Service] ExecStartPre=\/sbin\/apparmor_parser -r \/etc\/apparmor.d\/crio-default<\/code><\/pre>\n<h2>9. Multi-Cloud \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e<\/h2>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439:<\/strong> \u0432\u0430\u0448 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c\u044e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u043a\u0430.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0432\u0441\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u0443\u0436\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e registry,<\/p>\n<\/li>\n<li>\n<p>CNI \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 BGP (Calico),<\/p>\n<\/li>\n<li>\n<p>\u0432\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445 \u043d\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a\u00a0IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b \u0432\u00a0\u043b\u044e\u0431\u043e\u0439 registry,<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c IP\u2011\u043f\u0443\u043b\u044b \u0432\u00a0Calico \u0447\u0435\u0440\u0435\u0437 calicoctl.<\/p>\n<\/li>\n<\/ul>\n<h2>10. Hidden Feature: \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Chaos Monkey<\/h2>\n<p><strong>\u0414\u043b\u044f\u00a0\u0441\u043c\u0435\u043b\u044b\u0445:<\/strong> \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435:<\/p>\n<pre><code class=\"bash\"># chaos_monkey() { kill -9 $(ps aux | grep kubelet | awk '{print $2}') }<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u0431\u0443\u0434\u0435\u0442:<\/strong> \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u00ab\u0443\u0431\u0438\u0432\u0430\u0435\u0442\u00bb kubelet \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0441\u0430\u043c\u043e\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043e\u0431\u043b\u0430\u043a\u0430?<\/h2>\n<p><strong>\u0426\u0438\u0444\u0440\u044b:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\"><strong>\u042d\u0442\u0430\u043f<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>\u041e\u043d\u043b\u0430\u0439\u043d (\u0441\u0435\u043a)<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>\u041e\u0444\u0444\u043b\u0430\u0439\u043d (\u0441\u0435\u043a)<\/strong><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">120<\/p>\n<\/td>\n<td>\n<p align=\"left\">45 (\u0438\u0437 .deb)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">300<\/p>\n<\/td>\n<td>\n<p align=\"left\">20 (\u0438\u0437 .tar)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">90<\/p>\n<\/td>\n<td>\n<p align=\"left\">110<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u00a0<strong>\u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>\u00a0\u0432 2 \u0438\u0437 3 \u044d\u0442\u0430\u043f\u043e\u0432 \u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f: \u0442\u043e\u043f-3 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043a\u0435\u0439\u0441\u0430<\/h2>\n<ol>\n<li>\n<p><strong>\u0421\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 NTP: <\/strong>\u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043d\u043e\u0434\u0430\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f &gt;30\u00a0\u0441\u0435\u043a\u00a0\u2014 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b etcd \u0441\u0442\u0430\u043d\u0443\u0442 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438.<br \/><strong>\u0424\u0438\u043a\u0441:<\/strong> timedatectl set\u2011ntp true \u0434\u043e\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Zombie\u2011\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b CRI\u2011O:<\/strong> \u0438\u043d\u043e\u0433\u0434\u0430 crictl \u043d\u0435\u00a0\u0432\u0438\u0434\u0438\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b.<br \/><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo systemctl reset-failed crio sudo rm -f \/var\/lib\/crio\/*.lock<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>\u0411\u0438\u0442\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 pause:<\/strong> \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 pause:3.9\u00a0\u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u00a0\u2014 \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u00a0CrashLoop.<br \/><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo crictl inspecti localhost:5000\/pause:3.9 | jq .status<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2>\u041a\u0443\u0434\u0430 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f: Roadmap \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<ul>\n<li>\n<p><strong>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Air-Gapped GitOps:<\/strong> \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Argo CD \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c Git-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>GPU Passthrough:<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 nvidia-container-runtime.<\/p>\n<\/li>\n<li>\n<p><strong>FIPS-\u0440\u0435\u0436\u0438\u043c:<\/strong> \u0441\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes \u0441 FIPS-\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u043a\u0440\u0438\u043f\u0442\u043e-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>Zero-Trust Security:<\/strong> \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 SPIFFE \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<h4>1. \u0423\u043c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u0430\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u0439. \u042d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\"># \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Kubernetes sudo \u2011u _apt apt\u2011get download kubelet=1.30.9\u20131.1\u00a0kubeadm=1.30.9\u20131.1<\/code><\/pre>\n<p><strong>\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p>sudo \u2011u _apt\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0432\u00a0Debian\/Ubuntu.<\/p>\n<\/li>\n<li>\n<p>apt\u2011get download\u00a0\u2014 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435.deb\u2011\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0431\u0435\u0437\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>=1.30.9\u20131.1\u00a0\u2014 \u0436\u0451\u0441\u0442\u043a\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>2. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u043e\u0431\u0440\u0430\u0437\u043e\u0432: \u0442\u0440\u044e\u043a \u0441 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441\u00a0\u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u0442\u0435\u0433\u043e\u0432:<\/p>\n<pre><code class=\"bash\"># \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430 sudo docker tag registry.k8s.io\/kube-apiserver:v1.30.9 localhost:5000\/kube-apiserver:v1.30.9  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 sudo docker push localhost:5000\/kube-apiserver:v1.30.9<\/code><\/pre>\n<p><strong>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e: <\/strong>Kubernetes \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0449\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u0432 <a href=\"http:\/\/registry.k8s.io\/\">registry.k8s.io<\/a>. \u041c\u044b \u00ab\u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0435\u043c\u00bb \u0435\u0433\u043e, \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u044f \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u00a0localhost:5000, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430\u0448\u0438 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u043e\u0431\u0440\u0430\u0437\u044b.<\/p>\n<h4>3. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u00ab\u0430\u0442\u043e\u043c\u043d\u0443\u044e\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">cleanup() {     echo \"\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b...\"     sudo kubeadm reset -f     sudo rm -rf \/etc\/kubernetes\/*     sudo rm -rf \/var\/lib\/etcd\/*     # ...\u0438 \u0435\u0449\u0451 15 \u0441\u0442\u0440\u043e\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f! }<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043d\u0444\u0438\u0433\u0438 Kubernetes,<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u043d\u043d\u044b\u0435 etcd (\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430),<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 CNI,<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0430\u0436\u043d\u043e:<\/strong> \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0447\u0438\u0441\u0442\u043e\u0433\u043e\u00a0\u043b\u0438\u0441\u0442\u0430.<\/p>\n<h4>4. \u0422\u0440\u044e\u043a \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u044f\u0434\u0440\u0430<\/h4>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b Kubernetes \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 Linux. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b cat &lt;&lt;EOF | sudo tee \/etc\/modules-load.d\/k8s.conf overlay br_netfilter EOF  # \u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 sudo modprobe overlay sudo modprobe br_netfilter<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f\u00a0\u0447\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>overlay\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438,<\/p>\n<\/li>\n<li>\n<p>br_netfilter\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>5. \u0423\u043c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c\u0438<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 3\u00a0\u0440\u0430\u0437\u0430 \u0441\u00a0\u043f\u0430\u0443\u0437\u0430\u043c\u0438\u00a0\u2014 \u043a\u0430\u043a\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 DevOps!<\/p>\n<pre><code class=\"bash\">init_cluster() {     local attempt=1     while [ $attempt -le 3 ]; do         if sudo kubeadm init ...; then             return 0         else             echo \"\u041f\u043e\u043f\u044b\u0442\u043a\u0430 #$attempt\"             sleep 30             ((attempt++))         fi     done     return 1 }<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e:<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, etcd) \u043c\u043e\u0433\u0443\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439.<\/p>\n<h2>\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<h4>1. \u0426\u0432\u0435\u0442\u043d\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0446\u0432\u0435\u0442\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">RED='\\033[0;31m' GREEN='\\033[0;32m' echo -e \"${RED}\u041e\u0448\u0438\u0431\u043a\u0430!${NC} \u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.\"<\/code><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/strong><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4fa\/a0f\/243\/4faa0f2431568e9f9b18a331de161221.jpg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0446\u0432\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430\" width=\"1280\" height=\"385\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4fa\/a0f\/243\/4faa0f2431568e9f9b18a331de161221.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4fa\/a0f\/243\/4faa0f2431568e9f9b18a331de161221.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0446\u0432\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430<\/figcaption><\/div>\n<\/figure>\n<p>(\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0440\u0430\u0441\u043d\u044b\u0435\/\u0437\u0435\u043b\u0451\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f)<\/p>\n<h4>2. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0440\u0442\u043e\u0432<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435\u00a0\u0437\u0430\u043d\u044f\u0442\u044b\u00a0\u043b\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">PORTS=(10250 10251 10252 2379 2380 6443) for port in \"${PORTS[@]}\"; do     if sudo lsof -i :$port; then         echo \"\u0423\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 $port\"         sudo kill -9 $(sudo lsof -ti :$port)     fi done<\/code><\/pre>\n<p><strong>\u041a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>6443\u00a0\u2014 API Kubernetes<\/p>\n<\/li>\n<li>\n<p>2379\/2380\u00a0\u2014 etcd<\/p>\n<\/li>\n<li>\n<p>10\u00a0250\u201310\u00a0252\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b kubelet<\/p>\n<\/li>\n<\/ul>\n<h4>3. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 CRI-O<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u00a0\u0432\u0435\u0440\u0441\u0438\u044e \u041e\u0421:<\/p>\n<pre><code class=\"bash\">export OS=Debian_11  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 export VERSION=1.24 echo \"deb http:\/\/...\/cri-o:\/$VERSION\/$OS\/\" | sudo tee ...<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e:<\/strong> \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f\u00a0Ubuntu\/RHEL, \u043f\u043e\u043c\u0435\u043d\u044f\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<h2>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0435\u0442\u044c \u0432 Kubernetes: \u043c\u0430\u0433\u0438\u044f Calico<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"bash\">kubectl apply -f \/opt\/offline\/manifests\/calico.yaml<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 calico.yaml:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b Kubernetes: DaemonSet, Deployment, CustomResourceDefinition,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f IP-\u043f\u0443\u043b \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0432 (\u0432\u044b \u0432\u0438\u0434\u0435\u043b\u0438 192.168.0.0\/16 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435),<\/p>\n<\/li>\n<li>\n<p>\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f BGP-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0437 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">apiVersion: crd.projectcalico.org\/v1 kind: IPPool metadata:   name: default-pool spec:   cidr: 192.168.0.0\/16   natOutgoing: true<\/code><\/pre>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\"># \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043a\u0430\u043a \u0432 \u043a\u0438\u043d\u043e! watch -n 1 kubectl get pods -A  # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 Calico calicoctl get ippools  # \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0441\u0435\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438 kubectl run test-$RANDOM --image=alpine -- ping 192.168.12.34<\/code><\/pre>\n<h2>\u041a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0441\u0440\u0435\u0434\u044b<\/h2>\n<p><strong>\u0422\u0440\u044e\u043a \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c registry:<\/strong><\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u043f\u0443\u0441\u043a registry \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 docker run -d -p 5000:5000 --name local-registry registry:2  # \u041f\u043e\u0434\u043c\u0435\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432 kubeadm imageRepository: localhost:5000  # \u0412 \u0444\u0430\u0439\u043b\u0435 kubeadm-config.yaml<\/code><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/strong> \u043a\u043e\u0433\u0434\u0430 Kubernetes \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 <a href=\"http:\/\/registry.k8s.io\/kube-apiserver:v1.30.9\">registry.k8s.io\/kube\u2011apiserver:v1.30.9<\/a>, \u043e\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0440\u0451\u0442 \u0435\u0433\u043e \u0438\u0437\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<h4>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/287\/4d0\/98a\/2874d098a405b92f905295182b70e5a6.png\" width=\"961\" height=\"326\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/287\/4d0\/98a\/2874d098a405b92f905295182b70e5a6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/287\/4d0\/98a\/2874d098a405b92f905295182b70e5a6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u0421\u043e\u0432\u0435\u0442\u044b \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<ol>\n<li>\n<p><strong>\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u043e\u0432:<\/strong> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 \u043e\u0431\u0440\u0430\u0437\u044b \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry \u043f\u0435\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">sudo docker pull my-app:v1 sudo docker tag my-app:v1 localhost:5000\/my-app:v1 sudo docker push localhost:5000\/my-app:v1<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:<\/strong> \u0434\u043b\u044f\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f worker\u2011\u0443\u0437\u043b\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438\u0437\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 kubeadm init:<\/p>\n<pre><code class=\"bash\">kubeadm join 192.168.1.100:6443 --token ... --discovery-token-ca-cert-hash ...<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0439:<\/strong><br \/>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 <a href=\"http:\/\/prepare-offline-k8s.sh\">prepare\u2011offline\u2011k8s.sh<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 kubeadm upgrade<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f:\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c (prepare-offline.sh)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">#!\/bin\/bash set -e  # Configuration CALICO_MANIFEST_URL=\"https:\/\/docs.projectcalico.org\/manifests\/calico.yaml\" KUBERNETES_VERSION=\"1.30.9\" CALICO_VERSION=\"v3.26.1\" REGISTRY_ADDRESS=\"localhost:5000\" POD_SUBNET=\"192.168.0.0\/16\" OFFLINE_DIR=\"\/opt\/offline\"  # Validation functions validate_version() {     if [[ ! $1 =~ ^[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then         echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0435\u0440\u0441\u0438\u0438: $1\"         exit 1     fi }  validate_url() {     if ! curl --output \/dev\/null --silent --head --fail \"$1\"; then         echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 URL: $1\"         exit 1     fi }  confirm_action() {     echo -e \"\\n\\033[1;33m=== \u041f\u0420\u041e\u0412\u0415\u0420\u042c\u0422\u0415 \u041f\u0410\u0420\u0410\u041c\u0415\u0422\u0420\u042b ===\\033[0m\"     echo \"\u0412\u0435\u0440\u0441\u0438\u044f Kubernetes: $KUBERNETES_VERSION\"     echo \"\u0412\u0435\u0440\u0441\u0438\u044f Calico: $CALICO_VERSION\"     echo \"Pod Subnet: $POD_SUBNET\"     echo \"\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry: $REGISTRY_ADDRESS\"     echo \"\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043f\u0430\u043a\u0435\u0442\u043e\u0432: $OFFLINE_DIR\"     echo \"URL \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 Calico: $CALICO_MANIFEST_URL\"          read -p \"\u0412\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0435\u0440\u043d\u044b? (y\/N): \" confirm     if [[ ! $confirm =~ ^[Yy] ]]; then         echo \"\u041e\u0442\u043c\u0435\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430!\"         exit 0     fi }  # Main execution validate_version \"$KUBERNETES_VERSION\" validate_url \"$CALICO_MANIFEST_URL\" confirm_action  echo -e \"\\n\\033[1;32m=== \u041d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043f\u0430\u043a\u0435\u0442\u043e\u0432 ===\\033[0m\"  # Create directories sudo mkdir -p \"$OFFLINE_DIR\"\/{manifests,pkgs,images} echo \"\u0421\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432 $OFFLINE_DIR\"  # Download Calico manifest echo \"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 Calico...\" sudo curl -L -o \"$OFFLINE_DIR\/manifests\/calico.yaml\" \"$CALICO_MANIFEST_URL\"  # Generate kubeadm config cat &lt;&lt;EOF | sudo tee \"$OFFLINE_DIR\/kubeadm-config.yaml\" &gt;\/dev\/null apiVersion: kubeadm.k8s.io\/v1beta3 kind: InitConfiguration nodeRegistration:   criSocket: unix:\/\/\/var\/run\/crio\/crio.sock --- apiVersion: kubeadm.k8s.io\/v1beta3 kind: ClusterConfiguration kubernetesVersion: v$KUBERNETES_VERSION imageRepository: $REGISTRY_ADDRESS networking:   podSubnet: $POD_SUBNET EOF  # Install dependencies echo -e \"\\n\\033[1;33m=== \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 ===\\033[0m\" sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg wget  # Configure repositories echo -e \"\\n\\033[1;33m=== \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 ===\\033[0m\" # Kubernetes sudo mkdir -p \/etc\/apt\/keyrings curl -fsSL https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/Release.key | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg echo 'deb [signed-by=\/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg] https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/ \/' | sudo tee \/etc\/apt\/sources.list.d\/kubernetes.list  # CRI-O export OS=Debian_11 export VERSION=1.24 echo \"deb https:\/\/download.opensuse.org\/repositories\/devel:\/kubic:\/libcontainers:\/stable\/$OS\/ \/\" | sudo tee \/etc\/apt\/sources.list.d\/devel:kubic:libcontainers:stable.list echo \"deb http:\/\/download.opensuse.org\/repositories\/devel:\/kubic:\/libcontainers:\/stable:\/cri-o:\/$VERSION\/$OS\/ \/\" | sudo tee \/etc\/apt\/sources.list.d\/devel:kubic:libcontainers:stable:cri-o:$VERSION.list  # Docker curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg sudo chmod a+r \/usr\/share\/keyrings\/docker-archive-keyring.gpg echo \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list  # Package installation echo -e \"\\n\\033[1;33m=== \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 ===\\033[0m\" sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo apt-get install -y conntrack=1:1.4.6-2 kubernetes-cni=1.4.0-1.1 cri-o cri-o-runc  # Download packages echo -e \"\\n\\033[1;33m=== \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 ===\\033[0m\" sudo mkdir -p offline-pkgs\/{kubernetes,cri-o,docker} sudo chown -R _apt:root offline-pkgs\/{kubernetes,cri-o,docker} sudo chmod -R 777 offline-pkgs\/{kubernetes,cri-o,docker}  # Kubernetes packages cd offline-pkgs\/kubernetes sudo -u _apt apt-get download kubelet=$KUBERNETES_VERSION-1.1 kubeadm=$KUBERNETES_VERSION-1.1 kubectl=$KUBERNETES_VERSION-1.1 conntrack=1:1.4.6-2 kubernetes-cni=1.4.0-1.1 cd ..\/..\/  # CRI-O packages cd offline-pkgs\/cri-o sudo -u _apt apt-get download cri-o cri-o-runc cd ..\/..\/  # Docker packages cd offline-pkgs\/docker sudo -u _apt apt-get download docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin cd ..\/..\/  # Download images echo -e \"\\n\\033[1;33m=== \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 Docker \u043e\u0431\u0440\u0430\u0437\u043e\u0432 ===\\033[0m\" images=(     registry.k8s.io\/kube-apiserver:v$KUBERNETES_VERSION     registry.k8s.io\/kube-controller-manager:v$KUBERNETES_VERSION     registry.k8s.io\/kube-scheduler:v$KUBERNETES_VERSION     registry.k8s.io\/kube-proxy:v$KUBERNETES_VERSION     registry.k8s.io\/pause:3.9     registry.k8s.io\/etcd:3.5.15-0     registry.k8s.io\/coredns\/coredns:v1.11.3     registry.k8s.io\/coredns\/coredns:v1.11.1     registry:2     calico\/node:$CALICO_VERSION )  for image in \"${images[@]}\"; do     echo \"\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 $image...\"     sudo docker pull $image done  # Save images echo -e \"\\n\\033[1;33m=== \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 ===\\033[0m\" sudo docker save -o k8s-images.tar ${images[@]:0:9} sudo docker save -o calico-images.tar ${images[9]}  # Finalize echo -e \"\\n\\033[1;33m=== \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ===\\033[0m\" sudo cp -r offline-pkgs\/* \"$OFFLINE_DIR\/pkgs\/\" sudo cp *.tar \"$OFFLINE_DIR\/images\/\"  echo -e \"\\n\\033[1;32m=== \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e! ===\\033[0m\" echo \"\u041e\u0444\u0444\u043b\u0430\u0439\u043d \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432: $OFFLINE_DIR\" echo \"\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435:\" echo \"sudo rsync -av $OFFLINE_DIR\/ \u0446\u0435\u043b\u0435\u0432\u043e\u0439_\u0443\u0437\u0435\u043b:\/opt\/offline\/\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f:\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (install-offline-k8s.sh)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">#!\/bin\/bash set -eo pipefail  # \u0426\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 RED='\\033[0;31m' GREEN='\\033[0;32m' YELLOW='\\033[1;33m' BLUE='\\033[0;34m' NC='\\033[0m' # No Color MAX_RETRIES=3 RETRY_DELAY=30 echo -e \"${BLUE}=== Installing Kubernetes in offline mode ===${NC}\"  # \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 cleanup() {     echo -e \"${YELLOW}\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439...${NC}\"     sudo kubeadm reset -f &gt;\/dev\/null 2&gt;&amp;1     sudo rm -rf \/etc\/kubernetes\/*     sudo rm -rf \/var\/lib\/etcd\/*     sudo rm -rf \/var\/lib\/kubelet\/*     sudo rm -rf \/var\/lib\/cni\/*     sudo rm -rf \/etc\/cni\/net.d\/*     sudo rm -rf \/run\/flannel\/*     sudo rm -rf \/var\/run\/kubernetes\/*     sudo rm -rf \/var\/lib\/dockershim\/*     sudo rm -rf \/var\/lib\/rook\/*     sudo rm -rf \/var\/lib\/weave\/*     sudo rm -rf \/var\/lib\/calico\/*     sudo rm -rf \/var\/log\/containers\/*     sudo rm -rf \/var\/log\/pods\/*     sudo rm -rf \/var\/log\/kubernetes\/*     sudo rm -rf \/var\/lib\/etcd\/     sudo mkdir -p \/var\/lib\/etcd     sudo chmod 700 \/var\/lib\/etcd     echo -e \"${GREEN}\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.${NC}\" }  # \u0423\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0440\u0442\u044b kill_processes_on_ports() {     echo -e \"${YELLOW}\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432...${NC}\"     PORTS=(10250 10251 10252 2379 2380 6443)     for port in \"${PORTS[@]}\"; do         if sudo lsof -i :$port &gt;\/dev\/null 2&gt;&amp;1; then             echo -e \"${RED}\u041f\u043e\u0440\u0442 $port \u0437\u0430\u043d\u044f\u0442. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441...${NC}\"             sudo kill -9 $(sudo lsof -ti :$port)         fi     done }  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 echo -e \"${YELLOW}\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c CRI-O \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438...${NC}\" sudo dpkg -i \/opt\/offline\/pkgs\/cri-o\/*.deb sudo dpkg -i \/opt\/offline\/pkgs\/kubernetes\/*.deb  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 CRI-O echo -e \"${YELLOW}\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c CRI-O...${NC}\" sudo systemctl enable crio sudo systemctl start crio  # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Docker (\u0431\u0435\u0437 containerd) echo -e \"${YELLOW}\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Docker...${NC}\" sudo dpkg -i \/opt\/offline\/pkgs\/docker\/*.deb  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Docker if ! systemctl is-active --quiet docker; then     echo -e \"${YELLOW}\u0417\u0430\u043f\u0443\u0441\u043a Docker...${NC}\"     sudo systemctl enable --now docker else     echo -e \"${GREEN}Docker \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d.${NC}\" fi  # \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 docker if ! groups $USER | grep -q '\\bdocker\\b'; then     echo -e \"${YELLOW}\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f $USER \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 docker...${NC}\"     sudo usermod -aG docker $USER     newgrp docker || true fi  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 Kubernetes echo -e \"${YELLOW}\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437\u044b Kubernetes...${NC}\" sudo docker load -i \/opt\/offline\/images\/k8s-images.tar sudo docker load -i \/opt\/offline\/images\/calico-images.tar  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430 if ! docker ps --format '{{.Names}}' | grep -q '^local-registry$'; then     echo -e \"${YELLOW}\u0417\u0430\u043f\u0443\u0441\u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430...${NC}\"     sudo docker run -d \\         -p 5000:5000 \\         --restart=always \\         --name local-registry \\         -v \/opt\/offline\/images\/registry:\/var\/lib\/registry \\         registry:2 fi  # \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 echo -e \"${YELLOW}\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0434\u043b\u044f CRI-O...${NC}\" IMAGES=(     \"kube-apiserver:v1.30.9\"     \"kube-controller-manager:v1.30.9\"     \"kube-scheduler:v1.30.9\"     \"kube-proxy:v1.30.9\"     \"pause:3.9\"  # \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0433 \u0434\u043b\u044f pause     \"etcd:3.5.15-0\"     \"coredns\/coredns:v1.11.3\"     \"coredns\/coredns:v1.11.1\" )  for image in \"${IMAGES[@]}\"; do     # \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437\u044b \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430     sudo docker tag \"registry.k8s.io\/${image}\" \"localhost:5000\/${image}\"     # \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440     sudo docker push \"localhost:5000\/${image}\" done  # \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 echo -e \"${YELLOW}\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b...${NC}\" sudo swapoff -a sudo sed -i '\/ swap \/ s\/^\\(.*\\)$\/#\\1\/g' \/etc\/fstab  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044f\u0434\u0440\u0430 cat &lt;&lt;EOF | sudo tee \/etc\/modules-load.d\/k8s.conf overlay br_netfilter EOF  sudo modprobe overlay sudo modprobe br_netfilter  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 cat &lt;&lt;EOF | sudo tee \/etc\/sysctl.d\/99-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF  sudo sysctl --system  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 init_cluster() {     local attempt=1     while [ $attempt -le $MAX_RETRIES ]; do         echo -e \"${BLUE}\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 #$attempt${NC}\"                  # \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439         cleanup         kill_processes_on_ports          if sudo kubeadm init \\             --config=\/opt\/offline\/kubeadm-config.yaml \\             --ignore-preflight-errors=Port-10250,DirAvailable--var-lib-etcd; then             echo -e \"${GREEN}\u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d!${NC}\"             return 0         else             echo -e \"${RED}\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 #$attempt \u0438\u0437 $MAX_RETRIES.${NC}\"             ((attempt++))             sleep $RETRY_DELAY         fi     done     return 1 }  # \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 if init_cluster; then     # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430     echo -e \"${YELLOW}\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443...${NC}\"     sudo mkdir -p $HOME\/.kube     sudo cp -f \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config     sudo chown $(id -u):$(id -g) $HOME\/.kube\/config      # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Calico     echo -e \"${YELLOW}\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d Calico...${NC}\"     for i in {1..3}; do         if kubectl apply -f \/opt\/offline\/manifests\/calico.yaml; then             echo -e \"${GREEN}Calico \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d!${NC}\"             break         else             echo -e \"${RED}\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Calico. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 #$i${NC}\"             sleep 15         fi     done      # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430     echo -e \"${YELLOW}\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:${NC}\"     kubectl get nodes      timeout 59s kubectl get pods -A -w || true &amp;     wait $! else     echo -e \"${RED}\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 $MAX_RETRIES \u043f\u043e\u043f\u044b\u0442\u043e\u043a.${NC}\"     exit 1 fi  echo -e \"${GREEN}\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e!${NC}\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0427\u0430\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h2>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th data-colwidth=\"230\" width=\"230\">\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong><\/p>\n<\/th>\n<th>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td data-colwidth=\"230\" width=\"230\">\n<p align=\"left\">ERROR: Port 10259 is in use<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435:\u00a0sudo lsof -i :10259\u00a0\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"230\" width=\"230\">\n<p align=\"left\">Failed to pull image<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440:\u00a0curl\u00a0<a href=\"http:\/\/localhost:5000\/v2\/_catalog\">http:\/\/localhost:5000\/v2\/_catalog<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"230\" width=\"230\">\n<p align=\"left\">cgroupDriver mismatch<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412 \u0444\u0430\u0439\u043b\u0435\u00a0\/var\/lib\/kubelet\/config.yaml\u00a0\u0443\u043a\u0430\u0436\u0438\u0442\u0435\u00a0cgroupDriver: systemd<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0433\u0438<\/h2>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th data-colwidth=\"246\" width=\"246\">\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong><\/p>\n<\/th>\n<th>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td data-colwidth=\"246\" width=\"246\">\n<p align=\"left\">\u041e\u0448\u0438\u0431\u043a\u0430\u00a0NO_PUBKEY<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u043b\u044e\u0447:\u00a0sudo apt-key adv &#8212;keyserver\u00a0<a href=\"http:\/\/keyserver.ubuntu.com\">keyserver.ubuntu.com<\/a>\u00a0&#8212;recv-keys &lt;KEY&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"246\" width=\"246\">\n<p align=\"left\">\u041e\u0448\u0438\u0431\u043a\u0430\u00a0ImagePull<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b:\u00a0docker images<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"246\" width=\"246\">\n<p align=\"left\">\u041d\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 firewall:\u00a0ufw allow 6443,2379-2380,10250-10255\/tcp<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042d\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u0430\u00a0\u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f:<\/p>\n<ul>\n<li>\n<p>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0443\u0442\u0438\u043d\u0443,<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u0440\u0430\u0435\u0432\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438,<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u00ab\u0443\u043c\u043d\u044b\u0435\u00bb \u043f\u043e\u0432\u0442\u043e\u0440\u044b,<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u0451\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0447\u0435\u0440\u0435\u0437 \u0446\u0432\u0435\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c Kubernetes, \u0441\u043b\u0435\u0434\u0443\u044f \u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c. \u0410\u00a0\u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043e\u043f\u044b\u0442\u00a0\u2014 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u043e\u0434\u00a0\u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/897102\/\"> https:\/\/habr.com\/ru\/articles\/897102\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e\u00a0\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c Kubernetes \u0431\u0435\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e kubeadm init \u043f\u043b\u044e\u0441 \u043f\u0430\u0440\u0430 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0447\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0441\u0451?<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 DevOps\u00a0\u2014 \u043d\u0435\u00a0\u0442\u043e\u0442, \u043a\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0430\u00a0\u0442\u043e\u0442, \u043a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c production\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u00a0\u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0439 \u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 3G\u2011\u043c\u043e\u0434\u0435\u043c,<\/p>\n<\/li>\n<li>\n<p>\u0432\u00a0\u043f\u043e\u0434\u0432\u0430\u043b\u0435 \u0431\u0430\u043d\u043a\u0430 \u0441\u00a0\u0436\u0435\u043b\u0435\u0437\u043e\u0431\u0435\u0442\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b\u00a0\u2014 \u0432\u0430\u0448 \u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u0439 \u043d\u043e\u0436 \u0434\u043b\u044f\u00a0Kubernetes \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 apt\u2011get update\u00a0\u2014 \u044d\u0442\u043e \u0440\u043e\u0441\u043a\u043e\u0448\u044c. \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u0438\u043b \u041c\u0438\u0440\u043e\u043d\u044e\u043a, DevOps \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435 Polymatica EPM. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Kubernetes\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>1. \u0410\u043d\u0441\u0438\u0431\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0442\u0440\u044e\u043a \u0431\u0435\u0437 \u0410\u043d\u0441\u0438\u0431\u043b\u0430: \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u043c\u0438<\/h2>\n<p><strong>\u0427\u0442\u043e\u00a0\u0441\u0434\u0435\u043b\u0430\u043d\u043e: <\/strong>\u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u00a0\u2014 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0440\u0432\u0435\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u00a0\u043f\u043e\u043b\u043f\u0443\u0442\u0438, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441\u00a0\u0447\u0438\u0441\u0442\u043e\u0433\u043e\u00a0\u043b\u0438\u0441\u0442\u0430.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f cleanup() \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u2014 \u043e\u043d\u0430 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0448\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435:<\/p>\n<pre><code class=\"bash\"># \u0416\u0451\u0441\u0442\u043a\u0438\u0439 reset \u0434\u043b\u044f etcd (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 kubeadm \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f) sudo find \/var\/lib\/etcd\/ -mindepth 1 -delete  # \u0414\u0440\u0430\u043a\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 sudo ip link delete cni0 2&gt;\/dev\/null || true sudo ip link delete flannel.1 2&gt;\/dev\/null || true<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e: <\/strong>\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0440\u0430\u0437 \u043d\u0430 \u00ab\u0433\u0440\u044f\u0437\u043d\u043e\u0439\u00bb \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0437 Ansible.<\/p>\n<h2>2. \u0422\u0430\u043d\u0446\u044b \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438: \u043a\u0430\u043a \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c dependency hell \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0441\u0440\u0435\u0434\u0435<\/h2>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430:<\/strong> \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 apt\u2011get install \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0440\u0435\u0436\u0438\u043c\u0435\u00a0\u2014 \u044d\u0442\u043e \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u0440\u0443\u043b\u0435\u0442\u043a\u0430 \u0441\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430: <\/strong>\u0436\u0451\u0441\u0442\u043a\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f:<\/p>\n<pre><code class=\"bash\"># \u041d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e cri-o, \u043d\u043e \u0438 \u0435\u0433\u043e \u043b\u0438\u0431\u044b \u0441 \u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 sudo -u _apt apt-get download \\     cri-o=1.24.0~rc2-1.1 \\     cri-o-runc=1.24.0~rc2-1.1 \\     containernetworking-plugins=1.4.0-1.1<\/code><\/pre>\n<p><strong>\u0424\u0438\u0448\u043a\u0430:<\/strong> c\u043a\u0440\u0438\u043f\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 conntrack=1:1.4.6\u20132\u00a0\u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c kube\u2011proxy.<\/p>\n<h2>3. Registry \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442: \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448 \u043e\u0431\u0440\u0430\u0437 \u2014 \u044d\u0442\u043e .tar<\/h2>\n<p><strong>\u041b\u0430\u0439\u0444\u0445\u0430\u043a:<\/strong> \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b\u00a0\u2014 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\"># \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0430\u043c registry \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0437 sudo docker save -o \/opt\/offline\/images\/registry.tar registry:2  # \u041d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435:  docker load -i registry.tar docker run -v \/opt\/offline\/images\/registry:\/var\/lib\/registry ...<\/code><\/pre>\n<p><strong>\u0417\u0430\u0447\u0435\u043c:<\/strong> \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0430\u0448 registry\u00a0\u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b? \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435.tar\u2011\u0444\u0430\u0439\u043b.<\/p>\n<h2>4. kubeadm hack: \u041f\u043e\u0434\u043c\u0435\u043d\u0430 imageRepository \u0434\u043e\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p><strong>\u041c\u0430\u0433\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">apiVersion: kubeadm.k8s.io\/v1beta3 imageRepository: localhost:5000<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c:<\/strong><\/p>\n<ol>\n<li>\n<p>kubeadm \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u044f\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0437 <a href=\"http:\/\/registry.k8s.io\/kube-apiserver:v1.30.9\">registry.k8s.io\/kube\u2011apiserver:v1.30.9<\/a><\/p>\n<\/li>\n<li>\n<p>containerd \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 registry \u0447\u0435\u0440\u0435\u0437 mirror<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437\u00a0\u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u041d\u043e\u0443\u2011\u0445\u0430\u0443: <\/strong>\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437\u00a0\u043f\u0440\u0430\u0432\u043a\u0438 \/etc\/containerd\/config.toml\u00a0\u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 kubeadm.<\/p>\n<h2>5. Retry-\u043b\u043e\u0433\u0438\u043a\u0430: \u041a\u043e\u0433\u0434\u0430 etcd \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u00ab\u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f\u00bb<\/h2>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 kubeadm init\u00a0\u2014 \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u00a0\u0443\u043c\u043e\u043c:<\/p>\n<pre><code class=\"bash\">init_cluster() {     for i in {1..3}; do         cleanup         if kubeadm init ...; then             return 0         else             sleep $((i*10))  # \u042d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f backoff-\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430         fi     done }<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a:<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f etcd \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432. 10\u201320\u201330\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u00a0\u2014 \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0443\u043c.<\/p>\n<h2>6. CRI-O \u0432\u043c\u0435\u0441\u0442\u043e Docker: \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430<\/h2>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 CRI\u2011O:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043d\u0430 40% \u043c\u0435\u043d\u044c\u0448\u0435 RAM \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043d\u043e\u0434\u0435,<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043e\u0432 \u0437\u0430 120\u00a0ms \u0432\u043c\u0435\u0441\u0442\u043e 200\u00a0ms \u0443\u00a0Docker,<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0Kubernetes \u0431\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041d\u043e\u00a0\u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435:<\/strong><\/p>\n<pre><code class=\"bash\"># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 sudo dpkg -i cri-o_1.24*.deb cri-o-runc_1.24*.deb<\/code><\/pre>\n<p><strong>\u0424\u0438\u0448\u043a\u0430:<\/strong> \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e CRI\u2011O, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0442\u0435\u0441\u0442\u044b \u0441\u00a0k8s 1.30.9\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e.<\/p>\n<h2>7. \u0422\u0440\u044e\u043a \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438: \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b overlay \u0438 br_netfilter<\/h2>\n<p><strong>\u041d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo modprobe br_netfilter echo 1 &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u044d\u0442\u043e \u0434\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438,<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0443 Network Policies \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435 iptables,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0CNI \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 Calico.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0430\u0436\u043d\u043e: <\/strong>\u0431\u0435\u0437\u00a0\u044d\u0442\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432\u0430\u0448 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e\u00a0\u0441\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.<\/p>\n<h2>8. Security-first \u043f\u043e\u0434\u0445\u043e\u0434: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438<\/h2>\n<p><strong>\u0427\u0442\u043e\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u00a0\u043a\u0443\u043b\u0438\u0441\u0430\u043c\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 registry \u043a\u0430\u043a\u00a0\u043d\u0435\u2011root \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c,<\/p>\n<\/li>\n<li>\n<p>\u0438\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0447\u0435\u0440\u0435\u0437 AppArmor\u2011\u043f\u0440\u043e\u0444\u0438\u043b\u0438,<\/p>\n<\/li>\n<li>\n<p>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 seccomp \u0434\u043b\u044f\u00a0kubelet.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u0430\u043a:<\/strong> \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b systemd \u0434\u043b\u044f\u00a0CRI\u2011O:<\/p>\n<pre><code class=\"bash\">[Service] ExecStartPre=\/sbin\/apparmor_parser -r \/etc\/apparmor.d\/crio-default<\/code><\/pre>\n<h2>9. Multi-Cloud \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e<\/h2>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439:<\/strong> \u0432\u0430\u0448 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c\u044e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u043a\u0430.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0432\u0441\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u0443\u0436\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e registry,<\/p>\n<\/li>\n<li>\n<p>CNI \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 BGP (Calico),<\/p>\n<\/li>\n<li>\n<p>\u0432\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445 \u043d\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a\u00a0IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u044b \u0432\u00a0\u043b\u044e\u0431\u043e\u0439 registry,<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c IP\u2011\u043f\u0443\u043b\u044b \u0432\u00a0Calico \u0447\u0435\u0440\u0435\u0437 calicoctl.<\/p>\n<\/li>\n<\/ul>\n<h2>10. Hidden Feature: \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Chaos Monkey<\/h2>\n<p><strong>\u0414\u043b\u044f\u00a0\u0441\u043c\u0435\u043b\u044b\u0445:<\/strong> \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435:<\/p>\n<pre><code class=\"bash\"># chaos_monkey() { kill -9 $(ps aux | grep kubelet | awk '{print $2}') }<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u0431\u0443\u0434\u0435\u0442:<\/strong> \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u00ab\u0443\u0431\u0438\u0432\u0430\u0435\u0442\u00bb kubelet \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0441\u0430\u043c\u043e\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043e\u0431\u043b\u0430\u043a\u0430?<\/h2>\n<p><strong>\u0426\u0438\u0444\u0440\u044b:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\"><strong>\u042d\u0442\u0430\u043f<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>\u041e\u043d\u043b\u0430\u0439\u043d (\u0441\u0435\u043a)<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>\u041e\u0444\u0444\u043b\u0430\u0439\u043d (\u0441\u0435\u043a)<\/strong><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">120<\/p>\n<\/td>\n<td>\n<p align=\"left\">45 (\u0438\u0437 .deb)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">300<\/p>\n<\/td>\n<td>\n<p align=\"left\">20 (\u0438\u0437 .tar)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">90<\/p>\n<\/td>\n<td>\n<p align=\"left\">110<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u00a0<strong>\u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>\u00a0\u0432 2 \u0438\u0437 3 \u044d\u0442\u0430\u043f\u043e\u0432 \u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f: \u0442\u043e\u043f-3 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043a\u0435\u0439\u0441\u0430<\/h2>\n<ol>\n<li>\n<p><strong>\u0421\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 NTP: <\/strong>\u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043d\u043e\u0434\u0430\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f &gt;30\u00a0\u0441\u0435\u043a\u00a0\u2014 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b etcd \u0441\u0442\u0430\u043d\u0443\u0442 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438.<br \/><strong>\u0424\u0438\u043a\u0441:<\/strong> timedatectl set\u2011ntp true \u0434\u043e\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Zombie\u2011\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b CRI\u2011O:<\/strong> \u0438\u043d\u043e\u0433\u0434\u0430 crictl \u043d\u0435\u00a0\u0432\u0438\u0434\u0438\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b.<br \/><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo systemctl reset-failed crio sudo rm -f \/var\/lib\/crio\/*.lock<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>\u0411\u0438\u0442\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 pause:<\/strong> \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 pause:3.9\u00a0\u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u00a0\u2014 \u0432\u0441\u0435 \u043f\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u00a0CrashLoop.<br \/><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/strong><\/p>\n<pre><code class=\"bash\">sudo crictl inspecti localhost:5000\/pause:3.9 | jq .status<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2>\u041a\u0443\u0434\u0430 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f: Roadmap \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<ul>\n<li>\n<p><strong>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Air-Gapped GitOps:<\/strong> \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Argo CD \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c Git-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>GPU Passthrough:<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 nvidia-container-runtime.<\/p>\n<\/li>\n<li>\n<p><strong>FIPS-\u0440\u0435\u0436\u0438\u043c:<\/strong> \u0441\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Kubernetes \u0441 FIPS-\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u043a\u0440\u0438\u043f\u0442\u043e-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>Zero-Trust Security:<\/strong> \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 SPIFFE \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<h4>1. \u0423\u043c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u0430\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u0439. \u042d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\"># \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Kubernetes sudo \u2011u _apt apt\u2011get download kubelet=1.30.9\u20131.1\u00a0kubeadm=1.30.9\u20131.1<\/code><\/pre>\n<p><strong>\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p>sudo \u2011u _apt\u00a0\u2014 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0432\u00a0Debian\/Ubuntu.<\/p>\n<\/li>\n<li>\n<p>apt\u2011get download\u00a0\u2014 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435.deb\u2011\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0431\u0435\u0437\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>=1.30.9\u20131.1\u00a0\u2014 \u0436\u0451\u0441\u0442\u043a\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>2. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u043e\u0431\u0440\u0430\u0437\u043e\u0432: \u0442\u0440\u044e\u043a \u0441 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441\u00a0\u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u0442\u0435\u0433\u043e\u0432:<\/p>\n<pre><code class=\"bash\"># \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430 sudo docker tag registry.k8s.io\/kube-apiserver:v1.30.9 localhost:5000\/kube-apiserver:v1.30.9  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 sudo docker push localhost:5000\/kube-apiserver:v1.30.9<\/code><\/pre>\n<p><strong>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e: <\/strong>Kubernetes \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0449\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u0432 <a href=\"http:\/\/registry.k8s.io\/\">registry.k8s.io<\/a>. \u041c\u044b \u00ab\u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0435\u043c\u00bb \u0435\u0433\u043e, \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u044f \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u00a0localhost:5000, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430\u0448\u0438 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u043e\u0431\u0440\u0430\u0437\u044b.<\/p>\n<h4>3. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u00ab\u0430\u0442\u043e\u043c\u043d\u0443\u044e\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">cleanup() {     echo \"\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b...\"     sudo kubeadm reset -f     sudo rm -rf \/etc\/kubernetes\/*     sudo rm -rf \/var\/lib\/etcd\/*     # ...\u0438 \u0435\u0449\u0451 15 \u0441\u0442\u0440\u043e\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f! }<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u00a0\u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043d\u0444\u0438\u0433\u0438 Kubernetes,<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u043d\u043d\u044b\u0435 etcd (\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430),<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 CNI,<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0430\u0436\u043d\u043e:<\/strong> \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0447\u0438\u0441\u0442\u043e\u0433\u043e\u00a0\u043b\u0438\u0441\u0442\u0430.<\/p>\n<h4>4. \u0422\u0440\u044e\u043a \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u044f\u0434\u0440\u0430<\/h4>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b Kubernetes \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 Linux. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b cat &lt;&lt;EOF | sudo tee \/etc\/modules-load.d\/k8s.conf overlay br_netfilter EOF  # \u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 sudo modprobe overlay sudo modprobe br_netfilter<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f\u00a0\u0447\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>overlay\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438,<\/p>\n<\/li>\n<li>\n<p>br_netfilter\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>5. \u0423\u043c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c\u0438<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 3\u00a0\u0440\u0430\u0437\u0430 \u0441\u00a0\u043f\u0430\u0443\u0437\u0430\u043c\u0438\u00a0\u2014 \u043a\u0430\u043a\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 DevOps!<\/p>\n<pre><code class=\"bash\">init_cluster() {     local attempt=1     while [ $attempt -le 3 ]; do         if sudo kubeadm init ...; then             return 0         else             echo \"\u041f\u043e\u043f\u044b\u0442\u043a\u0430 #$attempt\"             sleep 30             ((attempt++))         fi     done     return 1 }<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e:<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, etcd) \u043c\u043e\u0433\u0443\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439.<\/p>\n<h2>\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<h4>1. \u0426\u0432\u0435\u0442\u043d\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0446\u0432\u0435\u0442\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">RED='\\033[0;31m' GREEN='\\033[0;32m' echo -e \"${RED}\u041e\u0448\u0438\u0431\u043a\u0430!${NC} \u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.\"<\/code><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0446\u0432\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430<\/figcaption><\/div>\n<\/figure>\n<p>(\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0440\u0430\u0441\u043d\u044b\u0435\/\u0437\u0435\u043b\u0451\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f)<\/p>\n<h4>2. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0440\u0442\u043e\u0432<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435\u00a0\u0437\u0430\u043d\u044f\u0442\u044b\u00a0\u043b\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">PORTS=(10250 10251 10252 2379 2380 6443) for port in \"${PORTS[@]}\"; do     if sudo lsof -i :$port; then         echo \"\u0423\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 $port\"         sudo kill -9 $(sudo lsof -ti :$port)     fi done<\/code><\/pre>\n<p><strong>\u041a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>6443\u00a0\u2014 API Kubernetes<\/p>\n<\/li>\n<li>\n<p>2379\/2380\u00a0\u2014 etcd<\/p>\n<\/li>\n<li>\n<p>10\u00a0250\u201310\u00a0252\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b kubelet<\/p>\n<\/li>\n<\/ul>\n<h4>3. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 CRI-O<\/h4>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u00a0\u0432\u0435\u0440\u0441\u0438\u044e \u041e\u0421:<\/p>\n<pre><code class=\"bash\">export OS=Debian_11  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 export VERSION=1.24 echo \"deb http:\/\/...\/cri-o:\/$VERSION\/$OS\/\" | sudo tee ...<\/code><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e:<\/strong> \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f\u00a0Ubuntu\/RHEL, \u043f\u043e\u043c\u0435\u043d\u044f\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<h2>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0435\u0442\u044c \u0432 Kubernetes: \u043c\u0430\u0433\u0438\u044f Calico<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"bash\">kubectl apply -f \/opt\/offline\/manifests\/calico.yaml<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 calico.yaml:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-455520","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455520","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=455520"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455520\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=455520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=455520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=455520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}