Compare commits

..

18 Commits

Author SHA1 Message Date
Александр Анисин 06ed9845f1 Исправления ссылок 2026-05-26 09:35:35 +03:00
Левченко Людмила Алексеевна ed36dfb22b Merge branch 'feature/PaaS-Deckhouse' into 'main'
Feature/PaaS-Deckhouse

See merge request common/lk-beecloud/beecloud-docs!34
2026-05-22 12:14:39 +03:00
Левченко Людмила Алексеевна fe97e6c8ac Feature/PaaS-Deckhouse 2026-05-22 12:14:39 +03:00
Левченко Людмила Алексеевна b4dd7e6124 Merge branch 'hotfix/remove-extra-line' into 'main'
fix: убрала лишнее из конфликта

See merge request common/lk-beecloud/beecloud-docs!32
2026-05-20 12:20:56 +03:00
Левченко Людмила Алексеевна 8b000bbc5a fix: убрала лишнее из конфликта 2026-05-20 12:07:42 +03:00
Левченко Людмила Алексеевна 4ab958bb8b Merge branch 'Apache-Kafka' into 'main'
Apache kafka

See merge request common/lk-beecloud/beecloud-docs!31
2026-05-20 11:41:38 +03:00
Левченко Людмила Алексеевна 10ccccfaeb Merge branch 'main' into 'Apache-Kafka'
# Conflicts:
#   src/.vitepress/config.mts
#   src/index.md
2026-05-20 11:34:02 +03:00
Левченко Людмила Алексеевна 2702259c01 мелкие правки 2026-05-20 11:26:58 +03:00
Левченко Людмила Алексеевна e16de52934 изменение расположения документации 2026-05-15 12:38:25 +03:00
Анисин Александр Александрович bf04aa7cc1 Merge branch 'patch/finance-gr' into 'main'
Смена грануляции на детализацию

