update help elma
This commit is contained in:
@ -1,20 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Отказоустойчивый Kubernetes-кластер</title>
|
||||
<title>High-availability Kubernetes cluster</title>
|
||||
<meta name="generator" content="Help+Manual" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Deckhouse — это полнофункциональная платформа на базе Open Source-компонентов, которая, кроме Kubernetes, включает дополнительные модули для мониторинга, балансировки трафика,..." />
|
||||
<meta name="description" content="Deckhouse is a full-featured platform based on Open Source components that, in addition to Kubernetes, includes additional modules for monitoring, traffic balancing,..." />
|
||||
<meta name="picture" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Cправка по Low-code платформе ELMA365" />
|
||||
<meta property="og:url" content="https://elma365.com/ru/help" />
|
||||
<meta property="og:image" content="" />
|
||||
<meta property="og:site_name" content="ELMA365" />
|
||||
<meta property="og:title" content="Full documentation for BRIX365 platform. Low-code developer guide. User guide. Admin guide. Developer guide." />
|
||||
<meta property="og:url" content="https://brix365.com/en/help" />
|
||||
<meta property="og:image" content="" />
|
||||
<link rel="icon" href="favicon.png" type="image/png" />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||||
@ -24,7 +23,6 @@
|
||||
<link rel="stylesheet" href="./article.css" />
|
||||
<link rel="stylesheet" href="./glossary.css" />
|
||||
<link rel="stylesheet" href="./theme.css" />
|
||||
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="helpman_settings.js"></script>
|
||||
<script type="text/javascript" src="helpman_topicinit.js"></script>
|
||||
@ -36,16 +34,16 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M6ETBEC1R9"></script><script>window.dataLayer=window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag('js', new Date()); gtag('config', 'G-M6ETBEC1R9');</script>
|
||||
|
||||
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
|
||||
|
||||
<header class="header elma-365">
|
||||
<div class="container">
|
||||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||||
<img src="./logo.svg" alt="header logo">
|
||||
<a class="header__logo" href="https://brix365.com/en/help">
|
||||
<img src="./logo-en.svg" alt="header logo">
|
||||
</a>
|
||||
<!-- <div class="hero__search-form" id="search-panel">
|
||||
<form class="search-form" onsubmit="ym(83179930,'reachGoal','poisk')">
|
||||
<form class="search-form" onsubmit="ym(83180416,'reachGoal','poisk')">
|
||||
<label class="search-form__label">
|
||||
<span id="reset-search" class="search__icon"></span>
|
||||
<input class="search-form__input" type="text">
|
||||
@ -65,7 +63,7 @@
|
||||
</div>
|
||||
<div class="header__navi">
|
||||
|
||||
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a class="project-link" href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li><li><a class="project-link" href="https://elma365.com/ru/help/business_solutions/-elma365-store.html">Бизнес-решения</a></li></ul></span></li><li><a href="https://api.elma365.com/ru/"target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/"target="_blank">SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/" target="_blank">Академия</a></li><li><a href="https://elma365.com/ru/" target="_blank">Сайт ELMA365</a></li></ul>
|
||||
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a class="project-link" href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://brix365.com/en/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li><li><a class="project-link" href="https://brix365.com/en/help/business_solutions/-elma365-store.html">Business Solutions</a></li></ul></span></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li><li><a href="https://tssdk.brix365.com/" target="_blank">SDK</a></li></ul>
|
||||
|
||||
|
||||
</div>
|
||||
@ -80,8 +78,8 @@
|
||||
|
||||
<aside class="sidebar" id="sidebar">
|
||||
<div class="sidebar__header">
|
||||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||||
<img src="./logo-light.svg">
|
||||
<a class="header__logo" href="https://brix365.com/en/help">
|
||||
<img src="./logo-light-en.svg">
|
||||
</a>
|
||||
<span class="sidebar__close elma-365-close" id="close"></span>
|
||||
</div>
|
||||
@ -94,15 +92,15 @@
|
||||
<div class="article-inner">
|
||||
<div class="content">
|
||||
<header class="article__header">
|
||||
<div class="article__bread" style="display:flex; gap:10px;">
|
||||
<div class="article__bread" style="display:flex; gap:10px;">
|
||||
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
|
||||
|
||||
<div class="topic__breadcrumbs">
|
||||
<p><a href="elma365-on-premises.html">ELMA365 On-Premises</a> > <a href="infrastructure-preparation.html">Подготовка инфраструктуры</a> > Kubernetes / Отказоустойчивый Kubernetes-кластер</p>
|
||||
<p><a href="elma365-on-premises.html">BRIX On-Premises</a> > <a href="infrastructure-preparation.html">Prepare infrastructure</a> > Kubernetes / High-availability Kubernetes cluster</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Отказоустойчивый Kubernetes-кластер</span></h1>
|
||||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">High-availability Kubernetes cluster</span></h1>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@ -111,43 +109,43 @@
|
||||
<a href="#h1-article" class="scroll-top"></a>
|
||||
</div>
|
||||
<!-- Placeholder for topic body. -->
|
||||
<p class="p_Normal"><a href="https://deckhouse.ru/" target="_blank" class="weblink">Deckhouse</a> — это полнофункциональная платформа на базе Open Source-компонентов, которая, кроме Kubernetes, включает дополнительные модули для мониторинга, балансировки трафика, автомасштабирования, безопасного доступа и не только. Модули преднастроены, интегрированы друг с другом и готовы к работе. Управление всеми компонентами кластера и платформы, а также их обновление полностью автоматизированы. </p>
|
||||
<p class="p_Normal">Deckhouse <a href="https://reestr.digital.gov.ru/reestr/490559/" target="_blank" class="weblink">в реестре российского ПО</a> и <a href="https://landscape.cncf.io/?view-mode=card&classify=category&sort-by=name&sort-direction=asc&item=platform--certified-kubernetes-distribution--flant-deckhouse#app-definition-and-development--application-definition-image-build%20" target="_blank" class="weblink">сертифицирован в CNCF</a>.</p>
|
||||
<p class="p_Normal">Установка состоит из следующих этапов:</p>
|
||||
<p class="p_Normal"><a href="https://deckhouse.io/" target="_blank" class="weblink">Deckhouse</a> is a full-featured platform based on Open Source components that, in addition to Kubernetes, includes additional modules for monitoring, traffic balancing, autoscaling, secure access, and more. The modules are pre-configured, integrated with each other, and ready to use. Management of all cluster components and the platform, as well as their updates, are fully automated.</p>
|
||||
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Deckhouse is <a href="https://landscape.cncf.io/card-mode?category=certified-kubernetes-distribution,certified-kubernetes-hosted,certified-kubernetes-installer&grouping=category&selected=flant-deckhouse" target="_blank" class="weblink">certified by CNCF</a>.</span></p>
|
||||
<p class="p_Normal">The installation consists of the following steps: </p>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">Архитектура кластера Kubernetes</a>.</li><li value="2" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#system-requirements" class="topiclink">Рекомендуемые системные требования</a>.</li><li value="3" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#preparation-config-file" class="topiclink">Подготовка конфигурационного файла</a>.</li><li value="4" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#installation" class="topiclink">Установка Kubernetes-кластера на базе Deckhouse</a>.</li><li value="5" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-frontend-nodes" class="topiclink">Добавление frontend-узлов</a>.</li><li value="6" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-system-nodes" class="topiclink">Добавление system-узлов</a>.</li><li value="7" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-worke-nodes" class="topiclink">Добавление worker-узлов</a>.</li><li value="8" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-master-nodes" class="topiclink">Добавление master-узлов</a>.</li><li value="9" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-local-path-provisioner" class="topiclink">Добавление Local Path Provisioner</a>.</li><li value="10" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-balancer" class="topiclink">Добавление балансировщика OpenELB - VIP</a>.</li><li value="11" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-ingress-nginx-controller" class="topiclink">Добавление Ingress Nginx Controller - LoadBalancer</a>.</li><li value="12" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-user" class="topiclink">Добавление пользователя для доступа к веб-интерфейсу кластера</a>.</li><li value="13" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#load-privileges" class="topiclink">Привилегии запускаемых нагрузок</a>.</li><li value="14" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#installation-helm" class="topiclink">Установка HELM</a>.</li></ol>
|
||||
<h2 class="p_Heading2"><a id="cluster-architecture" class="hmanchor"></a><span class="f_Heading2">Шаг 1. Архитектура кластера Kubernetes</span></h2>
|
||||
<p class="p_Normal">В рамках статьи рассматривается внедрение инфраструктуры отказоустойчивого кластера Kubernetes на базе платформы Deckhouse.</p>
|
||||
<li value="1" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">Kubernetes cluster architecture</a>.</li><li value="2" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#system-requirements" class="topiclink">Recommended system requirements</a>.</li><li value="3" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#preparation-config-file" class="topiclink">Preparation of the configuration file</a>.</li><li value="4" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#installation" class="topiclink">Installation of Kubernetes cluster based on Deckhouse</a>.</li><li value="5" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-frontend-nodes" class="topiclink">Adding frontend nodes</a>.</li><li value="6" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-system-nodes" class="topiclink">Adding system nodes</a>.</li><li value="7" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-worke-nodes" class="topiclink">Adding worker nodes</a>.</li><li value="8" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-master-nodes" class="topiclink">Adding master nodes</a>.</li><li value="9" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-local-path-provisioner" class="topiclink">Adding Local Path Provisioner</a>.</li><li value="10" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-balancer" class="topiclink">Adding OpenELB load balancer - VIP</a>.</li><li value="11" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-ingress-nginx-controller" class="topiclink">Adding Ingress Nginx Controller - LoadBalancer</a>.</li><li value="12" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#addition-user" class="topiclink">Adding a user for access to the cluster web interface</a>.</li><li value="13" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#pivileges" class="topiclink">Privileges of the launched loads</a>.</li><li value="14" class="p_Normal"><a href="fail-safe-kubernetes-cluster.html#installation-helm" class="topiclink">Install Helm</a>.</li></ol>
|
||||
<h2 class="p_Heading2"><a id="cluster-architecture" class="hmanchor"></a><span class="f_Heading2">Step 1: Kubernetes cluster architecture</span></h2>
|
||||
<p class="p_Normal">This article describes the implementation of an infrastructure for a high-availability Kubernetes cluster based on the Deckhouse platform.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Структура Kubernetes-кластера.</li></ol>
|
||||
<p class="p_Normal" style="margin: 0 0 0 37px;"><img alt="fail-safe-kubernetes-cluster-1" width="1042" height="450" style="margin:0;width:1042px;height:450px;border:none" src="fail-safe-kubernetes-cluster-1.png"/></p>
|
||||
<p class="p_Normal">Чтобы развернуть минимальную структуру Kubernetes-кластера на базе платформы Deckhouse, потребуются:</p>
|
||||
<li value="1" class="p_Normal">Structure of the Kubernetes cluster.</li></ol>
|
||||
<p class="p_Normal"><img alt="fail-safe-kubernetes-cluster-1" width="1042" height="450" style="margin:0;width:1042px;height:450px;border:none" src="fail-safe-kubernetes-cluster-1.png"/></p>
|
||||
<p class="p_Normal">To deploy a minimal structure of a Kubernetes cluster based on the Deckhouse platform, you will need:</p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">персональный компьютер;</li><li class="p_Normal">master-узел — три ноды;</li><li class="p_Normal">worker-узел — три ноды;</li><li class="p_Normal">system-узел — две ноды;</li><li class="p_Normal">frontend-узел — две ноды.</li></ul>
|
||||
<p class="p_Normal">В рассматриваемом примере web‑трафик от пользователей поступает на виртуальный IP‑адрес 192.168.1.13, размещённый на frontend-нодах. Шаблон доменного имени для доступа к web-сервисам платформы Deckhouse выберите <span style="font-weight: bold;">%s.example.com</span>.</p>
|
||||
<p class="p_Normal">Deckhouse автоматически настраивает и управляет узлами кластера и его компонентами <span style="font-weight: bold;">control plane</span>, постоянно поддерживая их актуальную конфигурацию. При развёртывании master-узлов автоматически создаются все необходимые компоненты для <span style="font-weight: bold;">control plane</span> с помощью модуля <a href="https://deckhouse.ru/documentation/latest/modules/040-control-plane-manager/" target="_blank" class="weblink">control-plane-manager</a>.</p>
|
||||
<p class="p_Normal">Deckhouse создаёт сущности Kubernetes по мере необходимости и так же их удаляет. Например, если в вашем кластере нет frontend-нод и с master-нод не снято ограничение <span style="font-weight: bold;">taint</span>, вы не сможете установить <span style="font-weight: bold;">IngressNginxController</span>. В кластере будут отсутствовать необходимые сущности, как <span style="font-weight: bold;">ingressClass</span> и так далее. При добавлении system-нод Deckhouse автоматически развернёт компоненты мониторинга и web-сервисы для доступа к интерфейсу платформы. Web-сервисы автоматически привяжутся на <span style="font-weight: bold;">%s.example.com</span>.</p>
|
||||
<li class="p_Normal">A personal computer.</li><li class="p_Normal">Three nodes for the master node.</li><li class="p_Normal">Three nodes for the worker node.</li><li class="p_Normal">Two nodes for the system node.</li><li class="p_Normal">Two nodes for the frontend node.</li></ul>
|
||||
<p class="p_Normal">In the example considered, web traffic from users arrives at the virtual IP address 192.168.1.13, hosted on frontend nodes. Choose the domain name template for accessing web services of the Deckhouse platform as <span style="font-weight: bold;">%s.example.com</span></p>
|
||||
<p class="p_Normal">Deckhouse automatically configures and manages the cluster nodes and its control plane components, constantly maintaining their up-to-date configuration. When deploying master nodes, all necessary components for the control plane are automatically created using the <a href="https://deckhouse.io/documentation/latest/modules/040-control-plane-manager/" target="_blank" class="weblink">control-plane-manager</a> module.</p>
|
||||
<p class="p_Normal">Deckhouse creates and deletes Kubernetes entities as needed. For example, if your cluster has no frontend nodes and the master nodes have not had the <span style="font-weight: bold;">taint</span> restriction removed, you will not be able to install <span style="font-weight: bold;">IngressNginxController</span>. Necessary entities such as <span style="font-weight: bold;">ingressClass</span> and so on will be missing from the cluster. When adding system nodes, Deckhouse will automatically deploy monitoring components and web services for accessing the platform interface. Web services will automatically bind to <span style="font-weight: bold;">%s.example.com</span>.</p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Загрузка образов Deckhouse в локальный реестр образов.</li></ol>
|
||||
<p class="p_Normal">Кластер Kubernetes с помощью Deckhouse можно развернуть в закрытом окружении, из которого нет доступа в интернет. Для этого предварительно скачайте на компьютере с доступом в интернет образы платформы Deckhouse и загрузите их в локальный реестр образов. Подробнее читайте в статье <a href="downloading-images-deckhouse.html" class="topiclink">«Загрузка образов Deckhouse»</a>.</p>
|
||||
<h2 class="p_Heading2"><a id="system-requirements" class="hmanchor"></a><span class="f_Heading2">Шаг 2. Рекомендуемые системные требования</span></h2>
|
||||
<li value="2" class="p_Normal">Load Deckhouse images into the local image registry.</li></ol>
|
||||
<p class="p_Normal">A Kubernetes cluster using Deckhouse can be deployed in a closed environment with no internet access. To do this, download the Deckhouse platform images on a computer with internet access and upload them to the local image registry. Read more in <a href="downloading-images-deckhouse.html" class="topiclink">Download Deckhouse Images</a>.</p>
|
||||
<h2 class="p_Heading2"><a id="system-requirements" class="hmanchor"></a><span class="f_Heading2">Step 2: Recommended system requirements</span></h2>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Персональный компьютер:</li></ol>
|
||||
<li value="1" class="p_Normal">Personal computer:</li></ol>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">ОС: Windows 10+, macOS 10.15+, Linux (Ubuntu 18.04+, Fedora 35+);</li><li class="p_Normal">установленный docker для запуска инсталлятора Deckhouse;</li><li class="p_Normal">доступ до проксирующего registry или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;</li><li class="p_Normal">SSH-доступ по ключу до узла, который будет master-узлом будущего кластера.</li></ul>
|
||||
<li class="p_Normal">ОS: Windows 10+, macOS 10.15+, Linux (Ubuntu 18.04+, Fedora 35+).</li><li class="p_Normal">Installed Docker to run the Deckhouse installer.</li><li class="p_Normal">Access to a proxy registry or a private container image repository with Deckhouse container images.</li><li class="p_Normal">SSH key-based access to the node that will become the master node of the future cluster.</li></ul>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Ноды Kubernetes:</li></ol>
|
||||
<li value="2" class="p_Normal">Kubernetes nodes:</li></ol>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><a href="https://deckhouse.ru/documentation/v1/supported_versions.html" target="_blank" class="weblink">поддерживаемая ОС</a>;</li><li class="p_Normal">конфигурация нод:</li></ul>
|
||||
<div style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<li class="p_Normal"><a href="https://deckhouse.io/documentation/v1/supported_versions.html" target="_blank" class="weblink">Supported OS</a>.</li><li class="p_Normal">Node configuration:</li></ul>
|
||||
<div style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">Наименование</span></p>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">Name</span></p>
|
||||
</td>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">vCPU</span></p>
|
||||
</td>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">RAM (GB)</span></p>
|
||||
</td>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">Жесткий диск (GB)</span></p>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">HDD (GB)</span></p>
|
||||
</td>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;"><span style="font-weight: bold;">LAN (Gbit/s)</span></p>
|
||||
</td>
|
||||
@ -203,31 +201,28 @@
|
||||
</table>
|
||||
</div>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">доступ до проксирующего <span style="font-weight: bold;">registry</span> или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;</li></ul>
|
||||
<li class="p_Normal">Access to a proxy registry or a private container image repository with Deckhouse container images.</li></ul>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало внимание</span></p>
|
||||
<p class="p_Normal">Deckhouse поддерживает работу только с Bearer token схемой авторизации в <span style="font-weight: bold;">registry</span>.</p>
|
||||
<p class="p_Normal">Deckhouse only supports working with Bearer token authentication scheme in the <span style="font-weight: bold;">registry</span>.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец внимание</span></p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal">доступ до прокси-сервера для скачивания deb/rpm-пакетов ОС при необходимости;</li><li class="p_Normal">на узле не должно быть установлено пакетов container runtime, например, containerd или docker.</li></ul>
|
||||
<li class="p_Normal">Access to a proxy server for downloading deb/rpm packages of the OS as needed.</li><li class="p_Normal">The node should not have container runtime packages installed, such as containerd or Docker.</li></ul>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало примечание</span></p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Примечание</span></p>
|
||||
<p class="p_Normal">Установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker. При отсутствии менеджмент узлов установите docker на любой другой ноде будущего кластера, запустите Docker-образ установщика, установите Deckhouse и удалите Docker-образ установщика c ноды вместе с docker.</p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Note</span></p>
|
||||
<p class="p_Normal">Installation directly from the master node is currently not supported. The Docker image installer cannot be run on the same node where the master node is planned to be deployed because there should be no container runtime packages installed on the node, such as containerd or Docker. In the absence of management nodes, install Docker on any other node of the future cluster, run the Docker image installer, install Deckhouse, and remove the Docker image installer from the node along with Docker.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец примечание</span></p>
|
||||
<h2 class="p_Heading2"><a id="preparation-config-file" class="hmanchor"></a><span class="f_Heading2">Шаг 3. Подготовка конфигурационного файла</span></h2>
|
||||
<p class="p_Normal">Чтобы установить Deckhouse, подготовьте YAML-файл конфигурации установки. Для получения YAML-файла конфигурации воспользуйтесь сервисом <a href="https://deckhouse.ru/gs/" target="_blank" class="weblink">Быстрый старт</a> на сайте Deckhouse. Сервис сгенерирует актуальный YAML-файл для текущей версий платформы.</p>
|
||||
<h2 class="p_Heading2"><a id="preparation-config-file" class="hmanchor"></a><span class="f_Heading2">Step 3: Preparation of the configuration file</span></h2>
|
||||
<p class="p_Normal">To install Deckhouse, prepare a YAML configuration file for the installation. To obtain the YAML configuration file, use the the <a href="https://deckhouse.io/gs/" target="_blank" class="weblink">Getting Started</a> service on the Deckhouse website. The service will generate an up-to-date YAML file for the current platform version.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Сгенерируйте YAML-файл сервисом <a href="https://deckhouse.ru/gs/" target="_blank" class="weblink">Быстрый старт</a>, выполнив следующие шаги:</li></ol>
|
||||
<li value="1" class="p_Normal">Generate a YAML file using the <a href="https://deckhouse.io/gs/" target="_blank" class="weblink">Getting Started</a> service by following these steps:</li></ol>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Выберите инфраструктуру — Bare Metal.</li><li value="2" class="p_Normal">Ознакомьтесь с информацией об установке.</li><li value="3" class="p_Normal">Укажите шаблон для DNS-имён кластера. В нашем случае — <span style="font-weight: bold;">%s.example.com</span>.</li><li value="4" class="p_Normal">Сохраните <code><b>config.yml</b></code>.</li></ol>
|
||||
<li value="1" class="p_Normal">Select the infrastructure - Bare Metal.</li><li value="2" class="p_Normal">Review the installation information.</li><li value="3" class="p_Normal">Specify the template for the cluster's DNS names. In our case - <span style="font-weight: bold;">%s.example.com</span>.</li><li value="4" class="p_Normal">Save <code><b>config.yml</b></code>.</li></ol>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Внесите необходимые изменения в <code><b>config.yml</b></code>. Для этого выполните следующие действия:</li></ol>
|
||||
<li value="2" class="p_Normal">Make the necessary changes to <code><b>config.yml</b></code>. To do this, follow these steps:</li></ol>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Задайте адресное пространство подов кластера в <span style="font-weight: bold;">podSubnetCIDR</span>.</li><li value="2" class="p_Normal">Задайте адресное пространство Service’ов кластера в <span style="font-weight: bold;">serviceSubnetCIDR</span>.</li><li value="3" class="p_Normal">Задайте нужную версию Kubernetes в <span style="font-weight: bold;">kubernetesVersion</span>.</li><li value="4" class="p_Normal">Проверьте канал обновления в <span style="font-weight: bold;">releaseChannel</span> (Stable).</li><li value="5" class="p_Normal">Проверьте шаблон доменного имени в <span style="font-weight: bold;">publicDomainTemplate</span> (<span style="font-weight: bold;">%s.example.com</span>).<br />
|
||||
Используется для формирования доменов системных приложений в кластере. Например, Grafana для шаблона <span style="font-weight: bold;">%s.example.com</span> будет доступна, как <span style="font-weight: bold;">grafana.example.com</span>.</li><li value="6" class="p_Normal">Проверьте режим работы модуля cni-flannel в <span style="font-weight: bold;">podNetworkMode</span>.<br />
|
||||
Режим работы flannel, допустимые значения <span style="font-weight: bold;">VXLAN</span> (если ваши сервера имеют связность L3) или <span style="font-weight: bold;">HostGW</span> (для L2-сетей).</li><li value="7" class="p_Normal">Укажите локальную сеть, которую будут использовать узлы кластера в <span style="font-weight: bold;">internalNetworkCIDRs</span>.<br />
|
||||
Список внутренних сетей узлов кластера, например, <code><b>'192.168.1.0/24'</b></code>, который используется для связи компонентов Kubernetes (kube-apiserver, kubelet и т. д.) между собой.</li></ol>
|
||||
<p class="p_Normal">Пример файла первичной конфигурации кластера — <code><b>config.yml</b></code>.</p>
|
||||
<p class="p_Normal">Для установки через интернет:</p>
|
||||
<li value="1" class="p_Normal">Set the Pod network space for the cluster in <span style="font-weight: bold;">podSubnetCIDR</span>.</li><li value="2" class="p_Normal">Set the Service network space for the cluster in <span style="font-weight: bold;">serviceSubnetCIDR</span>.</li><li value="3" class="p_Normal">Specify the desired Kubernetes version in <span style="font-weight: bold;">kubernetesVersion</span>.</li><li value="4" class="p_Normal">Check the update channel in <span style="font-weight: bold;">releaseChannel</span> (Stable).</li><li value="5" class="p_Normal">Check the domain name template in <span style="font-weight: bold;">publicDomainTemplate</span> (%s.example.com).</li><li value="6" class="p_Normal">Used to form domain names for system applications in the cluster. For example, Grafana for the template %s.example.com will be accessible as <span style="font-weight: bold;">grafana.example.com</span>.</li><li value="7" class="p_Normal">Check the operation mode of the cni-flannel module in <span style="font-weight: bold;">podNetworkMode</span>.</li><li value="8" class="p_Normal">Flannel mode, acceptable values are <span style="font-weight: bold;">VXLAN</span> (if your servers have L3 connectivity) or <span style="font-weight: bold;">HostGW</span> (for L2 networks).</li><li value="9" class="p_Normal">Specify the local network that cluster nodes will use in <span style="font-weight: bold;">internalNetworkCIDRs</span>.</li><li value="10" class="p_Normal">A list of internal network ranges, for example <code><b>'192.168.1.0/24'</b></code>, used by cluster nodes for communication between Kubernetes components (kube-apiserver, kubelet, etc.).</li></ol>
|
||||
<p class="p_Normal">Here's an example of a primary cluster configuration file: <code><b>config.yml</b></code>.</p>
|
||||
<p class="p_Normal">For installation via the internet:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: ClusterConfiguration</span><br />
|
||||
<span class="f_CodeExample">clusterType: Static</span><br />
|
||||
@ -252,25 +247,25 @@
|
||||
<span class="f_CodeExample">kind: StaticClusterConfiguration</span><br />
|
||||
<span class="f_CodeExample">internalNetworkCIDRs:</span><br />
|
||||
<span class="f_CodeExample"> - 192.168.1.0/24</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A1')">Для офлайн-установки без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A1')">For offline installation without internet access</a></p>
|
||||
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало внимание</span></p>
|
||||
<p class="p_Normal">Для генерации YAML-файла сервисом <a href="https://deckhouse.ru/gs/" target="_blank" class="weblink">Быстрый старт</a> выберите инфраструктуру — <span style="font-weight: bold;">Закрытое окружение</span>.</p>
|
||||
<p class="p_Normal">To generate the YAML file using the <a href="https://deckhouse.io/gs/" target="_blank" class="weblink">Getting Started</a> service, choose the <span style="font-weight: bold;">Private environment</span> infrastructure.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец внимание</span></p>
|
||||
<p class="p_Normal">Установите следующие параметры в ресурсе <span style="font-weight: bold;">InitConfiguration</span>:</p>
|
||||
<p class="p_Normal">Set the following parameters in the <span style="font-weight: bold;">InitConfiguration</span> resource:</p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><span style="font-weight: bold;">devBranch</span>: если в изолированном приватном репозитории нет образов, содержащих информацию о каналах обновлений, используйте точный тег образа Deckhouse, чтобы установить Deckhouse Platform. Например, если вы хотите установить релиз v1.46.3, используйте образ <code><b>registry.example.com/images/deckhouse/install:v1.46.3</b></code>. Также укажите <code><b>devBranch: v1.46.3</b></code> вместо <code><b>releaseChannel: XXX</b></code>;</li></ul>
|
||||
<li class="p_Normal"><span style="font-weight: bold;">devBranch</span>: If there are no images in the isolated private repository containing information about update channels, use the exact image tag of Deckhouse to install the Deckhouse Platform. For example, if you want to install release v1.46.3, use the image <code><b>registry.example.com/images/deckhouse/install:v1.46.3</b></code>. Also, specify <code><b>devBranch: v1.46.3</b></code> instead of <code><b>releaseChannel: XXX</b></code>;</li></ul>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><span style="font-weight: bold;">imagesRepo</span>: <code><b><PROXY_REGISTRY>/<DECKHOUSE_REPO_PATH>/<DECKHOUSE_REVISION></b></code> — адрес образа Deckhouse в приватном репозитории с учётом используемой редакции. В рамках статьи образы были загружены в <code><b>registry.example.com/images/deckhouse</b></code>. Подробнее читайте в статье <a href="downloading-images-deckhouse.html" class="topiclink">«Загрузка образов Deckhouse»</a>;</li></ul>
|
||||
<li class="p_Normal"><span style="font-weight: bold;">imagesRepo</span>: <code><b><PROXY_REGISTRY>/<DECKHOUSE_REPO_PATH>/<DECKHOUSE_REVISION></b></code> is the address of the Deckhouse image in the private repository, taking into account the edition used. In this article, the images were loaded into <code><b>registry.example.com/images/deckhouse</b></code> Read more in <a href="downloading-images-deckhouse.html" class="topiclink">Download Deckhouse Images</a>.;</li></ul>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryDockerCfg</span>: <code><b><BASE64></b></code> — права доступа к приватному репозиторию, зашифрованные в Base64. Примеры заполнения <span style="font-weight: bold;">registryDockerCfg</span> читайте в официальной документации <a href="https://deckhouse.ru/documentation/v1/deckhouse-faq.html#%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8" target="_blank" class="weblink">Deckhouse Kubernetes Platform</a>. В рамках статьи разрешён анонимный доступ к образам Deckhouse в стороннем <span style="font-weight: bold;">registry</span>. Сформируйте <span style="font-weight: bold;">registryDockerCfg</span>, выполнив следующую команду:</li></ul>
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryDockerCfg</span>: <code><b><BASE64></b></code> — access rights to the private repository, encrypted in Base64. Examples of filling in <span style="font-weight: bold;">registryDockerCfg</span> can be found in the access rights to the private repository, encrypted in Base64. Examples of filling in <span style="font-weight: bold;">registryDockerCfg</span> can be found in the official <a href="https://deckhouse.io/documentation/v1/deckhouse-faq.html" target="_blank" class="weblink">Deckhouse Kubernetes Platform documentation</a>. In this article, anonymous access to Deckhouse images in an external registry is allowed. Generate <span style="font-weight: bold;">registryDockerCfg</span> by executing the following command:. In this article, anonymous access to Deckhouse images in an external registry is allowed. Generate <span style="font-weight: bold;">registryDockerCfg</span> by executing the following command:</li></ul>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo -n "{\"auths\": { \"registry.example.com:443/images/deckhouse\": {}}}" | base64</span></p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryScheme</span>: укажите, по какому протоколу (HTTP, HTTPS) работает приватный репозиторий;</li></ul>
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryScheme</span>: specify the protocol (HTTP or HTTPS) used by the private repository;</li></ul>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryCA</span>: корневой SSL-сертификат, которым можно проверить SSL-сертификат приватного реестра, например, если хранилище использует самоподписанный сертификат. Если вы используете не самоподписанный сертификат или хранилище работает по протоколу HTTP, удалите этот параметр.</li></ul>
|
||||
<p class="p_Normal">Пример файла первичной конфигурации кластера — <code><b>config.yml</b></code>:</p>
|
||||
<li class="p_Normal"><span style="font-weight: bold;">registryCA</span>: oot SSL certificate that can verify the SSL certificate of the private registry, for example, if the storage uses a self-signed certificate. If you are using a non-self-signed certificate or the storage works via the HTTP protocol, remove this parameter.</li></ul>
|
||||
<p class="p_Normal">Example of the initial cluster configuration file, <code><b>config.yml</b></code>:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: ClusterConfiguration</span><br />
|
||||
<span class="f_CodeExample">clusterType: Static</span><br />
|
||||
@ -310,43 +305,42 @@
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<h2 class="p_Heading2"><a id="installation" class="hmanchor"></a><span class="f_Heading2">Шаг 4. Установка Kubernetes-кластера на базе Deckhouse</span></h2>
|
||||
<p class="p_Normal">Установка Deckhouse Platform Community Edition сводится к установке кластера, который состоит из единственного master-узла. Инсталлятор Deckhouse доступен в виде образа контейнера, в который необходимо передать конфигурационные файлы и SSH-ключи доступа на master-узел. Далее подразумевается, что используется SSH-ключ <code><b>~/.ssh/id_rsa</b></code>. В основе инсталлятора лежит утилита <a href="https://github.com/deckhouse/deckhouse/tree/main/dhctl/" target="_blank" class="weblink">dhctl</a>.</p>
|
||||
<h2 class="p_Heading2"><a id="installation" class="hmanchor"></a><span class="f_Heading2">Step 4: Installation of Kubernetes cluster based on Deckhouse</span></h2>
|
||||
<p class="p_Normal">The installation of Deckhouse Platform Community Edition involves setting up a cluster (using a Docker-image-based installer) consisting of a single master node. The Deckhouse installer is available as a container image, which requires the configuration files and SSH keys for accessing the master node. It is assumed that the SSH key used is <code><b>~/.ssh/id_rsa</b></code>. The installer is based on the <a href="https://github.com/deckhouse/deckhouse/tree/main/dhctl/" target="_blank" class="weblink">dhctl</a> utility.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Запустите установщик.</li></ol>
|
||||
<li value="1" class="p_Normal">Start the installer.</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало примечание</span></p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Примечание</span></p>
|
||||
<p class="p_Normal">Установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker.</p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">Note</span></p>
|
||||
<p class="p_Normal">Direct installation from the master node is currently not supported. The installer, in the form of a Docker image, cannot be run on the same node where the master node deployment is planned, as container runtime packages like containerd or docker should not be installed on the node.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец примечание</span></p>
|
||||
<p class="p_Normal">Установщик запускается на персональном компьютере, подготовленном на этапе <a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">архитектура кластера Kubernetes</a>. На ПК перейдите в директорию с файлом конфигурации <code><b>config.yml</b></code>, подготовленным на этапе <a href="fail-safe-kubernetes-cluster.html#preparation-config-file" class="topiclink">подготовка конфигурационного файла</a>.</p>
|
||||
<p class="p_Normal">Для запуска установщика через интернет выполните команду:</p>
|
||||
<p class="p_Normal">The installer is run on a personal computer prepared in the <a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">Kubernetes cluster architecture</a> step. On the PC, navigate to the directory with the configuration file <code><b>config.yml</b></code>, prepared during the <a href="fail-safe-kubernetes-cluster.html#preparation-config-file" class="topiclink">configuration file preparation</a> step.</p>
|
||||
<p class="p_Normal">To launch the installer via the internet:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.io/deckhouse/ce/install:stable bash</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A2')">Для офлайн-установки без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A2" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A2')">For offline installation without internet access</a></p>
|
||||
<div id="TOGGLE0186A2" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal"> <br />
|
||||
Выполните команду:</p>
|
||||
Execute the command:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" example.com:443/images/deckhouse/install:v1.46.3 bash</span></p>
|
||||
<p class="p_Normal"> <br />
|
||||
Где:</p>
|
||||
<p class="p_Normal"><code><b>example.com:443/images/deckhouse/install:v1.46.3</b></code> — версия устанавливаемого релиза.</p>
|
||||
Where <code><b>example.com:443/images/deckhouse/install:v1.46.3</b></code> is the version of the release being installed.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Установите Deckhouse. Для этого внутри контейнера установщика выполните команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Install Deckhouse. Inside the installer container, execute the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">dhctl bootstrap --ssh-user=<username> --ssh-host=<master_ip> --ssh-agent-</span><span class="f_CodeExample" style="font-weight: bold;">private</span><span class="f_CodeExample">-keys=/tmp/.ssh/id_rsa \</span><br />
|
||||
<span class="f_CodeExample">--config=/config.yml \</span><br />
|
||||
<span class="f_CodeExample">--ask-become-pass</span></p>
|
||||
<p class="p_Normal">где:</p>
|
||||
<p class="p_Normal">Where:</p>
|
||||
<ul style="list-style-type:disc">
|
||||
<li class="p_CodeExample" style="white-space: normal; page-break-inside: auto;"><code><b><username></b></code> — в параметре <code><b>--ssh-user</b></code> укажите имя пользователя, от которого генерировался SSH-ключ для установки;</li><li class="p_CodeExample" style="white-space: normal; page-break-inside: auto;"><code><b><master_ip></b></code> — IP адрес master-узла подготовленного на этапе <a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">архитектура кластера Kubernetes</a>.</li></ul>
|
||||
<p class="p_Normal">Процесс установки может занять 15-30 минут при хорошем соединении.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-frontend-nodes" class="hmanchor"></a><span class="f_Heading2">Шаг 5. Добавление frontend-узлов</span></h2>
|
||||
<p class="p_Normal">Перед добавлением frontend-нод предварительно создайте новый custom resource <a href="https://deckhouse.ru/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> с именем <code><b>frontend</b></code>. Параметр <code><b>nodeType</b></code> в custom resource NodeGroup задайте как <code><b>Static</b></code>.</p>
|
||||
<li class="p_CodeExample" style="white-space: normal; page-break-inside: auto;"><code><b><username></b></code>. In parameter <code><b>--ssh-user</b></code>, specify the name of the user who generated the SSH key for installation.</li><li class="p_CodeExample" style="white-space: normal; page-break-inside: auto;"><code><b><master_ip></b></code>. The IP address of the master node prepared during the <a href="fail-safe-kubernetes-cluster.html#cluster-architecture" class="topiclink">Kubernetes cluster architecture</a> step.</li></ul>
|
||||
<p class="p_Normal">The installation process may take 15-30 minutes with a good connection.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-frontend-nodes" class="hmanchor"></a><span class="f_Heading2">Step 5: Adding frontend nodes</span></h2>
|
||||
<p class="p_Normal">Before adding frontend nodes, create a new custom resource <a href="https://deckhouse.io/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> with the name <code><b>frontend</b></code>. Set the parameter <code><b>nodeType</b></code> in the custom resource NodeGroup to<code><b>Static</b></code>.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на ноде master 1 файл <code><b>frontend.yaml</b></code> с описанием статичной NodeGroup с наименованием <code><b>frontend</b></code>:</li></ol>
|
||||
<li value="1" class="p_Normal">Create file <code><b>frontend.yaml</b></code> on the master node 1 with the description of the static NodeGroup named <code><b>frontend</b></code>:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: NodeGroup</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
@ -361,22 +355,22 @@
|
||||
<span class="f_CodeExample"> value: frontend</span><br />
|
||||
<span class="f_CodeExample"> nodeType: Static</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Примените файл <code><b>frontend.yaml</b></code>, выполнив команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Apply file <code><b>frontend.yaml</b></code> by executing the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl create -f frontend.yaml</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Для добавления frontend-нод выполните следующие действия:</li></ol>
|
||||
<li value="3" class="p_Normal">To add frontend nodes, follow these steps:</li></ol>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла frontend, выполнив команду на ноде master 1:</li></ol>
|
||||
<li value="1" class="p_Normal">Obtain the script code in Base64 encoding for adding and configuring a new frontend node by running the command on master node 1:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl -n d8-cloud-instance-manager get secret manual-bootstrap-</span><span class="f_CodeExample" style="font-weight: bold;">for</span><span class="f_CodeExample">-frontend -o json | jq '.data."bootstrap.sh"' -r</span></p>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Зайдите на узел, который хотите добавить по SSH (в данном случае frontend 1) и вставьте полученную на первом шаге Base64‑строку:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-КОД-СКРИПТА> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Дождитесь окончания выполнения скрипта. Нода добавлена.</p>
|
||||
<p class="p_Normal">Чтобы добавить новые frontend-ноды, выполните действия из пункта 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-system-nodes" class="hmanchor"></a><span class="f_Heading2">Шаг 6. Добавление system-узлов</span></h2>
|
||||
<p class="p_Normal">Перед добавлением system-нод предварительно создайте новый custom resource <a href="https://deckhouse.ru/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> с именем <code><b>system</b></code>. Параметр <code><b>nodeType</b></code> в custom resource NodeGroup задать как <code><b>Static</b></code>.</p>
|
||||
<li value="2" class="p_Normal">Log in to the node you want to add via SSH (in this case, frontend 1) and paste the Base64-encoded string obtained in the first step:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-SCRIPT-CODE> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Wait for the script to finish execution. The node has been added.</p>
|
||||
<p class="p_Normal">To add new frontend nodes, repeat the steps in step 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-system-nodes" class="hmanchor"></a><span class="f_Heading2">Step 6: Adding system nodes</span></h2>
|
||||
<p class="p_Normal">Before adding system nodes, create a new custom resource <a href="https://deckhouse.io/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> with the name <code><b>system</b></code>. Set the parameter <code><b>nodeType</b></code> in the custom resource NodeGroup to <code><b>Static</b></code>.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на ноде master 1 файл <code><b>system.yaml</b></code> с описанием статичной NodeGroup с наименованием <code><b>system</b></code>:</li></ol>
|
||||
<li value="1" class="p_Normal">Create file <code><b>system.yaml</b></code> on the master node 1 with the description of the static NodeGroup named <code><b>system</b></code>:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: NodeGroup</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
@ -391,22 +385,22 @@
|
||||
<span class="f_CodeExample"> value: system</span><br />
|
||||
<span class="f_CodeExample"> nodeType: Static</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Примените файл <code><b>system.yaml</b></code>, выполнив команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Apply file <code><b>system.yaml</b></code> by executing the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl create -f system.yaml</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Для добавления system-нод выполните следующие действия:</li></ol>
|
||||
<li value="3" class="p_Normal">To add system nodes, follow these steps:</li></ol>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла system, выполнив команду на ноде master 1:</li></ol>
|
||||
<li value="1" class="p_Normal">Obtain the script code in Base64 encoding for adding and configuring a new system node by running the command on master node 1:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl -n d8-cloud-instance-manager get secret manual-bootstrap-</span><span class="f_CodeExample" style="font-weight: bold;">for</span><span class="f_CodeExample">-system -o json | jq '.data."bootstrap.sh"' -r</span></p>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Зайдите на узел, который хотите добавить по SSH (в данном случае system 1) и вставьте полученную на первом шаге Base64‑строку:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-КОД-СКРИПТА> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Дождитесь окончания выполнения скрипта. Нода добавлена.</p>
|
||||
<p class="p_Normal">Чтобы добавить новые system-ноды, выполните действия из пункта 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-worke-nodes" class="hmanchor"></a><span class="f_Heading2">Шаг 7. Добавление worker-узлов</span></h2>
|
||||
<p class="p_Normal">Перед добавлением worker-нод предварительно создайте новый custom resource <a href="https://deckhouse.ru/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> с именем <code><b>worker</b></code>. Параметр <code><b>nodeType</b></code> в custom resource NodeGroup задать как <code><b>Static</b></code>.</p>
|
||||
<li value="2" class="p_Normal">Log in to the node you want to add via SSH (in this case, system 1) and paste the Base64-encoded string obtained in the first step:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-SCRIPT-CODE> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Wait for the script to finish execution. The node has been added.</p>
|
||||
<p class="p_Normal">To add new system nodes, repeat the steps in step 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-worke-nodes" class="hmanchor"></a><span class="f_Heading2">Step 7: Adding worker nodes</span></h2>
|
||||
<p class="p_Normal">Before adding worker nodes, create a new custom resource <a href="https://deckhouse.io/documentation/latest/modules/040-node-manager/cr.html#nodegroup" target="_blank" class="weblink">NodeGroup</a> with the name <code><b>worker</b></code>. Set the parameter <code><b>nodeType</b></code> in the custom resource NodeGroup to <code><b>Static</b></code>.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на ноде master 1 файл <code><b>worker.yaml</b></code> с описанием статичной NodeGroup с наименованием <code><b>worker</b></code>:</li></ol>
|
||||
<li value="1" class="p_Normal">Create file <code><b>worker.yaml</b></code> on the master node 1 with the description of the static NodeGroup called <code><b>worker</b></code>:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: NodeGroup</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
@ -416,34 +410,34 @@
|
||||
<span class="f_CodeExample"> kubelet:</span><br />
|
||||
<span class="f_CodeExample"> maxPods: 200</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Примените файл <code><b>worker.yaml</b></code>, выполнив команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Apply file <code><b>worker.yaml</b></code> by executing the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl create -f worker.yaml</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Для добавления worker-нод выполните следующие действия:</li></ol>
|
||||
<li value="3" class="p_Normal">To add worker nodes, follow these steps:</li></ol>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла worker, выполнив команду на ноде master 1:</li></ol>
|
||||
<li value="1" class="p_Normal">Obtain the script code in Base64 encoding for adding and configuring a new worker node by running the command on master node 1:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl -n d8-cloud-instance-manager get secret manual-bootstrap-</span><span class="f_CodeExample" style="font-weight: bold;">for</span><span class="f_CodeExample">-worker -o json | jq '.data."bootstrap.sh"' -r</span></p>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Зайдите на узел, который хотите добавить по SSH (в данном случае worker 1) и вставьте полученную на первом шаге Base64-строку:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-КОД-СКРИПТА> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Дождитесь окончания выполнения скрипта. Нода добавлена.</p>
|
||||
<p class="p_Normal">Чтобы добавить новые worker-ноды, действия из пункта 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-master-nodes" class="hmanchor"></a><span class="f_Heading2">Шаг 8. Добавление master-узлов</span></h2>
|
||||
<li value="2" class="p_Normal">Log in to the node you want to add via SSH (in this case, worker 1) and paste the Base64-encoded string obtained in the first step:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-CODE-SCRIPT> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Wait for the script to finish execution. The node has been added.</p>
|
||||
<p class="p_Normal">To add new system nodes, repeat the steps in step 3.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-master-nodes" class="hmanchor"></a><span class="f_Heading2">Step 8: Adding master nodes</span></h2>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла master, выполнив команду на ноде master 1:</li></ol>
|
||||
<li value="1" class="p_Normal">Obtain the script code in Base64 encoding for adding and configuring a new master node by running the command on master node 1:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl -n d8-cloud-instance-manager get secret manual-bootstrap-</span><span class="f_CodeExample" style="font-weight: bold;">for</span><span class="f_CodeExample">-master -o json | jq '.data."bootstrap.sh"' -r</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Зайдите на узел, который хотите добавить по SSH (в данном случае master 2) и вставьте полученную на первом шаге Base64-строку:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-КОД-СКРИПТА> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Дождитесь окончания выполнения скрипта. Нода добавлена.</p>
|
||||
<p class="p_Normal">Чтобы добавить новые master-ноды, выполните действия из шага 8.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-local-path-provisioner" class="hmanchor"></a><span class="f_Heading2">Шаг 9. Добавление Local Path Provisioner</span></h2>
|
||||
<p class="p_Normal">По умолчанию storageclass отсутствует в Deckhouse. Создайте custom resource <span style="font-weight: bold;">LocalPathProvisioner</span>, позволяющий пользователям Kubernetes использовать локальное хранилище на узлах. Для этого выполните следующие действия:</p>
|
||||
<li value="2" class="p_Normal">Log in to the node you want to add via SSH (in this case, master 2) and paste the Base64-encoded string obtained in the first step:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">echo <Base64-SCRIPT-CODE> | base64 -d | bash</span></p>
|
||||
<p class="p_Normal">Wait for the script to finish execution. The node has been added.</p>
|
||||
<p class="p_Normal">To add new master nodes, repeat step 8.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-local-path-provisioner" class="hmanchor"></a><span class="f_Heading2">Step 9: Adding Local Path Provisioner</span></h2>
|
||||
<p class="p_Normal">By default, there is no storageclass in Deckhouse. Create a custom resource called <span style="font-weight: bold;">LocalPathProvisioner</span>, allowing Kubernetes users to use local storage on nodes. Follow these steps:</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на master-узле файл <code><b>local-path-provisioner.yaml</b></code>, содержащий конфигурацию для <span style="font-weight: bold;">LocalPathProvisioner</span>.</li></ol>
|
||||
<li value="1" class="p_Normal">Create a configuration file <code><b>local-path-provisioner.yaml</b></code> for <span style="font-weight: bold;">LocalPathProvisioner</span> on the master node.</li></ol>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Установите нужную Reclaim policy (по умолчанию устанавливается Retain). В рамках статьи для параметра <code><b>reclaimPolicy</b></code> установлено <code><b>"Delete"</b></code> (PV после удаления PVC удаляются).</li></ol>
|
||||
<p class="p_Normal">Пример файла <code><b>local-path-provisioner.yaml</b></code>:</p>
|
||||
<li value="2" class="p_Normal">Set the desired Reclaim policy (the default is Retain). In this article, the parameter <code><b>reclaimPolicy</b></code> is set to <code><b>"Delete"</b></code>(PVs are deleted after PVCs are deleted).</li></ol>
|
||||
<p class="p_Normal">Example of file <code><b>local-path-provisioner.yaml</b></code>:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: deckhouse.io/v1alpha1</span><br />
|
||||
<span class="f_CodeExample">kind: LocalPathProvisioner</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
@ -455,35 +449,35 @@
|
||||
<span class="f_CodeExample"> path: "/opt/local-path-provisioner"</span><br />
|
||||
<span class="f_CodeExample"> reclaimPolicy: "Delete"</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Примените файл <code><b>local-path-provisioner.yaml</b></code> в Kubernetes. Для этого выполните команду:</li></ol>
|
||||
<li value="3" class="p_Normal">Apply file <code><b>local-path-provisioner.yaml</b></code> in Kubernetes. To that, run the following command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl apply -f local-path-provisioner.yaml</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="4">
|
||||
<li value="4" class="p_Normal">Установите созданный <span style="font-weight: bold;">LocalPathProvisioner</span>, как storageclass по умолчанию (default-class), выполнив одну из команд:</li></ol>
|
||||
<li value="4" class="p_Normal">Set the created <span style="font-weight: bold;">LocalPathProvisioner</span> as the default storageclass (default class) by running the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl patch storageclass localpath-deckhouse-system -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'</span></p>
|
||||
<p class="p_Normal">или</p>
|
||||
<p class="p_Normal">or</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo -i d8 k patch mc global --type merge -p “{"spec": {"settings":{"defaultClusterStorageClass":"localpath-deckhouse-system"}}}”</span></p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">LocalPathProvisioner</span> с наименованием localpath-deckhouse-system создан и готов предоставлять локальные хранилища на узлах c NodeGroup system и worker.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-balancer" class="hmanchor"></a><span class="f_Heading2">Шаг 10. Добавление балансировщика OpenELB-VIP</span></h2>
|
||||
<p class="p_Normal">Для правильной работы Ingress-контроллера требуется прямой выход в интернет с белым IP-адресом на Ingress-узле кластера с использованием NodePort, или можно установить балансировщик <a href="https://openelb.io/docs/getting-started/installation/" target="_blank" class="weblink">OpenELB</a>, который будет заниматься балансировкой трафика так, как это организовано у любого облачного провайдера. Этот балансировщик использует Speaker для поддержки IP-адреса службы.</p>
|
||||
<p class="p_Normal">Разверните OpenELB в режиме VIP Mode. Для этого:</p>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">LocalPathProvisioner</span> with the name localpath-deckhouse-system is created nd ready to provide local storage on nodes with the NodeGroup system and worker.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-balancer" class="hmanchor"></a><span class="f_Heading2">Step 10: Adding OpenELB load balancer -VIP</span></h2>
|
||||
<p class="p_Normal">To ensure proper functioning of the Ingress controller, you need a direct internet connection with a white IP address on the Ingress node using NodePort. Alternatively, you can install the <a href="https://openelb.io/docs/getting-started/installation/" target="_blank" class="weblink">OpenELB</a> load balancer, which handles traffic balancing like cloud providers. This balancer uses Speaker to support the service<span style="color: #202122; background-color: #ffffff;">’</span>s IP address.</p>
|
||||
<p class="p_Normal">Deploy OpenELB in VIP Mode as follows:</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Получите конфигурационный файл <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<p class="p_Normal">Для установки через интернет:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm repo add elma365 https:</span><span class="f_CodeExample">//charts.elma365.tech</span><br />
|
||||
<li value="1" class="p_Normal">Obtain the configuration file <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<p class="p_Normal"><span style="font-weight: bold;">For installation via the internel:</span></p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm repo add elma365 https:</span><span class="f_CodeExample">//charts.</span><span class="f_CodeExample">elma365</span><span class="f_CodeExample">.tech</span><br />
|
||||
<span class="f_CodeExample">helm repo update</span><br />
|
||||
<span class="f_CodeExample">helm show values elma365/openelb > values-openelb.yaml</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A3')">Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A3" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A3')">Get the configuration file for installation in a closed network without internet access</a></p>
|
||||
<div id="TOGGLE0186A3" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">На компьютере с доступом в интернет скачайте архив актуальной версии (latest) чарта OpenELB из репозитория elma365, выполнив следующую команду:</li></ol>
|
||||
<li value="1" class="p_Normal">On a computer with internet access, download the archive of the latest version of the OpenELB chart from the BRIX repository:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm repo add elma365 https:</span><span class="f_CodeExample">//charts.elma365.tech</span><br />
|
||||
<span class="f_CodeExample">helm repo update</span><br />
|
||||
<span class="f_CodeExample">helm pull elma365/openelb</span></p>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Полученный архив чарта <code><b>openelb-X.Y.Z.tgz</b></code> скопируйте на сервер, где будет производиться установка.</li></ol>
|
||||
<li value="2" class="p_Normal">Copy the downloaded chart archive <code><b>openelb-X.Y.Z.tgz</b></code> to the server where you'll perform the installation.</li></ol>
|
||||
<ol style="list-style-type:decimal" start="3">
|
||||
<li value="3" class="p_Normal">Распакуйте чарт <code><b>openelb-X.Y.Z.tgz</b></code> на сервере, где будет производиться установка и скопируйте конфигурационный файл по умолчанию <code><b>values.yaml</b></code> в <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<li value="3" class="p_Normal">Unpack the chart <code><b>openelb-X.Y.Z.tgz</b></code> on the installation server and copy the default configuration file <code><b>values.yaml</b></code> to <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">tar -xf openelb-X.Y.Z.tgz</span><br />
|
||||
<span class="f_CodeExample">cp openelb/values.yaml values-openelb.yaml</span></p>
|
||||
</td>
|
||||
@ -491,133 +485,131 @@
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Измените конфигурационный файл <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<p class="p_Normal">Запланируйте размещение подов openelb-controller на frontend-нодах кластера. Для этого измените секции <span style="font-weight: bold;">tolerations</span> и <span style="font-weight: bold;">nodeSelector</span>:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">## Настройки openelb</span><br />
|
||||
<li value="2" class="p_Normal">Modify configuration file <code><b>values-openelb.yaml</b></code>.</li></ol>
|
||||
<p class="p_Normal">Plan the placement of openelb-controller pods on frontend nodes by changing <span style="font-weight: bold;">tolerations</span> and <span style="font-weight: bold;">nodeSelector</span> sections:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">## openelb settings</span><br />
|
||||
<span class="f_CodeExample">openelb:</span><br />
|
||||
<span class="f_CodeExample"> speaker:</span><br />
|
||||
<span class="f_CodeExample"> enable: true</span><br />
|
||||
<span class="f_CodeExample"> vip: true</span><br />
|
||||
<span class="f_CodeExample"> apiHosts: ":50051"</span><br />
|
||||
<span class="f_CodeExample"> tolerations:</span><br />
|
||||
<span class="f_CodeExample"> - key: CriticalAddonsOnly</span><br />
|
||||
<span class="f_CodeExample"> operator: Exists</span><br />
|
||||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> operator: Equal</span><br />
|
||||
<span class="f_CodeExample"> value: frontend</span><br />
|
||||
<span class="f_CodeExample"> nodeSelector:</span><br />
|
||||
<span class="f_CodeExample"> kubernetes.io/os: linux</span><br />
|
||||
<span class="f_CodeExample"> node-role.deckhouse.io/frontend: ""</span><br />
|
||||
<span class="f_CodeExample"> controller:</span><br />
|
||||
<span class="f_CodeExample"> webhookPort: 443</span><br />
|
||||
<span class="f_CodeExample"> tolerations:</span><br />
|
||||
<span class="f_CodeExample"> - key: CriticalAddonsOnly</span><br />
|
||||
<span class="f_CodeExample"> operator: Exists</span><br />
|
||||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> operator: Equal</span><br />
|
||||
<span class="f_CodeExample"> value: frontend</span><br />
|
||||
<span class="f_CodeExample"> nodeSelector:</span><br />
|
||||
<span class="f_CodeExample"> kubernetes.io/os: linux</span><br />
|
||||
<span class="f_CodeExample"> node-role.deckhouse.io/frontend: ""</span><br />
|
||||
<span class="f_CodeExample"> enable: true</span><br />
|
||||
<span class="f_CodeExample"> vip: true</span><br />
|
||||
<span class="f_CodeExample"> apiHosts: ":50051"</span><br />
|
||||
<span class="f_CodeExample"> tolerations:</span><br />
|
||||
<span class="f_CodeExample"> - key: CriticalAddonsOnly</span><br />
|
||||
<span class="f_CodeExample"> operator: Exists</span><br />
|
||||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> operator: Equal</span><br />
|
||||
<span class="f_CodeExample"> value: frontend</span><br />
|
||||
<span class="f_CodeExample"> nodeSelector:</span><br />
|
||||
<span class="f_CodeExample"> kubernetes.io/os: linux</span><br />
|
||||
<span class="f_CodeExample"> node-role.deckhouse.io/frontend: ""</span><br />
|
||||
<span class="f_CodeExample"> controller:</span><br />
|
||||
<span class="f_CodeExample"> webhookPort: 443</span><br />
|
||||
<span class="f_CodeExample"> tolerations:</span><br />
|
||||
<span class="f_CodeExample"> - key: CriticalAddonsOnly</span><br />
|
||||
<span class="f_CodeExample"> operator: Exists</span><br />
|
||||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> operator: Equal</span><br />
|
||||
<span class="f_CodeExample"> value: frontend</span><br />
|
||||
<span class="f_CodeExample"> nodeSelector:</span><br />
|
||||
<span class="f_CodeExample"> kubernetes.io/os: linux</span><br />
|
||||
<span class="f_CodeExample"> node-role.deckhouse.io/frontend: ""</span><br />
|
||||
<span class="f_CodeExample">...</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A4')">Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A4" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A4')">Configure connection parameters to a private registry for installation in a closed network without internet access</a></p>
|
||||
<div id="TOGGLE0186A4" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal"> <br />
|
||||
Для подключения к приватному <span style="font-weight: bold;">registry</span> необходимо:</p>
|
||||
To connect to a private <span style="font-weight: bold;">registry</span>:</p>
|
||||
<ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">Задать адрес и путь для параметра <code><b>openelb.global.imageRegistry</b></code>.</li></ol>
|
||||
<li value="1" class="p_Normal">Set the address and path for the <code><b>openelb.global.imageRegistry</b></code> parameter.</li></ol>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Указать наименование секрета с правами доступа к приватному <span style="font-weight: bold;">registry</span> в параметре <code><b>imagePullSecrets</b></code>. Секрет должен быть создан вручную и зашифрован в Base64.</li></ol>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">## Настройки openelb</span><br />
|
||||
<li value="2" class="p_Normal">Specify the secret name with access rights to the private <span style="font-weight: bold;">registry</span> in parameter <code><b>imagePullSecrets</b></code>. The secret must be created manually and encrypted in Base64.</li></ol>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">## openelb settings</span><br />
|
||||
<span class="f_CodeExample">openelb:</span><br />
|
||||
<span class="f_CodeExample"> ## параметры подключения к приватному registry</span><br />
|
||||
<span class="f_CodeExample"> global:</span><br />
|
||||
<span class="f_CodeExample"> ## адрес и путь для приватного registry</span><br />
|
||||
<span class="f_CodeExample"> imageRegistry: registry.example.com/docker/addons</span><br />
|
||||
<span class="f_CodeExample"> ## секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64</span><br />
|
||||
<span class="f_CodeExample"> imagePullSecrets:</span><br />
|
||||
<span class="f_CodeExample"> - name: myRegistryKeySecretName</span></p>
|
||||
<p class="p_Normal">где формат <code><b>imageRegistry</b></code>: адрес — <code><b>registry.example.com</b></code>.</p>
|
||||
<span class="f_CodeExample"> manager:</span><br />
|
||||
<span class="f_CodeExample">...</span><br />
|
||||
<span class="f_CodeExample"> ## parameters for connecting to the registry</span><br />
|
||||
<span class="f_CodeExample"> global:</span><br />
|
||||
<span class="f_CodeExample"> ## address and path for the private registry</span><br />
|
||||
<span class="f_CodeExample"> imageRegistry: registry.example.com/docker/addons</span><br />
|
||||
<span class="f_CodeExample"> ## The secret with access rights to the private registry must be created manually and encrypted in Base64</span><br />
|
||||
<span class="f_CodeExample"> imagePullSecrets:</span><br />
|
||||
<span class="f_CodeExample"> - name: myRegistryKeySecretName</span></p>
|
||||
<p class="p_Normal">Where <code><b>imageRepository</b></code><span style="font-weight: bold;"> </span>format is the address — <code><b>registry.example.com</b></code>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Установите OpenELB в Kubernetes.</li></ol>
|
||||
<p class="p_Normal">Для установки через интернет:</p>
|
||||
<li value="3" class="p_Normal">Install OpenELB in Kubernetes.</li></ol>
|
||||
<p class="p_Normal">For installation via internet:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm upgrade --install openelb elma365/openelb -f values-openelb.yaml -n openelb-system --create-namespace</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A5')">Для установки без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A5" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A5')">For offline installation without internet access</a></p>
|
||||
<div id="TOGGLE0186A5" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal"> <br />
|
||||
Перейдите в каталог с загруженным чартом и выполните команду:<br />
|
||||
</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm upgrade --install openelb ./openelb -f values-openelb.yaml -n openelb-system --create-namespace</span></p>
|
||||
Navigate to the directory with the downloaded chart and run the command:</p>
|
||||
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">helm upgrade --install openelb ./openelb -f values-openelb.yaml -n openelb-system --create-namespace</span></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="4">
|
||||
<li value="4" class="p_Normal">Настройте отказоустойчивость openelb-controller.</li></ol>
|
||||
<p class="p_Normal">Для достижения отказоустойчивости увеличьте количество реплик openelb-controller, выполнив команду на ноде master 1:</p>
|
||||
<li value="4" class="p_Normal">Configure the high availability of openelb-controller.</li></ol>
|
||||
<p class="p_Normal">To ensure high availability, increase the number of openelb-controller replicas, by running the following command on master node 1:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl scale --replicas=2 deployment openelb-controller -n openelb-system</span></p>
|
||||
<p class="p_Normal">Выполните следующую команду, чтобы проверить находится ли openelb-controller в состоянии <span style="font-weight: bold;">READY:</span> <span style="font-weight: bold;">1/1</span> и <span style="font-weight: bold;">STATUS:</span> <span style="font-weight: bold;">Running</span>. Если да, OpenELB успешно установлен.</p>
|
||||
<p class="p_Normal">Run the following command to check if openelb-controller is <span style="font-weight: bold;">READY:1/1 </span>and status is <span style="font-weight: bold;">STATUS: Running</span>. If so, OpenELB is successfully installed.</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl get po -n openelb-system</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="5">
|
||||
<li value="5" class="p_Normal">Создайте пул IP-адресов для OpenELB.</li></ol>
|
||||
<p class="p_Normal">Создайте на ноде master 1 файл <code><b>vip-eip.yaml</b></code> с описанием EIP‑объекта. Объект Eip функционирует как пул IP-адресов для OpenELB.</p>
|
||||
<p class="p_Normal">Пример файла <code><b>vip-eip.yaml</b></code>:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"> </span><br />
|
||||
<span class="f_CodeExample">apiVersion: network.kubesphere.io/v1alpha2</span><br />
|
||||
<li value="5" class="p_Normal">Create a pool of IP addresses for OpenELB.</li></ol>
|
||||
<p class="p_Normal">Create file <code><b>vip-eip.yaml</b></code> describing the EIP object on master node 1. The EIP object functions as a pool of IP addresses for OpenELB.</p>
|
||||
<p class="p_Normal">Example of file <code><b>vip-eip.yaml</b></code>:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">apiVersion: network.kubesphere.io/v1alpha2</span><br />
|
||||
<span class="f_CodeExample">kind: Eip</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
<span class="f_CodeExample"> name: vip-eip</span><br />
|
||||
<span class="f_CodeExample">annotations:</span><br />
|
||||
<span class="f_CodeExample"> eip.openelb.kubesphere.io/is-default-eip: "true"</span><br />
|
||||
<span class="f_CodeExample"> eip.openelb.kubesphere.io/is-default-eip: "true"</span><br />
|
||||
<span class="f_CodeExample">spec:</span><br />
|
||||
<span class="f_CodeExample"> address: 192.168.1.13</span><br />
|
||||
<span class="f_CodeExample"> protocol: vip</span><br />
|
||||
<span class="f_CodeExample"> interface: ens18</span></p>
|
||||
<p class="p_Normal">Примените файл <code><b>vip-eip.yaml</b></code> в Kubernetes, выполнив команду:</p>
|
||||
<span class="f_CodeExample"> interface: ens18</span></p>
|
||||
<p class="p_Normal">Apply file <code><b>vip-eip.yaml</b></code> in Kubernetes by running the following command:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl apply -f vip-eip.yaml</span></p>
|
||||
<ol style="list-style-type:upper-roman" start="6">
|
||||
<li value="6" class="p_Normal">Переместите поды keepalived на frontend-узлы.</li></ol>
|
||||
<p class="p_Normal">По умолчанию поды keepalived размещаются openelb-manager на worker-узлах. В рамках статьи поды keepalived нужно разместить на frontend‑узлах.</p>
|
||||
<p class="p_Normal">Внесите изменения в <span style="font-weight: bold;">DaemonSet openelb-keepalive-vip</span>, выполнив команду на ноде master 1:</p>
|
||||
<li value="6" class="p_Normal">Move keepalived pods to frontend nodes.</li></ol>
|
||||
<p class="p_Normal">By default, keepalived pods are placed by openelb-manager on worker nodes. Make sure that the keepalived pods are placed on frontend nodes.</p>
|
||||
<p class="p_Normal">Modify <span style="font-weight: bold;">DaemonSet openelb-keepalive-vip </span>by running the following command on master node 1:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl patch ds -n openelb-system openelb-keepalive-vip -p '{"spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/os":"linux","node-role.deckhouse.io/frontend":""},"tolerations":[{"key":"dedicated.deckhouse.io","value":"frontend","effect":"NoExecute"}]}}}}'</span></p>
|
||||
<p class="p_Normal">Проверьте, что изменения, внесённые в <span style="font-weight: bold;">DaemonSet openelb-keepalive-vip</span> применились и поды разместились на нодах frontend:</p>
|
||||
<p class="p_Normal">Check that the changes in the <span style="font-weight: bold;">DaemonSet openelb-keepalive-vip</span> have been applied, and the pods are now on frontend nodes:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl get po -o wide -n openelb-system</span></p>
|
||||
<h2 class="p_Heading2"><a id="addition-ingress-nginx-controller" class="hmanchor"></a><span class="f_Heading2">Шаг 11. Добавление Ingress Nginx Controller - LoadBalancer</span></h2>
|
||||
<p class="p_Normal">Deckhouse устанавливает и управляет NGINX Ingress Controller при помощи Custom Resources. Если узлов для размещения Ingress-контроллера больше одного, он устанавливается в отказоустойчивом режиме и учитывает все особенности реализации инфраструктуры облаков и bare metal, а также кластеров Kubernetes различных типов.</p>
|
||||
<h2 class="p_Heading2"><a id="addition-ingress-nginx-controller" class="hmanchor"></a><span class="f_Heading2">Step 11: Adding Ingress Nginx Controller - LoadBalancer</span></h2>
|
||||
<p class="p_Normal">Deckhouse installs and manages the NGINX Ingress Controller using Custom Resources. If there is more than one node to host the Ingress Controller, it is installed in a high available mode and takes into account all features of cloud and bare metal infrastructure implementations, as well as Kubernetes clusters of various types.</p>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на ноде master 1 файл <code><b>ingress-nginx-controller.yml</b></code>, содержащий конфигурацию Ingress-контроллера.</li></ol>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A6')">Пример файла ingress-nginx-controller.yml</a> </p>
|
||||
<div id="TOGGLE0186A6" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<li value="1" class="p_Normal">Create file <code><b>ingress-nginx-controller.yml</b></code> on master node 1 containing the configuration of the Ingress controller.</li></ol>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A6')">Example of the ingress-nginx-controller.yml file</a></p>
|
||||
<div id="TOGGLE0186A6" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"> </span><br />
|
||||
<span class="f_CodeExample"># секция, описывающая параметры nginx ingress controller</span><br />
|
||||
<span class="f_CodeExample"># используемая версия API Deckhouse</span><br />
|
||||
<span class="f_CodeExample"># section describing parameters nginx ingress controller</span><br />
|
||||
<span class="f_CodeExample"># used version of API Deckhouse</span><br />
|
||||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: IngressNginxController</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
<span class="f_CodeExample"> name: nginx</span><br />
|
||||
<span class="f_CodeExample">spec:</span><br />
|
||||
<span class="f_CodeExample"> # имя Ingress-класса для обслуживания Ingress NGINX controller</span><br />
|
||||
<span class="f_CodeExample"> ingressClass: nginx</span><br />
|
||||
<span class="f_CodeExample"> # способ поступления трафика из внешнего мира</span><br />
|
||||
<span class="f_CodeExample"> inlet: LoadBalancer</span><br />
|
||||
<span class="f_CodeExample"># Аннотация для OpenELB в сервис nginx-load-balancer</span><br />
|
||||
<span class="f_CodeExample"> loadBalancer:</span><br />
|
||||
<span class="f_CodeExample"> annotations:</span><br />
|
||||
<span class="f_CodeExample"> eip.openelb.kubesphere.io/v1alpha2: "vip-eip"</span><br />
|
||||
<span class="f_CodeExample"> <a href="http://lb.kubesphere.io/v1alpha1" target="_blank" class="weblink">lb.kubesphere.io/v1alpha1</a>: "openelb"</span><br />
|
||||
<span class="f_CodeExample"> # name of Ingress class for Ingress NGINX controller</span><br />
|
||||
<span class="f_CodeExample"> ingressClass: nginx</span><br />
|
||||
<span class="f_CodeExample"> # Annotation for OpenELB into the nginx-load-balancer service</span><br />
|
||||
<span class="f_CodeExample"> loadBalancer:</span><br />
|
||||
<span class="f_CodeExample"> annotations:</span><br />
|
||||
<span class="f_CodeExample"> eip.openelb.kubesphere.io/v1alpha2: "vip-eip"</span><br />
|
||||
<span class="f_CodeExample"> lb.kubesphere.io/v1alpha1: "openelb"</span><br />
|
||||
<span class="f_CodeExample"> hostPort:</span><br />
|
||||
<span class="f_CodeExample"> httpPort: 80</span><br />
|
||||
<span class="f_CodeExample"> httpsPort: 443</span><br />
|
||||
<span class="f_CodeExample"> # описывает, на каких узлах будет находиться компонент</span><br />
|
||||
<span class="f_CodeExample"> # describes on which nodes the component will be located</span><br />
|
||||
<span class="f_CodeExample"> nodeSelector:</span><br />
|
||||
<span class="f_CodeExample"> node-role.kubernetes.io/frontend: ""</span><br />
|
||||
<span class="f_CodeExample"> tolerations:</span><br />
|
||||
@ -627,17 +619,17 @@
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Примените файл <code><b>ingress-nginx-controller.yml</b></code> в Kubernetes, выполнив команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Apply the <code><b>ingress-nginx-controller.yml</b></code> file in Kubernetes by executing the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl create -f ingress-nginx-controller.yml</span></p>
|
||||
<p class="p_Normal">После установки ingress-контроллера Deckhouse автоматически создаст сервис nginx-load-balancer в namespace <code><b>d8-ingress-nginx</b></code>, но не свяжет данный сервис с OpenELB. </p>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="3" class="p_Normal">Проверьте, что изменения, внесённые в сервис nginx-load-balancer применились, в <span style="font-weight: bold;">EXTERNAL-IP</span> появился IP-адрес 192.168.1.13. Для этого выполните следующую команду:</li></ol>
|
||||
<p class="p_Normal">After installing the ingress controller, Deckhouse will automatically create the nginx-load-balancer service in the namespace <code><b>d8-ingress-nginx</b></code>, but it won't associate this service with OpenELB.</p>
|
||||
<ol style="list-style-type:upper-roman" start="3">
|
||||
<li value="3" class="p_Normal">Check that the changes made to the <span style="font-weight: bold;">nginx-load-balancer</span> service have been applied. An IP address, such as 192.168.1.13, should appear in <span style="font-weight: bold;">EXTERNAL-IP</span>. To do this, execute the following command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl get svc -n d8-ingress-nginx</span></p>
|
||||
<h2 class="p_Heading2"><a id="addition-user" class="hmanchor"></a><span class="f_Heading2">Шаг 12. Добавление пользователя для доступа к веб-интерфейсу кластера</span></h2>
|
||||
<h2 class="p_Heading2"><a id="addition-user" class="hmanchor"></a><span class="f_Heading2">Step 12: Adding a user for access to the cluster web interface</span></h2>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Создайте на ноде master 1 файл <code><b>user.yml</b></code>, содержащий описание учётной записи пользователя и прав доступа.</li></ol>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A7')">Пример файла user.yml</a></p>
|
||||
<div id="TOGGLE0186A7" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<li value="1" class="p_Normal">Create file <code><b>user.yml</b></code> on master node 1 containing the user account description and access rights.</li></ol>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A7')">Example of file user.yml</a></p>
|
||||
<div id="TOGGLE0186A7" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"> </span><br />
|
||||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
@ -645,58 +637,58 @@
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
<span class="f_CodeExample"> name: admin</span><br />
|
||||
<span class="f_CodeExample">spec:</span><br />
|
||||
<span class="f_CodeExample"> # список учётных записей Kubernetes RBAC</span><br />
|
||||
<span class="f_CodeExample"> # Kubernetes RBAC account list</span><br />
|
||||
<span class="f_CodeExample"> subjects:</span><br />
|
||||
<span class="f_CodeExample"> - kind: User</span><br />
|
||||
<span class="f_CodeExample"> name: admin@deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> # предустановленный шаблон уровня доступа</span><br />
|
||||
<span class="f_CodeExample"> # preinstalled access level template</span><br />
|
||||
<span class="f_CodeExample"> accessLevel: SuperAdmin</span><br />
|
||||
<span class="f_CodeExample"> # разрешить пользователю делать kubectl port-forward</span><br />
|
||||
<span class="f_CodeExample"> # allow the user to perform kubectl port-forward</span><br />
|
||||
<span class="f_CodeExample"> portForwarding: </span><span class="f_CodeExample" style="font-weight: bold;">true</span><br />
|
||||
<span class="f_CodeExample">---</span><br />
|
||||
<span class="f_CodeExample"># секция, описывающая параметры статического пользователя</span><br />
|
||||
<span class="f_CodeExample"># используемая версия API Deckhouse</span><br />
|
||||
<span class="f_CodeExample"># section describing the parameters of the static user</span><br />
|
||||
<span class="f_CodeExample"># used version of API Deckhouse</span><br />
|
||||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||||
<span class="f_CodeExample">kind: User</span><br />
|
||||
<span class="f_CodeExample">metadata:</span><br />
|
||||
<span class="f_CodeExample"> name: admin</span><br />
|
||||
<span class="f_CodeExample">spec:</span><br />
|
||||
<span class="f_CodeExample"> # e-mail пользователя</span><br />
|
||||
<span class="f_CodeExample"> # user e-mail</span><br />
|
||||
<span class="f_CodeExample"> email: admin@deckhouse.io</span><br />
|
||||
<span class="f_CodeExample"> # это хэш пароля xgnv5gkggd, сгенерированного сейчас</span><br />
|
||||
<span class="f_CodeExample"> # сгенерируйте свой или используйте этот, но только для тестирования</span><br />
|
||||
<span class="f_CodeExample"> # this is the hash of the password xgnv5gkggd, generated now</span><br />
|
||||
<span class="f_CodeExample"> # generate your own or use this one, but only for testin</span><br />
|
||||
<span class="f_CodeExample"> # echo "xgnv5gkggd" | htpasswd -BinC 10 "" | cut -d: -f2</span><br />
|
||||
<span class="f_CodeExample"> # возможно, захотите изменить</span><br />
|
||||
<span class="f_CodeExample"> # you may want to change it</span><br />
|
||||
<span class="f_CodeExample"> password: '$2a$10$4j4cUeyonCfX7aDJyqSHXuAxycsf/sDK0T4n9ySQ7.owE34L1uXTm'</span></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Примените файл <code><b>user.yml</b></code> в Kubernetes, выполнив команду:</li></ol>
|
||||
<li value="2" class="p_Normal">Apply the <code><b>user.yml</b></code> file in Kubernetes by executing the command в Kubernetes:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl create -f user.yml</span></p>
|
||||
<h2 class="p_Heading2"><a id="load-privileges" class="hmanchor"></a><span class="f_Heading2">Шаг 13. Привилегии запускаемых нагрузок</span></h2>
|
||||
<p class="p_Normal">Разрешите переназначить политику привилегий для запускаемых подов:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl label namespace elma365 security.deckhouse.io/pod-policy=privileged --overwrite</span></p>
|
||||
<h2 class="p_Heading2"><a id="installation-helm" class="hmanchor"></a><span class="f_Heading2">Шаг 14. Установка HELM</span></h2>
|
||||
<h2 class="p_Heading2"><a id="pivileges" class="hmanchor"></a><span class="f_Heading2">Step 13: Privileges of the launched loads</span></h2>
|
||||
<p class="p_Normal">Allow reassigning privilege policy for the running pods:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl label namespace elma365 security.deckhouse.io/pod-policy=privileged --overwrite</span></p>
|
||||
<h2 class="p_Heading2"><a id="installation-helm" class="hmanchor"></a><span class="f_Heading2">Step 14: Install Helm</span></h2>
|
||||
<ol style="list-style-type:upper-roman">
|
||||
<li value="1" class="p_Normal">Перейдите на страницу релизов <a href="https://github.com/helm/helm/releases" target="_blank" class="weblink">Helm</a> и скачайте архив <code><b>helm-vX.Y.Z-linux-amd64.tar.gz</b></code> нужно версии.</li></ol>
|
||||
<p class="p_Normal">Для установки через интернет:</p>
|
||||
<li value="1" class="p_Normal">Go to the <a href="https://github.com/helm/helm/releases" target="_blank" class="weblink">Helm</a> releases page and download the <code><b>helm-vX.Y.Z-linux-amd64.tar.gz</b></code> archive of the required version.</li></ol>
|
||||
<p class="p_Normal">For installation via the Internet:</p>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz</span></p>
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A8')">Для офлайн-установки без доступа в интернет</a></p>
|
||||
<div id="TOGGLE0186A8" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A8')">For offline installation without internet access</a></p>
|
||||
<div id="TOGGLE0186A8" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0; border:none"><ol style="list-style-type:decimal">
|
||||
<li value="1" class="p_Normal">На компьютере с доступом в интернет перейдите на страницу релизов <a href="https://github.com/helm/helm/releases" target="_blank" class="weblink">Helm</a> и скачайте архив <code><b>helm-vX.Y.Z-linux-amd64.tar.gz</b></code> нужной версии, выполнив команду:</li></ol>
|
||||
<li value="1" class="p_Normal">On a computer with internet access, go to the <a href="https://github.com/helm/helm/releases" target="_blank" class="weblink">Helm</a> releases page and download the archive <code><b>helm-vX.Y.Z-linux-amd64.tar.gz</b></code> of the required version by executing the command:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz</span></p>
|
||||
<ol style="list-style-type:decimal" start="2">
|
||||
<li value="2" class="p_Normal">Скопируйте полученный архив на master-узел.</li></ol>
|
||||
<li value="2" class="p_Normal">Copy the archive to the master node.</li></ol>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<ol style="list-style-type:upper-roman" start="2">
|
||||
<li value="2" class="p_Normal">Распакуйте архив и переместите бинарный файл helm:</li></ol>
|
||||
<li value="2" class="p_Normal">Unpack the archive and move the Helm binary:</li></ol>
|
||||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">tar -zxvf helm-vX.Y.Z-linux-amd64.tar.gz</span><br />
|
||||
<span class="f_CodeExample">mv linux-amd64/helm /usr/local/bin/helm</span></p>
|
||||
|
||||
@ -715,7 +707,7 @@
|
||||
|
||||
</div>
|
||||
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
|
||||
<div class="feedback-wrap"><div class="feedback" id="feedback"><span><b>Была ли статья полезной?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx">Спасибо за ваш отзыв!</div><div id="feedback-success-popup"><div class="wrap"><button type="button" class="feedback-popup-close">×</button><svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_212_2187)"><path d="M22 0.6875C10.2294 0.6875 0.6875 10.2294 0.6875 22C0.6875 33.7706 10.2294 43.3125 22 43.3125C33.7706 43.3125 43.3125 33.7706 43.3125 22C43.3125 10.2294 33.7706 0.6875 22 0.6875ZM22 40.5625C11.8023 40.5625 3.4375 32.3078 3.4375 22C3.4375 11.8024 11.6922 3.4375 22 3.4375C32.1977 3.4375 40.5625 11.6922 40.5625 22C40.5625 32.1976 32.3078 40.5625 22 40.5625ZM34.1713 16.933L18.6613 32.3186C18.257 32.7197 17.604 32.7171 17.203 32.3128L9.82283 24.873C9.42176 24.4686 9.42434 23.8157 9.82867 23.4146L10.5609 22.6884C10.9652 22.2873 11.6181 22.2899 12.0192 22.6942L17.9468 28.6697L31.9926 14.7366C32.3969 14.3356 33.0498 14.3382 33.4509 14.7425L34.1772 15.4747C34.5783 15.879 34.5757 16.532 34.1713 16.933Z" fill="#27AE60"></path></g><defs><clipPath id="clip0_212_2187"><rect width="44" height="44" fill="white"></rect></clipPath></defs></svg><p>Ваш отзыв успешно отправлен!</p><span>Спасибо за обратную связь.</span></div></div><div class="feedback__popup" id="feedback__popup_why"><button type="button" class="feedback-popup-close">×</button><div class="feedback__popup-header">Уточните, почему:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Рекомендации не помогли</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Текст трудно понять</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Нет ответа на мой вопрос</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Содержание статьи не соответствует заголовку</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Другая причина</label></div><div class="feedback__popup" id="feedback__popup-other"><button type="button" class="feedback-popup-close">×</button> <div class="feedback__popup-header">Расскажите, что вам не понравилось в статье:</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Отправить"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg"/><span class="feedback-form__btn-group_yes-btn">Да</span></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg"/><span class="feedback-form__btn-group_no-btn">Нет</span></label></div><select name="category"><option disabled>Выберите вариант</option><option value="bad_recommendation" selected>Рекомендации не помогли</option><option value="difficult_text">Текст трудно понять</option><option value="no_answer">Нет ответа на мой вопрос</option><option value="bad_header">Содержание статьи не соответствует заголовку</option><option value="other_reason">Другая причина</option></select><input type="submit"></form></div></div>
|
||||
<div class="feedback" id="feedback"><div class="feedback-help"><span><b>Was this helpful?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx" style="display: none;">Thanks for your feedback!</div><div class="feedback__popup" id="feedback__popup_why" style="display: none;"><div class="feedback__popup-header">Please specify why:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Recommendations did not help me</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Article is hard to understand</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Didn`t answer my question</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Content does not match the topic</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Other</label></div><div class="feedback__popup" id="feedback__popup-other" style="display: none;"><div class="feedback__popup-header">How we can improve it?</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Submit"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg" class="small-img" alt="like"><spanclass="feedback-form__btn-group_yes-btn">Yes</spanclass="feedback-form__btn-group_yes-btn"></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg" class="small-img" alt="dislike"><spanclass="feedback-form__btn-group_no-btn">No</spanclass="feedback-form__btn-group_no-btn"></label></div><select name="category"><option disabled="">Please specify why</option><option value="bad_recommendation" selected="">Recommendations did not help me</option><option value="difficult_text">Article is hard to understand</option><option value="no_answer">Didn`t answer my question</option><option value="bad_header">Content does not match the topic</option><option value="other_reason">Other</option></select><input type="submit"></form></div><div class="found_typo"><p style="margin: 0px; margin-top: 16px !important;"><span><b>Found a typo?</b></span> Select it and press <i>Ctrl+Enter</i> to send us feedback</p></div></div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
@ -723,7 +715,7 @@
|
||||
<input type="checkbox" />
|
||||
<div class="article__arrow"></div>
|
||||
<div class="table-of-contents elma365-right" id="toc2Content">
|
||||
<h3 class="h3-toc">В этой статье</h3>
|
||||
<h3 class="h3-toc">In this topic</h3>
|
||||
<nav id="toc2"></nav>
|
||||
</div>
|
||||
</aside>
|
||||
@ -734,63 +726,30 @@
|
||||
<div class="footer-container">
|
||||
<div class="footer-mobile">
|
||||
|
||||
<ul class="footer-mobile__list"><li><a href="https://api.elma365.com/ru/" target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/" target="_blank">TS SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/elma365" target="_blank">Академия</a></li></ul><ul class="footer-mobile__list"><li><a href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li></ul>
|
||||
<ul class="footer-mobile__list"><li><a href="https://brix365.com/en/" target="_blank">BRIX</a></li><li><a href="https://tssdk.brix365.com/en/latest/" target="_blank">SDK</a></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li></ul><ul class="footer-mobile__list"><li><a href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li></ul>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="footer-wrap">
|
||||
|
||||
<div><span class="mobile-question-popup">Отправить фидбэк</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Задать вопрос</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Отправить"></div></form><div class="hidden fade-in question-success-xs">Ваш фидбэк отправлен.</div></div>
|
||||
|
||||
<div class="footer-flex-b">
|
||||
<div class="footer-top">
|
||||
<span class="footer-copy">© 2025
|
||||
ELMA365
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div class="footer-line">
|
||||
|
||||
<div class="footer-line-copy">
|
||||
<span class="footer-copy">© 2025
|
||||
ELMA365
|
||||
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<ul class="footer-list">
|
||||
|
||||
<li class="footer-item"><a href="https://elma365.com/ru/" target="_blank" class="footer-link" style="color: #0D4A75;"><img src="browse.svg" alt="browse icon" class="footer-img">elma365.com</a></li><li class="footer-item"><a href="https://www.youtube.com/user/ELMABPM" target="_blank" class="footer-link"><img src="yt.svg" alt="youtube icon" class="footer-img"></a></li><li class="footer-item"><a href="https://vk.com/elma_bpm" target="_blank" class="footer-link"><img src="vk.svg" alt="vk icon" class="footer-img"></a></li><li class="footer-item"><a href="https://t.me/elmaday" target="_blank" class="footer-link"><img src="tg.svg" alt="telegram icon" class="footer-img"></a></li><li class="footer-item"><a href="https://dzen.ru/elma" target="_blank" class="footer-link"><img src="dzen.svg" alt="dzen icon" class="footer-img"></a></li>
|
||||
|
||||
|
||||
<li class="footer-item">
|
||||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-wrap">
|
||||
|
||||
<div><span class="mobile-question-popup">Send feedback</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Ask a question</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Send"></div></form><div class="hidden fade-in question-success-xs">Sent</div></div>
|
||||
|
||||
<div class="footer-flex-b">
|
||||
<span class="footer-copy">© 2025 BRIX</span>
|
||||
<ul class="footer-list">
|
||||
|
||||
<li class="footer-item">
|
||||
<a href="#" class="arrow-top" style="display: block;"></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="arrow-top"></a>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
<!-- <script type="text/javascript" src="jquery1.min.js"></script>-->
|
||||
<iframe name="hmnavigation" style="display:none!important"></iframe>
|
||||
<!--<script src="./jquery-ui.js"></script> -->
|
||||
<script src="./jquery-ui.min.js"></script>
|
||||
<script src="./jquery-ui.js"></script>
|
||||
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
|
||||
<script src="./jquery.tocify.min.js"></script>
|
||||
<script src="./TypoReporter.min.js"></script>
|
||||
|
Reference in New Issue
Block a user