<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Руководства для нескольких дата-центров on Cozystack</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/</link><description>Recent content in Руководства для нескольких дата-центров on Cozystack</description><generator>Hugo</generator><language>en</language><atom:link href="https://cozystack.ru/docs/v1.5/operations/stretched/index.xml" rel="self" type="application/rss+xml"/><item><title>Настройка таймаутов etcd</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/etcd/</guid><description>&lt;h2 id="возможные-проблемы"&gt;Возможные проблемы&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;etcd&lt;/strong&gt; - надежное key-value хранилище для критически важных данных, где Kubernetes API server хранит свое состояние.
Значения не считаются записанными, пока кворум узлов не подтвердит запись данных. Кроме того, etcd постоянно проверяет, что в кластере есть лидер и каждый узел знает, какой именно. Обычно кластер etcd запускается на узлах в одном дата-центре, где задержка мала, а таймауты по умолчанию настроены на максимально быстрое сообщение об ошибках. В растянутом кластере, где узлы находятся в разных дата-центрах, RTT значительно выше, и стандартные таймауты могут вызывать ложные срабатывания, как при разделении сети. В этом случае данные остаются согласованными, но etcd перейдет в readonly-режим, чтобы предотвратить split-brain. Если это происходит часто, многие другие компоненты Kubernetes начинают падать с неинформативными сообщениями об ошибках.&lt;/p&gt;</description></item><item><title>Конфигурация kube-scheduler</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/kubeschedulerconfiguration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/kubeschedulerconfiguration/</guid><description>&lt;h2 id="добавьте-метки-на-узлы"&gt;Добавьте метки на узлы&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl label node &amp;lt;nodename&amp;gt; topology.kubernetes.io/zone&lt;span style="color:#666"&gt;=&lt;/span&gt;A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="создайте-глобальные-topology-spread-constraints-для-приложений"&gt;Создайте глобальные topology spread constraints для приложений&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;v1&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ConfigMap&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;metadata&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;cozystack-scheduling&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;namespace&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;cozy-system&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;data&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;globalAppTopologySpreadConstraints&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|&lt;span style="color:#4070a0;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4070a0;font-style:italic"&gt; topologySpreadConstraints:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4070a0;font-style:italic"&gt; - maxSkew: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4070a0;font-style:italic"&gt; topologyKey: topology.kubernetes.io/zone
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4070a0;font-style:italic"&gt; whenUnsatisfiable: DoNotSchedule&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="настройте-podtopologyspread"&gt;Настройте PodTopologySpread&lt;/h2&gt;
&lt;p&gt;См.: 
&lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#cluster-level-default-constraints" target="_blank"&gt;https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#cluster-level-default-constraints&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для установки через Talm добавьте в &lt;code&gt;templates/_helpers.tpl&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;cluster&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;scheduler&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;config&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;kubescheduler.config.k8s.io/v1beta3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;KubeSchedulerConfiguration&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;profiles&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#062873;font-weight:bold"&gt;schedulerName&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;default-scheduler&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;pluginConfig&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#062873;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PodTopologySpread&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;args&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;defaultConstraints&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#062873;font-weight:bold"&gt;maxSkew&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;topologyKey&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;topology.kubernetes.io/zone&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;whenUnsatisfiable&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ScheduleAnyway&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#062873;font-weight:bold"&gt;defaultingType&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;List&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Примените изменения:&lt;/p&gt;</description></item><item><title>Метки узлов</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/labels/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/labels/</guid><description>&lt;h2 id="как-работают-топологические-метки"&gt;Как работают топологические метки&lt;/h2&gt;
&lt;p&gt;При запуске Kubernetes-кластера в нескольких дата-центрах важно понимать, какие workloads нужно размещать рядом друг с другом, например базу данных и backend-приложение, а какие - распределять по разным площадкам, например несколько реплик frontend, реплики базы данных или реплики томов. Первый шаг к этому - добавить метки на узлы Kubernetes. В публичных облаках обычно используются термины &lt;code&gt;zone&lt;/code&gt; и &lt;code&gt;region&lt;/code&gt;. В Kubernetes наиболее распространенный способ обозначить географическое расположение - использовать метки &lt;code&gt;topology.kubernetes.io/zone&lt;/code&gt; и &lt;code&gt;topology.kubernetes.io/region&lt;/code&gt; или только метку zone.&lt;/p&gt;</description></item><item><title>Конфигурация LINSTOR DRBD</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/drbd-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/drbd-tuning/</guid><description>&lt;h2 id="введение"&gt;Введение&lt;/h2&gt;
&lt;p&gt;В этом руководстве описана конфигурация, необходимая для использования хранилища LINSTOR в растянутом (распределенном) кластере Cozystack.&lt;/p&gt;
&lt;p&gt;DRBD (Distributed Replicated Block Device) - система репликации блочных устройств на уровне ядра, работающая по сети.
Сервер LINSTOR управляет томами DRBD, включая их создание, удаление и оркестрацию между узлами.&lt;/p&gt;
&lt;h2 id="сложности-при-использовании-drbd"&gt;Сложности при использовании DRBD&lt;/h2&gt;
&lt;p&gt;DRBD считает данные записанными только после того, как они достигли кворума узлов.
Но поскольку для конечного пользователя DRBD выглядит как блочное устройство, при нехватке узлов для кворума он должен вернуть ошибку в пределах заданного таймаута.&lt;/p&gt;</description></item><item><title>Настройка выделенной сети для распределенного хранилища с LINSTOR</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/linstor-dedicated-network/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/linstor-dedicated-network/</guid><description>&lt;h2 id="введение"&gt;Введение&lt;/h2&gt;
&lt;p&gt;В этом руководстве описано, как повысить надежность и производительность хранилища в распределенных кластерах Cozystack.&lt;/p&gt;
&lt;p&gt;В гиперконвергентных кластерах для трафика хранилища обычно выделяют отдельную сеть.
Однако не всегда возможно выделить отдельные storage-каналы между дата-центрами.&lt;/p&gt;
&lt;p&gt;Если для хранилища нет выделенных междатацентровых каналов, есть два варианта:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;изолировать storage-узлы в каждом дата-центре;&lt;/li&gt;
&lt;li&gt;передавать storage-трафик через существующие uplink вместе с другими workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В этом руководстве показано, как настроить LINSTOR на использование выделенной сети для storage-трафика внутри каждого дата-центра и при необходимости переключаться на общие каналы между дата-центрами.&lt;/p&gt;</description></item><item><title>Конфигурация SeaweedFS Multi-DC</title><link>https://cozystack.ru/docs/v1.5/operations/stretched/seaweedfs-multidc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozystack.ru/docs/v1.5/operations/stretched/seaweedfs-multidc/</guid><description>&lt;p&gt;В этом руководстве описано, как развернуть SeaweedFS в нескольких дата-центрах (&amp;ldquo;multi-DC&amp;rdquo;).
Multi-zone конфигурация SeaweedFS доступна начиная с Cozystack v0.34.0.&lt;/p&gt;
&lt;h2 id="конфигурация-seaweedfs-multi-dc"&gt;Конфигурация SeaweedFS Multi-DC&lt;/h2&gt;
&lt;p&gt;Чтобы растянуть SeaweedFS на несколько DC, создайте новый кластер в режиме multi-DC.&lt;/p&gt;
&lt;p&gt;По умолчанию SeaweedFS работает в одном дата-центре (DC), и уже запущенное single-DC-развертывание нельзя переключить в multi-DC-режим.
Если нужно изменить топологию, удалите текущий экземпляр SeaweedFS и создайте новый с нужным режимом.&lt;/p&gt;
&lt;p&gt;Удобный порядок действий:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Разверните tenant с &lt;code&gt;seaweedfs: false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Создайте новый экземпляр SeaweedFS в namespace tenant, используя нужную топологию.&lt;/li&gt;
&lt;li&gt;Обновите tenant, установив &lt;code&gt;seaweedfs: true&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="1-создайте-tenant-без-seaweedfs"&gt;1. Создайте tenant без SeaweedFS&lt;/h3&gt;
&lt;p&gt;Поле &lt;code&gt;isolated&lt;/code&gt;, которое в ранних релизах Cozystack было доступно в объекте Tenant, удалено в v1.0.
Текущая модель сетевой изоляции описана в upgrade notes: 
&lt;a href="https://cozystack.ru/docs/v1.5/operations/upgrades/#tenant-isolated-flag-removed" target="_blank"&gt;флаг &lt;code&gt;isolated&lt;/code&gt; у Tenant удален&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>