See merge request common/lk-beecloud/beecloud-docs!27
2026-05-13 12:51:41 +00:00
Левченко Людмила Алексеевна 9f287b5f15 добавление блока брокеров + иконка 2026-05-06 13:03:08 +03:00
Левченко Людмила Алексеевна f242ddd4cb мелкие правки 2026-05-06 12:32:09 +03:00
Левченко Людмила Алексеевна 3a96cb441e правки kafka 2026-04-30 12:06:57 +03:00
Левченко Людмила Алексеевна c01886e49b Праавки по сервису kafka 2026-04-29 10:22:17 +03:00
Yana Ishkhanova 9a21a53e11 Внесение правок в статьи по постгресу и кафке 2026-04-21 17:35:44 +03:00
Yana Ishkhanova 83f5e68647 внесение дополнительной информации 2026-04-17 11:46:26 +03:00
Yana Ishkhanova 46b4dfec73 внесение дополнительной информации в статью по кафке 2026-04-17 11:41:26 +03:00
Yana Ishkhanova ff8c1af855 Добавлены статьи по кафке 2026-04-07 11:35:23 +03:00
31 changed files with 1759 additions and 117 deletions
+4 -1
View File
@@ -4,9 +4,12 @@
"description": "Beeline Cloud docs",
"main": "index.js",
"scripts": {
"predev": "node scripts/check-links.mjs",
"dev": "vitepress dev src",
"prebuild": "node scripts/check-links.mjs",
"build": "vitepress build src",
"preview": "vitepress preview src"
"preview": "vitepress preview src",
"check-links": "node scripts/check-links.mjs"
},
"keywords": [],
"authors": {
+186
View File
@@ -0,0 +1,186 @@
import { readFileSync, readdirSync, statSync, existsSync, realpathSync } from 'node:fs';
import { join, dirname, resolve, relative, extname } from 'node:path';
import { fileURLToPath } from 'node:url';
const ROOT = resolve(fileURLToPath(import.meta.url), '../..');
const SRC = join(ROOT, 'src');
const PUBLIC_DIR = join(SRC, 'public');
const CONFIG = join(SRC, '.vitepress/config.mts');
const HOME = join(SRC, 'index.md');
function walk(dir, out = [], skipDirs = new Set()) {
if (!existsSync(dir)) return out;
for (const name of readdirSync(dir)) {
if (skipDirs.has(name)) continue;
const p = join(dir, name);
const s = statSync(p);
if (s.isDirectory()) walk(p, out, skipDirs);
else out.push(p);
}
return out;
}
const docFiles = walk(SRC, [], new Set(['node_modules', '.vitepress', 'public', 'assets']));
const mdFiles = docFiles.filter(f => f.endsWith('.md'));
function checkTarget(target, fromFile) {
const url = target.trim();
if (!url) return { ok: false, reason: 'empty' };
if (/^(https?:|mailto:|tel:|ftp:|data:|javascript:|#)/i.test(url)) return { ok: true, skip: true };
const [pathPart] = url.split('#');
const [pathOnly] = pathPart.split('?');
if (!pathOnly) return { ok: true, skip: true };
let abs;
if (pathOnly.startsWith('/')) {
abs = join(SRC, pathOnly);
if (!existsSync(abs)) {
const inPublic = join(PUBLIC_DIR, pathOnly);
if (existsSync(inPublic)) return { ok: true };
}
} else {
abs = resolve(dirname(fromFile), pathOnly);
}
if (existsSync(abs)) return { ok: true };
if (extname(abs) === '') {
if (existsSync(abs + '.md')) return { ok: true };
if (existsSync(join(abs, 'index.md'))) return { ok: true };
}
if (extname(abs) === '.html') {
if (existsSync(abs.replace(/\.html$/, '.md'))) return { ok: true };
}
return { ok: false, reason: 'not found' };
}
function resolveToMd(target, fromFile) {
const url = target.trim();
if (!url) return null;
if (/^(https?:|mailto:|tel:|ftp:|data:|javascript:|#)/i.test(url)) return null;
const [pathPart] = url.split('#');
const [pathOnly] = pathPart.split('?');
if (!pathOnly) return null;
const abs = pathOnly.startsWith('/')
? join(SRC, pathOnly)
: resolve(dirname(fromFile), pathOnly);
if (extname(abs) === '.md' && existsSync(abs)) return abs;
if (extname(abs) === '') {
if (existsSync(abs + '.md')) return abs + '.md';
if (existsSync(join(abs, 'index.md'))) return join(abs, 'index.md');
}
if (extname(abs) === '.html') {
const asMd = abs.replace(/\.html$/, '.md');
if (existsSync(asMd)) return asMd;
}
return null;
}
const broken = [];
const usedMd = new Set();
const mdLinkRe = /(!?)\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
const htmlLinkRe = /<(?:img[^>]+src|a[^>]+href|source[^>]+src|video[^>]+src|link[^>]+href)\s*=\s*["']([^"']+)["']/gi;
const frontmatterLinkRe = /^\s*-?\s*link:\s*['"]?([^\s'"#]+)['"]?\s*$/;
const includeRe = /<!--\s*@include:\s*([^\s>-]+(?:\.md)?)[^>]*-->/g;
function recordUse(target, fromFile) {
const md = resolveToMd(target, fromFile);
if (md) usedMd.add(md);
}
for (const file of mdFiles) {
const content = readFileSync(file, 'utf8');
const lines = content.split('\n');
let fmStart = -1, fmEnd = -1;
if (lines[0]?.trim() === '---') {
fmStart = 0;
for (let i = 1; i < lines.length; i++) {
if (lines[i].trim() === '---') { fmEnd = i; break; }
}
}
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const inFrontmatter = fmStart !== -1 && i > fmStart && i < fmEnd;
if (inFrontmatter) {
const m = line.match(frontmatterLinkRe);
if (m) {
const res = checkTarget(m[1], file);
if (!res.ok && !res.skip) {
broken.push({ file: relative(ROOT, file), line: i + 1, target: m[1], type: 'frontmatter' });
} else {
recordUse(m[1], file);
}
}
continue;
}
for (const m of line.matchAll(mdLinkRe)) {
const res = checkTarget(m[3], file);
if (!res.ok && !res.skip) {
broken.push({ file: relative(ROOT, file), line: i + 1, target: m[3], type: m[1] === '!' ? 'image' : 'link' });
} else {
recordUse(m[3], file);
}
}
for (const m of line.matchAll(htmlLinkRe)) {
const res = checkTarget(m[1], file);
if (!res.ok && !res.skip) {
broken.push({ file: relative(ROOT, file), line: i + 1, target: m[1], type: 'html' });
} else {
recordUse(m[1], file);
}
}
for (const m of line.matchAll(includeRe)) {
recordUse(m[1], file);
}
}
}
const cfgLines = readFileSync(CONFIG, 'utf8').split('\n');
const sidebarLinkRe = /link:\s*['"]([^'"]+)['"]/g;
for (let i = 0; i < cfgLines.length; i++) {
const line = cfgLines[i];
if (/^\s*\/\//.test(line)) continue;
for (const m of line.matchAll(sidebarLinkRe)) {
const target = m[1];
if (!target) continue;
const res = checkTarget(target, CONFIG);
if (!res.ok && !res.skip) {
broken.push({ file: relative(ROOT, CONFIG), line: i + 1, target, type: 'sidebar' });
} else {
recordUse(target, CONFIG);
}
}
}
const orphans = mdFiles
.filter(f => f !== HOME && !usedMd.has(f))
.map(f => relative(ROOT, f))
.sort();
broken.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line);
let hasBroken = false;
if (broken.length === 0) {
console.log('OK: битых ссылок не найдено');
} else {
hasBroken = true;
console.log(`Найдено битых ссылок: ${broken.length}\n`);
let lastFile = '';
for (const b of broken) {
if (b.file !== lastFile) { console.log(`\n${b.file}`); lastFile = b.file; }
console.log(` L${b.line} [${b.type}] -> ${b.target}`);
}
}
console.log('');
if (orphans.length === 0) {
console.log('OK: неиспользуемых страниц не найдено');
} else {
console.log(`WARN: найдено неиспользуемых страниц (не упомянуты ни в sidebar, ни в других md): ${orphans.length}\n`);
for (const f of orphans) console.log(` ${f}`);
}
process.exit(hasBroken ? 1 : 0);
+162 -90
View File
@@ -135,19 +135,26 @@ export default defineConfig({
label: 'Содержание'
},
sidebar: {
'/platform/': [
{
text: 'Платформа Beeline Cloud', link: '/platform/index.md',
collapsed: true,
items: [
{text: 'Обзор', link: '/platform/about.md'},
{text: 'Типы тарификации', link: '/platform/billing-types.md'},
{text: 'Техническая поддержка', link: '/platform/support/support-overview.md'},
],
},
],
'/legal/': [
{ text: 'Юридические документы', link: '/legal/index.md' },
],
'/security/': [
{
text: 'Сервисы информационной безопасности в Beeline Cloud', link: '/security/index.md',
@@ -157,7 +164,7 @@ export default defineConfig({
collapsed: true,
items: [
{
text: 'Состав сервиса SA', link: '/security/Cloud-SA/compond-index.md',
text: 'Состав сервиса SA', link: '/security/Cloud-SA/compond-SA/compond-index.md',
collapsed: true,
items: [
{ text: 'Обзор сервиса', link: '/security/Cloud-SA/compond-SA/about.md' },
@@ -199,7 +206,7 @@ export default defineConfig({
items: [
{ text: 'Обзор сервиса', link: '/security/Cloud-MDM/about.md' },
{
text: 'Описание сервиса MDM', link: '/security/Cloud-MDM/discription-index.md',
text: 'Описание сервиса MDM', link: '/security/Cloud-MDM/description/description-index.md',
collapsed: true,
items: [
{ text: 'Состав сервиса', link: '/security/Cloud-MDM/description/compound.md' },
@@ -213,7 +220,7 @@ export default defineConfig({
{ text: 'Сроки и условия предоставления сервиса', link: '/security/Cloud-MDM/provision.md' },
{ text: 'Порядок платежей', link: '/security/Cloud-MDM/payments.md' },
{
text: 'Инструкиця', link: '/security/Cloud-MDM/instructions-index.md',
text: 'Инструкиця', link: '/security/Cloud-MDM/instructions/index.md',
collapsed: true,
items: [
{ text: 'Инструкция', link: '/security/Cloud-MDM/instructions/instructions.md' },
@@ -232,7 +239,7 @@ export default defineConfig({
{ text: 'Спецификация сервиса', link: '/security/Cloud-NGFW/specification.md' },
{ text: 'Состав сервиса', link: '/security/Cloud-NGFW/compound.md' },
{ text: 'Сроки и условия предоставления сервиса. Зоны ответственности', link: '/security/Cloud-NGFW/provision.md' },
{ text: 'Порядок платежей', link: '/security/Cloud-NGFW/payment.md' },
{ text: 'Структура платежей', link: '/security/Cloud-NGFW/payment.md' },
]
},
{
@@ -262,15 +269,77 @@ export default defineConfig({
]
},
],
'/PaaS/': [
{ text: 'PostgreSQL', link: '/PaaS/PostgreSQL/PostgreSQL-index.md' },
{ text: 'Обзор сервиса', link: '/PaaS/PostgreSQL/about.md' },
{ text: 'Параметры кластера', link: '/PaaS/PostgreSQL/cluster-parameter.md' },
{ text: 'Подключение', link: '/PaaS/PostgreSQL/connection.md' },
{ text: 'Grafana', link: '/PaaS/PostgreSQL/grafana.md' },
{ text: 'pgAdmin', link: '/PaaS/PostgreSQL/pgadmin.md' },
{ text: 'Возможности пользователя', link: '/PaaS/PostgreSQL/user-capabilities.md' },
// '/billing/': [
// ],
// '/backups/': [
// {
// text: 'Резервное копирование', link: '/backups/index.md',
// },
// {
// text: 'Обзор сервиса', link: '/backups/backups-overview.md',
// collapsed: true,
// items: [
// {text: 'О сервисе', link: '/backups/about.md'},
// {text: 'Квоты и лимиты', link: '/backups/backup-quatos.md'},
// ]
// },
// ],
'/PostgreSQL/': [
{
text: 'Начало работы в Cloud PostgreSQL', link: '/PostgreSQL/PostgreSQL-index.md',
},
{
text: 'Cloud PostgreSQL', link: '/PostgreSQL/service/service-index.md',
collapsed: true,
items: [
{text: 'Обзор сервиса', link: '/PostgreSQL/service/about.md'},
{text: 'Описание технических параметров', link: '/PostgreSQL/service/cluster-parameter.md'},
{text: 'Общая схема подключения', link: '/PostgreSQL/service/connection.md'},
{text: 'Возможности пользователя', link: '/PostgreSQL/service/user-capabilities.md'},
{text: 'Веб-интерфейс pgAdmin', link: '/PostgreSQL/service/pgadmin.md'},
{text: 'Веб-интерфейс Grafana', link: '/PostgreSQL/service/grafana.md'},
],
},
{text: 'IPSEC', link: '/PostgreSQL/IPSEC.md'},
{text: 'Cloud Interconnect', wip: true },
{text: '1C', wip: true },
],
'/Deckhouse/': [
{ text: 'Deckhouse', link: '/Deckhouse/index.md',
collapsed: true,
items: [
{text: 'Обзор сервиса', link: '/Deckhouse/about.md'},
{text: 'Права и возможности пользователей', link: '/Deckhouse/user-permissions.md'},
{text: 'Описание технических параметров', link: '/Deckhouse/technical-parameters.md'},
{text: 'Подключение к сервису', link: '/Deckhouse/connection.md'}
]
},
],
'/Apache-Kafka/': [
{ text: 'Apache-Kafka', link: '/Apache-Kafka/Kafka-index.md',
collapsed: true,
items: [
{text: 'Обзор сервиса', link: '/Apache-Kafka/about-service.md'},
{text: 'Работа с кластером Kafka по тарифу Base', link: '/Apache-Kafka/base-tier-connection.md'},
{text: 'Настройка топика по тарифу Base', link: '/Apache-Kafka/base-tier-topics-guide.md'},
{text: 'Конфигурация кластера', link: '/Apache-Kafka/cluster-configuretion.md'},
{text: 'Работа с кластером Kafka по тарифу Full', link: '/Apache-Kafka/full-tier-connection.md'},
],
}
],
'/finance/': [
{ text: 'Финансы', link: '/finance/about.md' },
{ text: 'Счета', wip: true },
@@ -280,84 +349,87 @@ export default defineConfig({
{ text: 'Рекомендации', wip: true },
{ text: 'Управление тегами', wip: true },
],
'/vdc/': [
{
text: 'Виртуальные дата-центры на VMware', link: '/vdc/index.md',
},
{
text: 'Обзор сервиса', link: '/vdc/vdc-overview.md',
collapsed: true,
items: [
{ text: 'О сервисе', link: '/vdc/vdc-about.md' },
{ text: 'Техническое описание', link: '/vdc/vdc-tech.md' },
]
},
{ text: 'Подключиться к виртуальному дата-центру', link: '/vdc/vdc-getting-started.md' },
{ text: 'Виртуальные машины', link: '/vdc/vdc-how-to/vm/vm-index.md',
collapsed: true,
items: [
{text: 'Создание ВМ', link: '/vdc/vdc-how-to/vm/create-vm.md'},
{text: 'Создание vApp', link: '/vdc/vdc-how-to/vm/create-vapp.md'},
{text: 'Управление состоянием ВМ', link: '/vdc/vdc-how-to/vm/manage-vm.md'},
{text: 'Клонирование ВМ', link: '/vdc/vdc-how-to/vm/clone-vm.md'},
{text: 'Изменение конфигурации ВМ', link: '/vdc/vdc-how-to/vm/edit-vm.md'},
{text: 'Удаление ВМ', link: '/vdc/vdc-how-to/vm/delete-vm.md'},
{text: 'Группы размещения', link: '/vdc/vdc-how-to/vm/create-affinity-rules.md'},
{text: 'Снимки ВМ', link: '/vdc/vdc-how-to/vm/create-snapshot.md'},
{text: 'VMware Tools', link: '/vdc/vdc-how-to/vm/vmware-tools.md'},
],
},
{ text: 'Диски',
collapsed: true,
items: [
{text: 'Обзор', link: '/vdc/vdc-how-to/disks/about.md'},
{text: 'Создание диска', link: '/vdc/vdc-how-to/disks/create-disk.md'},
{text: 'Проверка состояния диска', link: '/vdc/vdc-how-to/disks/view-disk.md'},
{text: 'Подключение выделенного диска к ВМ', link: '/vdc/vdc-how-to/disks/attach-disk.md'},
{text: 'Изменение политики хранения дисков ВМ', link: '/vdc/vdc-how-to/disks/change-storage-policy-of-vm.md'},
{text: 'Редактирование параметров диска', link: '/vdc/vdc-how-to/disks/edit-disk.md'},
{text: 'Удаление диска', link: '/vdc/vdc-how-to/disks/delete-disk.md'},
],
},
{ text: 'Сети', link: '/vdc/vdc-how-to/networks/networks-index.md',
collapsed: true,
items: [
{text: 'Обзор', link: '/vdc/vdc-how-to/networks/about.md'},
{text: 'Настройка доступа к ВМ из интернета', link: '/vdc/vdc-how-to/networks/allow-external-connections-to-vm.md'},
{text: 'Подключение ВМ в vApp к сети', link: '/vdc/vdc-how-to/networks/connect-vapp-to-network.md'},
{text: 'Подключение ВМ к интернету', link: '/vdc/vdc-how-to/networks/connect-vm-to-network.md'},
{text: 'Создание сети в организации и подключение к Edge Gateway', link: '/vdc/vdc-how-to/networks/create-network.md'},
{text: 'Подключение сети к Edge Gateway', link: '/vdc/vdc-how-to/networks/connect-to-edge-gateway.md'},
{text: 'Создание Pre-Shared Key', link: '/vdc/vdc-how-to/networks/create-psk.md'},
{text: 'Настройка site-to-site подключения с помощью IPSec', link: '/vdc/vdc-how-to/networks/how-to-setup-ipsec-vpn.md',
collapsed: true,
items: [
{text: 'Настройка IPSec VPN', link: '/vdc/vdc-how-to/networks/ipsec/setup-ipsec-vpn.md'},
{text: 'Настройка ASAv для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/asav.md'},
{text: 'Настройка CSR 1000v для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/csr1000v.md'},
{text: 'Настройка Fortigate для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/fortigate.md'},
{text: 'Проверить сетевую связанность', link: '/vdc/vdc-how-to/networks/ipsec/check-vpn-status.md'},
],
},
],
},
{ text: 'Пользователи и роли', link: '/vdc/vdc-how-to/users/users-index.md',
collapsed: true,
items: [
{text: 'Ролевая модель', link: '/vdc/vdc-how-to/users/roles.md'},
{text: 'Создание пользователя', link: '/vdc/vdc-how-to/users/add-user.md'},
{text: 'Изменение пароля пользователя', link: '/vdc/vdc-how-to/users/change-users-password.md'},
{text: 'Настройка квот', link: '/vdc/vdc-how-to/users/quotas.md'},
],
},
{ text: 'Двухфакторная аутентификация', link: '/vdc/vdc-how-to/vdc-2fa.md',
collapsed: true,
items: [
{text: 'Подключение 2FA', link: '/vdc/vdc-how-to/vdc-2fa-start.md'},
{text: 'Управление 2FA', link: '/vdc/vdc-how-to/vdc-2fa-manage.md'},
],
},
],
'/vdc/': [
{
text: 'Виртуальные дата-центры на VMware', link: '/vdc/index.md',
},
{
text: 'Обзор сервиса', link: '/vdc/vdc-overview.md',
collapsed: true,
items: [
{ text: 'О сервисе', link: '/vdc/vdc-about.md' },
{ text: 'Техническое описание', link: '/vdc/vdc-tech.md' },
]
},
{ text: 'Подключиться к виртуальному дата-центру', link: '/vdc/vdc-getting-started.md' },
{ text: 'Виртуальные машины', link: '/vdc/vdc-how-to/vm/vm-index.md',
collapsed: true,
items: [
{text: 'Создание ВМ', link: '/vdc/vdc-how-to/vm/create-vm.md'},
{text: 'Создание vApp', link: '/vdc/vdc-how-to/vm/create-vapp.md'},
{text: 'Управление состоянием ВМ', link: '/vdc/vdc-how-to/vm/manage-vm.md'},
{text: 'Клонирование ВМ', link: '/vdc/vdc-how-to/vm/clone-vm.md'},
{text: 'Изменение конфигурации ВМ', link: '/vdc/vdc-how-to/vm/edit-vm.md'},
{text: 'Удаление ВМ', link: '/vdc/vdc-how-to/vm/delete-vm.md'},
{text: 'Группы размещения', link: '/vdc/vdc-how-to/vm/create-affinity-rules.md'},
{text: 'Снимки ВМ', link: '/vdc/vdc-how-to/vm/create-snapshot.md'},
{text: 'VMware Tools', link: '/vdc/vdc-how-to/vm/vmware-tools.md'},
],
},
{ text: 'Диски',
collapsed: true,
items: [
{text: 'Обзор', link: '/vdc/vdc-how-to/disks/about.md'},
{text: 'Создание диска', link: '/vdc/vdc-how-to/disks/create-disk.md'},
{text: 'Проверка состояния диска', link: '/vdc/vdc-how-to/disks/view-disk.md'},
{text: 'Подключение выделенного диска к ВМ', link: '/vdc/vdc-how-to/disks/attach-disk.md'},
{text: 'Изменение политики хранения дисков ВМ', link: '/vdc/vdc-how-to/disks/change-storage-policy-of-vm.md'},
{text: 'Редактирование параметров диска', link: '/vdc/vdc-how-to/disks/edit-disk.md'},
{text: 'Удаление диска', link: '/vdc/vdc-how-to/disks/delete-disk.md'},
],
},
{ text: 'Сети', link: '/vdc/vdc-how-to/networks/networks-index.md',
collapsed: true,
items: [
{text: 'Обзор', link: '/vdc/vdc-how-to/networks/about.md'},
{text: 'Настройка доступа к ВМ из интернета', link: '/vdc/vdc-how-to/networks/allow-external-connections-to-vm.md'},
{text: 'Подключение ВМ в vApp к сети', link: '/vdc/vdc-how-to/networks/connect-vapp-to-network.md'},
{text: 'Подключение ВМ к интернету', link: '/vdc/vdc-how-to/networks/connect-vm-to-network.md'},
{text: 'Создание сети в организации и подключение к Edge Gateway', link: '/vdc/vdc-how-to/networks/create-network.md'},
{text: 'Подключение сети к Edge Gateway', link: '/vdc/vdc-how-to/networks/connect-to-edge-gateway.md'},
{text: 'Создание Pre-Shared Key', link: '/vdc/vdc-how-to/networks/create-psk.md'},
{text: 'Настройка site-to-site подключения с помощью IPSec', link: '/vdc/vdc-how-to/networks/how-to-setup-ipsec-vpn.md',
collapsed: true,
items: [
{text: 'Настройка IPSec VPN', link: '/vdc/vdc-how-to/networks/ipsec/setup-ipsec-vpn.md'},
{text: 'Настройка ASAv для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/asav.md'},
{text: 'Настройка CSR 1000v для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/csr1000v.md'},
{text: 'Настройка Fortigate для IPsec VPN', link: '/vdc/vdc-how-to/networks/ipsec/fortigate.md'},
{text: 'Проверить сетевую связанность', link: '/vdc/vdc-how-to/networks/ipsec/check-vpn-status.md'},
],
},
],
},
{ text: 'Пользователи и роли', link: '/vdc/vdc-how-to/users/users-index.md',
collapsed: true,
items: [
{text: 'Ролевая модель', link: '/vdc/vdc-how-to/users/roles.md'},
{text: 'Создание пользователя', link: '/vdc/vdc-how-to/users/add-user.md'},
{text: 'Изменение пароля пользователя', link: '/vdc/vdc-how-to/users/change-users-password.md'},
{text: 'Настройка квот', link: '/vdc/vdc-how-to/users/quotas.md'},
],
},
{ text: 'Двухфакторная аутентификация', link: '/vdc/vdc-how-to/vdc-2fa.md',
collapsed: true,
items: [
{text: 'Подключение 2FA', link: '/vdc/vdc-how-to/vdc-2fa-start.md'},
{text: 'Управление 2FA', link: '/vdc/vdc-how-to/vdc-2fa-manage.md'},
],
},
],
// { text: 'Тарификация', link: '/vdc/vdc-tarif.md' },
'/monitoring/': [
+22
View File
@@ -0,0 +1,22 @@
---
section_links:
- title: Назначение сервиса
link: /Apache-Kafka/about-service.md
description: Назначения и преимущества сервиса
- title: Работа с кластером Kafka по тарифу Base
link: /Apache-Kafka/base-tier-connection.md
description: Подключение и работа с кластером Kafka по тарифу Base
- title: Настройка топика по тарифу Base
link: /Apache-Kafka/base-tier-topics-guide.md
description: Рекомендации по настройке топика Kafka по тарифу Base
- title: Конфигурация кластера
link: /Apache-Kafka/cluster-configuretion.md
description: Конфигурации и возможности кластера Kafka
- title: Работа с кластером Kafka по тарифу Full
link: /Apache-Kafka/full-tier-connection.md
description: Подключение и работа с кластером Kafka по тарифу Full
---
# Apache-Kafka
В данном разделе представлена документация по управляемому сервису **Apache-Kafka** платформы Beeline Cloud.
+75
View File
@@ -0,0 +1,75 @@
# Назначение сервиса
Данный сервис предназначен для команд, которым требуется надёжный и масштабируемый конвейер данных без необходимости самостоятельно разворачивать и обслуживать инфраструктуру Kafka.
**Apache Kafka** - это распределённая система для потоковой передачи данных в реальном времени. Сервис обеспечивает надёжную и масштабируемую доставку сообщений между компонентами приложений, гарантируя отказоустойчивость и высокую производительность.
В архитектуре современных информационных систем Kafka выполняет роль централизованного конвейера данных: одни сервисы (продюсеры) публикуют сообщения, а другие (консьюмеры) получают эти сообщения по мере необходимости.
## Основные понятия
| Термин | Описание |
|--------------------------------|----------|
| **Продюсер (Producer)** | Программный компонент, который отправляет данные в Kafka. Продюсером может выступать любой сервис, генерирующий события: модуль приложения, система логирования, датчик IoT-устройства. |
| **Консьюмер (Consumer)** | Программный компонент, который получает данные из Kafka. Консьюмер подписывается на интересующие его события и обрабатывает поступающие сообщения. |
| **Топик (Topic)** | Именованный канал для хранения сообщений определённого типа. Топики организуют потоки данных по смыслу: например, «заказы», «ошибки», «события авторизации». Консьюмеры подписываются на один или несколько топиков для получения релевантных данных. |
| **Партиция (Partition)** | Каждый топик разделяется на партиции - логические сегменты, распределяемые между серверами кластера. Партиции обеспечивают параллельную обработку данных: различные части одного топика могут обрабатываться одновременно несколькими консьюмерами. |
| **Репликация (Replication)** | Для обеспечения отказоустойчивости партиции копируются на несколько серверов (брокеров). При выходе одного сервера из строя данные остаются доступными на других узлах кластера. |
| **Микросервисная архитектура** | Kafka является стандартным решением для организации связи между микросервисами. В такой архитектуре сервисы обмениваются событиями асинхронно, что повышает надёжность и масштабируемость системы в целом. |
## Преимущества управляемого сервиса
#### Администрирование
Клиенту не требуется самостоятельно разворачивать и обслуживать кластер Kafka. Сервис включает в себя управление инфраструктурой, обновление версий, масштабирование и поддержку работоспособности.
#### Мониторинг
Предоставляются готовые дашборды в Grafana с визуализацией ключевых метрик:
- состояние брокеров;
- нагрузка на кластер;
- настроенная система оповещений о критических событиях;
- заполнение дискового пространства.
#### Безопасность
Поддерживается шифрованное подключение к кластеру с использованием SSL/TLS-сертификатов, что гарантирует защиту данных при передаче.
#### Экспертная поддержка
Сервис создан с учётом практического опыта администрирования более 500 кластеров Kafka. Накопленная экспертиза позволяет обеспечивать стабильность работы, своевременно выявлять и устранять потенциальные проблемы, оптимизировать конфигурации под конкретные задачи.
## Тарифные планы
### 1. Тариф "Base"
Тарифный план для тех, кто имеет собственную экспертизу в работе с Kafka и желает самостоятельно управлять объектами верхнего уровня.
**Обязательства провайдера:**
- поддержка инсталляции кластера;
- своевременное обновление версий Kafka;
- расширение вычислительных ресурсов кластера по запросу клиента.
**Возможности:**
- **Управление учетными записями и правами доступа** – создание пользователей и настройка их прав для работы с Kafka;
- **Администрирование топиков** - полный цикл управления: создание, конфигурирование, настройка параметров и удаление;
- **Управление консьюмер-группами (Consumer Groups)** – возможность создавать, изменять и удалять логические объединения консьюмеров, которые совместно читают сообщения из топиков. Это обеспечивает высокую производительность и отказоустойчивость при обработке данных;
- **Работа с transactional ID** – полный цикл управления транзакционными идентификаторами (создание, изменение, удаление). Транзакционный идентификатор присваивается продюсеру Kafka для обеспечения атомарности операций: запись нескольких сообщений или коммит оффсетов выполняются по принципу «всё или ничего», а также предотвращается появление «зомби-продюсеров» при перезапусках.
Инфраструктурное ядро кластера (брокеры, репликация, отказоустойчивость) остаётся под управлением провайдера.
### 2. Тариф "Full"
Тарифный план для тех, кто предпочитает полностью делегировать задачи по администрированию Kafka.
**Обязательства провайдера:**
- полное управление кластером;
- администрирование топиков;
- управление консьюмер-группами;
- работа с transactional id.
Kafka используется как готовый сервис, не вовлекаясь в вопросы настройки и обслуживания.
+244
View File
@@ -0,0 +1,244 @@
# Подключение и работа с кластером Kafka (тариф Base)
Раздел содержит описание способов подключения к управлению кластером Kafka. Поддерживаются два типа подключения:
- `SASL_PLAINTEXT` - незашифрованное;
- `SASL_SSL` - зашифрованное (через SSL-сертификат).
Также в разделе приведены примеры работы с клиентскими утилитами и базовые операции администрирования.
## Предварительные требования
Для начала работы с кластером Kafka необходимо выполнить предварительную настройку:
1. **Установить клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию;
2. **Установить среду выполнения Java** - для работы необходимо установить среду выполнения, с помощью команды: `sudo apt install openjdk-17-jre-headless`. Рекомендуется использовать версию OpenJDK 17 или выше;
3. **Доступ к брокерам** - адреса брокеров (bootstrap servers) предоставляются после развертывания кластера;
4. **Учетные данные**:
- **Имя пользователя (username)** - стандартное значение client;
- **Пароль** - предоставляется после развертывания кластера.
5. **Корневой сертификат (для SSL-подключения)** - сертификат для зашифрованного подключения предоставляется файлом при заказе сервиса Kafka.
## Структура клиентского дистрибутива
После распаковки архива Kafka в директории bin доступны основные скрипты для управления:
| Скрипт | Назначение |
| --------------------------- | -------------------------------------------------- |
| `kafka-topics.sh` | Управление топиками (создание, удаление, просмотр) |
| `kafka-console-producer.sh` | Отправка сообщений в топик |
| `kafka-console-consumer.sh` | Чтение сообщений из топика |
| `kafka-consumer-groups.sh` | Управление консьюмер-группами |
| `kafka-configs.sh` | Изменение конфигурации топиков и других объектов |
| `kafka-acls.sh` | Управление списками доступа (ACL) |
В разделе ниже приведены примеры использования скриптов.
Подробное описание операций с данными и другими скриптами приведено в [официальной документации Kafka](https://kafka.apache.org/42/getting-started/introduction/). Дополнительную информацию можно получить, выполнив любой скрипт с флагом --help:
```
./kafka-topics.sh --help
```
#### Конфигурационные файлы клиента
Для подключения к Kafka используется файл настроек **client.properties**, который содержит параметры аутентификации, протокола и его механизмов (рекомендуются SCRAM_SHA_512 и SCRAM_SHA_256).
## Незашифрованное подключение (SASL_PLAINTEXT)
Создается файл **client.properties** со следующим содержимым:
```
sasl.mechanism=SCRAM-SHA-512
security.protocol=SASLPLAINTEXT
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="client" \
    password="вашпароль";
```
::: warning Примечание
Для незашифрованного подключения (SASL_PLAINTEXT) используется порт 9091;
:::
## Зашифрованное подключение (SASL_SSL)
Для зашифрованного подключения (в production-средах рекомендуется использовать именно его) дополнительно требуется корневой сертификат и хранилище доверенных сертификатов (truststore).
::: warning Примечание
Для зашифрованного подключения (SASL_SSL) используется порт 9092.
:::
### Шаг 1. Создание truststore
С помощью утилиты **keytool** выполняется импорт сертификата в хранилище:
```
keytool -importcert -storetype PKCS12 -keystore /путь/к/трастстору/truststore.jks -alias myalias -file ca.crt -storepass любойвашпароль -keypass любойвашпароль
```
Параметры:
- **keystore** - путь к создаваемому хранилищу;
- **alias** - псевдоним сертификата в хранилище;
- **file** - путь к загруженному корневому сертификату;
- **storepass** - пароль для доступа к хранилищу;
- **keypass** - пароль для доступа к ключу.
### Шаг 2. Настройка client.properties
В файл **client.properties** добавляются параметры SSL:
```
sasl.mechanism=SCRAM-SHA-512
security.protocol=SASLSSL
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="client" \
    password="вашпароль";
ssl.truststore.location=/путь/к/трастстору/truststore.jks
ssl.truststore.password=парольотхранилища
```
## Работа с кластером Kafka
### Создание топиков
```
./kafka-topics.sh --bootstrap-server <IP машины 0>:9092,<IP машины 1>:9092,<IP машины X>:9092 --command-config ../config/client.properties --create --topic <имя топика> --partitions <количество партиций> --replication-factor <значение> --config min.insync.replicas=<значение>
```
**Ознакомиться с рекомендациями по настройке топиков можно в разделе [Настройка топиков](./base-tier-topics-guide.md).**
По умолчанию топик создаётся с --partitions 10 --replication-factor 3 --config min.insync.replicas=2, поэтому, если нет необходимости создавать топик со специфическими настройками, эти флаги в команде можно не указывать.
### Просмотр списка топиков
Выполняется команда с указанием брокеров и файла конфигурации:
```
./kafka-topics.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_2>:9092 --command-config ~/client.properties --list
```
Параметры:
- **bootstrap-server** - список брокеров кластера (адреса и порты);
command-config - путь к файлу с настройками клиента;
- **list** - вывод списка топиков.
### Отправка сообщения в топик
Выполняется команда с указанием брокеров, файла конфигурации и топика:
```
./kafka-console-producer.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_2>:9092 --command-config~/client.properties --topic test-topic
```
После выполнения команды сообщения вводятся построчно. Для завершения используется сочетание клавиш Ctrl+C.
### Чтение сообщений из топика
Выполняется команда с указанием топика и, при необходимости, consumer group:
```
./kafka-console-consumer.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_2>:9092 --command-config~/client.properties --topic test-topic --from-beginning --group my-new-consumer-group
```
Параметры:
- **from-beginning**- чтение всех сообщений с начала (при отсутствии параметра чтение начинается с новых сообщений);
- **group** - название consumer group, которая создастся автоматически.
## Управление пользователями и доступом
### Рекомендации к созданию пароля
**Длина пароля (рекомендуемая):**
- для учётной записи пользователя - не менее 12 знаков;
- для учётных записей администраторов, технических и служебных учётных записей - не менее 16 знаков.
**Сложность пароля:** рекомендуется использовать уникальный пароль, содержащий символы как минимум трёх из четырёх указанных ниже групп (при отсутствии технических ограничений):
- буквы латинского алфавита в верхнем регистре (A-Z);
- буквы латинского алфавита в нижнем регистре (a-z);
- цифры (0-9);
- специальные символы и знаки пунктуации (например, `!@#$%^&*(),.?`).
**Периодичность смены:** рекомендуемая периодичность смены пароля - не реже одного раза в год.
### Создание пользователей
Для удобства можно написать скрипт, который создает пользователя сразу для двух методов шифрования - SHA-256 и SHA-512:
```
#!/bin/bash
username="имя_пользователя"
password="сгенерированный_пароль"
bootstrap="<IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_X>:9092"
/opt/kafka/bin/kafka-configs.sh \
          --bootstrap-server $bootstrap \
          --alter \
          --add-config SCRAM-SHA-256=[password="$password"] \
          --command-config /opt/kafka/config/client.properties \
          --entity-type users \
          --entity-name $username
/opt/kafka/bin/kafka-configs.sh \
          --bootstrap-server $bootstrap \
          --alter \
          --add-config SCRAM-SHA-512=[password="$password"] \
          --command-config /opt/kafka/config/client.properties \
          --entity-type users \
          --entity-name $username
```
**Запуск скрипта:**
```
sudo ./kafka-user-add.sh
```
### Просмотр данных о пользователе
Для просмотра информации о существующих пользователях выполняется команда:
```
sudo ./kafka-console-consumer.sh --bootstrap-server <IP_брокеров>:9092 --describe --command-config ../config/client.properties --entity-type users
```
### Управление consumer groups
Consumer Group создается автоматически при обращении к ней. Например, при чтении сообщений из топика с указанием этой consumer group:
```
sudo ./kafka-console-consumer.sh --bootstrap-server <IP_брокеров>:9092 --command-config ../config/client.properties --topic test-topic --group test-group --from-beginning
```
### Просмотр списка ACL
Действия с ACL из командной строки осуществляются скриптом kafka-acls.sh. Пример просмотра списка ACL:
```
sudo ./kafka-acls.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_X>:9092 --command-config ../config/client.properties --list
```
## Администрирование кластера
#### Изменение объема RAM
Для изменения объема оперативной памяти, выделенной под Kafka, направляется обращение в техническую поддержку с указанием требуемого объема RAM.
#### Изменение количества брокеров
Выполняется также через обращение в техническую поддержку.
Брокеров в кластере рекомендуется поддерживать **нечетным** для корректной работы механизмов выборов лидера.
После добавления брокера выполняется перераспределение существующих партиций с учетом нового узла с помощью утилиты **kafka-reassign-partitions.sh:**
```
./kafka-reassign-partitions.sh --bootstrap-server <адреса_брокеров> --generate --topics-to-move-json-file topics.json --broker-list "0,1,2" --execute
```
::: warning Примечание
Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности.
:::
@@ -0,0 +1,64 @@
# Рекомендации по настройке топика (тариф Base)
В разделе описаны основные параметры топиков Apache Kafka, влияющие на производительность, отказоустойчивость и параллелизм обработки данных.
## Базовые параметры топика
### Имя топика
При именовании топика применяются следующие правила:
**Допустимые символы:**
- первый символ — буква (a–z, A–Z), цифра (0–9) или подчёркивание (_);
- последующие символы — буквы, цифры, точки (.), дефисы (-) или подчёркивания;
- длина имени — от 3 до 200 символов.
**Ограничения:**
- имя топика нельзя изменить после создания;
- не рекомендуется использовать имена, различающиеся только точкой и подчёркиванием (например, `topic_1` и `topic.1`): Kafka не различает такие названия;
- имена с двойным подчёркиванием в начале (например, `__consumer_offsets`) зарезервированы для внутренних топиков Kafka.
### Количество партиций (partitions)
Партиции определяют уровень параллелизма при чтении и записи данных. Количество партиций выбирается исходя из требуемой пропускной способности.
**Правила:**
- количество партиций можно только увеличивать (уменьшение невозможно);
- при наличии нескольких брокеров рекомендуется выбирать число партиций, кратное количеству брокеров — для равномерного распределения нагрузки;
- рекомендуется мониторить отставание потребителей (consumer lag) и при необходимости увеличивать число партиций.
**Расчет количества партиций:**
Количество партиций определяется по формуле:
```
Partitions = max(NP, NC)
```
где:
- NP = TT / TP - количество необходимых продюсеров;
- NC = TT / TC - количество необходимых консьюмеров;
- TT - общая ожидаемая пропускная способность системы;
- TP - максимальная пропускная способность одного продюсера для одной партиции;
- TC - максимальная пропускная способность одного консьюмера для одной партиции.
## Фактор репликации (replication-factor)
Фактор репликации определяет количество копий данных, хранящихся на разных брокерах.
**Рекомендация для production-сред:** установите значение **3**.
При этом каждая партиция получает одного лидера и две реплики, что обеспечивает отказоустойчивость при выходе одного брокера.
## Дополнительные параметры конфигурации
Параметр `min.insync.replicas` (минимальное количество синхронизированных реплик) работает вместе с настройкой продюсера `acks=all`. Он задаёт, сколько реплик (включая лидера) должны подтвердить запись, чтобы она считалась успешной.
**Для production-кластера с фактором репликации = 3**
Установите `min.insync.replicas = 2`.
Что это даёт:
- **надёжность** — данные точно попали минимум на два брокера;
- **доступность** — если один брокер упадёт, запись продолжится.
::: warning Примечание
Не рекомендуется устанавливать значение равным фактору репликации (например, `min.insync.replicas = 3`). Если один брокер перезагрузится, запись в топик станет невозможной — система будет ждать подтверждения от всех трёх реплик, а одна недоступна.
:::
+108
View File
@@ -0,0 +1,108 @@
# Конфигурация кластера
В разделе описаны технические параметры кластера Kafka и порядок их первичной настройки.
Конфигурация выполняется администратором облачного провайдера на этапе развёртывания сервиса. Пользователь не имеет прямого доступа к изменению этих параметров. Перед созданием кластера клиент передаёт менеджеру перечень требуемых параметров. Администратор выполняет настройку в соответствии с согласованными требованиями.
## Выбор типа и размера дискового хранилища
Производительность брокера сообщений напрямую зависит от скорости чтения и записи на диск. При заказе кластера необходимо выбрать тип дискового хранилища — он определяет максимальную скорость работы (IOPS) и время отклика.
**IOPS** (Input/Output Operations Per Second) — количество операций чтения или записи, которые диск выполняет за секунду. Чем выше IOPS, тем быстрее брокер обрабатывает запросы.
::: warning Примечание
Каждые 15 IOPS обеспечивают примерно 1 Мбит/с скорости чтения или записи при размере блока данных 64 КБ.
:::
### Доступные типы хранилищ:
|Название | Лимит IOPS |
|---------------|--------------------|
|**Fast SAS** | до 2 IOPS на 1 ГБ |
|**SSD** | до 5 IOPS на 1 ГБ |
|**Fast SSD** | до 10 IOPS на 1 ГБ |
|**Ultra NVMe** | до 25 IOPS на 1 ГБ |
::: warning Примечание
После выбора типа диска необходимо указать объем дискового хранилища, который будет выделен под данные кластера Kafka. Минимальный объем зависит от выбранного типа хранилища
:::
## Конфигурация вычислительных ресурсов
В данном разделе определяются вычислительные мощности кластера: процессорные ресурсы, оперативная память и количество серверов (нод), из которых будет состоять кластер Kafka.
#### Основные понятия
| Термин | Описание |
|-------------------------------|----------|
| **Количество нод в кластере** | Количество нод определяет отказоустойчивость кластера и возможность распределять запросы на чтение между репликами. Чем больше нод, тем выше надежность и производительность чтения. Количество нод выбирается в диапазоне от 3 до 14. |
| **Процессор (CPU)** | Процессор - это вычислительная мощность, которая выделяется каждой ноде кластера. Количество vCPU определяет, насколько быстро брокер сообщений сможет обрабатывать запросы, выполнять сложные операции (сортировки, объединения таблиц) и обслуживать одновременные подключения. Доступный диапазон выбора процессора: от 2 шт до 24 шт. |
| **Оперативная память (RAM)** | Оперативная память - один из ключевых ресурсов для производительности. Данные, помещающиеся в RAM, обрабатываются максимально быстро, без обращения к диску. Доступный диапазон выбора оперативной памяти: от 4 ГБ до 768 ГБ. |
## Интернет
При заказе сервиса можно выбрать пропускную способность канала связи, через который будет осуществляться доступ к кластеру Kafka из сети интернет.
**Доступные варианты скорости:**
- 50 Мбит/с;
- 100 Мбит/с;
- 200 Мбит/с;
- 300 Мбит/с;
- 400 Мбит/с;
- 500 Мбит/с;
- 1000 Мбит/с (1 Гбит/с).
::: warning Примечание
Для выбранного канала предоставляется **публичный IP-адрес**.
:::
## Сетевой доступ к кластеру
Выбор способа подключения зависит от архитектуры приложений и требований к безопасности. Доступны два варианта:
- **IPsec-подключение** — организация защищённого туннеля между инфраструктурой клиента и кластером Kafka. Подробнее см. раздел «IPsec»;
- **Interconnect** — прямое сетевое соединение между сервисами внутри платформы без использования публичных сетей. Подробнее см. раздел «Interconnect».
**Особенности Interconnect:**
- сначала закажите PaaS-сервис и дождитесь его предоставления;
- затем отдельно закажите Interconnect через менеджера.
## Калькулятор расчёта кластера
Для расчёта параметров кластера Kafka разработан специализированный калькулятор — простое веб-приложение.
**Как работает:**
- в калькулятор вносятся исходные данные о планируемой нагрузке (пропускная способность, количество партиций и т.д.);
- после нажатия кнопки **«Получить»** автоматически рассчитывается конфигурация кластера.
Все поля обязательны для заполнения. Формы можно удалять, добавлять и дублировать — это позволяет гибко настраивать параметры под разные сценарии использования.
## Параметры топиков
| Параметр |Описание |
|---------------------------------------|---------|
| **Имя топика** |Уникальное наименование топика в рамках кластера. Поле обязательное. Используется для идентификации топика при расчетах.|
| **Число партиций** |Количество партиций, на которые будет разбит топик. Значение должно быть больше числа консьюмеров.|
| **Фактор репликации** |Количество копий данных, хранящихся на разных брокерах. Для продуктивных кластеров рекомендуется значение не менее 3. <br>**Примечание:** Количество узлов кластера формируется на основании параметра фактора репликации. Рекомендуется выбирать нечетное количество узлов для корректной работы механизмов выборов лидера.|
| **Средний размер сообщения** |Средний объем одного сообщения, передаваемого через топик.|
| **Максимальный размер сообщения** |Максимальный объем одного сообщения. Используется для расчета пиковых нагрузок.|
| **Частота сообщений** |Количество сообщений, отправляемых в топик за единицу времени.|
| **Срок хранения сообщения** |Период времени, в течение которого сообщения хранятся в топике после записи. По истечении этого срока данные удаляются.|
| **Имя продюсера** |Наименование приложения-отправителя (для идентификации в расчетах)|
| **Количество экземпляров продюсера** |Число одновременно работающих экземпляров продюсера.|
| **Имя консьюмера** |Наименование приложения-получателя (для идентификации в расчетах).|
| **Количество экземпляров консьюмера** |Число одновременно работающих экземпляров консьюмера. <br>**Примечание:** Формы продюсеров и консьюмеров можно добавлять, удалять и дублировать. Это позволяет учитывать множественные источники и приемники данных в рамках одного расчета.|
## Расчет конфигурации кластера
После заполнения всех полей нажимается кнопка **Получить**. Все расчеты выполняются в соответствии с планированием ресурсов, указанных в официальной документации Apache Kafka.
В результате, рассчитанные параметры служат основой для формирования заказа на управляемый сервис Kafka.
Калькулятор автоматически производит расчет следующих параметров:
- **Количество узлов** - формируется на основании параметра фактора репликации (replication.factor). Рекомендуется выбирать нечетное количество узлов для корректной работы механизмов выборов лидера;
- **vCPU** - вычисляется из планируемого количества входящих сообщений и масштабируется в зависимости от числа узлов: чем больше кластер, тем меньше требуется CPU на отдельный сервер благодаря распределению нагрузки;
- **RAM** - рассчитывается с учетом количества партиций, объема сообщений и числа подключений продюсеров и консьюмеров;
- **Тип и объем дискового хранилища** - определяется на основе среднего и максимального размера сообщения, частоты отправки, срока хранения и фактора репликации;
- **Параметры репликации** - учитывают заданный фактор репликации и обеспечивают отказоустойчивость кластера.
+138
View File
@@ -0,0 +1,138 @@
# Подключение и работа с кластером Kafka (тариф Full)
Раздел содержит описание способов подключения к управлению кластером Kafka. Поддерживаются два типа подключения:
- `SASL_PLAINTEXT` - незашифрованное;
- `SASL_SSL` - зашифрованное (через SSL-сертификат).
Также в разделе приведены примеры работы с клиентскими утилитами и базовые операции администрирования.
## Предварительные требования
Для начала работы с кластером Kafka необходимо выполнить предварительную настройку:
1. **Установить клиент Kafka** - скачивается дистрибутив Kafka (например, kafka_2.13-4.2.0) и распаковывается в удобную директорию;
2. **Установить среду выполнения Java** - для работы необходимо установить среду выполнения, с помощью команды: `sudo apt install openjdk-17-jre-headless`. Рекомендуется использовать версию OpenJDK 17 или выше;
3. **Доступ к брокерам** - адреса брокеров (bootstrap servers) предоставляются после развертывания кластера;
4. **Учетные данные**:
- Имя пользователя (username) - стандартное значение client;
- Пароль - предоставляется после развертывания кластера.
5. **Корневой сертификат (для SSL-подключения)** - сертификат для зашифрованного подключения предоставляется файлом при заказе сервиса Kafka.
## Структура клиентского дистрибутива 
После распаковки архива Kafka в директории bin доступны скрипты, например:
| Скрипт | Назначение |
|---------------------------|--------------------------|
|`kafka-console-producer.sh`|Отправка сообщений в топик|
|`kafka-console-consumer.sh`|Чтение сообщений из топика|
В разделе ниже приведены примеры использования скриптов.
Подробное описание операций с данными и другими скриптами приведено в [официальной документации Kafka](https://kafka.apache.org/42/getting-started/introduction/). Дополнительную информацию можно получить, выполнив любой скрипт с флагом --help:
```
./kafka-console-producer.sh
```
## Конфигурационные файлы клиента
Для подключения к Kafka используется файл настроек **client.properties**, который содержит параметры аутентификации, протокола и его механизмов (рекомендуются SCRAM_SHA_512 и SCRAM_SHA_256).
### Незашифрованное подключение (SASL_PLAINTEXT)
Создается файл client.properties со следующим содержимым:
```
sasl.mechanism=SCRAM-SHA-512
security.protocol=SASLPLAINTEXT
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="вашлогин" \
    password="вашпароль";
```
::: warning Примечание
Для незашифрованного подключения (SASL_PLAINTEXT) используется порт 9091;
:::
### Зашифрованное подключение (SASL_SSL)
Для зашифрованного подключения (в production-средах рекомендуется использовать именно его) дополнительно требуется корневой сертификат и хранилище доверенных сертификатов (truststore).
::: warning Примечание
Для зашифрованного подключения (SASL_SSL) используется порт 9092.
:::
### Шаг 1. Создание truststore
С помощью утилиты **keytool** выполняется импорт сертификата в хранилище:
```
keytool -importcert -storetype PKCS12 -keystore /путь/к/трастстору/truststore.jks -alias myalias -file ca.crt -storepass любойвашпароль -keypass любойвашпароль
```
Параметры:
- **keystore** - путь к создаваемому хранилищу;
- **alias** - псевдоним сертификата в хранилище;
- **file** - путь к загруженному корневому сертификату;
- **storepass** - пароль для доступа к хранилищу;
- **keypass** - пароль для доступа к ключу.
### Шаг 2. Настройка client.properties
В файл **client.properties** добавляются параметры SSL:
```
sasl.mechanism=SCRAM-SHA-512
security.protocol=SASLSSL
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="вашлогин" \
    password="вашпароль";
ssl.truststore.location=/путь/к/трастстору/truststore.jks
ssl.truststore.password=парольотхранилища
```
### Отправка сообщения в топик
Выполняется команда с указанием брокеров, файла конфигурации и топика:
```
./kafka-console-producer.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_2>:9092 --command-config~/client.properties --topic test-topic
```
Параметры:
- **bootstrap-server** - список брокеров кластера (адреса и порты);
- **command-config** - путь к файлу с настройками клиента;
После выполнения команды сообщения вводятся построчно. Для завершения используется сочетание клавиш Ctrl+C.
### Чтение сообщений из топика
Выполняется команда с указанием топика и, при необходимости, consumer group:
```
./kafka-console-consumer.sh --bootstrap-server <IP_брокера_0>:9092,<IP_брокера_1>:9092,<IP_брокера_2>:9092 --command-config~/client.properties --topic test-topic --from-beginning --group my-new-consumer-group
```
Параметры:
- **from-beginning** - чтение всех сообщений с начала (при отсутствии параметра чтение начинается с новых сообщений);
- **group** - название consumer group, которая при её указании создастся автоматически.
## Администрирование кластера
::: warning Примечание
Для изменения параметров кластера Kafka (CPU, RAM, DISK, количества брокеров, параметров топиков) необходимо направить запрос в **Service Desk** по адресу `servicedesk@datafort.ru` с указанием требуемых значений.
:::
### Изменение количества брокеров
Выполняется также через обращение в техническую поддержку.
Брокеров в кластере рекомендуется поддерживать **нечетным** для корректной работы механизмов выборов лидера.
::: warning Примечание
Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности.
:::
+107
View File
@@ -0,0 +1,107 @@
# Cloud Deckhouse Kubernetes
## Назначение сервиса
**Cloud Deckhouse Kubernetes** — это управляемый облачный сервис на базе платформы оркестрации контейнеров Kubernetes.
Сервис автоматизирует настройку:
- серверов;
- сети;
- балансировщиков нагрузки;
- механизмов отказоустойчивости.
Пользователю не нужно самостоятельно управлять инфраструктурой — кластер работает «из коробки».
> **Kubernetes** - это платформа для оркестрации контейнеров, которая автоматизирует развертывание, масштабирование и управление приложениями.
## Автоматизация сервис
**Cloud Deckhouse Kubernetes** самостоятельно выполняет следующие операции:
| Операция | Описание |
|------------------------------|-------------------------------------------------------|
| Управление ролями узлов | Назначает узлам роли master, frontend, system, worker |
| Мониторинг компонентов | Отслеживает состояние всех частей платформы |
| Восстановление после отказов | Автоматически перезапускает отказавшие узлы и поды |
## Архитектура и компоненты
Для стабильной работы сервиса используются три ключевых компонента:
- **Deckhouse** — платформа управления. Устанавливает, обновляет и настраивает кластер.
- **etcd** — распределенное хранилище. Сохраняет состояние кластера и данные конфигурации.
- **Балансировщики нагрузки** — единая точка входа. Направляют трафик к работающим приложениям.
## Доступ к приложениям
Подключение к приложениям внутри кластера выполняется через единую точку доступа. Подключаться к отдельным узлам не требуется.
## Управление и мониторинг
| Задача | Инструмент |
|-------------------------------------------------|-----------------------|
| Управление кластером и развертывание приложений | Веб-интерфейс Console |
| Мониторинг состояния системы | Grafana |
## Отказоустойчивость
Кластер поставляется в отказоустойчивой архитектуре, которая обеспечивает:
- высокую доступность плоскости управления (control plane);
- автоматическое восстановление узлов при отказах.
### Типы узлов кластера
Кластер состоит из следующих типов виртуальных серверов:
| Тип виртуального сервера | Количество узлов | Назначение |
| ------------------------------- | ---------------- | -------------------- |
| **Master-узлы (control plane)** | 3 | Обязательные узлы. На них работают управляющие компоненты кластера: API server, etcd, controller manager, scheduler. |
| **System-узлы** | 2 | Служебные узлы. На них размещаются внутренние компоненты платформы Deckhouse, системы мониторинга (Prometheus, Grafana), логирования и другие вспомогательные сервисы, обеспечивающие работу кластера. |
| **Frontend-узлы** | 2 | Узлы, предназначенные для обработки входящего трафика. На них работают Ingress-контроллеры и балансировщики нагрузки, которые принимают запросы из внешней сети и распределяют их между приложениями, запущенными на worker-узлах. |
| **Worker-узлы** | от 1 и более | Узлы, на которых непосредственно выполняются пользовательские приложения в контейнерах. Именно здесь размещаются поды с сервисами и прикладными компонентами. |
::: info Примечание
По умолчанию кластер работает в высокодоступном режиме. Выход из строя одного или двух master-узлов не приводит к потере управления кластером.
:::
::: warning Важно
Для тестовых сред возможна **одноузловая конфигурация control plane**. В этом случае отказ master-узла сделает кластер неуправляемым.
:::
## Доступ к кластеру
Прямой доступ к серверам кластера (по SSH) не предоставляется.
Управление приложениями и ресурсами кластера возможно через:
- **kubectl** — командная строка;
- **веб-интерфейс Console**;
- **API Kubernetes**.
## Возможности сервиса
**Cloud Deckhouse Kubernetes** предоставляет возможности, позволяющие использовать Kubernetes без самостоятельного администрирования инфраструктуры.
Сервис обеспечивает:
- автоматическое управление кластером (установка, обновление, настройка);
- высокую доступность control plane;
- единую точку входа в приложения;
- автоматическое восстановление при отказах;
- веб-доступ к управлению кластером и мониторингу;
- совместимость со стандартными инструментами (**kubectl**);
- автоматическое масштабирование приложений;
- блочные и сетевые хранилища для данных приложений (Persistent Volume).
## Сценарии использования
Сервис подходит для систем, где требуется надежная оркестрация контейнеров и упрощённое управление инфраструктурой.
Примеры использования:
- размещение production-приложений в контейнерах с высокими требованиями к доступности;
- микросервисная архитектура с единой точкой управления кластером;
- работа stateful-приложений (базы данных, очереди) с сохранением состояния;
- быстрое развёртывание Kubernetes-кластера без ручной настройки сети, хранилищ и мониторинга;
- администрирование через веб-интерфейс без прямого доступа к серверам.
+238
View File
@@ -0,0 +1,238 @@
# Подключение к сервису Deckhouse
В данном разделе описаны способы подключения к кластеру **Cloud Deckhouse Kubernetes**. Рассматривается работа с кластером через веб-интерфейс **Console**, а также управление через командную строку с использованием утилиты **kubectl** после генерации **kubeconfig**.
## Предварительные требования
После предоставления доступа к **сервису Cloud Deckhouse Kubernetes** пользователь получает возможность управлять кластером через веб-интерфейс **Console**.
**Console** - это встроенный веб-интерфейс платформы Deckhouse, предназначенный для упрощения взаимодействия с Kubernetes-кластером.
Он позволяет выполнять большинство операций, доступных в командной строке через **kubectl**, в визуальном режиме:
- мониторинг состояния кластера;
- управление узлами и модулями;
- настройку безопасности и сети.
## Вход в Console
1. Откройте веб-браузер и перейдите по адресу, предоставленному для доступа к Console.
::: info Примечание
URL-адрес направляется пользователю на электронную почту при предоставлении доступа.
:::
2. На странице ввода учетных данных выполняется аутентификация при помощи логина и пароля;
![Авторизация](images/authorization.png)
3. После успешной аутентификации откроется главная страница веб-интерфейса Console.
![Главная страница](images/home-page.png)
## Основные разделы Console
В левой боковой панели веб-интерфейса Console расположены основные разделы для управления кластером:
| Раздел | Назначение |
| ------------------ | -------------------------------------------------------------------------------------- |
| **Deckhouse** | Управление платформой Deckhouse: обзор, обновления, модули, глобальные настройки |
| **Проекты** | Управление проектами, шаблонами проектов и namespace (пространствами имён) |
| **Узлы** | Управление узлами кластера: группы узлов, конфигурации, классы машин, статические узлы |
| **Конфигурация** | Настройка Deschedulers и Priority Classes |
| **Доступ** | Управление аутентификацией, сессиями пользователей, правами доступа (RBAC) |
| **Сеть** | Настройка Egress-шлюзов, балансировки и управление сертификатами |
| **Хранилище** | Управление Persistent Volume, классами хранилищ и снимками томов |
| **Безопасность** | Настройка политик безопасности и операционных политик |
| **Мониторинг** | Просмотр данных, дашбордов, активных алертов, настройка уведомлений и экспорт метрик |
| **Журналирование** | Управление отправкой и сбором логов |
## Генерация kubeconfig через Console
Помимо управления через веб-интерфейс, Console позволяет сгенерировать файл **kubeconfig** для доступа к кластеру через **kubectl**.
1. На главной странице Console находится раздел «Инструменты» (Tools);
2. Необходимо выбрать пункт «Генератор kubeconfig» (Generate kubeconfig);
3. Нажимается кнопка генерации - система сгенерирует необходимые команды;
4. Далее, нужно скопировать и выполнить в терминале команды, которые сгенерированы для пользовательской учётной записи.
::: info Примечание
Сгенерированный **kubeconfig** уже содержит все необходимые параметры для подключения к API Kubernetes.
:::
## Примеры простейших команд kubectl
После настройки **kubeconfig** управление кластером осуществляется через командную строку с помощью утилиты **kubectl**. Ниже приведены основные команды для начала работы.
### Проверка подключения к кластеру
```
kubectl cluster-info
```
**Пример вывода:**
```
Kubernetes control plane is running at https://127.0.0.1:6445
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
```
### Просмотр узлов кластера
```
kubectl get nodes
```
**Пример вывода:**
```
NAME STATUS ROLES AGE VERSION
cloud-frontend-0 Ready frontend 12d v1.32.10
cloud-frontend-1 Ready frontend 12d v1.32.10
cloud-master-0 Ready control-plane,master 12d v1.32.10
cloud-master-1 Ready control-plane,master 12d v1.32.10
cloud-master-2 Ready control-plane,master 12d v1.32.10
cloud-system-0 Ready system 12d v1.32.10
cloud-system-1 Ready system 12d v1.32.10
cloud-worker-a374349e-zznfp-nkqr2 Ready worker 12d v1.32.10
cloud-worker-a374349e-zznfp-rdpdz Ready worker 12d v1.32.10
```
### Просмотр пространств имен
```
kubectl get namespaces
```
**Пример вывода:**
```
NAME STATUS AGE
d8-admission-policy-engine Active 12d
d8-cert-manager Active 12d
d8-chrony Active 12d
d8-cloud-instance-manager Active 12d
d8-cloud-provider-vcd Active 12d
d8-cni-cilium Active 12d
d8-console Active 12d
d8-dashboard Active 12d
d8-descheduler Active 12d
d8-ingress-nginx Active 12d
d8-local-path-provisioner Active 12d
d8-log-shipper Active 12d
d8-metallb Active 12d
d8-monitoring Active 12d
d8-multitenancy-manager Active 12d
d8-observability Active 12d
d8-operator-prometheus Active 12d
d8-pod-reloader Active 12d
d8-service-accounts Active 12d
d8-snapshot-controller Active 12d
d8-system Active 12d
d8-upmeter Active 12d
d8-user-authn Active 12d
default Active 12d
kube-node-lease Active 12d
kube-public Active 12d
kube-system Active 12d
```
### Просмотр подов в конкретном namespace
```
kubectl get pods -n d8-console
```
**Пример вывода:**
```
NAME READY STATUS RESTARTS AGE
backend-546c7496f8-2nzx2 1/1 Running 0 3d7h
backend-546c7496f8-nxqf4 1/1 Running 0 3d7h
console-dex-authenticator-6b7d456445-7cg9p 2/2 Running 0 12d
console-dex-authenticator-6b7d456445-ljjr8 2/2 Running 0 12d
frontend-79cb59c94d-cf457 1/1 Running 0 3d7h
frontend-79cb59c94d-rvlzk 1/1 Running 0 3d7h
observability-gw-59c4fb6548-2lcqr 1/1 Running 0 3d7h
observability-gw-59c4fb6548-9n6nb 1/1 Running 0 3d7h
```
### Просмотр логов пода
```
kubectl logs frontend-79cb59c94d-cf457 -n d8-console
```
### Просмотр сервисов
```
kubectl get services -n d8-console
```
**Пример вывода:**
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
backend ClusterIP 10.222.4.60 <none> 8999/TCP 12d
console-dex-authenticator ClusterIP 10.222.224.82 <none> 443/TCP 12d
frontend ClusterIP 10.222.226.106 <none> 80/TCP 12d
observability-gw ClusterIP None <none> 3000/TCP,8443/TCP 12d
```
### Быстрое получение информации о ресурсах
```
kubectl get all -n d8-console
```
**Пример вывода:**
```
NAME READY STATUS RESTARTS AGE
pod/backend-546c7496f8-2nzx2 1/1 Running 0 3d7h
pod/backend-546c7496f8-nxqf4 1/1 Running 0 3d7h
pod/console-dex-authenticator-6b7d456445-7cg9p 2/2 Running 0 12d
pod/console-dex-authenticator-6b7d456445-ljjr8 2/2 Running 0 12d
pod/frontend-79cb59c94d-cf457 1/1 Running 0 3d7h
pod/frontend-79cb59c94d-rvlzk 1/1 Running 0 3d7h
pod/observability-gw-59c4fb6548-2lcqr 1/1 Running 0 3d7h
pod/observability-gw-59c4fb6548-9n6nb 1/1 Running 0 3d7h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/backend ClusterIP 10.222.4.60 <none> 8999/TCP 12d
service/console-dex-authenticator ClusterIP 10.222.224.82 <none> 443/TCP 12d
service/frontend ClusterIP 10.222.226.106 <none> 80/TCP 12d
service/observability-gw ClusterIP None <none> 3000/TCP,8443/TCP 12d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/backend 2/2 2 2 12d
deployment.apps/console-dex-authenticator 2/2 2 2 12d
deployment.apps/frontend 2/2 2 2 12d
deployment.apps/observability-gw 2/2 2 2 12d
NAME DESIRED CURRENT READY AGE
replicaset.apps/backend-546c7496f8 2 2 2 3d7h
replicaset.apps/backend-69d8c6bd68 0 0 0 12d
replicaset.apps/console-dex-authenticator-6b7d456445 2 2 2 12d
replicaset.apps/console-dex-authenticator-74c97bf4d6 0 0 0 12d
replicaset.apps/frontend-6b7ffb7bbd 0 0 0 9d
replicaset.apps/frontend-79cb59c94d 2 2 2 3d7h
replicaset.apps/frontend-79ccdfc56b 0 0 0 12d
replicaset.apps/observability-gw-574cdfdd87 0 0 0 12d
replicaset.apps/observability-gw-59c4fb6548 2 2 2 3d7h
```
### Получение справки
Для получение справки по любой команде используется флаг **--help**:
```
kubectl get pods --help
kubectl describe pod --help
```
### Просмотр подробной информации о конкретном ресурсе
```
kubectl describe pod <имя-пода> -n <namespace>
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 864 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

+19
View File
@@ -0,0 +1,19 @@
---
section_links:
- title: Обзор сервиса
link: /Deckhouse/about.md
description: Обзор сервиса
- title: Права и возможности пользователей
link: /Deckhouse/user-permissions.md
description: Управление доступом и роли пользователей
- title: Описание технических параметров
link: /Deckhouse/technical-parameters.md
description: Параметры конфигурации сервиса Deckhouse
- title: Подключение к сервису Deckhouse
link: /Deckhouse/connection.md
description: Подключение и работа с сервисом Deckhouse
---
# Cloud Deckhouse Kubernetes
В данном разделе представлена документация по управлемому сервису **Cloud Deckhouse Kubernetes** платформы Beeline Cloud.
+120
View File
@@ -0,0 +1,120 @@
# Описание технических параметров
Данный раздел содержит технические параметры **кластера Kubernetes** и порядок их первичной конфигурации.
Настройка параметров выполняется администратором облачного провайдера на этапе развертывания сервиса. Пользователь не может изменять их самостоятельно (исключение — конфигурация worker-узлов).
**Процедура согласования параметров:**
1. Клиент передает менеджеру список требуемых параметров.
2. Администратор выполняет настройку по согласованным требованиям.
## Дисковое хранилище
Производительность приложений в Kubernetes зависит от скорости чтения и записи данных на диск. Тип хранилища определяет:
- **IOPS** (Input/Output Operations Per Second) — количество операций ввода-вывода в секунду;
- **время отклика** (латентность).
::: info Примечание
Чем выше IOPS, тем быстрее работают базы данных и другие диско-интенсивные приложения.
:::
## Доступные типы хранилищ:
| Тип | Лимит IOPS |
| ---------- | ------------------ |
| Fast SAS | до 2 IOPS на 1 ГБ |
| SSD | до 5 IOPS на 1 ГБ |
| Fast SSD | до 10 IOPS на 1 ГБ |
| Ultra NVMe | до 25 IOPS на 1 ГБ |
::: warning Важно
После выбора типа диска необходимо указать объем дискового хранилища, который будет выделен под данные приложений (Persistent Volumes). **Минимальный объем - 50 ГБ.**
:::
## Конфигурация вычислительных ресурсов
Вычислительные мощности кластера включают:
- процессорные ресурсы (vCPU);
- оперативную память (RAM);
- количество узлов.
### Узлы в кластере
Количество узлов определяет отказоустойчивость кластера и возможность распределять нагрузку между worker-узлами.
::: info Примечение
Чем больше узлов, тем выше надежность и пропускная способность.
:::
#### 1. Master-узлы (control plane)
Для обеспечения отказоустойчивости кластера **рекомендуется использовать не менее трех master-узлов**.
| Количество узлов | Результат |
|------------------|-----------------------------------------------------------------------------------------------|
| 3 и более | Обеспечивают кворум, безопасное обновление и отказоустойчивость. Большего числа не требуется. |
| 2 | Недостаточно для кворума при отказе одного узла. |
| 1 | Отказ узла приводит к полному сбою кластера. |
#### 2. System-узлы
Предназначены для запуска модулей Deckhouse.
**Рекомендация:** два узла. Это изолирует системные модули от пользовательских приложений.
#### 3. Frontend-узлы
Балансируют входящий трафик, на них работают Ingress-контроллеры.
**Рекомендация:** более одного узла.
**Требования к емкости:**
| Количество узлов | Требование к каждому узлу |
|------------------|---------------------------------------------------|
| 2 | Должен выдержать 100% нагрузки при отказе второго |
| 3 | Должен выдержать увеличение нагрузки в 1.5 раза |
#### 4. Worker-узлы
На них выполняются пользовательские приложения.
- **Рекомендация:** от 1 узла.
- **Управление:** пользователь может увеличивать максимальное количество узлов самостоятельно.
## Процессор (CPU)
**Процессор** - это вычислительная мощность, выделяемая каждому узлу кластера. Количество vCPU определяет, насколько быстро приложения смогут:
- обрабатывать запросы;
- выполнять сложные вычисления;
- обслуживать одновременные подключения.
**Диапазон**: от 2 до 24 vCPU на один узел.
## Оперативная память (RAM)
**Оперативная память** - влияет на производительность приложений. Данные в RAM обрабатываются без обращения к диску.
**Диапазон**: от 4 до 768 ГБ RAM на один узел.
## Доступ в интернет
При заказе сервиса выберите пропускную способность канала для доступа к кластеру из интернета.
**Доступные скорости**:
- 50 Мбит/с;
- 100 Мбит/с;
- 200 Мбит/с;
- 300 Мбит/с;
- 400 Мбит/с;
- 500 Мбит/с;
- 1000 Мбит/с (1 Гбит/с).
::: info Примечание
Для выбранного канала предоставляется **статический белый IP-адрес**.
:::
+83
View File
@@ -0,0 +1,83 @@
# Права и возможности пользователей
При развертывании сервиса Cloud Deckhouse Kubernetes создается учетная запись с уровнем доступа **SuperAdmin**. Этот уровень предоставляет расширенные права на управление кластером Kubernetes.
**SuperAdmin** получает полный контроль над своими приложениями и ресурсами в пределах выделенного кластера или пространства имен (namespace).
## Ограничения доступа SuperAdmin
SuperAdmin **не имеет доступа** к следующим компонентам:
- инфраструктурный уровень (гипервизоры, физические серверы, сетевое оборудование);
- управление компонентами платформы Deckhouse на уровне всего кластера;
- master-узлы, system-узлы и frontend-узлы;
- изменение конфигурации платформы Deckhouse и её глобальных модулей.
## Доступные действия
### Управление пространствами имен (Namespaces)
SuperAdmin может управлять пространствами имен:
- создавать новые namespace;
- удалять namespace (все ресурсы внутри удаляются);
- просматривать список всех namespace;
- устанавливать метки (labels) и аннотации для namespace.
### Управление рабочими нагрузками
SuperAdmin имеет полный контроль над подами, развёртываниями и другими ресурсами приложений:
- создавать, обновлять и удалять Deployment, StatefulSet, DaemonSet;
- создавать, обновлять и удалять Pod;
- просматривать логи подов (`kubectl logs`);
- подключаться к выполняющемуся контейнеру (`kubectl exec`);
- масштабировать развертывания (увеличивать или уменьшать количество реплик);
- обновлять версии образов контейнеров;
- удалять поды (в том числе принудительно);
- просматривать события (events) в namespace.
### Управление сетевым доступом (Services & Ingress)
SuperAdmin может настраивать способы доступа к приложениям как внутри кластера, так и из внешней сети:
SuperAdmin может настраивать способы доступа к приложениям внутри кластера и из внешней сети:
- создавать, изменять и удалять Service (типы: ClusterIP, NodePort, LoadBalancer);
- создавать, изменять и удалять Ingress-правила для маршрутизации входящего трафика;
- настраивать порты и селекторы для сервисов;
- просматривать список сервисов и их конечных точек (endpoints).
### Управление хранилищем (Storage)
SuperAdmin может создавать и использовать тома для хранения данных приложений:
- создавать Persistent Volume Claim (PVC);
- удалять PVC (освобождать дисковое пространство);
- просматривать список PVC и их статусов;
- использовать PVC в подах (монтировать тома).
### Управление конфигурацией (ConfigMaps & Secrets)
SuperAdmin может создавать и изменять конфигурационные данные и секреты для приложений:
- создавать, изменять и удалять ConfigMap;
- создавать, изменять и удалять Secrets (например, для хранения токенов, паролей или ключей);
- монтировать ConfigMap и Secrets в поды в виде переменных окружения или файлов.
### Мониторинг и наблюдаемость
SuperAdmin имеет доступ к метрикам и логам своих приложений:
- просматривать метрики приложений в Grafana;
- просматривать логи через `kubectl logs` или интерфейс сбора логов (Loki);
- просматривать дашборды с информацией о потреблении ресурсов (CPU, RAM, Storage) своими приложениями;
- просматривать события Kubernetes (events) для диагностики проблем.
### Управление доступом (RBAC)
SuperAdmin может управлять правами других пользователей в рамках своего пространства имен:
- создавать и удалять учетные записи (ServiceAccount);
- назначать роли (Role, RoleBinding) другим пользователям в пределах своего namespace;
- ограничивать доступ к отдельным ресурсам.
-12
View File
@@ -1,12 +0,0 @@
---
section_links:
- title: Cloud PostgreSQL
link: /PaaS/PostgreSQL/PostgreSQL-index.md
description: Обзор сервиса PostgreSQL
- title: IPSEC
link: /PaaS/IPSEC.md
description: Параметры конфигурации IPSEC
---
# Начало работы в Cloud PostgreSQL
+3
View File
@@ -0,0 +1,3 @@
# Cloud Interconnect
Раздел в разработке.
+16
View File
@@ -0,0 +1,16 @@
---
section_links:
- title: Cloud PostgreSQL
link: /PostgreSQL/service/service-index.md
description: Обзор сервиса PostgreSQL
- title: IPSEC
link: /PostgreSQL/IPSEC.md
description: Параметры конфигурации IPSEC
- title: Cloud Interconnect
link:
description: Обзор сервиса Interconnect
---
# Cloud PostgreSQL
В данном разделе представлена документация по управляемому сервису **Cloud PostgreSQL**, а также сервисами платформы Beeline Cloud, использующими его в своей работе.
+3
View File
@@ -0,0 +1,3 @@
# 1C
Раздел в разработке.
@@ -85,3 +85,4 @@ PostgreSQL - это современная система управления
- хранение критичных данных с минимальным временем простоя при отказах инфраструктуры;
- быстрое развёртывание PostgreSQL-кластера без необходимости ручной настройки репликации и failover;
- администрирование баз данных через веб-интерфейс без прямого доступа к серверам кластера.
@@ -1,23 +1,26 @@
---
section_links:
- title: Назначение сервиса
link: /PaaS/PostgreSQL/about.md
link: /PostgreSQL/service/about.md
description: Конфигурации и возможности сервиса
- title: Параметры кластера PostgreSQL
link: /PaaS/PostgreSQL/cluster-parameter.md
link: /PostgreSQL/service/cluster-parameter.md
description: Технические параметры кластера PostgreSQL
- title: Схема подключения
link: /PaaS/PostgreSQL/connection.md
link: /PostgreSQL/service/connection.md
description: Общая схема подключения к Cloud PostgreSQL
- title: Возможности пользователя
link: /PaaS/PostgreSQL/user-capabilities.md
link: /PostgreSQL/service/user-capabilities.md
description: Возможности пользователя при создании сервиса
- title: Веб-интерфейс Grafana
link: /PaaS/PostgreSQL/grafana.md
link: /PostgreSQL/service/grafana.md
description: Инструкция по работе с Grafana
- title: Веб-интерфейс PgAdmin
link: /PaaS/PostgreSQL/pgadmin.md
link: /PostgreSQL/service/pgadmin.md
description: Инструкция по работе с PgAdmin
- title: 1C для PostgreSQL
link:
description: Инструкция по работе с 1C при использовании PostgreSQL
---
# Cloud PostgreSQL
@@ -79,6 +79,21 @@ $<iterations>:<salt>$<storedkey>:<serverkey>
|Создание новой базы данных | Для создания базы данных | ```CREATE DATABASE app_db;``` |
|Создание базы данных с указанием владельца | Пользователь, указанный как владелец, будет иметь полный контроль над базой данных, включая права на её удаление и изменение. По умолчанию владельцем создаваемой базы данных является пользователь, который её создает | ```CREATE DATABASE app_db OWNER client;``` |
### Требования к паролям
**Длина пароля (рекомендуемая):**
- для учётной записи пользователя - не менее 12 знаков;
- для учётных записей администраторов, технических и служебных учётных записей - не менее 16 знаков.
**Сложность пароля:** рекомендуется использовать уникальный пароль, содержащий символы как минимум трёх из четырёх указанных ниже групп (при отсутствии технических ограничений):
- буквы латинского алфавита в верхнем регистре (A-Z);
- буквы латинского алфавита в нижнем регистре (a-z);
- цифры (0-9);
- специальные символы и знаки пунктуации (например, `!@#$%^&*(),.?`).
**Периодичность смены:** рекомендуемая периодичность смены пароля - не реже одного раза в год.
## Создание пользователей и ролей
+14 -2
View File
@@ -31,10 +31,22 @@ services:
link: /vdc/index
- title: Базы данных
articles:
- title: PostgreSQL
- title: Cloud PostgreSQL
description: Объектно-реляционная СУБД с открытым кодом, обеспечивающая высокую надёжность и масштабируемость
icon: database
link: /PaaS/PostgreSQL/PostgreSQL-index.md
link: /PostgreSQL/PostgreSQL-index
- title: Брокеры сообщений
articles:
- title: Apache Kafka
description: Распределённая система для потоковой передачи данных в реальном времени
icon: message
link: /Apache-Kafka/Kafka-index
- title: DevOps Инструменты
articles:
- title: Cloud Deckhouse Kubernetes
description: Облачный сервис на базе платформы оркестрации контейнеров Kubernetes
icon: server
link: /Deckhouse/index
- title: Безопасность
articles:
- title: Cloud NGFW
+125
View File
@@ -0,0 +1,125 @@
# Типы тарификации
Эта статья описывает, как работает каждый тип тарификации: как рассчитывается стоимость, что происходит при изменении объема использования или отключении услуги в течение расчетного периода. Сервисы Beeline Cloud тарифицируются по одной из четырех моделей:
- [абонентская плата с перерасчетом по фактическим дням использования (Fix Prorate)](#абонентская-плата-с-перерасчетом-fix-prorate);
- [абонентская плата без перерасчета по фактическим дням использования (Fix Non Prorate)](#абонентская-плата-без-перерасчета-fix-non-prorate);
- [оплата по фактическому потреблению (PAYG)](#оплата-по-фактическому-потреблению-payg);
- [одноразовая оплата (One Time)](#одноразовая-оплата-one-time).
Fix Prorate и Fix Non Prorate — два подтипа [абонентской платы (Fix)](#абонентская-плата-fix). Они отличаются тем, как учитывается изменение объема использования или отключение услуги в течение расчетного периода.
Тип тарификации можно узнать на странице сервиса или у специалиста Beeline Cloud. В Beeline Cloud все цены всегда указаны в российских рублях.
## Абонентская плата (Fix)
Стоимость определяется объемом подключенной услуги, а не фактической нагрузкой на ресурсы.
Правила тарификации:
- Цена тарифа указана за месяц.
- В пределах квоты сервиса объекты можно создавать и удалять без ограничений.
- Плата начисляется ежемесячно, пока услуга подключена.
Абонентская плата имеет два подтипа. Они отличаются поведением при изменении объема использования или отключении услуги в течение расчетного периода:
- [с перерасчетом по фактическим дням использования (Fix Prorate)](#абонентская-плата-с-перерасчетом-fix-prorate);
- [без перерасчета по фактическим дням использования (Fix Non Prorate)](#абонентская-плата-без-перерасчета-fix-non-prorate).
### Абонентская плата с перерасчетом (Fix Prorate)
При подключении, изменении или отключении тарифа в течение расчетного периода стоимость пересчитывается пропорционально количеству дней с каждым подключенным объемом услуги.
Порядок расчета:
1. Месячная стоимость делится на количество дней в расчетном периоде — получается дневная ставка.
2. Дневная ставка умножается на количество дней с каждым подключенным объемом услуги.
3. Полученные значения суммируются.
Пример расчета: цена тарифа — 500₽ за 1 vCPU в месяц. В расчетном периоде 30 дней. Подключенный объем услуги меняется в течение периода:
| Период | Дней | vCPU | Расчет за период | Сумма |
| ----------- | ---- | ---- | ----------------- | -------------- |
| 0106 числа | 6 | 0 | — | 0 руб. |
| 0712 числа | 6 | 10 | 10 × 500 × 6 / 30 | 1 000 руб. |
| 1318 числа | 6 | 20 | 20 × 500 × 6 / 30 | 2 000 руб. |
| 1930 числа | 12 | 0 | — | 0 руб. |
| | | | **Итого без НДС** | **3 000 руб.** |
В счете каждый период с подключенным объемом услуги отображается отдельной строкой:
| № | Наименование тарифа | Период | Кол-во | Цена за единицу (руб.) | Сумма (руб.) |
| --- | -------------------------- | ----------------------- | ------ | ---------------------- | ------------ |
| 1 | Виртуальный процессор vCPU | 07.01.2025 — 12.01.2025 | 10 | 500,00 | 1 000,00 |
| 2 | Виртуальный процессор vCPU | 13.01.2025 — 18.01.2025 | 20 | 500,00 | 2 000,00 |
### Абонентская плата без перерасчета (Fix Non Prorate)
Стоимость рассчитывается по максимальному количеству подключенных объектов за расчетный период. Длительность использования не учитывается.
Порядок расчета:
1. В течение расчетного периода фиксируется максимальное количество подключенных объектов.
2. В конце расчетного периода максимальный объем умножается на цену тарифа.
Пример расчета: цена тарифа — 2 600₽ за 1 шт. Количество подключенных объектов меняется в течение периода:
| Период | Дней | Шт. |
| ------------ | ---- | ------ |
| 0106 числа | 6 | 0 |
| 0712 числа | 6 | 20 |
| 1318 числа | 6 | 5 |
| 1930 числа | 12 | 0 |
| **Максимум** | — | **20** |
Расчет ведется по максимальному количеству подключенных объектов:
| Параметр | Значение |
| ------------------ | --------------- |
| Максимальный объем | 20 шт. |
| Цена за 1 шт. | 2 600 руб. |
| Расчет | 20 × 2 600 руб. |
| **Итого без НДС** | **52 000 руб.** |
## Оплата по фактическому потреблению (PAYG)
Стоимость рассчитывается по фактически потребленным ресурсам.
Правила тарификации:
- Цена тарифа указана за час.
- Тарификация ресурса начинается при его создании и заканчивается при удалении.
- Остановка ресурса, например, виртуальной машины, не приостанавливает тарификацию ее ресурсов. Чтобы прекратить начисление платы, ресурс нужно удалить.
- В пределах квоты сервиса объекты можно создавать и удалять без ограничений.
- Плата начисляется ежемесячно за фактическое потребление, пока услуга подключена.
Пример расчета: цена тарифа — 0,70₽ за 1 vCPU в час. Используется 5 виртуальных машин по 2 vCPU в каждой в течение всего расчетного периода — 30 дней или 720 часов.
| Параметр | Значение |
| ------------------------- | ----------------------- |
| Цена за 1 vCPU в час | 0,70 руб. |
| Виртуальных машин | 5 |
| vCPU в каждой ВМ | 2 |
| Дней в расчетном периоде | 30 |
| Часов в расчетном периоде | 720 |
| Расчет | 5 × 2 × 720 × 0,70 руб. |
| **Итого без НДС** | **5 040 руб.** |
## Одноразовая оплата (One Time)
Плата за услугу взимается один раз — в расчетном периоде оформления заказа. В последующих расчетных периодах услуга в счете не отображается. Применяется для услуг без срока действия — например, для покупки лицензий или разовых работ.
Правила тарификации:
- Плата начисляется однократно — в момент оформления заказа.
- После оплаты услуга остается в распоряжении клиента бессрочно, если у нее нет срока действия.
- После оформления заказа изменить количество или отменить заказ нельзя.
Пример расчета: цена лицензии — 12 000₽. Например, в заказе 5 лицензий.
| Параметр | Значение |
| ----------------- | --------------- |
| Цена за лицензию | 12 000 руб. |
| Лицензий | 5 |
| Расчет | 5 × 12 000 руб. |
| **Итого без НДС** | **60 000 руб.** |
-3
View File
@@ -6,9 +6,6 @@ section_links:
- title: Подключиться к виртуальному дата-центру
link: /vdc/vdc-getting-started.md
description: Подключение 2FA, подключение к дата-центру и создание виртуальной машины
- title: Виртуальные дата-центры
link: /vdc/vdc-how-to/vdc-index.md
description: Создание виртуального дата-цента, вход с двухфакторной аутентификацией
- title: Виртуальные машины
link: /vdc/vdc-how-to/vm/vm-index.md
description: Управление виртуальными машинами в дата-центре с помощью Cloud Director