All checks were successful
Deploy Static Site / deploy (push) Successful in 6m55s
812 lines
96 KiB
HTML
812 lines
96 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
|
||
<head>
|
||
<title>Отказоустойчивый Kubernetes-кластер</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="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" />
|
||
<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" />
|
||
<link rel="stylesheet" href="./jquery-ui.min.css" />
|
||
<link rel="stylesheet" href="default.css" />
|
||
<link rel="stylesheet" href="./search-yandex.css" />
|
||
<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>
|
||
|
||
<script type="text/javascript" src="highlight.js"></script>
|
||
<script type="text/javascript">
|
||
$(document).ready(function(){highlight();});
|
||
</script>
|
||
</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>
|
||
<!-- <div class="hero__search-form" id="search-panel">
|
||
<form class="search-form" onsubmit="ym(83179930,'reachGoal','poisk')">
|
||
<label class="search-form__label">
|
||
<span id="reset-search" class="search__icon"></span>
|
||
<input class="search-form__input" type="text">
|
||
</label>
|
||
<input class="search-form__submit" type="submit" value="Submit">
|
||
</form>
|
||
</div> -->
|
||
|
||
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
|
||
<div class="hero__search">
|
||
<a href="#" id="search-icon" class="hero__search-icon">
|
||
<img src="search-icon-white.svg" alt="search string">
|
||
</a>
|
||
<a href="#" id="side-menu-icon" class="hero__side-icon">
|
||
<img src="side_menu.svg" alt="side menu">
|
||
</a>
|
||
</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>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<main class="main container">
|
||
|
||
<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>
|
||
<span class="sidebar__close elma-365-close" id="close"></span>
|
||
</div>
|
||
<div class="sidebar__wrapper" id="side-menu">
|
||
|
||
</div>
|
||
</aside>
|
||
|
||
<article class="article" id="article">
|
||
<div class="article-inner">
|
||
<div class="content">
|
||
<header class="article__header">
|
||
<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>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Отказоустойчивый Kubernetes-кластер</span></h1>
|
||
</div>
|
||
|
||
</header>
|
||
<section class="article__content">
|
||
<div class="scroll-top-inner">
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" class="p_Normal">Персональный компьютер:</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>
|
||
<ol style="list-style-type:upper-roman" start="2">
|
||
<li value="2" class="p_Normal">Ноды Kubernetes:</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;">
|
||
<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>
|
||
<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>
|
||
<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>
|
||
</tr>
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">Kubernetes worker</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">8</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">16</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">60</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">1</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">Kubernetes system</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">8</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">16</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">200</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">1</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">Kubernetes master</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">4</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">8</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">60</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">1</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">Kubernetes frontend</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">4</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">6</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">60</p>
|
||
</td>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="text-align: center;">1</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<ul style="list-style-type:disc">
|
||
<li class="p_Normal">доступ до проксирующего <span style="font-weight: bold;">registry</span> или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;</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_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>
|
||
<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_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>
|
||
<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>
|
||
<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>
|
||
<ol style="list-style-type:upper-roman" start="2">
|
||
<li value="2" class="p_Normal">Внесите необходимые изменения в <code><b>config.yml</b></code>. Для этого выполните следующие действия:</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>
|
||
<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 />
|
||
<span class="f_CodeExample">podSubnetCIDR: 10.111.0.0/16</span><br />
|
||
<span class="f_CodeExample">serviceSubnetCIDR: 10.222.0.0/16</span><br />
|
||
<span class="f_CodeExample">kubernetesVersion: "1.23"</span><br />
|
||
<span class="f_CodeExample">clusterDomain: "cluster.local"</span><br />
|
||
<span class="f_CodeExample">---</span><br />
|
||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||
<span class="f_CodeExample">kind: InitConfiguration</span><br />
|
||
<span class="f_CodeExample">deckhouse:</span><br />
|
||
<span class="f_CodeExample"> releaseChannel: Stable</span><br />
|
||
<span class="f_CodeExample"> configOverrides:</span><br />
|
||
<span class="f_CodeExample"> global:</span><br />
|
||
<span class="f_CodeExample"> modules:</span><br />
|
||
<span class="f_CodeExample"> publicDomainTemplate: "%s.example.com"</span><br />
|
||
<span class="f_CodeExample"> cniFlannelEnabled: </span><span class="f_CodeExample" style="font-weight: bold;">true</span><br />
|
||
<span class="f_CodeExample"> cniFlannel:</span><br />
|
||
<span class="f_CodeExample"> podNetworkMode: VXLAN</span><br />
|
||
<span class="f_CodeExample">---</span><br />
|
||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||
<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;">
|
||
<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_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец внимание</span></p>
|
||
<p class="p_Normal">Установите следующие параметры в ресурсе <span style="font-weight: bold;">InitConfiguration</span>:</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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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 />
|
||
<span class="f_CodeExample">podSubnetCIDR: 10.111.0.0/16</span><br />
|
||
<span class="f_CodeExample">serviceSubnetCIDR: 10.222.0.0/16</span><br />
|
||
<span class="f_CodeExample">kubernetesVersion: "1.23"</span><br />
|
||
<span class="f_CodeExample">clusterDomain: "cluster.local"</span><br />
|
||
<span class="f_CodeExample">---</span><br />
|
||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||
<span class="f_CodeExample">kind: InitConfiguration</span><br />
|
||
<span class="f_CodeExample">deckhouse:</span><br />
|
||
<span class="f_CodeExample"> devBranch: v1.46.3</span><br />
|
||
<span class="f_CodeExample"> configOverrides:</span><br />
|
||
<span class="f_CodeExample"> global:</span><br />
|
||
<span class="f_CodeExample"> modules:</span><br />
|
||
<span class="f_CodeExample"> publicDomainTemplate: "%s.example.com"</span><br />
|
||
<span class="f_CodeExample"> cniFlannelEnabled: </span><span class="f_CodeExample" style="font-weight: bold;">true</span><br />
|
||
<span class="f_CodeExample"> cniFlannel:</span><br />
|
||
<span class="f_CodeExample"> podNetworkMode: VXLAN</span><br />
|
||
<span class="f_CodeExample"> imagesRepo: registry.example.com:443/images/deckhouse</span><br />
|
||
<span class="f_CodeExample"> registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2lzdHJ5LmV4YW1wbGUuY29tOjQ0My9pbWFnZXMvZGVja2hvdXNlIjoge319fQ==</span><br />
|
||
<span class="f_CodeExample"> registryScheme: HTTPS</span><br />
|
||
<span class="f_CodeExample"> registryCA: |</span><br />
|
||
<span class="f_CodeExample"> -----BEGIN CERTIFICATE-----</span><br />
|
||
<span class="f_CodeExample"> MIIFBzCCGu+gAwIBAgIUBZ37mm02QGGcmd5pZvWwnpCfQUowDQYGKoZIhvcNAQEL</span><br />
|
||
<span class="f_CodeExample"> BQAwHjEcMBoGA1UEAwwTaW1hZ2VzLnByb2FjdG9yLnBybzAeFw0yMjA5MjkxNDUw</span><br />
|
||
<span class="f_CodeExample"> ...</span><br />
|
||
<span class="f_CodeExample"> 9UpckrwxPhctmln5/Awd/2gcaRAxI3qBL7SyDFT0YpnGcAiGPY4Z67HhZ7h6y+2F</span><br />
|
||
<span class="f_CodeExample"> fQDSXli0r61/Fenkh5OLMihLYTm+5gjZlG1LCXpaGIpjAf16Q+3/pIqapQ==</span><br />
|
||
<span class="f_CodeExample"> -----END CERTIFICATE-----</span><br />
|
||
<span class="f_CodeExample">---</span><br />
|
||
<span class="f_CodeExample">apiVersion: deckhouse.io/v1</span><br />
|
||
<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>
|
||
</td>
|
||
</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>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" class="p_Normal">Запустите установщик.</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_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_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;">
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal"> <br />
|
||
Выполните команду:</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>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<ol style="list-style-type:upper-roman" start="2">
|
||
<li value="2" class="p_Normal">Установите Deckhouse. Для этого внутри контейнера установщика выполните команду:</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>
|
||
<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>
|
||
<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>
|
||
<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 />
|
||
<span class="f_CodeExample"> name: frontend</span><br />
|
||
<span class="f_CodeExample">spec:</span><br />
|
||
<span class="f_CodeExample"> nodeTemplate:</span><br />
|
||
<span class="f_CodeExample"> labels:</span><br />
|
||
<span class="f_CodeExample"> node-role.deckhouse.io/frontend: ""</span><br />
|
||
<span class="f_CodeExample"> taints:</span><br />
|
||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||
<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>
|
||
<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>
|
||
<ol style="list-style-type:decimal">
|
||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла frontend, выполнив команду на ноде master 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>
|
||
<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>
|
||
<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 />
|
||
<span class="f_CodeExample"> name: system</span><br />
|
||
<span class="f_CodeExample">spec:</span><br />
|
||
<span class="f_CodeExample"> nodeTemplate:</span><br />
|
||
<span class="f_CodeExample"> labels:</span><br />
|
||
<span class="f_CodeExample"> node-role.deckhouse.io/system: ""</span><br />
|
||
<span class="f_CodeExample"> taints:</span><br />
|
||
<span class="f_CodeExample"> - effect: NoExecute</span><br />
|
||
<span class="f_CodeExample"> key: dedicated.deckhouse.io</span><br />
|
||
<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>
|
||
<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>
|
||
<ol style="list-style-type:decimal">
|
||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла system, выполнив команду на ноде master 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>
|
||
<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>
|
||
<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 />
|
||
<span class="f_CodeExample"> name: worker</span><br />
|
||
<span class="f_CodeExample">spec:</span><br />
|
||
<span class="f_CodeExample"> nodeType: Static</span><br />
|
||
<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>
|
||
<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>
|
||
<ol style="list-style-type:decimal">
|
||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла worker, выполнив команду на ноде master 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>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" class="p_Normal">Получите код скрипта в кодировке Base64 для добавления и настройки нового узла master, выполнив команду на ноде master 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>
|
||
<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>
|
||
<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>
|
||
<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 />
|
||
<span class="f_CodeExample"> name: localpath-deckhouse-system</span><br />
|
||
<span class="f_CodeExample">spec:</span><br />
|
||
<span class="f_CodeExample"> nodeGroups:</span><br />
|
||
<span class="f_CodeExample"> - system</span><br />
|
||
<span class="f_CodeExample"> - worker</span><br />
|
||
<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>
|
||
<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>
|
||
<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_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>
|
||
<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 />
|
||
<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;">
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
</tr>
|
||
</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 />
|
||
<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">...</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;">
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal"> <br />
|
||
Для подключения к приватному <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>
|
||
<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 />
|
||
<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>
|
||
</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>
|
||
<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;">
|
||
<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>
|
||
</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>
|
||
<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_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 />
|
||
<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">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>
|
||
<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>
|
||
<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_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>
|
||
<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;">
|
||
<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">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"> 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"> nodeSelector:</span><br />
|
||
<span class="f_CodeExample"> node-role.kubernetes.io/frontend: ""</span><br />
|
||
<span class="f_CodeExample"> tolerations:</span><br />
|
||
<span class="f_CodeExample"> - operator: Exists</span></p>
|
||
</td>
|
||
</tr>
|
||
</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>
|
||
<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_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>
|
||
<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;">
|
||
<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 />
|
||
<span class="f_CodeExample">kind: ClusterAuthorizationRule</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"> # список учётных записей Kubernetes RBAC</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"> accessLevel: SuperAdmin</span><br />
|
||
<span class="f_CodeExample"> # разрешить пользователю делать 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">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"> email: admin@deckhouse.io</span><br />
|
||
<span class="f_CodeExample"> # это хэш пароля xgnv5gkggd, сгенерированного сейчас</span><br />
|
||
<span class="f_CodeExample"> # сгенерируйте свой или используйте этот, но только для тестирования</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"> 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>
|
||
<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>
|
||
<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>
|
||
<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;">
|
||
<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>
|
||
<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>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<ol style="list-style-type:upper-roman" start="2">
|
||
<li value="2" class="p_Normal">Распакуйте архив и переместите бинарный файл helm:</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>
|
||
|
||
<div class="bottom-nav">
|
||
|
||
<a id="prev-link" class="topic__navi_prev" href="kubernetes-deckhouse-air-gap.html">
|
||
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
|
||
class="bottom-nav__link">kubernetes-deckhouse-air-gap.html</span>
|
||
</a>
|
||
|
||
|
||
<a id="next-link" class="topic__navi_next" href="embedded-databases-settings.html">
|
||
<span class="bottom-nav__link">embedded-databases-settings.html</span> <span
|
||
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
|
||
</a>
|
||
|
||
</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>
|
||
|
||
</section>
|
||
</div>
|
||
<aside class="article__sidebar" style="display:none">
|
||
<input type="checkbox" />
|
||
<div class="article__arrow"></div>
|
||
<div class="table-of-contents elma365-right" id="toc2Content">
|
||
<h3 class="h3-toc">В этой статье</h3>
|
||
<nav id="toc2"></nav>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
</article>
|
||
</main>
|
||
<footer class="footer">
|
||
<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>
|
||
|
||
|
||
</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>
|
||
</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="//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>
|
||
<script src="./google-search.js"></script>
|
||
<script src="./main.js"></script>
|
||
<script type="text/javascript">
|
||
HMInitToggle('TOGGLE0186A1','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A2','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A3','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A4','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A5','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A6','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A7','hm.type','dropdown','hm.state','0');
|
||
HMInitToggle('TOGGLE0186A8','hm.type','dropdown','hm.state','0');
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|