Compare commits
145 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 06ed9845f1 | |||
| ed36dfb22b | |||
| fe97e6c8ac | |||
| b4dd7e6124 | |||
| 8b000bbc5a | |||
| 4ab958bb8b | |||
| 10ccccfaeb | |||
| 2702259c01 | |||
| e16de52934 | |||
| bf04aa7cc1 | |||
| 4ea76d36ef | |||
| 33c90da738 | |||
| 7c82953483 | |||
| c177afc01d | |||
| bbd87d2431 | |||
| a7656e4107 | |||
| cf742045d9 | |||
| 428abd21a8 | |||
| d0231a62ea | |||
| ebde707488 | |||
| e63edcc02c | |||
| 8b20ed8654 | |||
| 41a80cee19 | |||
| 4caeb6ce92 | |||
| 4bfca763d1 | |||
| 1b3e8c1843 | |||
| 47fad54a34 | |||
| 6a0314bcbb | |||
| 9f287b5f15 | |||
| f242ddd4cb | |||
| 3a96cb441e | |||
| 5ddf4db4e8 | |||
| 201c9b7653 | |||
| 189773b236 | |||
| 4524124d0a | |||
| 07fda47d30 | |||
| 9bee10da5c | |||
| 2b74ef8cbc | |||
| 446cae4efa | |||
| fc412a33c9 | |||
| c01886e49b | |||
| 70e5e662fc | |||
| fbd9b516e8 | |||
| 142fba4bf4 | |||
| 623f882625 | |||
| b262bd7821 | |||
| bdab867205 | |||
| 7dde98d821 | |||
| b12a029919 | |||
| 9a21a53e11 | |||
| 87193038ae | |||
| eab7a61ed1 | |||
| f4a212e3e2 | |||
| 7dcab6a39b | |||
| f623476dff | |||
| dc9817d250 | |||
| 47a6d4d1ec | |||
| 45ec9a5ab3 | |||
| 3c402cfa73 | |||
| 83f5e68647 | |||
| 46b4dfec73 | |||
| ea42afac3e | |||
| f0c94a6587 | |||
| d921225b30 | |||
| 26e65e2a72 | |||
| b01b38ed5a | |||
| dbaf23e144 | |||
| 6511368389 | |||
| 3808af1e34 | |||
| ff8c1af855 | |||
| fc7486d182 | |||
| ec84ec85e1 | |||
| a0f86509fa | |||
| 2c782be4da | |||
| 9fa086bffe | |||
| fcc8b68475 | |||
| 52edef245f | |||
| a47571d8af | |||
| 01938a5440 | |||
| 943c6432c9 | |||
| 0014452a20 | |||
| 764bedf550 | |||
| a4ba63de59 | |||
| ea4e00ef1b | |||
| e6ed9f0af5 | |||
| 8e1da810a6 | |||
| 518b0377f4 | |||
| fd818ca3c4 | |||
| 4adfe0e44a | |||
| ae14925dcc | |||
| c33b6b8666 | |||
| 5a0c94a187 | |||
| d8165f9442 | |||
| 45c6e6dd0d | |||
| 76ce7d5ecc | |||
| cbca68dfbf | |||
| 76ad140803 | |||
| 3618010241 | |||
| 1bb42c4731 | |||
| 1b96efc894 | |||
| e80065f53a | |||
| 9a665dc7ab | |||
| 2a4796a454 | |||
| 983d12aa4c | |||
| 2f97666bb3 | |||
| 8ea9b9cfba | |||
| d0c4da711a | |||
| 319ee317ac | |||
| e1b0c5d60e | |||
| 86bc4b88a3 | |||
| 97bfe3d5b4 | |||
| 2c30db4807 | |||
| e1a91fd276 | |||
| 143517e0e9 | |||
| c0f94d4ea7 | |||
| fa02fa99ff | |||
| 694b9d4d79 | |||
| 5028651702 | |||
| b9a19ca0af | |||
| d2e6a825fe | |||
| 17253a29fb | |||
| d9ae9815c4 | |||
| d2b6e9fe70 | |||
| 0825eea352 | |||
| 36bcf449c1 | |||
| 7e5630cca3 | |||
| e1ba316949 | |||
| 3e530f2eb9 | |||
| 3afc130ea9 | |||
| 436d8dff17 | |||
| 53edfe7a58 | |||
| ea20a8e8bf | |||
| 68c9e4167e | |||
| 5fdc3d3c68 | |||
| adcd2d54d3 | |||
| 451ecaa68d | |||
| c99ffa082d | |||
| afd228d696 | |||
| bb73b0cf68 | |||
| 825daec2e7 | |||
| 4a82f2d34d | |||
| a0bd478abe | |||
| 23bf227c36 | |||
| 089f9d1e98 | |||
| 9a38f22e65 |
@@ -10,6 +10,7 @@ dist
|
||||
.basement
|
||||
config.local.js
|
||||
basement_dist
|
||||
.claude
|
||||
src/.vuepress/.cache
|
||||
src/.vuepress/.temp
|
||||
src/.vitepress/cache
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.6.4-link",
|
||||
"version": "0.6.5-billing",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "docs",
|
||||
"version": "0.6.4-link",
|
||||
"version": "0.6.5-billing",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@beeline/design-tokens": "^1.31.6",
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.6.5-main",
|
||||
"version": "0.6.5-billing",
|
||||
"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": {
|
||||
|
||||
@@ -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);
|
||||
@@ -1,8 +1,6 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'
|
||||
import { viteStaticCopy } from 'vite-plugin-static-copy'
|
||||
import { overrideComponents } from './override-components'
|
||||
import { resolve } from 'path'
|
||||
import { fileURLToPath, URL } from 'node:url'
|
||||
|
||||
const gitlab = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
@@ -41,249 +39,15 @@ const gitlab = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
`
|
||||
|
||||
const new_version = process.env?.VITE_NEW_VERSION;
|
||||
|
||||
const sidebarConfig = {
|
||||
'/platform/': [
|
||||
{
|
||||
text: 'Платформа Beeline Cloud', link: '/platform/index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{text: 'Обзор', link: '/platform/about.md'},
|
||||
{text: 'Техническая поддержка', link: '/platform/support/support-overview.md'},
|
||||
],
|
||||
},
|
||||
],
|
||||
'/start/': [
|
||||
{
|
||||
text: 'Начало работы в Beeline Cloud', link: '/start/index.md',
|
||||
},
|
||||
{text: 'Начать работу', link: '/start/getting-started.md'},
|
||||
{text: 'Бесплатный период', link: '/start/trial.md'},
|
||||
{text: 'Платное использование', link: '/start/organization.md'},
|
||||
],
|
||||
// '/billing/': [
|
||||
|
||||
// ],
|
||||
'/backups/': [
|
||||
{
|
||||
text: 'Резервное копирование', link: '/backups/index.md',
|
||||
},
|
||||
{
|
||||
text: 'Обзор сервиса', link: '/backups/about.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{text: 'Квоты и лимиты', link: '/backups/backup-quatos.md'},
|
||||
]
|
||||
},
|
||||
{text: 'Резервное копирование виртуальных машин Beeline Cloud', link: '/backups/backup-internal-infra.md'},
|
||||
{text: 'Резервное копирование собственной инфраструктуры в Beeline Cloud', link: '/backups/backup-external-infra.md'},
|
||||
{text: 'Каталог резервных копий', link: '/backups/view-backups.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-quatos.md' },
|
||||
]
|
||||
},
|
||||
{
|
||||
text: 'Быстрый старт', link: '/vdc/vdc-getting-started.md'
|
||||
},
|
||||
|
||||
{ text: 'Виртуальные дата-центры', link: '/vdc/vdc-how-to/vdc-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Создание дата-центра', link: '/vdc/vdc-how-to/vdc-create.md' },
|
||||
{ text: 'Вход в дата-центр', link: '/vdc/vdc-how-to/vdc-enter.md' },
|
||||
{ text: 'Управление дата-центром', link: '/vdc/vdc-how-to/vdc-manage.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: 'Диски', link: '/vdc/vdc-how-to/disks/disks-index.md',
|
||||
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: 'Настройка ASAv', link: '/vdc/vdc-how-to/networks/ipsec/asav.md'},
|
||||
{text: 'Настройка CSR 1000v', link: '/vdc/vdc-how-to/networks/ipsec/csr1000v.md'},
|
||||
{text: 'Настройка Fortigate', 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' },
|
||||
'/compute/': [
|
||||
{
|
||||
text: 'Виртуальные машины', link: '/compute/index.md',
|
||||
},
|
||||
{ text: 'Обзор сервиса', link: '/compute/compute-overview-index.md' ,
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Техническое описание', link: '/compute/compute-overview.md' },
|
||||
{ text: 'Квоты и лимиты', link: '/compute/compute-quatos.md' },
|
||||
]
|
||||
},
|
||||
{text: 'Быстрый старт', link: '/compute/compute-getting-started.md', excludeFromIndex: true },
|
||||
{ text: 'Виртуальные машины', link: '/compute/compute-how-to/compute-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Создание ВМ', link: '/compute/compute-how-to/compute-servers-create.md' },
|
||||
{ text: 'Создание ВМ джамп-хоста', link: '/compute/compute-how-to/compute-servers-jump-create.md' },
|
||||
{ text: 'Подключение к ВМ', link: '/compute/compute-how-to/compute-connect-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Подключение по SSH по внешнему IP-адресу с помощью ключевой пары', link: '/compute/compute-how-to/compute-connect-public.md'},
|
||||
{ text: 'Подключение по SSH по внутреннему IP-адресу с помощью ключевой пары', link: '/compute/compute-how-to/compute-connect-inside.md' },
|
||||
{ text: 'Подключение по SSH по логину и паролю', link: '/compute/compute-how-to/compute-connect-pwd.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'Управление ВМ', link: '/compute/compute-how-to/compute-servers-manage.md' },
|
||||
],
|
||||
},
|
||||
{ text: 'Диски', link: '/compute/compute-how-to/compute-disks/compute-disk-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор', link: '/compute/compute-how-to/compute-disks/compute-disk-about.md' },
|
||||
{ text: 'Создание диска', link: '/compute/compute-how-to/compute-disks/compute-disk-create.md' },
|
||||
{ text: 'Управление дисками', link: '/compute/compute-how-to/compute-disks/compute-disk-manage.md' },
|
||||
{ text: 'Удаление диска', link: '/compute/compute-how-to/compute-disks/compute-disk-del.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор', link: '/compute/compute-how-to/compute-ip/compute-ip-about.md' },
|
||||
{ text: 'Просмотр IP-адресов', link: '/compute/compute-how-to/compute-ip/compute-ip-view.md' },
|
||||
{ text: 'Создание IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-create.md' },
|
||||
{ text: 'Управление IP-адресами', link: '/compute/compute-how-to/compute-ip/compute-ip-manager.md' },
|
||||
{ text: 'Удаление IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-del.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'Группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-about.md'},
|
||||
{ text: 'Создание группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-create.md'},
|
||||
{ text: 'Управление группами размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-manager.md' },
|
||||
{ text: 'Удаление группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-del.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'Сети', link: '/compute/compute-how-to/compute-network/compute-network-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Настройка site-to-site VPN с помощью VyOS', link: '/compute/compute-how-to/compute-network/compute-vpn-vyos.md' },
|
||||
{ text: 'Подключение ВМ закрытого контура к интернету', link: '/compute/compute-how-to/compute-network/compute-network-inside.md' },
|
||||
],
|
||||
excludeFromIndex: true,
|
||||
},
|
||||
],
|
||||
'/admin/': [
|
||||
{
|
||||
text: 'Администрирование', link: '/admin/index.md',
|
||||
},
|
||||
{text: 'Управление ключевыми парами', link: '/admin/ssh.md'},
|
||||
],
|
||||
'/vdi/': [
|
||||
{
|
||||
text: 'Виртуальные рабочие столы', link: '/vdi/index.md',
|
||||
},
|
||||
{
|
||||
text: 'Обзор сервиса', link: '/vdi/vdi-overview.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'О сервисе', link: '/vdi/vdi-about.md' },
|
||||
{ text: 'Техническое описание', link: '/vdi/vdi-tech.md' },
|
||||
{ text: 'Квоты и лимиты', link: '/vdi/vdi-quatos.md' },
|
||||
{ text: 'Тарификация', link: '/vdi/vdi-tarif.md' },
|
||||
]
|
||||
},
|
||||
{
|
||||
text: 'Заказ виртуальных рабочих столов', link: '/vdi/vdi-how-to/vdi-create.md'
|
||||
},
|
||||
{
|
||||
text: 'Настройка сервиса', link: '/vdi/vdi-how-to/vdi-nastroika.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Настройка интеграции с Active Directory', link: '/vdi/vdi-how-to/vdi-connect-to-ad.md' },
|
||||
{ text: 'Настройка сети', link: '/vdi/vdi-how-to/vdi-interconnect.md' },
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: 'Gold-образ', link: '/vdi/vdi-how-to/vdi-gold.md'
|
||||
// },
|
||||
{
|
||||
text: 'Подключение к виртуальному рабочему месту', link: '/vdi/vdi-how-to/vdi-connect.md'
|
||||
},
|
||||
],
|
||||
}
|
||||
console.log({ base: typeof new_version !== 'undefined' ? '/' : '/docs/' })
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
srcDir: ".",
|
||||
title: " ",
|
||||
title: 'Beeline Cloud',
|
||||
description: "Документация Beeline Cloud",
|
||||
head: [['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/bee-favicon.png' }]],
|
||||
base: typeof new_version !== 'undefined' ? '/' : '/docs/',
|
||||
appearance: false,
|
||||
markdown: {
|
||||
config(md) {
|
||||
md.use(tabsMarkdownPlugin)
|
||||
@@ -298,24 +62,7 @@ export default defineConfig({
|
||||
replacement: fileURLToPath(new URL('./theme', import.meta.url))
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
viteStaticCopy({
|
||||
targets: [
|
||||
{
|
||||
src: resolve(__dirname, '../../node_modules/@beeline/design-tokens/assets/fonts'),
|
||||
dest: 'assets',
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
scss: {
|
||||
api: 'modern-compiler',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
locales: {
|
||||
root: {
|
||||
@@ -324,6 +71,14 @@ export default defineConfig({
|
||||
}
|
||||
},
|
||||
themeConfig: {
|
||||
siteTitle: false,
|
||||
notFound: {
|
||||
title: 'Страница не найдена',
|
||||
quote: 'Похоже, вы зашли в тупик. Но не волнуйтесь — всегда можно вернуться на главную.',
|
||||
linkLabel: 'вернуться на главную',
|
||||
linkText: 'Вернуться на главную',
|
||||
code: '404',
|
||||
},
|
||||
logo: {
|
||||
light: '/img/logo-cloud.svg',
|
||||
dark: '/img/logo-cloud.svg',
|
||||
@@ -340,8 +95,14 @@ export default defineConfig({
|
||||
buttonAriaLabel: 'Поиск'
|
||||
},
|
||||
modal: {
|
||||
noResultsText: 'По вашему запросу ничего не найдено',
|
||||
noResultsText: 'Не удалось загрузить данные',
|
||||
resetButtonTitle: 'Сбросить',
|
||||
displayDetails: 'Показать расширенный список',
|
||||
footer: {
|
||||
selectText: 'Выбрать',
|
||||
closeText: 'Закрыть',
|
||||
navigateText: 'Перейти',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -373,7 +134,310 @@ export default defineConfig({
|
||||
outline: {
|
||||
label: 'Содержание'
|
||||
},
|
||||
sidebar: sidebarConfig,
|
||||
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',
|
||||
},
|
||||
{
|
||||
text: 'Cloud Security Awareness (SA)', link: '/security/Cloud-SA/SA-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: 'Состав сервиса SA', link: '/security/Cloud-SA/compond-SA/compond-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса', link: '/security/Cloud-SA/compond-SA/about.md' },
|
||||
{ text: 'Состав сервиса', link: '/security/Cloud-SA/compond-SA/compond-SA.md' },
|
||||
{ text: 'Настройки сервиса по умолчанию', link: '/security/Cloud-SA/compond-SA/default-service.md' },
|
||||
{ text: 'Почтовый ретранслятор (SMTP relay)', link: '/security/Cloud-SA/compond-SA/mail-relay.md' },
|
||||
{ text: 'Мониторинг работоспособности платформы', link: '/security/Cloud-SA/compond-SA/monitoring.md' },
|
||||
{ text: 'Модули платформы', link: '/security/Cloud-SA/compond-SA/platform-modules.md' },
|
||||
{ text: 'Ограничения платформы', link: '/security/Cloud-SA/compond-SA/restrictions.md' },
|
||||
{ text: 'Отказоустойчивость сервиса', link: '/security/Cloud-SA/compond-SA/stability.md' },
|
||||
{ text: 'Шаблоны почтовых сообщений и веб-форм', link: '/security/Cloud-SA/compond-SA/templates.md' },
|
||||
{ text: 'Дополнительные работы ', link: '/security/Cloud-SA/compond-SA/work.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'Качественные характеристики сервиса', link: '/security/Cloud-SA/characteristics.md' },
|
||||
{ text: 'Инструкции для начала работы с сревисом', link: '/security/Cloud-SA/instructions.md' },
|
||||
{ text: 'Порядок платежей', link: '/security/Cloud-SA/payment-procedure.md' },
|
||||
{ text: 'Сроки и условия предоставления сервиса', link: '/security/Cloud-SA/provision.md' },
|
||||
]
|
||||
},
|
||||
{
|
||||
text: 'Cloud Vulnerability Scanner (VS)', link: '/security/Cloud-VS/VS-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса VS', link: '/security/Cloud-VS/about.md'},
|
||||
{ text: 'Варианты предоставления сервиса', link: '/security/Cloud-VS/provision-service.md' },
|
||||
{ text: 'Мониторинг работоспособности и отказоустойчивость сервиса', link: '/security/Cloud-VS/monitoring.md' },
|
||||
{ text: 'Состав работ', link: '/security/Cloud-VS/scope-work.md' },
|
||||
{ text: 'Дополнительные работы', link: '/security/Cloud-VS/work.md' },
|
||||
{ text: 'Зоны ответсвенности', link: '/security/Cloud-VS/areas-responsibility.md' },
|
||||
{ text: 'Качественные характеристики сервиса', link: '/security/Cloud-VS/characteristics.md' },
|
||||
{ text: 'Сроки предоставления сервиса', link: '/security/Cloud-VS/provision.md' },
|
||||
{ text: 'Порядок платежей', link: '/security/Cloud-VS/payment-procedure.md' },
|
||||
]
|
||||
},
|
||||
{
|
||||
text: 'Cloud Mobile Device Management (MDM)', link: '/security/Cloud-MDM/MDM-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса', link: '/security/Cloud-MDM/about.md' },
|
||||
{
|
||||
text: 'Описание сервиса MDM', link: '/security/Cloud-MDM/description/description-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Состав сервиса', link: '/security/Cloud-MDM/description/compound.md' },
|
||||
{ text: 'Архитектура сервиса', link: '/security/Cloud-MDM/description/architecture.md' },
|
||||
{ text: 'Зоны ответственности', link: '/security/Cloud-MDM/description/areas-responsibility.md' },
|
||||
{ text: 'Мониторинг работоспособности и отказоустойчивость сервиса', link: '/security/Cloud-MDM/description/monitoring.md' },
|
||||
{ text: 'Дополнительные работы', link: '/security/Cloud-MDM/description/work.md' },
|
||||
]
|
||||
},
|
||||
{ text: 'Качественные характеристики сервиса', link: '/security/Cloud-MDM/characteristics.md' },
|
||||
{ text: 'Сроки и условия предоставления сервиса', link: '/security/Cloud-MDM/provision.md' },
|
||||
{ text: 'Порядок платежей', link: '/security/Cloud-MDM/payments.md' },
|
||||
{
|
||||
text: 'Инструкиця', link: '/security/Cloud-MDM/instructions/index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Инструкция', link: '/security/Cloud-MDM/instructions/instructions.md' },
|
||||
{ text: 'Активация учетной записи', link: '/security/Cloud-MDM/instructions/activation.md' },
|
||||
{ text: 'Режим Device Owner', link: '/security/Cloud-MDM/instructions/device-owner.md' },
|
||||
]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: 'Cloud NGFW', link: '/security/Cloud-NGFW/NGFW-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса', link: '/security/Cloud-NGFW/about.md'},
|
||||
{ text: 'Основные возможности', link: '/security/Cloud-NGFW/possibilities.md' },
|
||||
{ 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: 'Cloud NGFW F', link: '/security/Cloud-NGFW-F/NGFW-F-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса', link: '/security/Cloud-NGFW-F/about.md'},
|
||||
{ text: 'Порядок подключения сервиса', link: '/security/Cloud-NGFW-F/connection.md' },
|
||||
{ text: 'Варианты предоставления', link: '/security/Cloud-NGFW-F/delivery-options.md' },
|
||||
{ text: 'Состав сервиса', link: '/security/Cloud-NGFW-F/compound.md' },
|
||||
{ text: 'Функциональные возможности', link: '/security/Cloud-NGFW-F/functional-capabilities.md' },
|
||||
{ text: 'Порядок платежей', link: '/security/Cloud-NGFW-F/payment.md' },
|
||||
{ text: 'Тестирование сервиса', link: '/security/Cloud-NGFW-F/testing.md' },
|
||||
]
|
||||
},
|
||||
{
|
||||
text: 'Cloud NGFW Pro', link: '/security/Cloud-NGFW-Pro/NGFW-Pro-index.md',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: 'Обзор сервиса', link: '/security/Cloud-NGFW-Pro/about.md'},
|
||||
{ text: 'Основные возможности', link: '/security/Cloud-NGFW-Pro/possibilities.md' },
|
||||
{ text: 'Спецификация сервиса', link: '/security/Cloud-NGFW-Pro/specification.md' },
|
||||
{ text: 'Состав сервиса', link: '/security/Cloud-NGFW-Pro/compound.md' },
|
||||
{ text: 'Сроки и условия предоставления сервиса', link: '/security/Cloud-NGFW-Pro/provision.md' },
|
||||
{ text: 'Демодоступ к сервису', link: '/security/Cloud-NGFW-Pro/demo-access.md' },
|
||||
{ text: 'Порядок платежей', link: '/security/Cloud-NGFW-Pro/payment.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 },
|
||||
{ text: 'Анализ затрат', link: '/finance/cost-analysis.md' },
|
||||
{ text: 'Бюджеты', wip: true },
|
||||
{ text: 'Прогнозирование', wip: true },
|
||||
{ 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'},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
|
||||
// { text: 'Тарификация', link: '/vdc/vdc-tarif.md' },
|
||||
'/monitoring/': [
|
||||
{
|
||||
text: 'Мониторинг', link: '/monitoring/about.md',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import type { Plugin } from 'vite'
|
||||
import type { SidebarItem } from './utils/types'
|
||||
import { processAllFiles } from './hook/process-files'
|
||||
|
||||
export const autoSectionLinksPlugin = (
|
||||
srcDir: string,
|
||||
sidebarConfig: Record<string, SidebarItem[]>
|
||||
): Plugin => ({
|
||||
name: 'auto-section-links',
|
||||
buildStart: () => {
|
||||
processAllFiles(srcDir, sidebarConfig)
|
||||
},
|
||||
configureServer: () => {
|
||||
processAllFiles(srcDir, sidebarConfig)
|
||||
}
|
||||
})
|
||||
@@ -1,4 +0,0 @@
|
||||
export const INDEX_FILE = 'index.md'
|
||||
export const INDEX_FILE_PATTERN = /-index\.md$|index\.md$/
|
||||
export const FRONTMATTER_REGEX = /^---\s*\n([\s\S]*?)\n---/
|
||||
export const SECTION_LINK_KEYS = ['title', 'link', 'description'] as const
|
||||
@@ -1,36 +0,0 @@
|
||||
import { existsSync } from 'fs'
|
||||
import { relative, resolve } from 'path'
|
||||
import type { SidebarItem } from '../utils/types'
|
||||
import { findMarkdownFiles } from '../utils/file-finder'
|
||||
import { processIndexFile, processPageWithItems } from '../utils/file-processor'
|
||||
import { INDEX_FILE, INDEX_FILE_PATTERN } from '../constants'
|
||||
|
||||
export const processAllFiles = (
|
||||
srcDir: string,
|
||||
sidebarConfig: Record<string, SidebarItem[]>
|
||||
) => {
|
||||
const srcPath = resolve(srcDir)
|
||||
|
||||
for (const [folderPath, items] of Object.entries(sidebarConfig)) {
|
||||
const normalizedFolder = folderPath.replace(/^\/+|\/+$/g, '')
|
||||
const folderFullPath = resolve(srcPath, normalizedFolder)
|
||||
|
||||
if (!existsSync(folderFullPath)) {
|
||||
continue
|
||||
}
|
||||
|
||||
const mdFiles = findMarkdownFiles(folderFullPath)
|
||||
|
||||
for (const filePath of mdFiles) {
|
||||
const fileName = filePath.split(/[/\\]/).pop() || ''
|
||||
const relativePath = relative(srcPath, filePath).replace(/\\/g, '/')
|
||||
const normalizedPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`
|
||||
|
||||
if (fileName === INDEX_FILE) {
|
||||
processIndexFile(filePath, items, srcPath)
|
||||
} else if (INDEX_FILE_PATTERN.test(fileName) && fileName !== INDEX_FILE) {
|
||||
processPageWithItems(filePath, items, srcPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
import { readFileSync, existsSync } from 'fs'
|
||||
import { resolve } from 'path'
|
||||
import { parseFrontmatter } from './frontmatter'
|
||||
|
||||
export const getPageDescription = (filePath: string, srcDir: string) => {
|
||||
try {
|
||||
const fullPath = resolve(srcDir, filePath.replace(/^\//, ''))
|
||||
if (!existsSync(fullPath)) return undefined
|
||||
|
||||
const fileContent = readFileSync(fullPath, 'utf-8')
|
||||
const { frontmatter } = parseFrontmatter(fileContent)
|
||||
|
||||
return frontmatter.description as string | undefined
|
||||
} catch {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
import { readdirSync, statSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
|
||||
export const findMarkdownFiles = (dir: string) => {
|
||||
const files: string[] = []
|
||||
|
||||
try {
|
||||
const entries = readdirSync(dir)
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = join(dir, entry)
|
||||
const stat = statSync(fullPath)
|
||||
|
||||
if (stat.isDirectory()) {
|
||||
files.push(...findMarkdownFiles(fullPath))
|
||||
} else if (entry.endsWith('.md')) {
|
||||
files.push(fullPath)
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
|
||||
return files
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
import { readFileSync, writeFileSync, existsSync } from 'fs'
|
||||
import { relative, resolve } from 'path'
|
||||
import type { SidebarItem } from './types'
|
||||
import { parseFrontmatter, stringifyFrontmatter } from './frontmatter'
|
||||
import { mergeSectionLinks, extractTopLevelLinks, extractItemsForPage } from './links'
|
||||
import { normalizeLink } from './path-utils'
|
||||
import { SectionLinkListItem } from '../../theme/components/SectionLinkList/SectionLinkList.types'
|
||||
|
||||
const removeDuplicates = (links: SectionLinkListItem[]) => {
|
||||
const result: SectionLinkListItem[] = []
|
||||
const seenLinks = new Set<string>()
|
||||
|
||||
for (const link of links) {
|
||||
if (link.link) {
|
||||
const normalized = normalizeLink(link.link)
|
||||
if (!seenLinks.has(normalized)) {
|
||||
seenLinks.add(normalized)
|
||||
result.push(link)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
const hasChanges = (
|
||||
existingLinks: SectionLinkListItem[],
|
||||
mergedLinks: SectionLinkListItem[]
|
||||
) => {
|
||||
if (existingLinks.length !== mergedLinks.length) return true
|
||||
|
||||
const existingSet = new Set(
|
||||
existingLinks
|
||||
.filter(link => link.link)
|
||||
.map(link => `${normalizeLink(link.link!)}|${link.title}`)
|
||||
)
|
||||
|
||||
const mergedSet = new Set(
|
||||
mergedLinks
|
||||
.filter(link => link.link)
|
||||
.map(link => `${normalizeLink(link.link!)}|${link.title}`)
|
||||
)
|
||||
|
||||
if (existingSet.size !== mergedSet.size) return true
|
||||
|
||||
for (const item of existingSet) {
|
||||
if (!mergedSet.has(item)) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
export const processIndexFile = (
|
||||
filePath: string,
|
||||
sidebarItems: SidebarItem[],
|
||||
srcDir: string
|
||||
) => {
|
||||
if (!existsSync(filePath)) return false
|
||||
|
||||
try {
|
||||
const fileContent = readFileSync(filePath, 'utf-8')
|
||||
const { frontmatter, content } = parseFrontmatter(fileContent)
|
||||
|
||||
const relativePath = relative(srcDir, filePath).replace(/\\/g, '/')
|
||||
const normalizedPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`
|
||||
|
||||
const existingLinks = removeDuplicates(
|
||||
Array.isArray(frontmatter.section_links) ? [...frontmatter.section_links] : []
|
||||
)
|
||||
const newLinks = extractTopLevelLinks(sidebarItems, normalizedPath, srcDir)
|
||||
|
||||
if (!newLinks.length) return false
|
||||
|
||||
const mergedLinks = removeDuplicates(mergeSectionLinks(existingLinks, newLinks))
|
||||
|
||||
if (!hasChanges(existingLinks, mergedLinks)) return false
|
||||
|
||||
frontmatter.section_links = mergedLinks
|
||||
writeFileSync(filePath, stringifyFrontmatter(frontmatter, content), 'utf-8')
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
export const processPageWithItems = (
|
||||
filePath: string,
|
||||
sidebarItems: SidebarItem[],
|
||||
srcDir: string
|
||||
) => {
|
||||
if (!existsSync(filePath)) return false
|
||||
|
||||
try {
|
||||
const fileContent = readFileSync(filePath, 'utf-8')
|
||||
const { frontmatter, content } = parseFrontmatter(fileContent)
|
||||
|
||||
const relativePath = relative(srcDir, filePath).replace(/\\/g, '/')
|
||||
const normalizedPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`
|
||||
|
||||
const existingLinks = removeDuplicates(
|
||||
Array.isArray(frontmatter.section_links) ? [...frontmatter.section_links] : []
|
||||
)
|
||||
const newLinks = extractItemsForPage(sidebarItems, normalizedPath, srcDir)
|
||||
|
||||
const mergedLinks = newLinks.length > 0
|
||||
? removeDuplicates(mergeSectionLinks(existingLinks, newLinks))
|
||||
: []
|
||||
|
||||
if (!hasChanges(existingLinks, mergedLinks)) return false
|
||||
|
||||
frontmatter.section_links = mergedLinks
|
||||
writeFileSync(filePath, stringifyFrontmatter(frontmatter, content), 'utf-8')
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -1,142 +0,0 @@
|
||||
import type { Frontmatter } from './types'
|
||||
import { SECTION_LINK_KEYS, FRONTMATTER_REGEX } from '../constants'
|
||||
import { SectionLinkListItem } from '../../theme/components/SectionLinkList/SectionLinkList.types'
|
||||
|
||||
export const parseFrontmatter = (content: string) => {
|
||||
const frontmatterMatch = content.match(FRONTMATTER_REGEX)
|
||||
if (!frontmatterMatch) {
|
||||
const cleanContent = content.replace(/^---[\s\S]*?---\s*\n*/g, '').trim()
|
||||
return { frontmatter: {}, content: cleanContent || content }
|
||||
}
|
||||
|
||||
const [, frontmatterText] = frontmatterMatch
|
||||
const frontmatterEnd = frontmatterMatch[0].length
|
||||
let cleanContent = content.slice(frontmatterEnd)
|
||||
cleanContent = cleanContent.replace(/^---[\s\S]*?---\s*\n*/g, '').trim()
|
||||
if (!cleanContent) {
|
||||
cleanContent = content.slice(frontmatterEnd).replace(/^---[\s\S]*?---\s*\n*/g, '').trim()
|
||||
}
|
||||
|
||||
const frontmatter: Frontmatter = {}
|
||||
const lines = frontmatterText.split('\n')
|
||||
let currentKey: string | undefined
|
||||
let currentValue: SectionLinkListItem[] = []
|
||||
let currentItem: Record<string, string> | undefined
|
||||
let inArray = false
|
||||
|
||||
for (const line of lines) {
|
||||
const trimmed = line.trim()
|
||||
if (trimmed && !trimmed.startsWith('#')) {
|
||||
const lineIndent = line.match(/^(\s*)/)?.[1]?.length ?? 0
|
||||
|
||||
if (lineIndent === 0 && trimmed.includes(':')) {
|
||||
if (inArray && currentKey) {
|
||||
frontmatter[currentKey] = currentValue
|
||||
currentValue = []
|
||||
inArray = false
|
||||
}
|
||||
|
||||
const colonMatch = trimmed.match(/^([^:]+):\s*(.*)$/)
|
||||
if (colonMatch) {
|
||||
const [, key, value] = colonMatch
|
||||
currentKey = key.trim()
|
||||
const trimmedValue = value.trim()
|
||||
|
||||
if (trimmedValue === '') {
|
||||
inArray = true
|
||||
currentValue = []
|
||||
} else {
|
||||
frontmatter[currentKey] = trimmedValue.replace(/^["']|["']$/g, '')
|
||||
}
|
||||
}
|
||||
} else if (lineIndent === 2 && trimmed.startsWith('- ')) {
|
||||
if (!inArray && currentKey) {
|
||||
inArray = true
|
||||
currentValue = []
|
||||
}
|
||||
|
||||
if (currentItem && currentItem.title && currentItem.link !== undefined) {
|
||||
const link: SectionLinkListItem = {
|
||||
title: currentItem.title,
|
||||
link: currentItem.link,
|
||||
description: currentItem.description
|
||||
}
|
||||
if (!currentValue.some(item => item.link === link.link)) {
|
||||
currentValue.push(link)
|
||||
}
|
||||
}
|
||||
|
||||
const itemText = trimmed.slice(2).trim()
|
||||
if (itemText.includes(':')) {
|
||||
currentItem = {}
|
||||
const parts = itemText.split(',').map(p => p.trim())
|
||||
for (const part of parts) {
|
||||
const colonMatch = part.match(/^(\w+):\s*(.+)$/)
|
||||
if (colonMatch) {
|
||||
const [, key, value] = colonMatch
|
||||
if (SECTION_LINK_KEYS.includes(key as typeof SECTION_LINK_KEYS[number])) {
|
||||
currentItem[key] = value.replace(/^["']|["']$/g, '')
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
currentValue.push({ title: itemText, link: '' })
|
||||
}
|
||||
} else if (lineIndent >= 4 && currentItem && trimmed.includes(':')) {
|
||||
const colonIndex = trimmed.indexOf(':')
|
||||
if (colonIndex !== -1) {
|
||||
const key = trimmed.substring(0, colonIndex).trim()
|
||||
const value = trimmed.substring(colonIndex + 1).trim()
|
||||
if (SECTION_LINK_KEYS.includes(key as typeof SECTION_LINK_KEYS[number])) {
|
||||
currentItem[key] = value === '' ? '' : value.replace(/^["']|["']$/g, '')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currentItem && inArray && currentItem.title && currentItem.link !== undefined) {
|
||||
const link: SectionLinkListItem = {
|
||||
title: currentItem.title,
|
||||
link: currentItem.link,
|
||||
description: currentItem.description
|
||||
}
|
||||
if (!currentValue.some(item => item.link === link.link)) {
|
||||
currentValue.push(link)
|
||||
}
|
||||
}
|
||||
if (inArray && currentKey) {
|
||||
frontmatter[currentKey] = currentValue
|
||||
}
|
||||
|
||||
return { frontmatter, content: cleanContent || content }
|
||||
}
|
||||
|
||||
export const stringifyFrontmatter = (frontmatter: Frontmatter, content: string) => {
|
||||
const lines: string[] = []
|
||||
|
||||
for (const [key, value] of Object.entries(frontmatter)) {
|
||||
if (Array.isArray(value)) {
|
||||
lines.push(`${key}:`)
|
||||
for (const item of value) {
|
||||
if (typeof item === 'object' && item) {
|
||||
const link = item as SectionLinkListItem
|
||||
lines.push(` - title: ${link.title ?? ''}`)
|
||||
if (link.link) lines.push(` link: ${link.link}`)
|
||||
if ('description' in link && link.description !== undefined && link.description !== null && String(link.description).trim() !== '') {
|
||||
lines.push(` description: ${String(link.description)}`)
|
||||
}
|
||||
} else {
|
||||
lines.push(` - ${item}`)
|
||||
}
|
||||
}
|
||||
} else if (value) {
|
||||
const strValue = String(value)
|
||||
const needsQuotes = strValue.includes(':') || (strValue.includes(' ') && !strValue.startsWith('"')) || strValue === ''
|
||||
const escaped = strValue.replace(/"/g, '\\"')
|
||||
lines.push(`${key}: ${needsQuotes ? `"${escaped}"` : strValue}`)
|
||||
}
|
||||
}
|
||||
|
||||
return `---\n${lines.join('\n')}\n---\n\n${content}`
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
import type { SidebarItem } from './types'
|
||||
import { getPageDescription } from './descriptions'
|
||||
import { normalizeLink } from './path-utils'
|
||||
import { SectionLinkListItem } from '../../theme/components/SectionLinkList/SectionLinkList.types'
|
||||
|
||||
export const mergeSectionLinks = (
|
||||
existingLinks: SectionLinkListItem[],
|
||||
newLinks: SectionLinkListItem[]
|
||||
) => {
|
||||
const existingLinksMap = new Map<string, SectionLinkListItem>()
|
||||
const result: SectionLinkListItem[] = []
|
||||
const processedLinks = new Set<string>()
|
||||
|
||||
for (const existingLink of existingLinks) {
|
||||
if (existingLink.link) {
|
||||
const normalizedLink = normalizeLink(existingLink.link)
|
||||
if (!existingLinksMap.has(normalizedLink)) {
|
||||
existingLinksMap.set(normalizedLink, existingLink)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const newLink of newLinks) {
|
||||
if (newLink.link) {
|
||||
const normalizedLink = normalizeLink(newLink.link)
|
||||
|
||||
if (!processedLinks.has(normalizedLink)) {
|
||||
processedLinks.add(normalizedLink)
|
||||
|
||||
if (existingLinksMap.has(normalizedLink)) {
|
||||
const existingLink = existingLinksMap.get(normalizedLink)!
|
||||
result.push({ ...existingLink, title: newLink.title })
|
||||
} else {
|
||||
result.push(newLink)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
export const extractTopLevelLinks = (
|
||||
items: SidebarItem[],
|
||||
currentIndexPath: string,
|
||||
srcDir: string
|
||||
) => {
|
||||
const links: SectionLinkListItem[] = []
|
||||
const normalizedCurrentPath = normalizeLink(currentIndexPath)
|
||||
|
||||
for (const item of items) {
|
||||
if ('excludeFromIndex' in item && item.excludeFromIndex) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (item.link) {
|
||||
const normalizedItemPath = normalizeLink(item.link)
|
||||
if (normalizedItemPath === normalizedCurrentPath) {
|
||||
continue
|
||||
}
|
||||
|
||||
links.push({
|
||||
title: item.text || '',
|
||||
link: item.link,
|
||||
description: getPageDescription(item.link, srcDir)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return links
|
||||
}
|
||||
|
||||
const findItemsRecursive = (
|
||||
itemsList: SidebarItem[],
|
||||
pagePath: string,
|
||||
srcDir: string
|
||||
): SectionLinkListItem[] => {
|
||||
const normalizedPagePath = normalizeLink(pagePath)
|
||||
const links: SectionLinkListItem[] = []
|
||||
|
||||
for (const item of itemsList) {
|
||||
if (item.link) {
|
||||
const normalizedItemPath = normalizeLink(item.link)
|
||||
|
||||
if (normalizedItemPath === normalizedPagePath && item.items && Array.isArray(item.items) && item.items.length > 0) {
|
||||
for (const subItem of item.items) {
|
||||
if ('excludeFromIndex' in subItem && subItem.excludeFromIndex) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (subItem.link) {
|
||||
links.push({
|
||||
title: subItem.text || '',
|
||||
link: subItem.link,
|
||||
description: getPageDescription(subItem.link, srcDir)
|
||||
})
|
||||
}
|
||||
}
|
||||
return links
|
||||
}
|
||||
}
|
||||
|
||||
if (item.items && Array.isArray(item.items)) {
|
||||
const found = findItemsRecursive(item.items, pagePath, srcDir)
|
||||
if (found.length > 0) {
|
||||
return found
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return links
|
||||
}
|
||||
|
||||
export const extractItemsForPage = (
|
||||
items: SidebarItem[],
|
||||
pagePath: string,
|
||||
srcDir: string
|
||||
) => findItemsRecursive(items, pagePath, srcDir)
|
||||
@@ -1,6 +0,0 @@
|
||||
export const normalizeLink = (link: string): string =>
|
||||
!link ? '' : link
|
||||
.replace(/^\/+/, '')
|
||||
.replace(/\.md$/, '')
|
||||
.replace(/\\/g, '/')
|
||||
.trim()
|
||||
@@ -1,12 +0,0 @@
|
||||
import { SectionLinkListItem } from "../../theme/components/SectionLinkList/SectionLinkList.types"
|
||||
|
||||
export type SidebarItem = {
|
||||
text: string
|
||||
link?: string
|
||||
items?: SidebarItem[]
|
||||
}
|
||||
|
||||
export type Frontmatter = {
|
||||
section_links?: SectionLinkListItem[]
|
||||
[key: string]: string | number | boolean | string[] | SectionLinkListItem[] | undefined
|
||||
}
|
||||
@@ -44,8 +44,21 @@ watch(
|
||||
|
||||
<slot name="sidebar-nav-before" />
|
||||
|
||||
<div v-for="item in sidebarGroups" :key="item.text" class="group">
|
||||
<VPSidebarItem :item="item" :depth="0" />
|
||||
<div v-for="group in sidebarGroups" :key="group.text ?? ''" class="group">
|
||||
<!-- Named group with collapsible items — render via VPSidebarItem as-is -->
|
||||
<template v-if="group.items && group.text">
|
||||
<VPSidebarItem :item="group" :depth="0" />
|
||||
</template>
|
||||
<!-- Anonymous group (flat sidebar) — render items one by one to handle WIP -->
|
||||
<template v-else-if="group.items">
|
||||
<template v-for="item in group.items" :key="item.text">
|
||||
<div v-if="(item as any).wip" class="wip-item" data-tooltip="Раздел в разработке">
|
||||
<span class="text">{{ item.text }}</span>
|
||||
</div>
|
||||
<VPSidebarItem v-else :item="item" :depth="0" />
|
||||
</template>
|
||||
</template>
|
||||
<VPSidebarItem v-else :item="group" :depth="0" />
|
||||
</div>
|
||||
|
||||
<slot name="sidebar-nav-after" />
|
||||
|
||||
@@ -2,8 +2,6 @@ export type SectionLinkListItem = {
|
||||
title: string,
|
||||
link: string,
|
||||
description?: string
|
||||
collapsed?: boolean
|
||||
excludeFromIndex?: boolean
|
||||
}
|
||||
|
||||
export type SectionLinkListProps = {
|
||||
|
||||
@@ -109,6 +109,47 @@
|
||||
padding-bottom: 0px !important;
|
||||
}
|
||||
|
||||
.wip-item {
|
||||
position: relative;
|
||||
padding: 12px 32px;
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
|
||||
.text {
|
||||
color: rgba(25, 28, 52, 0.28) !important;
|
||||
font-size: 15px;
|
||||
font-weight: 400;
|
||||
line-height: 18px;
|
||||
letter-spacing: 0.2px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: attr(data-tooltip);
|
||||
position: absolute;
|
||||
left: 32px;
|
||||
top: calc(100% + 4px);
|
||||
z-index: 100;
|
||||
padding: 6px 10px;
|
||||
border-radius: 6px;
|
||||
background-color: rgba(9, 11, 22, 0.82);
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
white-space: nowrap;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
transition: opacity 0s;
|
||||
}
|
||||
|
||||
&:hover::after {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.dark .wip-item .text {
|
||||
color: rgba(255, 255, 255, 0.22) !important;
|
||||
}
|
||||
|
||||
.VPLocalNav.has-sidebar {
|
||||
@include media.max(sm) {
|
||||
padding-left: 0px;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
@use '@beeline/design-tokens/scss/font-face';
|
||||
@use '@beeline/design-tokens/scss/font-face' with (
|
||||
$font-path-beeline-sans: '/fonts/beeline-sans',
|
||||
$font-path-roboto-mono: '/fonts/roboto-mono'
|
||||
);
|
||||
@use "@beeline/design-tokens/scss/iconfont/iconfont" with (
|
||||
$font-path-iconfont: '../assets/fonts/iconfont'
|
||||
$font-path-iconfont: '/fonts/iconfont'
|
||||
);
|
||||
@use "@beeline/design-tokens/scss/iconfont/icons";
|
||||
@use '@beeline/design-tokens/scss/tokens/themes/dark';
|
||||
|
||||
@@ -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.
|
||||
@@ -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 используется как готовый сервис, не вовлекаясь в вопросы настройки и обслуживания.
|
||||
@@ -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`). Если один брокер перезагрузится, запись в топик станет невозможной — система будет ждать подтверждения от всех трёх реплик, а одна недоступна.
|
||||
:::
|
||||
@@ -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** - рассчитывается с учетом количества партиций, объема сообщений и числа подключений продюсеров и консьюмеров;
|
||||
- **Тип и объем дискового хранилища** - определяется на основе среднего и максимального размера сообщения, частоты отправки, срока хранения и фактора репликации;
|
||||
- **Параметры репликации** - учитывают заданный фактор репликации и обеспечивают отказоустойчивость кластера.
|
||||
@@ -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 Примечание
|
||||
Операция перераспределения партиций требует времени и может создавать дополнительную нагрузку на кластер. Выполнение рекомендуется в период наименьшей активности.
|
||||
:::
|
||||
@@ -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-кластера без ручной настройки сети, хранилищ и мониторинга;
|
||||
- администрирование через веб-интерфейс без прямого доступа к серверам.
|
||||
@@ -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. На странице ввода учетных данных выполняется аутентификация при помощи логина и пароля;
|
||||
|
||||

|
||||
|
||||
3. После успешной аутентификации откроется главная страница веб-интерфейса Console.
|
||||
|
||||

|
||||
|
||||
## Основные разделы 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>
|
||||
```
|
||||
|
After Width: | Height: | Size: 864 KiB |
|
After Width: | Height: | Size: 257 KiB |
@@ -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.
|
||||
@@ -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-адрес**.
|
||||
:::
|
||||
@@ -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;
|
||||
- ограничивать доступ к отдельным ресурсам.
|
||||
@@ -0,0 +1,144 @@
|
||||
# Параметры конфигурации IPsec-соединения
|
||||
|
||||
В данном разделе приведены параметры конфигурации IPsec-соединения, используемого для организации защищенного канала связи между инфраструктурой заказчика и кластерами. Материал описывает настройки этапов установки соединения и передачи данных, включая методы аутентификации, алгоритмы шифрования и хеширования, группы Диффи-Хеллмана, а также параметры времени жизни ключей.
|
||||
|
||||
Ниже приведены основные параметры, задаваемые при развертывании кластера Kafka. Часть параметров определяется клиентом на этапе заказа услуги, часть - фиксирована и не подлежит изменению.
|
||||
|
||||
## Данные о конфигурации IPSEC
|
||||
|
||||
Параметры подключения (имя туннеля, устройство, публичный IP-адрес) заполняются вручную на основании информации, предоставленной заказчиком.
|
||||
|
||||
#### Версия IKE (Internet Key Exchange)
|
||||
|
||||
Версия IKE выбирается из выпадающего списка, который содержит в себе два параметра - **v1** и **v2**.
|
||||
|
||||
- **IKE v1** - более ранняя версия протокола;
|
||||
- **IKE v2** - более современная версия (обеспечивает более устойчивое соединение и гибкую обработку ошибок).
|
||||
|
||||
Рекомендуется использовать **IKE v2**, если оборудование заказчика это поддерживает.
|
||||
|
||||
## Метод аутентификации
|
||||
|
||||
Метод аутентификации выбирается вручную из выпадающего списка, который содержит два варианта:
|
||||
|
||||
- **PSK (Pre-Shared Key)** - метод аутентификации, при котором используется заранее согласованный общий ключ;
|
||||
- **Certificate** - аутентификация с использованием цифровых сертификатов.
|
||||
|
||||
## Этап 1 - установка защищенного соединения
|
||||
|
||||
#### Hash
|
||||
|
||||
Определяет алгоритм хеширования **для защиты управляющего канала**.
|
||||
|
||||
Данный параметр заполняется вручную из выпадающего списка следующего содержания:
|
||||
|
||||
- **SHA 1** - Формирует хеш длиной 160 бит, имеет коллизии (уязвимости), в современных системах считается устаревшим, используется только для совместимости со старым оборудованием;
|
||||
- **SHA 2 - 256** - Формирует хеш длиной 256 бит, существенно более устойчив к атакам, оптимальный баланс между безопасностью и производительностью, а также, на сегодняшний день, является стандартом по умолчанию в большинстве систем;
|
||||
- **SHA 2 - 384** - Длина хеша составляет 384 бита, имеет повышенную криптостойкость, требует больше вычислительных ресурсов, чем SHA-1 и SHA 2-256. Используется в средах с повышенными требованиями к безопасности;
|
||||
- **SHA 2 - 512** - Длина хеша составляет 512 бит, осуществляет самый высокий уровень стойкости из перечисленных, а также создает большую нагрузку на процессор. Обычно применяется в системах с повышенными требованиями к криптографии.
|
||||
|
||||
#### Шифрование
|
||||
|
||||
Определяет **алгоритм симметричного шифрования.**
|
||||
|
||||
Данный параметр заполняется вручную из выпадающего списка следующего содержания:
|
||||
|
||||
- **AES 128** - имеет 128-битный ключ, обеспечивает быстрое шифрование, имеет достаточный уровень безопасности для большинства задач;
|
||||
- **AES 256** - имеет 256-битный ключ, обеспечивает более высокую криптостойкость, оказывает немного большую нагрузку на CPU;
|
||||
- **AES GCM 12** / **AES GCM 192** / **AES GCM 256** - данные алгоритмы совмещают шифрование и контроль целостности, обладают более современным режимом работы, считаются более эффективными по производительности, а также рекомендуются в современных конфигурациях. Разница между этими тремя алгоритмами лишь в длине ключа.
|
||||
|
||||
#### DH Group - группа Деффи Хеллмана
|
||||
|
||||
Механизм Diffie-Hellman используется **для безопасной генерации общего секретного ключа** между сторонами туннеля без передачи этого ключа по сети.
|
||||
Чем выше номер группы и длина ключа - тем выше криптографическая стойкость соединения.
|
||||
|
||||
Данный параметр так же содержит в себе выпадающий список, состоящий из следующих значений:
|
||||
- **group 2**;
|
||||
- **group 5**;
|
||||
- **group 14**;
|
||||
- **group 15**;
|
||||
- **group 16**;
|
||||
- **group 19**;
|
||||
- **group 20**;
|
||||
- **group 21**.
|
||||
|
||||
#### IKE Mode (только для IKEv1)
|
||||
|
||||
Параметр IKE Mode **определяет способ установления соединения** на этапе 1 при использовании протокола IKEv1.
|
||||
|
||||
Доступны два режима: **Main** и **Aggressive**. Они отличаются количеством сообщений при установке соединения и уровнем защиты идентификационных данных.
|
||||
- Main Mode - является стандартным и более безопасным режимом работы IKEv1.
|
||||
- Aggressive Mode - упрощённый и ускоренный режим установления соединения. (более низкий уровень защиты данных)
|
||||
|
||||
#### Время жизни
|
||||
|
||||
Определяет, как долго действуют согласованные ключи в рамках первой фазы.
|
||||
|
||||
- Рекомендуемое значение: 86400 секунд (24 часа);
|
||||
- После истечения времени выполняется повторная генерация ключей.
|
||||
|
||||
|
||||
## Этап 2 - передача данных
|
||||
|
||||
Этап 2 IPsec-соединения отвечает за шифрование и защиту пользовательского трафика после того, как защищённый канал был установлен на этапе 1. Этот этап регулирует передачу данных между сторонами через безопасный туннель, который обеспечивает конфиденциальность и целостность данных.
|
||||
|
||||
#### Hash
|
||||
|
||||
Аналогично этапу 1, параметр Hash используется **для защиты целостности передаваемых данных**. Он обеспечивает проверку, что данные не были изменены при передаче.
|
||||
|
||||
Содержит элементы для выбора:
|
||||
|
||||
- **SHA 1**;
|
||||
- **SHA 2 - 256**;
|
||||
- **SHA 2 - 384**;
|
||||
- **SHA 2 - 512**.
|
||||
|
||||
#### Шифрование
|
||||
|
||||
Этап 2 отвечает за **шифрование пользовательского трафика**. Это важнейший параметр, который защищает данные при их передаче по сети.
|
||||
|
||||
Доступны следующие алгоритмы:
|
||||
|
||||
- **AES 128**;
|
||||
- **AES 256**;
|
||||
- **AES GCM 128**;
|
||||
- **AES GCM 192**;
|
||||
- **AES GCM 256**.
|
||||
|
||||
#### PFS
|
||||
|
||||
**Enable perfect forward secrecy (PFS)** - параметр, активирующий генерацию нового ключа на этапе 2. При включенном PFS группа DH будет такая же как и на 1-й фазе. Данный параметр представлен в виде чекбокса.
|
||||
|
||||
При его включении:
|
||||
|
||||
- На этапе 2 выполняется дополнительный обмен ключами Diffie-Hellman;
|
||||
- Для каждой новой IPsec-сессии формируется новый независимый криптографический секрет;
|
||||
- Ключи шифрования пользовательского трафика не зависят от ключей этапа 1.
|
||||
|
||||
#### DH Group - группа Деффи Хеллмана
|
||||
|
||||
Группа DH **определяет параметры обмена ключами** между сторонами. Чем выше номер группы, тем выше криптографическая стойкость и безопасность обмена.
|
||||
|
||||
Данный параметр так же содержит в себе выпадающий список, состоящий из следующих значений:
|
||||
|
||||
- **group 2**;
|
||||
- **group 5**;
|
||||
- **group 14**;
|
||||
- **group 15**;
|
||||
- **group 16**;
|
||||
- **group 19**;
|
||||
- **group 20**;
|
||||
- **group 21**.
|
||||
|
||||
#### Время жизни (в секундах)
|
||||
|
||||
Определяет, как долго действуют согласованные ключи в рамках второй фазы.
|
||||
|
||||
- Рекомендуемое значение: 3600 секунд (1 час).
|
||||
- После истечения времени выполняется повторная генерация ключей.
|
||||
|
||||
#### Префиксы локальной сети заказчика
|
||||
|
||||
Этот параметр определяет, какие сети на стороне заказчика будут маршрутизироваться через IPsec-туннель.
|
||||
|
||||
Префиксы задаются в формате `192.168.1.0/24`, который позволяет указать диапазон IP-адресов.
|
||||
@@ -0,0 +1,3 @@
|
||||
# Cloud Interconnect
|
||||
|
||||
Раздел в разработке.
|
||||
@@ -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, использующими его в своей работе.
|
||||
@@ -0,0 +1,3 @@
|
||||
# 1C
|
||||
|
||||
Раздел в разработке.
|
||||
@@ -0,0 +1,88 @@
|
||||
# Cloud PostgreSQL
|
||||
|
||||
## Назначение сервиса
|
||||
|
||||
**Cloud PostgreSQL** - это управляемый облачный сервис реляционной базы данных PostgreSQL. Он позволяет развернуть и использовать отказоустойчивый кластер базы данных без необходимости самостоятельно настраивать серверы, репликацию и механизмы отказоустойчивости.
|
||||
|
||||
PostgreSQL - это современная система управления базами данных, которая поддерживает стандарт SQL и используется для хранения и обработки данных приложений.
|
||||
|
||||
В **Cloud PostgreSQL** все основные операции по управлению кластером выполняются автоматически.
|
||||
|
||||
Сервис самостоятельно:
|
||||
- управляет ролями серверов базы данных (основной сервер и реплики);
|
||||
- отслеживает состояние узлов;
|
||||
- автоматически переключает основной сервер при сбоях.
|
||||
|
||||
Для обеспечения стабильной работы сервиса используется несколько инфраструктурных компонентов:
|
||||
- **Patroni** - управляет кластером PostgreSQL и автоматическим переключением при отказах;
|
||||
- **etcd** - хранит состояние кластера и обеспечивает согласованность работы узлов;
|
||||
- **HAProxy** - обеспечивает единую точку подключения и распределяет клиентские подключения между узлами.
|
||||
|
||||
Подключение к базе данных выполняется через прокси-узлы сервиса. Пользователю не требуется подключаться к отдельным серверам кластера — все операции производятся через единую точку доступа.
|
||||
|
||||
Для управления базами данных и пользователями доступен [web-интерфейс **pgAdmin**](./pgadmin.md), позволяющий выполнять администрирование непосредственно через браузер.
|
||||
|
||||
## Конфигурации кластера
|
||||
|
||||
Сервис **Cloud PostgreSQL** поддерживает версии СУБД с 13 по 17 включительно.
|
||||
|
||||
Кластер предоставляется в архитектуре Primary–Standby, которая обеспечивает:
|
||||
|
||||
- синхронную репликацию данных;
|
||||
- повышенную отказоустойчивость.
|
||||
|
||||
В рамках данной конфигурации создаётся кластер из виртуальных серверов, включающий:
|
||||
|
||||
- **Primary** (основной сервер) — обязательный узел, на котором выполняются операции записи данных;
|
||||
- **Replica** (реплики) — дополнительные узлы (от 0 до 4), создаваемые по желанию пользователя.
|
||||
|
||||
Реплики являются полноценными участниками кластера PostgreSQL и могут использоваться для выполнения запросов, не изменяющих данные (например, SELECT).
|
||||
|
||||
В многоузловой конфигурации серверы кластера размещаются на разных физических хостах гипервизора, что повышает устойчивость сервиса к отказам оборудования.
|
||||
|
||||
## Режимы репликации
|
||||
|
||||
По умолчанию фиксация изменений выполняется в **синхронном режиме**. Это означает, что операция записи считается завершённой только после того, как данные будут зафиксированы как на основном сервере, так и на одной из реплик.
|
||||
|
||||
Если в кластере настроено несколько реплик, синхронный режим применяется только к одной из них. Остальные реплики работают в асинхронном режиме — изменения передаются на них без ожидания подтверждения.
|
||||
|
||||
При необходимости режим репликации может быть изменён на полностью **асинхронный**. В этом случае изменения сначала фиксируются на основном сервере, а затем передаются на реплики с задержкой.
|
||||
|
||||
## Доступ к серверам и оптимизация соединений
|
||||
|
||||
Прямой доступ к серверам кластера (например, по протоколу SSH) не предоставляется. Пользователь взаимодействует с базой данных исключительно через точки подключения, предоставленные сервисом.
|
||||
|
||||
На каждом узле кластера установлен пулер соединений **PgBouncer**, который может использоваться для ускорения работы приложений за счёт оптимизации подключений к базе данных.
|
||||
|
||||
::: warning Примечание
|
||||
|
||||
Использование PgBouncer не является обязательным - подключение возможно как напрямую к PostgreSQL, так и через пулер, а также одновременно обоими способами.
|
||||
|
||||
:::
|
||||
|
||||
## Возможности сервиса
|
||||
|
||||
**Cloud PostgreSQL** предоставляет набор возможностей, позволяющих использовать PostgreSQL в облаке без необходимости самостоятельного администрирования инфраструктуры.
|
||||
|
||||
Сервис обеспечивает:
|
||||
|
||||
- автоматическое управление кластером PostgreSQL;
|
||||
- высокую доступность за счёт репликации и автоматического переключения primary-узла;
|
||||
- единую точку подключения к базе данных через прокси;
|
||||
- автоматическое переключение при отказе узлов кластера без вмешательства пользователя;
|
||||
- web-доступ к управлению базами данных и пользователями через pgAdmin;
|
||||
- совместимость со стандартными клиентскими инструментами PostgreSQL;
|
||||
- возможность установки расширений PostgreSQL в базу данных.
|
||||
|
||||
## Сценарии использования сервиса
|
||||
|
||||
**Cloud PostgreSQL** подходит для использования в системах, где требуется надёжное хранение данных и упрощённое управление инфраструктурой базы данных.
|
||||
|
||||
Сервис может применяться в следующих сценариях:
|
||||
|
||||
- размещение production-баз данных с высокими требованиями к доступности;
|
||||
- использование PostgreSQL в микросервисной архитектуре с единой точкой подключения к базе данных;
|
||||
- хранение критичных данных с минимальным временем простоя при отказах инфраструктуры;
|
||||
- быстрое развёртывание PostgreSQL-кластера без необходимости ручной настройки репликации и failover;
|
||||
- администрирование баз данных через веб-интерфейс без прямого доступа к серверам кластера.
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
# Описание технических параметров
|
||||
|
||||
Данный раздел содержит технические параметры кластера PostgreSQL и порядок их первичной конфигурации.
|
||||
|
||||
Настройка указанных параметров выполняется администратором облачного провайдера на этапе развёртывания сервиса. Пользователь не имеет прямого доступа к их самостоятельной установке.
|
||||
|
||||
Перед созданием кластера клиент предоставляет перечень требуемых параметров менеджеру. Администратор облачного провайдера выполняет конфигурацию в соответствии с согласованными требованиями.
|
||||
|
||||
## Выбор типа и размера дискового хранилища
|
||||
|
||||
Производительность базы данных напрямую зависит от скорости, с которой она может читать и записывать данные на диск. При заказе кластера необходимо выбрать тип дискового хранилища, который определит максимальную скорость работы (IOPS) и время отклика.
|
||||
|
||||
**IOPS (Input/Output Operations Per Second)** — количество операций чтения или записи, которые диск может выполнить за секунду. Чем выше этот показатель, тем быстрее база данных обрабатывает запросы.
|
||||
|
||||
## Доступные типы хранилищ:
|
||||
|
||||
| Название | Лимит IOPS |
|
||||
| -------------- | ------------------ |
|
||||
| **Fast SAS** | до 2 IOPS на 1 ГБ |
|
||||
| **SSD** | до 5 IOPS на 1 ГБ |
|
||||
| **Fast SSD** | до 10 IOPS на 1 ГБ |
|
||||
| **Ultra NVMe** | до 25 IOPS на 1 ГБ |
|
||||
|
||||
::: warning Примечание
|
||||
|
||||
После выбора типа диска необходимо указать объем дискового хранилища, который будет выделен под данные кластера PostgreSQL. Минимальный объем - 50 ГБ.
|
||||
|
||||
:::
|
||||
|
||||
## Конфигурация вычислительных ресурсов
|
||||
|
||||
В данном разделе определяются вычислительные мощности кластера: процессорные ресурсы, оперативная память и количество серверов (нод), из которых будет состоять кластер PostgreSQL.
|
||||
|
||||
#### Количество нод в кластере
|
||||
|
||||
Количество нод определяет отказоустойчивость кластера и возможность распределять запросы на чтение между репликами. Чем больше нод, тем выше надёжность и производительность операций чтения.
|
||||
|
||||
Количество нод выбирается в диапазоне **от 1 до 5**.
|
||||
|
||||
#### Процессор (CPU)
|
||||
|
||||
Процессор — это вычислительная мощность, выделяемая каждой ноде кластера. Количество vCPU определяет, насколько быстро база данных сможет:
|
||||
|
||||
- обрабатывать запросы;
|
||||
- выполнять сложные операции (сортировки, объединения таблиц);
|
||||
- обслуживать одновременные подключения.
|
||||
|
||||
Доступный диапазон: **от 2 до 24 vCPU** на ноду.
|
||||
|
||||
#### Оперативная память (RAM)
|
||||
|
||||
Оперативная память — один из ключевых ресурсов для производительности базы данных. Данные, помещающиеся в RAM, обрабатываются максимально быстро, без обращения к диску.
|
||||
|
||||
Доступный диапазон: **от 4 до 768 ГБ RAM** на ноду.
|
||||
|
||||
#### Доступ в интернет
|
||||
|
||||
При заказе сервиса можно выбрать пропускную способность канала связи, через который будет осуществляться доступ к кластеру PostgreSQL из сети интернет.
|
||||
|
||||
**Доступные варианты скорости:**
|
||||
- 50 Мбит/с;
|
||||
- 100 Мбит/с;
|
||||
- 200 Мбит/с;
|
||||
- 300 Мбит/с;
|
||||
- 400 Мбит/с;
|
||||
- 500 Мбит/с;
|
||||
- 1000 Мбит/с (1 Гбит/с).
|
||||
|
||||
::: warning Примечание
|
||||
|
||||
Для выбранного канала предоставляется статический белый IP-адрес.
|
||||
|
||||
:::
|
||||
|
||||
## Сетевой доступ к кластеру
|
||||
|
||||
Для организации защищенного подключения к кластеру Kafka доступны стандартные механизмы, используемые во всех сервисах платформы:
|
||||
- **IPsec-подключение** - организация защищенного туннеля между инфраструктурой и кластером PostgreSQL. Подробнее см. [раздел IPsec](../IPSEC.md);
|
||||
- **Interconnection** - прямое сетевое соединение между сервисами внутри платформы без выхода в интернет. Подробнее см. раздел Interconnection.
|
||||
|
||||
Выбор конкретного способа подключения зависит от архитектуры приложений и требований к безопасности.
|
||||
@@ -0,0 +1,88 @@
|
||||
# Общая схема подключения
|
||||
|
||||
Подключение к кластеру **Cloud PostgreSQL** осуществляется через прокси-сервер. Клиентские подключения принимаются прокси, который маршрутизирует трафик к соответствующим узлам кластера (master или replica) в зависимости от выбранного порта.
|
||||
|
||||
Прокси является единой точкой входа для всех клиентских подключений и принимает входящие соединения от приложений, административных инструментов и пользователей.
|
||||
|
||||
В зависимости от выбранного порта прокси автоматически направляет трафик:
|
||||
- **на активный primary-узел** - для операций чтения и записи
|
||||
- **на реплики** - для операций только чтения
|
||||
|
||||
::: warning Примечание
|
||||
Прямое подключение к отдельным узлам базы данных **не используется и не предоставляется**. Взаимодействие с кластером всегда выполняется **через прокси-сервер**.
|
||||
:::
|
||||
|
||||
## Подключение к базе данных
|
||||
|
||||
Для подключения к базе данных необходимо использовать IP-адрес прокси-сервера, который предоставляется после заказа услуги.
|
||||
|
||||
Этот IP-адрес является единой точкой входа для работы с кластером PostgreSQL. Все подключения к базе данных - как из приложений, так и из клиентских инструментов - выполняются через него.
|
||||
|
||||
Использование других IP-адресов или попытка прямого подключения к отдельным узлам кластера не предусмотрены.
|
||||
|
||||
## Доступные порты
|
||||
|
||||
Для разных типов нагрузки используются разные порты:
|
||||
|
||||
|Порт |Назначение |
|
||||
|------|-----------------------------------------|
|
||||
|5432 |Primary (чтение и запись) |
|
||||
|15432 |Replica (только чтение) |
|
||||
|6432 |Primary через PgBouncer (чтение и запись)|
|
||||
|16432 |Replica через PgBouncer (только чтение) |
|
||||
|
||||
#### Особенности работы портов
|
||||
|
||||
- Порты **для чтения и записи** (5432, 6432) всегда направляют трафик на активный primary-узел. При смене primary переключение происходит автоматически;
|
||||
- Порты **только для чтения** (15432, 16432) направляют трафик на активные реплики. Если реплик несколько, нагрузка распределяется между ними по принципу round-robin;
|
||||
- Если в кластере **отсутствуют реплики**, порты для чтения не используются - подключение по ним не устанавливается.
|
||||
|
||||
#### Рекомендации по выбору порта
|
||||
|
||||
- Для OLTP-нагрузки и большого количества соединений рекомендуется использовать **порты PgBouncer (6432 или 16432)**;
|
||||
- Для операций записи используйте **master-порты (5432 или 6432)**;
|
||||
- Для read-only запросов можно использовать **replica-порты (15432 или 16432)**.
|
||||
|
||||
## Доступ к pgAdmin
|
||||
|
||||
Для администрирования базы данных используется [web-интерфейс pgAdmin](./pgadmin.md).
|
||||
Доступ осуществляется по DNS-имени, которое нужно прописать локально в инфраструктуре откуда будет происходить доступ к web-интерфейсу сервиса:
|
||||
`10.X.X.4 <domain>.cloud-pg.dfcloud.ru`
|
||||
|
||||
После добавления записи pgAdmin будет доступен по адресу:
|
||||
`https://<domain>.cloud-pg.dfcloud.ru`
|
||||
|
||||
Авторизация выполняется с использованием учётных данных, предоставленных вместе с доступом к сервису.
|
||||
|
||||
::: warning Примечание
|
||||
|
||||
- подключение к базе данных возможно только через указанный прокси-IP;
|
||||
- в интерфейсе pgAdmin уже добавлен сервер базы данных, созданный для данной инсталляции. Для подключения требуется ввести пароль от учётной записи базы данных;
|
||||
- pgAdmin предназначен для администрирования и не рекомендуется для выполнения тяжёлых или длительных запросов в production-среде.
|
||||
|
||||
:::
|
||||
|
||||
## Примеры подключения к PostgreSQL
|
||||
|
||||
Подключение к primary:
|
||||
`psql -h 10.X.X.4 -p 5432 -U <username> -d <database>`
|
||||
|
||||
Подключение через PgBouncer:
|
||||
`psql -h 10.X.X.4 -p 6432 -U <username> -d <database>`
|
||||
|
||||
#### Подключение через DBeaver / DataGrip
|
||||
|
||||
При создании подключения укажите:
|
||||
- Host: 10.X.X.4;
|
||||
- Port: 5432 или 6432;
|
||||
- Database: `<database>`;
|
||||
- User / Password: согласно выданным доступам;
|
||||
- Тип подключения: PostgreSQL.
|
||||
|
||||
#### Пример строки подключения
|
||||
|
||||
Primary:
|
||||
`postgresql://<username>:<password>@10.X.X.4:5432/<database>`
|
||||
|
||||
Через PgBouncer:
|
||||
`postgresql://<username>:<password>@10.X.X.4:6432/<database>`
|
||||
@@ -0,0 +1,104 @@
|
||||
# Grafana
|
||||
|
||||
## Инструкция по работе с метриками
|
||||
|
||||
Доступ к метрикам кластера предоставляется после запроса соответствующих прав. После получения доступа можно перейти в систему мониторинга по ссылке: https://metrics.dfcloud.ru. После перехода по ссылке будет представлена главная страница Grafana.
|
||||
|
||||
Для просмотра метрик кластера PostgreSQL выполните следующие шаги:
|
||||
|
||||
1. В левом боковом меню нажмите **Dashboard**;
|
||||
2. В списке доступных дашбордов выберите **папку Cloud PostgreSQL**;
|
||||
3. Внутри папки выберите **дашборд Cloud PostgreSQL** — в нём отображаются все метрики кластера.
|
||||
|
||||
## Управление отображаемыми данными
|
||||
|
||||
В верхней части дашборда доступны селекторы для настройки отображения:
|
||||
|
||||
- **InstallationID** - выбор одного опеределенного кластера;
|
||||
- **Cluster node name** - выбор конкретного нода кластера, в котором значения графиков меняются в зависимости от выбранного хоста (селектор влияет на все графики, кроме блока Patroni);
|
||||
- **Database** - выбор базы данных, по которым отображаются метрики;
|
||||
- **Lock table** - выбор типа блокировки для отображения (применим не для всех графиков).
|
||||
|
||||
## Метрики PostgreSQL
|
||||
|
||||
Метрики отображают ключевые параметры конфигурации и текущие показатели работы экземпляра PostgreSQL.
|
||||
|
||||
| Наименование метрики | Описание метрики |
|
||||
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Version** | Показывает текущую версию PostgreSQL, установленную на кластере. |
|
||||
| **Current fetch data** | Объем данных, извлеченных из базы за текущий период (операции чтения). |
|
||||
| **Current insert data** | Объем данных, вставленных в базу (операции записи новых данных). |
|
||||
| **Current update data** | Объем данных, обновленных в базе. |
|
||||
| **Seq Page Cost** | Стоимость последовательного чтения страницы данных. Влияет на выбор плана запроса: чем выше значение, тем реже оптимизатор будет выбирать последовательное сканирование таблиц. |
|
||||
| **Random Page Cost** | Стоимость чтения случайной страницы данных. Низкое значение говорит о том, что в системе используются быстрые диски, и оптимизатор будет чаще выбирать доступ по индексам. |
|
||||
| **Max Connections** | Максимальное количество одновременных подключений к базе данных, разрешенное на сервере. |
|
||||
| **Shared Buffers** | Объем оперативной памяти, выделенный под кэш данных PostgreSQL. Здесь хранятся часто используемые данные для ускорения доступа к ним. |
|
||||
| **Effective Cache** | Предполагаемый размер системного кэша файлов. Используется оптимизатором для оценки вероятности нахождения данных в кэше операционной системы. |
|
||||
| **Maintenance Work Mem** | Объем памяти для выполнения операций обслуживания. |
|
||||
| **Work Mem** | Объем памяти, выделяемый для внутренних сортировок и хеш-таблиц при выполнении запросов (на каждую операцию). |
|
||||
| **Max WAL Size** | Максимальный размер журнала предзаписи, после достижения которого запускается процесс контрольной точки (checkpoint). |
|
||||
| **Max Worker Processes** | Максимальное количество фоновых процессов, которые могут быть запущены в системе. |
|
||||
| **Max Parallel Workers** | Максимальное количество параллельных процессов, которые могут быть задействованы при выполнении одного запроса. |
|
||||
|
||||
## Метрики Database Stats
|
||||
|
||||
Метрики отображают текущую нагрузку и состояние баз данных в кластере PostgreSQL. Данные метрики позволяют:
|
||||
- оценить эффективность работы баз данных;
|
||||
- отследить скачки нагрузки;
|
||||
- своевременно среагировать на потенциальные проблемы до того, как они повлияют на работу приложений.
|
||||
|
||||
| Наименование | Описание |
|
||||
|---------------------------| -------------------|
|
||||
| **Average CPU Usage** | Показывает время, затраченное на выполнение пользовательских и системных задач, а также, насколько интенсивно используются вычислительные ресурсы сервера базы данных. |
|
||||
| **Average Memory Usage** | Средний объем оперативной памяти, используемой процессами PostgreSQL за 5-минутные интервалы. Показывает, сколько памяти потребляет база данных в процессе работы. |
|
||||
| **Open File Descriptors** | Количество открытых файловых дескрипторов процессами PostgreSQL. Метрика показывает среднее (Mean), последнее (Last), максимальное (Max) и минимальное (Min) значение за интервал. |
|
||||
| **Active sessions** | Показывает, сколько в данный момент выполняется запросов к PostgreSQL. Метрика показывает среднее (Mean), последнее (Last), максимальное (Max) значение. |
|
||||
| **Transcations** | Количество транзакций в базах данных кластера. Метрика разделена на два типа операций: commits (успешно завершенные транзакции) и rollbacks (откаченные транзакции). |
|
||||
| **Update data** | Объем данных, обновленных в базах данных кластера. Показывает, сколько данных было изменено в результате выполнения операций UPDATE. |
|
||||
| **Fetch data (SELECT)** | Объем данных, извлеченных из базы с помощью запросов SELECT. Показывает, сколько данных было считано из базы в результате операций чтения. |
|
||||
| **Insert data** | Объем данных, вставленных в базы данных кластера. Показывает, сколько данных было добавлено в результате выполнения операций INSERT. |
|
||||
| **Lock tables** | Количество блокировок таблиц в базах данных кластера. Показывает, сколько раз таблицы были заблокированы для выполнения операций.<br>AccessShareLock - это блокировка, которая возникает, когда кто-то читает данные из таблицы (делает SELECT). Данная блокировка не мешает операциям чтения, но не дает удалить в этот момент таблицу или изменить ее структуру. |
|
||||
| **Return data** | Объем данных, возвращаемых клиенту в результате выполнения запросов. Показывает, сколько данных было отправлено обратно клиенту после обработки запросов в базе. |
|
||||
| **Idle sessions** | Количество бездействующих сессий подключения к базе данных. Показывает, сколько открытых подключений в данный момент не выполняют никаких запросов и просто ждут. |
|
||||
| **Delete data** | Объем данных, удаленных из базы данных в результате выполнения операций DELETE. Показывает, сколько данных было удалено из таблиц. |
|
||||
| **Cache Hit Rate** | Показывает процент запросов к данным, которые были удовлетворены из кэша (оперативной памяти), без обращения к диску. Показывает, насколько эффективно используется кэш PostgreSQL. |
|
||||
| **Buffers (bgwriter)** | Метрика, показывающая активность фонового процесса записи, который занимается синхронизацией данных из оперативной памяти на диск. |
|
||||
| **Conflicts/Deadlocks** | Метрика, отслеживающая две проблемы при работе с базой данных: конфликты восстановления и взаимоблокировки. |
|
||||
| **Temp File (Bytes)** | Объем данных, записанных во временные файлы при выполнении запросов в базах данных. PostgreSQL создает временные файлы на диске, когда для выполнения запроса не хватает оперативной памяти. |
|
||||
| **Checkpoint Stats** | Метрика, показывающая время, затрачиваемое на выполнение checkpoints в PostgreSQL, где: <br>- **write_time** - время, затраченное на запись данных на диск во время checkpoint (сколько миллисекунд ушло на запись файлов).<br>- **sync_time** - время, затраченное на синхронизацию файлов с диском (чтобы данные гарантированно сохранились). |
|
||||
|
||||
## Метрики Patroni
|
||||
|
||||
Метрик отображают состояние и конфигурацию кластера PostgreSQL под управлением Patroni. Эти метрики позволяют контролировать отказоустойчивость кластера, отслеживать переключения мастера и убеждаться, что репликация работает штатно.
|
||||
|
||||
| Наименование | Описание |
|
||||
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Patroni Leader** | Метрика, которая показывает, какая нода в кластере PostgreSQL в данный момент является master-сервером, принимающим запросы на запись. |
|
||||
| **Patroni Replica** | Метрика, которая показывает, какие узлы кластера PostgreSQL в данный момент выполняют роль реплики. |
|
||||
| **Sync Standby** | Метрика, которая показывает, какая из реплик в кластере PostgreSQL назначена синхронной. |
|
||||
| **PostgreSQL WAL Replay** | Метрика, которая показывает, включена ли на узлах кластера синхронизация данных через WAL. |
|
||||
| **PostgreSQL Pending Restart** | Метрика, которая показывает, требуется ли перезагрузка PostgreSQL на узлах кластера после изменения конфигурационных параметров. |
|
||||
| **Patroni Primary Node** | Метрика, которая показывает, какой узел в кластере PostgreSQL в данный момент является основным и принимает запросы на запись. |
|
||||
| **Patroni Secondary Nodes** | Метрика, которая показывает, какие узлы кластера PostgreSQL в определенные моменты времени выполняли роль реплик. |
|
||||
| **Replicas Received WAL Location** | Метрика, показывающая объем журналов предзаписи (WAL), полученных каждой репликой кластера. |
|
||||
| **Primary WAL Location** | Метрика, показывающая объем журналов предзаписи (WAL), на основном сервере кластера PostgreSQL. |
|
||||
| **Replicas Replayed WAL Location** | Метрика, показывающая объем журналов предзаписи (WAL), которые были не просто получены, а уже применены на репликах кластера. |
|
||||
| **WAL Replay Paused** | Метрика, которая отслеживает, не приостановлен ли процесс применения WAL-журналов на узлах кластера. Если передача или применение WAL-файлов останавливается, на графике происходит скачок. |
|
||||
|
||||
## Метрики Hosts
|
||||
|
||||
Блок Hosts управляется селектором **Cluster node name**. Метрики отображают состояние и ресурсы серверов, на которых развернут кластер PostgreSQL. Данные метрики позволяют оценить, хватает ли серверу ресурсов для текущей нагрузки, и своевременно обнаружить проблемы с производительностью или нехваткой места на дисках.
|
||||
|
||||
| Наименование | Описание |
|
||||
| -------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **CPU Busy** | Метрика, показывающая общую загруженность всех процессорных ядер на сервере, где работает PostgreSQL. |
|
||||
| **RAM Used** | Метрика, показывающая процент оперативной памяти, который занят на сервере всеми процессами. |
|
||||
| **CPU Cores** | Метрика, показывающая общее количество процессорных ядер, доступных на сервере, где работает PostgreSQL. |
|
||||
| **RAM Total** | Метрика, показывающая общий объем оперативной памяти, установленный на сервере. |
|
||||
| **DB Disk Total** | Метрика, показывающая общий объем дискового пространства, выделенного для хранения данных базы данных PostgreSQL на сервере. |
|
||||
| **CPU Basic** | Метрика, которая показывает детальную разбивку загрузки процессора по типам выполняемых задач. Она позволяет увидеть, на что именно тратится процессорное время на сервере. |
|
||||
| **Memory Basic** | Метрика, которая показывает детальную разбивку использования оперативной памяти на сервере, а также информацию о SWAP. |
|
||||
| **Disk IOps** | Метрика, показывающая количество операций чтения и записи, выполняемых на диске сервера в секунду. |
|
||||
| **Disk Space Used Basic** | Метрика, показывающая процент занятого дискового пространства на всех подключенных файловых системах сервера. |
|
||||
| **Disk R/W Data** | Показывает объем данных в байтах, читаемых с диска и записываемых на диск в секунду. |
|
||||
| **Filesystem space available** | Метрика, показывающая объем свободного дискового пространства на файловой системе сервера. |
|
||||
@@ -0,0 +1,67 @@
|
||||
# PgAdmin
|
||||
|
||||
После предоставления доступа к сервису **Cloud PostgreSQL** пользователь получает возможность управлять базами данных через веб-интерфейс **pgAdmin**. Ниже приведена инструкция по входу в систему и выполнению основных операций.
|
||||
|
||||
## Вход в pgAdmin
|
||||
|
||||
1. Откройте веб-браузер и перейдите по адресу, предоставленному для доступа к pgAdmin;
|
||||
2. На странице авторизации введите **логин и пароль от pgAdmin**;
|
||||
> Учетные данные направляются пользователю на электронную почту при предоставлении доступа.
|
||||
3. После входа в систему в левой панели навигации откройте раздел **Servers**;
|
||||
4. Выберите предварительно настроенный сервер с названием **PostgreSQL**;
|
||||
5. В открывшемся окне введите пароль;
|
||||
> Важно: на данном этапе необходимо указать **пароль учетной записи базы данных**, а не пароль от pgAdmin.
|
||||
6. Нажмите **ОК**.
|
||||
|
||||
После успешной аутентификации станет доступен веб-интерфейс СУБД PostgreSQL.
|
||||
|
||||
## Реплики и параметры конфигураций
|
||||
|
||||
pgAdmin позволяет осуществлять мониторинг реплик, входящих в состав кластера. Чтобы просмотреть список реплик необходимо открыть раздел **Replica nodes** в панели навигации.
|
||||
|
||||
|
||||
### Просмотр состояния репликаций
|
||||
|
||||
Чтобы проверить состояние репликации:
|
||||
1. Выберите нужную реплику в разделе **Replica nodes**;
|
||||
2. Перейдите в подраздел **Replication**;
|
||||
3. Откройте пункт **Replication stats**;
|
||||
4. Разверните раздел **Подробности** - в нем отображаются все параметры и текущее состояние репликации.
|
||||
|
||||
Вкладка **Replication** позволяет определить, выполняется ли передача данных на дополнительные узлы кластера.
|
||||
|
||||
### Просмотр конфигураций реплики
|
||||
|
||||
Чтобы просмотреть **параметры конфигурации PostgreSQL**, применённые к конкретной реплике, перейдите в раздел **Конфигурация**, расположенный в блоке **Replica nodes**.
|
||||
|
||||
Раздел **Конфигурация** содержит следующие параметры:
|
||||
- **Имя** - наименование конфигурационного параметра;
|
||||
- **Категория** - логическая группа параметра;
|
||||
- **Значение** - текущее установленное значение;
|
||||
- **Единицы** - единицы измерения (если применимо);
|
||||
- **Описание** - краткое пояснение назначения параметра.
|
||||
> Вкладка **Конфигурация** предназначена для просмотра текущих настроек реплики.
|
||||
|
||||
## Базы данных
|
||||
|
||||
### Просмотр существующих баз данных:
|
||||
|
||||
Чтобы просмотреть существующие базы данных, откройте раздел Базы данных в левой панели навигации. В этом разделе отображается перечень всех созданных баз.
|
||||
|
||||
### Создание новой базы данных:
|
||||
|
||||
1. Щелкните правой кнопкой мыши по разделу **Базы данных**;
|
||||
2. В контекстном меню выберите **Создать**, затем - **База данных**;
|
||||
3. Заполните обязательные поля в открывшейся форме;
|
||||
4. Нажмите **Сохранить**.
|
||||
|
||||
## Роли входа / группы
|
||||
|
||||
В разделе **Роли входа/группы** отображается список пользователей (ролей), имеющих доступ к базам данных кластера.
|
||||
|
||||
### Создание новой роли:
|
||||
|
||||
1. Щелкните правой кнопкой мыши по разделу **Роли входа/группы**;
|
||||
2. Выберите **Создать**, затем - **Роль входа/группы**;
|
||||
3. Заполните необходимые параметры в форме создания роли;
|
||||
4. Нажмите **Сохранить**.
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Назначение сервиса
|
||||
link: /PostgreSQL/service/about.md
|
||||
description: Конфигурации и возможности сервиса
|
||||
- title: Параметры кластера PostgreSQL
|
||||
link: /PostgreSQL/service/cluster-parameter.md
|
||||
description: Технические параметры кластера PostgreSQL
|
||||
- title: Схема подключения
|
||||
link: /PostgreSQL/service/connection.md
|
||||
description: Общая схема подключения к Cloud PostgreSQL
|
||||
- title: Возможности пользователя
|
||||
link: /PostgreSQL/service/user-capabilities.md
|
||||
description: Возможности пользователя при создании сервиса
|
||||
- title: Веб-интерфейс Grafana
|
||||
link: /PostgreSQL/service/grafana.md
|
||||
description: Инструкция по работе с Grafana
|
||||
- title: Веб-интерфейс PgAdmin
|
||||
link: /PostgreSQL/service/pgadmin.md
|
||||
description: Инструкция по работе с PgAdmin
|
||||
- title: 1C для PostgreSQL
|
||||
link:
|
||||
description: Инструкция по работе с 1C при использовании PostgreSQL
|
||||
---
|
||||
|
||||
# Cloud PostgreSQL
|
||||
|
||||
В данном разделе представлена документация по управляемому сервису **Cloud PostgreSQL** платформы Beeline Cloud.
|
||||
@@ -0,0 +1,134 @@
|
||||
# Возможности пользователя
|
||||
|
||||
Данный раздел описывает права, которые предоставляются пользователю PostgreSQL при создании сервиса **Cloud PostgreSQL**, а также перечень административных операций, доступных ему для самостоятельного выполнения.
|
||||
|
||||
При развертывании сервиса автоматически создаётся пользователь базы данных с преднастроенными атрибутами и привилегиями. Эти права позволяют заказчику самостоятельно управлять своими базами данных, ролями и пользователями в рамках созданного экземпляра PostgreSQL.
|
||||
|
||||
|
||||
## Общая информация о пользователе
|
||||
|
||||
При инициализации сервиса автоматически создаётся пользователь:
|
||||
|
||||
```nginx
|
||||
client
|
||||
```
|
||||
|
||||
Данный пользователь является основной учётной записью для административной работы в рамках предоставленного экземпляра PostgreSQL.
|
||||
|
||||
Он предназначен для самостоятельного управления в пределах выданных привилегий:
|
||||
- базами данных;
|
||||
- ролями;
|
||||
- правами доступа.
|
||||
|
||||
|
||||
## Выданные права и ограничения
|
||||
|
||||
Пользователю `client` назначается набор атрибутов и привилегий, позволяющих выполнять административные операции в рамках своего экземпляра базы данных.
|
||||
|
||||
#### Атрибуты роли
|
||||
|
||||
Пользователь создаётся со следующими атрибутами:
|
||||
- `CREATEDB` — разрешено создание и удаление баз данных;
|
||||
- `CREATEROLE` — разрешено создание ролей и пользователей, а также управление их.
|
||||
|
||||
Атрибут `SUPERUSER` пользователю не предоставляется. Соответственно, доступ к системным операциям уровня кластера и настройкам сервера отсутствует.
|
||||
|
||||
#### Права на системную базу postgres:
|
||||
|
||||
К стандартной базе данных `postgres` пользователю предоставлено только право подключения — `CONNECT`
|
||||
|
||||
**Иные привилегии (создание объектов, изменение схем и т.д.) на данную базу не выдаются.**
|
||||
|
||||
|
||||
## Мониторинг и системные представления
|
||||
|
||||
Для выполнения базовых задач мониторинга пользователю дополнительно предоставлены:
|
||||
- членство в роли `pg_monitor`;
|
||||
- право `SELECT` на системное представление:
|
||||
```sql
|
||||
pg_catalog.pg_stat_replication
|
||||
```
|
||||
|
||||
Доступ к системной информации предоставляется исключительно **в режиме чтения**. Изменение системных представлений и параметров сервера недоступно.
|
||||
|
||||
|
||||
## Изменение пароля
|
||||
|
||||
После первого подключения к базе данных пользователь `client` обязан выполнить изменения пароля.
|
||||
|
||||
Изменить пароля можно:
|
||||
- в открытом виде (с передачей нового значения пароля);
|
||||
- с указанием заранее сгенерированного хэша.
|
||||
|
||||
На сервере используется алгоритм шифрования паролей:
|
||||
|
||||
```
|
||||
scram-sha-256
|
||||
```
|
||||
|
||||
При использовании **SCRAM** применяется следующий формат хэша:
|
||||
|
||||
```
|
||||
$<iterations>:<salt>$<storedkey>:<serverkey>
|
||||
```
|
||||
|
||||
| Операция | Описание | Команда SQL |
|
||||
|----------|----------|-------------|
|
||||
|Смена пароля в открытом виде | Для смены пароля в открытом виде | ```ALTER USER client WITH PASSWORD 'new_strong_password';``` |
|
||||
|Смена пароля с указанием хэша | Рекомендуется использовать сложный уникальный пароль, соответствующий требованиям информационной безопасности, и хранить его в защищённом хранилище | ```ALTER USER client WITH ENCRYPTED PASSWORD '$4096:...';``` |
|
||||
|Создание новой базы данных | Для создания базы данных | ```CREATE DATABASE app_db;``` |
|
||||
|Создание базы данных с указанием владельца | Пользователь, указанный как владелец, будет иметь полный контроль над базой данных, включая права на её удаление и изменение. По умолчанию владельцем создаваемой базы данных является пользователь, который её создает | ```CREATE DATABASE app_db OWNER client;``` |
|
||||
|
||||
### Требования к паролям
|
||||
|
||||
**Длина пароля (рекомендуемая):**
|
||||
|
||||
- для учётной записи пользователя - не менее 12 знаков;
|
||||
- для учётных записей администраторов, технических и служебных учётных записей - не менее 16 знаков.
|
||||
|
||||
**Сложность пароля:** рекомендуется использовать уникальный пароль, содержащий символы как минимум трёх из четырёх указанных ниже групп (при отсутствии технических ограничений):
|
||||
|
||||
- буквы латинского алфавита в верхнем регистре (A-Z);
|
||||
- буквы латинского алфавита в нижнем регистре (a-z);
|
||||
- цифры (0-9);
|
||||
- специальные символы и знаки пунктуации (например, `!@#$%^&*(),.?`).
|
||||
|
||||
**Периодичность смены:** рекомендуемая периодичность смены пароля - не реже одного раза в год.
|
||||
|
||||
## Создание пользователей и ролей
|
||||
|
||||
Пользователь `client` имеет право создавать новые роли и пользователей для приложений, а также управлять их правами доступа.
|
||||
|
||||
| Операция | Описание | Команда SQL |
|
||||
|----------|----------|-------------|
|
||||
|Создание роли без логина | Для входа в базу данных (например, для организации прав доступа) | ```CREATE ROLE app_role; ```|
|
||||
|Создание пользователя с паролем | Для создания пользователя с паролем. После выполнения этой команды новый пользователь `app_user` будет иметь возможность входа в базу данных, используя указанный пароль. | ```CREATE USER app_user WITH PASSWORD 'app_password';``` |
|
||||
|Назначение роли пользователю | Для назначения роли пользователю. Данная команда позволяет управлять правами пользователя в рамках определённой роли. После выполнения этой команды пользователь `app_user` станет членом роли `app_role`, и будет наследовать все права, связанные с этой ролью. | ```GRANT app_role TO app_user; ``` |
|
||||
|
||||
|
||||
## Управление правами доступа
|
||||
|
||||
После создания пользователей и ролей необходимо назначить им соответствующие права доступа.
|
||||
|
||||
| Операция | Описание | Команда SQL |
|
||||
|----------|----------|-------------|
|
||||
|Передача владельца базы данных | Для передачи прав владения базой данных другому пользователю. После выполнения этой команды база данных `app_db` будет принадлежать пользователю `app_user`, и он будет иметь полный контроль над ней.| ```ALTER DATABASE app_db OWNER TO app_user;``` |
|
||||
|Выдача прав на подключение к базе данных | Для предоставления прав к подключению к базе данных. После выполнения этой команды пользователь может `app_user` подключаться к базе данных `app_db`. | ```GRANT CONNECT ON DATABASE app_db TO app_user;```|
|
||||
|Предоставление прав на схему public | Для предоставления прав на использование схемы `public`. После выполнения этой команды пользователь `app_user` может использовать объекты в схеме `public`, а также создавать новые объекты внутри неё. | ```GRANT USAGE, CREATE ON SCHEMA public TO app_user;```|
|
||||
|Предоставление прав на существующие таблицы | Для предоставления доступа пользователю к существующим таблицам в схеме `public`. После выполнения этой команды пользователь `app_user` может выполнять операции чтения, вставки, обновления и удаления данных в существующих таблицах схемы `public`.| ```GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;``` |
|
||||
|Предоставление прав на будущие таблицы | Если необходимо автоматически предоставить пользователю права на новые таблицы, создаваемые в схеме `public`. После выполнения этой команды все будущие таблицы, создаваемые в схеме `public`, будут автоматически иметь права для пользователя `app_user` на чтение, вставку, обновление и удаление данных. | ```ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;```|
|
||||
|
||||
|
||||
## Мониторинг репликации
|
||||
|
||||
Пользователь `client` имеет доступ к системным представлениям для мониторинга состояния репликации в кластере PostgreSQL.
|
||||
|
||||
| Операция | Описание | Команда SQL |
|
||||
|----------|----------|-------------|
|
||||
|Просмотр состояния репликации | Для просмотра текущего статуса репликации. Этот запрос возвращает информацию о всех репликах, подключённых к основному (primary) серверу. |```SELECT * FROM pg_stat_replication;```|
|
||||
|
||||
::: warning Ограничения доступа реплкации
|
||||
|
||||
Пользователь `client` имеет доступ к данным в представлении `pg_stat_replication` только в режиме **read-only**. Это означает, что он может просматривать состояние репликации, но не может изменять или вмешиваться в процесс репликации.
|
||||
|
||||
:::
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Управление ключевыми парами
|
||||
link: /admin/ssh.md
|
||||
description: Добавление SSH-ключей для подключения к виртуальным машинам
|
||||
---
|
||||
|
||||
# Администрирование
|
||||
|
||||
При [регистрации пользователя](../start/getting-started.md#1-регистрация-в-beeline-cloud) в Beeline Cloud создается аккаунт и проект в Beeline Cloud.
|
||||
|
||||
С помощью аккаунта можно управлять профилем пользователя - добавлять SSH-ключи, чтобы подключаться к виртуальным машинам без ввода пароля.
|
||||
@@ -1,56 +0,0 @@
|
||||
# Управление ключевыми парами
|
||||
|
||||
SSH-ключи используются для подключения к виртуальной машине по SSH. SSH-ключ позволит подключаться к виртуальному серверу без ввода пароля.
|
||||
|
||||
SSH-ключ состоит из публичного и приватного ключей: публичный ключ хранится в профиле пользователя в публичном облаке, приватный — хранится у пользователя.
|
||||
|
||||
::: warning Важно
|
||||
SSH-ключ добавляется на этапе [создания виртуальной машины](../compute/compute-how-to/compute-servers-create.md#создать-виртуальную-машину). Подключиться к существующим виртуальным машинам по SSH-ключу не получится.
|
||||
:::
|
||||
|
||||
## Добавить SSH-ключ
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||
3. Перейдите в раздел **SSH-ключи**.
|
||||
4. Нажмите **Добавить ключ**.
|
||||
5. Укажите название ключа.
|
||||
6. Откройте терминал и сгенерируйте ключевую пару. Можно использовать команду:
|
||||
|
||||
```sh
|
||||
ssh-keygen -t ed25519 -C “login” -Z aes256-gcm@openssh.com
|
||||
```
|
||||
7. Результатом выполнения команды будет сгенерированная ключевая пара. По умолчанию ключи сохраняются в каталоге `~/.ssh` для ОС Linux или `C:\users\имя_пользователя\.ssh\` для ОС Windows.
|
||||
8. Перейдите в каталог с ключевой парой и скопируйте публичную часть ключа. Пример публичной части ключа:
|
||||
|
||||
```
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5ABFLIFyapYheN7OZNhTaNqEHefjmU5mtzK********+gRPCz user@Desktop
|
||||
```
|
||||
9. Перейдите в консоль управления и вставьте скопированную публичную часть ключа в поле **SSH-ключ**.
|
||||
10. Нажмите **Сохранить**.
|
||||
|
||||
## Посмотреть SSH-ключи
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||
3. Перейдите в раздел **SSH-ключи**.
|
||||
4. В таблице показаны SSH-ключи пользователя.
|
||||
|
||||
## Изменить название SSH-ключа
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||
3. Перейдите в раздел **SSH-ключи**.
|
||||
4. Выберите нужный ключ.
|
||||
5. Нажмите на … и выберите **Редактировать**.
|
||||
6. Измените имя ключа.
|
||||
7. Нажмите **Сохранить**.
|
||||
|
||||
## Удалить SSH-ключ
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||
3. Перейдите в раздел **SSH-ключи**.
|
||||
4. Выберите нужный ключ.
|
||||
5. Нажмите на … и выберите **Удалить**.
|
||||
6. Нажмите **Удалить**, чтобы подтвердить удаление ключа.
|
||||
@@ -1,8 +0,0 @@
|
||||
# О сервисе
|
||||
|
||||
Сервиса **Резервное копирование** — это сервис для сохранения данных и конфигураций виртуальных машин с возможностью последующего восстановления. В облачной среде резервные копии позволяют вернуть систему в рабочее состояние после сбоя и поддерживать доступность сервисов.
|
||||
|
||||
Резервное копирование подключается:
|
||||
|
||||
- для [виртуальных машин, развернутых в Beeline Cloud](./backup-internal-infra.md);
|
||||
- для [собственной инфраструктуры](./backup-external-infra.md).
|
||||
@@ -1,54 +0,0 @@
|
||||
# Резервное копирование собственной инфраструктуры в Beeline Cloud
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
- Зарегистрируйтесь в [личном кабинете Beeline Cloud](https://console.cloud.beeline.ru/).
|
||||
- [Создайте](../vdc/vdc-how-to/vdc-create.md#создание-дата-центра) виртуальный дата-центр.
|
||||
- [Создайте](../vdc/vdc-how-to/vm/create-vm.md) виртуальную машину в виртуальном дата-центре.
|
||||
|
||||
## Подключить резервное копирование
|
||||
|
||||
1. Войдите в [личный кабинет Beeline Cloud](https://lk.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню перейдите в **Сервисы** → **Резервное копирование**.
|
||||
4. Нажмите кнопку **Создать хранилище**.
|
||||
5. В разделе **Инфраструктура для копирования** выберите опцию **Локальная**.
|
||||
6. В разделе **Тип подключения** выберите способ резервного копирования:
|
||||
- **Veeam Agent**: резервное копирование в beeline cloud при помощи Veeam Agent.
|
||||
- **Veeam Cloud Connect**: подключение Veeam к облачному репозиторию beeline cloud.
|
||||
- **Киберпроект**: резервное копирование в beeline cloud при помощи Киберпротект.
|
||||
|
||||
:::tabs
|
||||
|
||||
== Veeam Agent / Veeam Cloud Connect
|
||||
|
||||
- В разделе **Сетевые подключения** выберите тип подключения:
|
||||
|
||||
- **Интернет**: интернет-соединение.
|
||||
- **L2 или L3 канал**: выделенное интернет-соединение.
|
||||
- для **L2 или L3 канал** укажите способ связи с вами и удобное время для консультации с менеджером Beeline Cloud.
|
||||
|
||||
- В разделе **Параметры** укажите:
|
||||
|
||||
- **Количество ВМ**: количество виртуальных машин, которое нужно подключить к сервису.
|
||||
- **Объем хранилища**: объем хранилища для резервных копий.
|
||||
|
||||
== Киберпроект
|
||||
|
||||
- В разделе **Общее** выберите [дата-центр](../vdc/vdc-how-to/vdc-create.md#создание-дата-центра), к которому нужно подключить резервное копирование.
|
||||
|
||||
- В разделе **Параметры** укажите:
|
||||
|
||||
- **ВМ**: количество виртуальных машин, которое нужно подключить к сервису.
|
||||
- **Базы данных**: количество баз данных, которое нужно подключить к сервису.
|
||||
- **Серверы**: количество серверов, которое нужно подключить к сервису.
|
||||
- **Устройства**: количество рабочих столов (VDI), которое нужно подключить к сервису.
|
||||
- **Объем хранилища**: объем хранилища для резервных копий.
|
||||
|
||||
:::
|
||||
|
||||
7. Нажмите кнопку **Создать хранилище**.
|
||||
|
||||
Подключение резервного копирования занимает до 3 дней. Статус подключения сервиса отображается в личном кабинете Beeline Cloud.
|
||||
|
||||
Данные для доступа к ПО для настройки резервного копирования будут отправлены на электронную почту, указанную в личном кабинете Beeline Cloud.
|
||||
@@ -1,58 +0,0 @@
|
||||
# Резервное копирование виртуальных машин Beeline Cloud
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
- Зарегистрируйтесь в [личном кабинете Beeline Cloud](https://console.cloud.beeline.ru/).
|
||||
- [Создайте](../vdc/vdc-how-to/vdc-create.md#создание-дата-центра) виртуальный дата-центр.
|
||||
- [Создайте](../vdc/vdc-how-to/vm/create-vm.md) виртуальную машину в виртуальном дата-центре.
|
||||
|
||||
## Подключить резервное копирование
|
||||
|
||||
1. Войдите в [личный кабинет Beeline Cloud](https://lk.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню перейдите в **Сервисы** → **Резервное копирование**.
|
||||
4. Нажмите кнопку **Создать хранилище**.
|
||||
5. В разделе **Инфраструктура для копирования** выберите опцию **В облаке**.
|
||||
6. В разделе **Управление** выберите способ резервного копирования:
|
||||
- **Самостоятельно**.
|
||||
- **Провайдером**.
|
||||
|
||||
:::: tabs
|
||||
|
||||
== Провайдером
|
||||
|
||||
- В разделе **Общее** выберите [дата-центр](../vdc/vdc-how-to/vdc-create.md#создание-дата-центра), к которому нужно подключить резервное копирование.
|
||||
- В разделе **Политика резервного копирования** укажите настройки резервного копирования:
|
||||
|
||||
- **Глубина хранения**: время хранения резервных копий.
|
||||
- **Полное резервное копирование**: количество полных копий в день.
|
||||
- **Инкрементальное резервное копирование**: количество инкрементальных копий в день.
|
||||
- **Окно резервного копирования**: выберите время запуска резервного копирования.
|
||||
|
||||
::: details Чем полная копия отличается от инкрементной?
|
||||
Полное резервное копирование — это создание копии всех данных виртуальной машины за одну операцию. Полная копия подходит для восстановления без зависимости от других сохранений.
|
||||
|
||||
Инкрементное резервное копирование — это сохранение только измененных данных относительно предыдущей копии. Это уменьшает объем хранения и ускоряет процесс при регулярном копировании.
|
||||
:::
|
||||
|
||||
- В разделе **Параметры** укажите:
|
||||
|
||||
- **Количество ВМ**: количество виртуальных машин, которое нужно подключить к сервису.
|
||||
- **Объем хранилища**: объем хранилища для резервных копий.
|
||||
|
||||
== Самостоятельно
|
||||
|
||||
- В разделе **Общее** выберите [дата-центр](../vdc/vdc-how-to/vdc-create.md#создание-дата-центра), к которому нужно подключить резервное копирование.
|
||||
|
||||
- В разделе **Параметры** укажите:
|
||||
|
||||
- **Количество ВМ**: количество виртуальных машин, которое нужно подключить к сервису.
|
||||
- **Объем хранилища**: объем хранилища для резервных копий.
|
||||
|
||||
::::
|
||||
|
||||
1. Нажмите кнопку **Создать хранилище**.
|
||||
|
||||
Подключение резервного копирования занимает до 3 дней. Статус подключения сервиса отображается в личном кабинете Beeline Cloud.
|
||||
|
||||
Данные для доступа к ПО для настройки резервного копирования будут отправлены на электронную почту, указанную в личном кабинете Beeline Cloud.
|
||||
@@ -1,27 +0,0 @@
|
||||
# Квоты и лимиты
|
||||
|
||||
Квоты — это организационные ограничения на количество доступных ресурсов в сервисе. В некоторых случаях квоты могут быть увеличены или уменьшены по запросу.
|
||||
|
||||
Лимиты — это технические ограничения на количество доступных ресурсов в сервисе. Ограничения, обычно, связаны с характеристиками оборудования и особенностями архитектуры.
|
||||
|
||||
## Квоты
|
||||
|
||||
### Бесплатный период
|
||||
|
||||
В [бесплатном периоде](../start/trial.md) использования Beeline Cloud установлены квоты на ресурсы сервиса:
|
||||
|
||||
| Вид ограничения | Значение |
|
||||
| ------------------- | -------- |
|
||||
| Количество хранилищ | 1 |
|
||||
| Количество виртуальных машин | 5 |
|
||||
| Объем хранилища | 1 ПБ |
|
||||
|
||||
### Платное использование
|
||||
|
||||
| Вид ограничения | Значение |
|
||||
| ------------------- | ------------- |
|
||||
| Количество хранилищ | Неограниченно |
|
||||
| Количество виртуальных машин | 999 |
|
||||
| Объем хранилища | 1 ПБ |
|
||||
|
||||
Если вы заключили договор с Beeline Cloud, то объем хранилища и количество ВМ можно увеличить. Для этого обратитесь в [техническую поддержку](../platform/support/support-overview.md).
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: О сервисе
|
||||
link: /backups/about.md
|
||||
description: Назначение сервиса
|
||||
- title: Квоты и лимиты
|
||||
link: /backups/backup-quatos.md
|
||||
description: Ограничения на количество ресурсов в сервисе
|
||||
---
|
||||
|
||||
# Обзор сервиса
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Обзор сервиса
|
||||
link: /backups/about.md
|
||||
description: Обзор сервиса, квоты и лимиты
|
||||
- title: Резервное копирование виртуальных машин Beeline Cloud
|
||||
link: /backups/backup-internal-infra.md
|
||||
description: Резервное копирование инфраструктуры, расположенной в контуре Beeline Cloud
|
||||
- title: Резервное копирование собственной инфраструктуры в Beeline Cloud
|
||||
link: /backups/backup-external-infra.md
|
||||
description: Резервное копирование вашей инфраструктуры в облако Beeline Cloud
|
||||
- title: Каталог резервных копий
|
||||
link: /backups/view-backups.md
|
||||
description: Просмотр ресурсов, к которым подключено резервное копирование
|
||||
---
|
||||
|
||||
# Резервное копирование
|
||||
@@ -1,30 +0,0 @@
|
||||
# Каталог резервных копий
|
||||
|
||||
## Посмотреть каталог резервных копий
|
||||
|
||||
Чтобы посмотреть, к каким ресурсам у подключено резервное копирование:
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Резервное копирование**.
|
||||
4. Откроется каталог резервных копий.
|
||||
|
||||
## Посмотреть детали подключенного резервного копирования
|
||||
|
||||
1. Выберите из каталога резервную копию.
|
||||
2. Откроется карточка услуги резервного копирования. В карточке отображаются:
|
||||
|
||||
- Цена услуги,
|
||||
- Подключенная инфраструктура,
|
||||
- Тип управления,
|
||||
- ПО, используемое для резервного копирования,
|
||||
- Тенант,
|
||||
- Объем хранилища.
|
||||
|
||||
:::tip Информация
|
||||
|
||||
В карточке услуги отображаются только параметры, выбранные при первичном подключении резервного копирования.
|
||||
|
||||
Если изменить параметры резервного копирования в ПО Киберпротект, Veeam Cloud Connect или Veeam Agent, данные в консоли Beeline Cloud не обновятся. Но стоимость услуг формируется согласно объему использованных ресурсов в ПО Киберпротект, Veeam Cloud Connect или Veeam Agent.
|
||||
|
||||
:::
|
||||
@@ -1,21 +0,0 @@
|
||||
# Биллинг
|
||||
|
||||
Биллинг предназначен для управления финансовыми операциями в Beeline Cloud. В биллинге вы можете:
|
||||
|
||||
- контролировать счета;
|
||||
- отслеживать платежи;
|
||||
- анализировать потребление ресурсов.
|
||||
|
||||
## Разделы биллинга
|
||||
|
||||
### Счета
|
||||
|
||||
В этом разделе отображаются все выставленные счета, их статусы и суммы. Вы можете посмотреть детали каждого счета и скачать документы для бухгалтерии.
|
||||
|
||||
### Финансовый мониторинг
|
||||
|
||||
В этом разделе вы можете отслеживать движение средств, контролировать платежи и задолженности.
|
||||
|
||||
### Аналитика потребления
|
||||
|
||||
В этом разделе вы можете создавать отчеты и строить графики, чтобы отследить использование ресурсов за выбранный период.
|
||||
@@ -1,17 +0,0 @@
|
||||
# Аналитика потребления
|
||||
|
||||
В этом разделе вы можете отследить использование ресурсов в проектах. Это может помочь вам контролировать расходы на сервисы.
|
||||
|
||||
Вы можете:
|
||||
|
||||
- Узнать какие проекты потребляют больше всего ресурсов.
|
||||
- Сравнить использование за разные периоды.
|
||||
|
||||
## Как пользоваться
|
||||
|
||||
1. В поле **Проект** выберите один или `все проекты`.
|
||||
2. В поле **Сервис** укажите нужный сервис, например, **Виртуальные дата-центры на VMware**.
|
||||
3. В поле Ресурсы выберите «Все ресурсы» или конкретный тип.
|
||||
4. Установите период с помощью календаря.
|
||||
|
||||
После этого появится отчет. Если данных нет, попробуйте изменить период, выбрать другой проект или ресурс.
|
||||
@@ -1,129 +0,0 @@
|
||||
# Быстрый старт
|
||||
|
||||
В этой инструкции рассмотрен процесс создания ресурсов, настройки связанности ,.
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
- [Зарегистрируйтесь](../start/getting-started.md#1-регистрация-в-beeline-cloud) в личном кабинете Beeline Cloud.
|
||||
|
||||
## 1. Создать ВМ-шлюз
|
||||
|
||||
На первом шаге создайте виртуальную машину-шлюз, которая будет являться точкой управления. Чтобы ВМ была доступна из интернета и имела выход в интернет, ВМ создается:
|
||||
|
||||
- в [зоне доступности](compute-overview.md#зоны-доступности) `DMZ`;
|
||||
- с внешним IP-адресом, который сопоставлен с внутренним IP-адресом `10.0.0.10`;
|
||||
- с образом операционной системы:
|
||||
- Linux для реализации базовой сетевой функциональности;
|
||||
- VyOS для реализации расширенной сетевой функциональности.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. На странице **Мой проект** нажмите кнопку **Создать ресурс → Виртуальная машина**.
|
||||
3. В блоке **Имя и расположение** укажите имя и расположение ВМ:
|
||||
- **Имя машины**: введите название ВМ.
|
||||
- **Зона доступности**: выберите зону доступности, содержащую в названии `DMZ`.
|
||||
4. В блоке **Выбор образа** выберите тип и версию операционной системы:
|
||||
- выберите образ операционной системы Linux для реализации базовой сетевой функциональности;
|
||||
- выберите образ операционной системы VyOS для реализации расширенной сетевой функциональности.
|
||||
5. В блоке **Конфигурация** выберите количество vCPU и RAM.
|
||||
6. В блоке **Диски** настройте загрузочный диск:
|
||||
- **Загрузочный диск**: выберите тип диска и укажите размер загрузочного диска.
|
||||
7. Нажмите [создать ключ](../admin/ssh.md#добавить-ssh-ключ) для создания SSH-ключа для подключения к ВМ.
|
||||
8. В блоке **Доступ** укажите логин пользователя для подключения к ВМ:
|
||||
- **Логин**: введите логин пользователя латинскими символами в нижнем регистре.
|
||||
9. В блоке **Настройки сети** выберите:
|
||||
- **IPv4-адрес**: выберите внешний IP-адрес.
|
||||
10. Нажмите **Создать виртуальную машину**.
|
||||
|
||||
Виртуальная машина отобразится на странице **Виртуальные машины**. Выполняется сборка виртуальной машины. После окончания сборки виртуальная машина перейдет в статус `Включена`.
|
||||
|
||||
## 2. Создать ВМ
|
||||
|
||||
На втором шаге в проекте Beeline Cloud создайте виртуальные машины в [зонах доступности](compute-overview.md#зоны-доступности) `Inside` или `DMZ` и присвойте им внутренние IP-адреса.
|
||||
|
||||
1. На странице **Виртуальные машины** нажмите кнопку **Создать виртуальную машину**.
|
||||
2. [Заполните](./compute-how-to/compute-servers-create.md#создать-виртуальную-машину) параметры ВМ.
|
||||
3. Нажмите **Создать виртуальную машину**.
|
||||
|
||||
Виртуальная машина отобразится на странице **Виртуальные машины**. Выполняется сборка виртуальной машины. После окончания сборки виртуальная машина перейдет в статус `Включена`.
|
||||
|
||||
## 3. Подключиться к ВМ
|
||||
|
||||
:::: tabs
|
||||
= по внешнему IP-адресу
|
||||
|
||||
Если ВМ создана в зоне `DMZ` и ей присвоен внешний IP-адрес, то подключитесь к ВМ по SSH:
|
||||
|
||||
```
|
||||
ssh <логин>@<внешний_IP>
|
||||
```
|
||||
|
||||
где:
|
||||
|
||||
- `логин`: имя пользователя для входа на ВМ, указанное при создании ВМ;
|
||||
- `внешний_IP`: внешний IP-адрес виртуальной машины.
|
||||
|
||||
= по внутреннему IP-адресу
|
||||
|
||||
Если ВМ создана в зоне `Inside` или `DMZ` и ей присвоен внутренний IP-адрес, то для подключения к ВМ используйте один из вариантов:
|
||||
|
||||
- [через промежуточную виртуальную машину (джамп-хост)](https://docs.cloud.dfcloud.ru/compute/compute-how-to/compute-connect-inside.html#_3-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F-ssh);
|
||||
- [настроить site-to-site VPN c помощью VyOS](./compute-how-to/compute-network/compute-vpn-vyos.md).
|
||||
|
||||
::::
|
||||
|
||||
## 4. Проверить сетевую доступность ВМ проекта
|
||||
|
||||
Возможность подключения из внешних сетей присутствует только для ВМ, созданных в зоне доступности `DMZ`. ВМ, созданные в зоне `Inside` не подразумевают доступа в интернет без [дополнительной настройки](././compute-how-to/compute-network/compute-network-inside.md#подключение-вм-закрытого-контура-к-интернету).
|
||||
|
||||
Перед проверкой доступности из ВМ проекта убедитесь:
|
||||
|
||||
- протокол ICMP разрешен на всех Firewall, в т.ч. и в самой ОС;
|
||||
- [site-to-site VPN](././compute-how-to/compute-network/compute-vpn-vyos.md) организации настроен, используется частный диапазон сетей RFC 1918;
|
||||
- из VPN-туннеля настроена маршрутизация в сеть интернет.
|
||||
|
||||
Для проверки доступности из ВМ проекта и установки ПО на ВМ:
|
||||
|
||||
1. Выполните команду на ВМ проекта:
|
||||
|
||||
```sh
|
||||
curl ifconfig.me
|
||||
```
|
||||
|
||||
2. В результате команды отобразится внешний IP-адрес ВМ, с которого осуществляется выход в интернет.
|
||||
|
||||
3. Установите ПО на ВМ:
|
||||
|
||||
:::: tabs
|
||||
= ВМ в зоне доступности DMZ
|
||||
|
||||
Рассмотрим установку веб-сервера Nginx на ВМ, созданной в зоне доступности `DMZ`.
|
||||
|
||||
- Установите докер:
|
||||
|
||||
```sh
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
```
|
||||
|
||||
- Запустите Nginx:
|
||||
|
||||
```sh
|
||||
docker run -d --rm --name nginx -p80:80 nginx
|
||||
```
|
||||
|
||||
- Проверьте, что Nginx запустился:
|
||||
|
||||
```sh
|
||||
curl localhost
|
||||
```
|
||||
|
||||
- Остановите контейнер Nginx:
|
||||
|
||||
```sh
|
||||
docker rm -f nginx
|
||||
```
|
||||
= ВМ в зоне доступности Inside
|
||||
|
||||
Установка ПО на ВМ, созданных в зоне доступности `Inside`, рассмотрена в [инструкции](././compute-how-to/compute-network/compute-network-inside.md#подключение-вм-закрытого-контура-к-интернету).
|
||||
|
||||
::::
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Подключение по SSH по внешнему IP-адресу с помощью ключевой пары
|
||||
link: /compute/compute-how-to/compute-connect-public.md
|
||||
description: Подключиться к виртуальной машине по SSH с помощью ключевой пары по внешнему IP-адресу
|
||||
- title: Подключение по SSH по внутреннему IP-адресу с помощью ключевой пары
|
||||
link: /compute/compute-how-to/compute-connect-inside.md
|
||||
description: Подключиться к виртуальной машине по SSH с помощью ключевой пары по внутреннему IP-адресу через джамп-хост
|
||||
- title: Подключение по SSH по логину и паролю
|
||||
link: /compute/compute-how-to/compute-connect-pwd.md
|
||||
description: Подключиться к виртуальной машине по SSH с помощью логина и пароля
|
||||
---
|
||||
|
||||
# Подключение к ВМ
|
||||
@@ -1,70 +0,0 @@
|
||||
# Подключение по SSH по внутреннему IP-адресу с помощью ключевой пары
|
||||
|
||||
Виртуальные машины, созданные в [зоне доступности `Inside` или `DMZ`](../compute-overview.md#зоны-доступности), с внутренним IP-адресом недоступны из интернета. Чтобы подключиться по SSH к ВМ по внутреннему IP-адресу из интернета, используйте промежуточную виртуальную машину (джамп-хост) с [внешним IP-адресом (FIP)](../compute-how-to/compute-ip/compute-ip-about.md#внешние-ip-адреса).
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
Перед подключением проверьте выполнение условий и наличие данных:
|
||||
|
||||
- Статус виртуальной машины — `Включена`.
|
||||
- [Создана промежуточная ВМ](compute-servers-jump-create.md), через которую будет выполняться подключение к ВМ.
|
||||
- Виртуальной машине [назначен](../compute-how-to/compute-ip/compute-ip-about.md#внутренние-ip-адреса) внутренний IP-адрес.
|
||||
- Имя пользователя для входа на ВМ.
|
||||
- Подготовлена ключевая пара для подключения к ВМ по SSH:
|
||||
- приватный ключ сохранен на компьютере, с которого выполняется подключение;
|
||||
- публичный ключ [добавлен](../../admin/ssh.md#добавить-ssh-ключ) в профиль пользователя в личном кабинете Beeline Cloud.
|
||||
- На компьютере, с которого выполняется подключение к ВМ:
|
||||
- разрешен удаленный доступ по протоколу SSH (TCP-порт 22);
|
||||
- есть доступ в интернет, протокол ICMP не заблокирован на Firewall-ах;
|
||||
- VPN сети организации позволяет осуществлять соединение в интернет.
|
||||
|
||||
Если вы используете разные SSH-ключи для подключения к ВМ по внутреннему IP-адресу и к промежуточной ВМ с внешним IP-адресом, то добавьте оба публичных ключа в профиль пользователя в личном кабинете Beeline Cloud.
|
||||
|
||||
## 1. Конфигурация SSH
|
||||
|
||||
1. Откройте конфигурационный файл SSH `~/.ssh/config` для ОС Linux или `C:\users\имя_пользователя\.ssh\config` для ОС Windows.
|
||||
2. Добавьте в конфигурационный файл сведения о виртуальных машинах:
|
||||
|
||||
```
|
||||
host jumphost
|
||||
hostname <jumphost>
|
||||
user <jump_login>
|
||||
IdentityFile <jump-secret-file-path>
|
||||
|
||||
host myhost
|
||||
hostname <myhost>
|
||||
user <myhost-login>
|
||||
IdentityFile <myhost-secret-file-path>
|
||||
ProxyJump jumphost
|
||||
```
|
||||
где:
|
||||
- `jumphost`: внешний IP-адрес джамп-хоста;
|
||||
- `jump_login`: имя пользователя для входа на джамп-хост, указанное при создании ВМ;
|
||||
- `jump-secret-file-path`: путь к приватному ключу джамп-хоста;
|
||||
- `myhost`: внутренний IP-адрес ВМ, к которой требуется подключиться;
|
||||
- `myhost-login`: имя пользователя для входа на ВМ, указанное при создании ВМ;
|
||||
- `myhost-secret-file-path`: путь к приватному ключу ВМ, к которой требуется подключиться.
|
||||
|
||||
### Пример содержимого файла ~/.ssh/config
|
||||
|
||||
```
|
||||
host jumphost
|
||||
hostname 77.41.188.88
|
||||
user admin
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
|
||||
host myhost
|
||||
hostname 10.0.0.12
|
||||
user ivanov
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
ProxyJump jumphost
|
||||
```
|
||||
|
||||
## 2. Подключиться к ВМ по внутреннему IP-адресу
|
||||
|
||||
1. Откройте терминал.
|
||||
2. Выполните команду:
|
||||
|
||||
```
|
||||
ssh myhost
|
||||
```
|
||||
@@ -1,49 +0,0 @@
|
||||
# Подключение по SSH по внешнему IP-адресу с помощью ключевой пары
|
||||
|
||||
Подключение к ВМ выполняется по протоколу SSH с [помощью ключевой пары](../../admin/ssh.md).
|
||||
|
||||
:::tip Информация
|
||||
Чтобы подключаться к виртуальной машине по SSH, [добавьте](../../admin/ssh.md#добавить-ssh-ключ) публичную часть ключа в профиль пользователя перед созданием виртуальной машины. Для существующих виртуальных машин добавление SSH-ключа невозможно.
|
||||
:::
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
Перед подключением проверьте выполнение условий и наличие данных:
|
||||
|
||||
- Статус виртуальной машины — `Включена`.
|
||||
- Виртуальной машине [назначен](../compute-how-to/compute-ip/compute-ip-manager.md#назначить-вм-внешний-ip-адрес) внешний IP-адрес.
|
||||
- Узнайте имя пользователя для входа на ВМ.
|
||||
- Приватная часть SSH-ключа сохранена на компьютере, с которого выполняется подключение.
|
||||
|
||||
## Подключиться к ВМ
|
||||
|
||||
1. Откройте терминал.
|
||||
2. Выполните команду в терминале:
|
||||
```
|
||||
ssh <логин>@<внешний_IP>
|
||||
```
|
||||
где:
|
||||
|
||||
- `логин`: [имя пользователя ОС по умолчанию](./../compute-overview.md#операционная-система);
|
||||
- `внешний_IP`: внешний IP-адрес виртуальной машины.
|
||||
|
||||
- Если на вашем устройстве есть несколько приватных ключей или вы переместили приватный ключ из каталога по умолчанию, то дополнительно укажите путь к приватному ключу:
|
||||
|
||||
```
|
||||
ssh -o IdentityFile=<путь_к_приватному_ключу> <логин>@<внешний_IP>
|
||||
```
|
||||
|
||||
3. Подтвердите подключение.
|
||||
|
||||
## Пример команды для подключения к ВМ
|
||||
|
||||
::::tabs
|
||||
= Linux/macOS
|
||||
```
|
||||
ssh -o IdentityFile=~/.ssh/id_ed25519 debian@<внешний_IP>
|
||||
```
|
||||
= Windows 10/11
|
||||
```
|
||||
ssh -o IdentityFile=%USERPROFILE%\.ssh\id_ed25519 debian@<внешний_IP>
|
||||
```
|
||||
::::
|
||||
@@ -1,44 +0,0 @@
|
||||
|
||||
# Подключение по SSH по логину и паролю
|
||||
|
||||
Подключиться к ВМ можно по протоколу SSH с помощью логина и пароля.
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
Перед подключением проверьте выполнение условий:
|
||||
|
||||
- Статус виртуальной машины — `Включена`.
|
||||
|
||||
## 1. Подготовить учетные данные
|
||||
|
||||
Для подключения узнайте логин и пароль пользователя:
|
||||
|
||||
| Учетные данные | Значение |
|
||||
|---|---|
|
||||
| Логин | Логин задается при [создании](compute-servers-create.md#создать-виртуальную-машину) виртуальной машины. Логин пользователя [указан](compute-servers-manage.md#посмотреть-свойства-вм) в свойствах ВМ в поле **Логин** |
|
||||
| Пароль | Пароль задается при [создании](compute-servers-create.md#создать-виртуальную-машину) виртуальной машины. Если вы забыли пароль, то восстановить его не получится |
|
||||
|
||||
## 2. Подключиться к ВМ
|
||||
|
||||
:::: tabs
|
||||
|
||||
= по внешнему IP-адресу
|
||||
|
||||
Если ВМ создана в зоне `DMZ` и ей присвоен [внешний IP-адрес](./compute-ip/compute-ip-about.md#внешние-ip-адреса), то для подключения к ВМ выполните:
|
||||
|
||||
1. Откройте терминал.
|
||||
2. Выполните команду в терминале:
|
||||
```
|
||||
ssh <логин>@<внешний_IP>
|
||||
```
|
||||
3. Подтвердите подключение.
|
||||
4. Введите пароль и подтвердите подключение.
|
||||
|
||||
= по внутреннему IP-адресу
|
||||
|
||||
Если ВМ создана в зоне `Inside` или `DMZ` и ей присвоен внутренний IP-адрес, то для подключения к ВМ используйте один из вариантов:
|
||||
|
||||
- [через промежуточную виртуальную машину (джамп-хост)](https://docs.cloud.dfcloud.ru/compute/compute-how-to/compute-connect-inside.html#_3-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F-ssh);
|
||||
- [настроить site-to-site VPN c помощью VyOS](./../compute-how-to/compute-network/compute-vpn-vyos.md).
|
||||
|
||||
::::
|
||||
@@ -1,7 +0,0 @@
|
||||
# Диски
|
||||
|
||||
Хранение данных организовано с использованием сетевых дисков. Диск создается в определенной зоне доступности. Каждый диск автоматически реплицируется внутри своей зоны доступности, что обеспечивает надежное хранение данных.
|
||||
|
||||
Загрузочный диск создается вместе с виртуальным ВМом. Конфигурация загрузочного диска задается на этапе [создания ВМ](../compute-servers-create.md#создать-виртуальную-машину). При [удалении ВМ](../compute-servers-manage.md#удалить-ВМ) загрузочный диск удалится вместе с ВМ.
|
||||
|
||||
[Дополнительные диски можно добавить](../compute-servers-create.md#добавить-диск) на этапе создания ВМ или [создать диск позже и подключить к нужной ВМ](../compute-disks/compute-disk-create.md). При [удалении ВМ](../compute-servers-manage.md#удалить-ВМ) дополнительные диски (не загрузочные) останутся в проекте в списке дисков.
|
||||
@@ -1,21 +0,0 @@
|
||||
# Создание диска
|
||||
|
||||
Создание диска позволяет добавить новое блочное хранилище. В процессе создания можно выбрать тип диска, размер и зону доступности, а также настроить дополнительные параметры для оптимального соотношения производительности и стоимости.
|
||||
|
||||
## Создать диск
|
||||
|
||||
Создать диск дополнительный (не загрузочный):
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Диски**.
|
||||
5. Нажмите **Создать диск**.
|
||||
6. Введите параметры добавляемого диска:
|
||||
- **Имя диска**: введите название диска
|
||||
- **Зона доступности**: выберите из списка зону доступности, в которой будет создан диск.
|
||||
- **Тип**: выберите из списка тип хранения.
|
||||
- **Размер диска**: введите размер добавляемого диска в Гб.
|
||||
7. Нажмите **Создать диск**.
|
||||
|
||||
На странице **Диски** будет добавлен новый диск, но не подключен к какой-либо виртуальной машине. Диск можно [подключить к ВМ](../compute-disks/compute-disk-manage.md#подключить-диск-к-вм).
|
||||
@@ -1,19 +0,0 @@
|
||||
# Удаление диска
|
||||
|
||||
Удаление диска позволяет освободить ресурсы хранилища после завершения работы с данными. Перед удалением необходимо убедиться, что диск [отключен](../compute-disks/compute-disk-manage.md#отключить-диск-от-вм) от всех виртуальных машин и не содержит критически важных данных без резервных копий.
|
||||
|
||||
## Удалить диск
|
||||
|
||||
::: danger Предупреждение
|
||||
Удаление диска необратимо. Все данные будут удалены без возможности восстановления.
|
||||
:::
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Диски**.
|
||||
5. Нажмите на имя диска.
|
||||
6. Нажмите на … и выберите **Удалить**.
|
||||
7. В открывшемся окне подтвердите операцию:
|
||||
- Введите имя удаляемого диска.
|
||||
- Нажмите **Удалить**.
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Обзор
|
||||
link: /compute/compute-how-to/compute-disks/compute-disk-about.md
|
||||
description: Основные понятия о дисках
|
||||
- title: Создание диска
|
||||
link: /compute/compute-how-to/compute-disks/compute-disk-create.md
|
||||
description: Создание нового диска
|
||||
- title: Управление дисками
|
||||
link: /compute/compute-how-to/compute-disks/compute-disk-manage.md
|
||||
description: Просмотр списка параметров и операций с дисками
|
||||
- title: Удаление диска
|
||||
link: /compute/compute-how-to/compute-disks/compute-disk-del.md
|
||||
description: Удаление диска
|
||||
---
|
||||
|
||||
# Диски
|
||||
@@ -1,75 +0,0 @@
|
||||
# Управление дисками
|
||||
|
||||
Управление дисками позволяет выполнять операции с существующими хранилищами. Доступно управление списками и информацией о дисках, изменение размера дискового пространства, а также подключение и отключение дисков от виртуальных машин.
|
||||
|
||||
## Посмотреть список дисков
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Диски**.
|
||||
|
||||
## Посмотреть информацию о диске
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Диски**.
|
||||
5. Нажмите на имя диска.
|
||||
6. На странице показана информация о диске:
|
||||
- **Идентификатор**: уникальный идентификатор диска.
|
||||
- **Тип хранения**: тип диска.
|
||||
- **Загрузочный**: является ли диск загрузочным.
|
||||
- **Размер**: размер диска.
|
||||
- **Подключен к**: виртуальный ВМ, к которому подключен диск.
|
||||
- **Имя устройства**: имя устройства в файловой системе.
|
||||
|
||||
## Увеличить размер дискового пространства
|
||||
|
||||
::: warning Важно
|
||||
Изменение размера дискового пространства возможно только в большую сторону.
|
||||
:::
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Диски**.
|
||||
5. Нажмите на имя диска.
|
||||
6. Нажмите **Изменить размер диска**.
|
||||
7. Введите размер добавляемого дискового пространства в Гб.
|
||||
8. Нажмите **Сохранить**.
|
||||
|
||||
Далее требуется увеличить размер диска в операционной системе.
|
||||
|
||||
## Подключить диск к ВМ
|
||||
|
||||
При подключении диск и ВМ должны быть созданы в одной зоне доступности.
|
||||
|
||||
::: warning Важно
|
||||
К ВМ можно подключить максимально 28 дисков, включая загрузочный.
|
||||
:::
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите на имя ВМ.
|
||||
6. Перейдите на вкладку **Диски**.
|
||||
7. Нажмите **Подключить диск**.
|
||||
8. В строке поиска введите имя диска. Для отображения списка дисков щелкните в строке поиска левой кнопкой мыши.
|
||||
9. Нажмите **Подключить**.
|
||||
|
||||
## Отключить диск от ВМ
|
||||
|
||||
Отключить от ВМ можно только дополнительный диск. Отключение загрузочного диска невозможно.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите на имя ВМ.
|
||||
6. Перейдите на вкладку **Диски**.
|
||||
7. Нажмите на … и выберите **Отключить от виртуальной машины**.
|
||||
8. В открывшемся окне подтвердите операцию:
|
||||
- Введите имя ВМ, от которого отключаете диск.
|
||||
- Нажмите **Отключить диск**.
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Создание ВМ
|
||||
link: /compute/compute-how-to/compute-servers-create.md
|
||||
description: Создать виртуальную машину
|
||||
- title: Создание ВМ джамп-хоста
|
||||
link: /compute/compute-how-to/compute-servers-jump-create.md
|
||||
description: Создать виртуальную машину с внешним IP-адресом с доступом из интернета и выходом в интернет
|
||||
- title: Подключение к ВМ
|
||||
link: /compute/compute-how-to/compute-connect-index.md
|
||||
description: Подключиться к созданной виртуальной машине по SSH
|
||||
- title: Управление ВМ
|
||||
link: /compute/compute-how-to/compute-servers-manage.md
|
||||
description: Управление состоянием виртуальной машины, удаление виртуальной машины
|
||||
---
|
||||
|
||||
# Виртуальные машины
|
||||
@@ -1,31 +0,0 @@
|
||||
# IP-адрес
|
||||
|
||||
Раздел содержит описание типов IP-адресов в Beeline Cloud: внутренние и внешние адреса, их назначение и возможные статусы.
|
||||
|
||||
:::tip Информация
|
||||
Каждая виртуальная машина при создании получает IP-адрес. В сервисе поддерживаются только IPv4-адреса.
|
||||
:::
|
||||
|
||||
## Внутренние IP-адреса
|
||||
|
||||
Внутренний IP-адрес используется для взаимодействия между ВМ внутри одной сети. Внутренний IP-адрес не виден из интернета.
|
||||
|
||||
Внутренний IP-адрес назначается виртуальной машине автоматически или выбираются из списка зарезервированных адресов при ее создании.
|
||||
|
||||
:::tip Информация
|
||||
Виртуальная машина доступна из интернета только через внешний IP-адрес. Для доступа из интернета к виртуальной машине по внутреннему IP-адресу используйте виртуальную машину с внешним IP-адресом как джамп-хост.
|
||||
:::
|
||||
|
||||
## Внешние IP-адреса
|
||||
|
||||
Внешний IP-адрес — это IP-адрес, который доступен из интернета. Внешний IP-адрес выдается организации при регистрации аккаунта Beeline Cloud.
|
||||
|
||||
В сервисе **Виртуальные машины** предусмотрен один внешний IP-адрес (Floating IP или FIP), сопоставленный с внутренним IP-адрес **10.0.0.10**. Значение внешнего IP-адреса можно [посмотреть](../compute-ip/compute-ip-view#посмотреть-внешний-ip-адрес) в разделе **Виртуальные машины → IP-адреса**.
|
||||
|
||||
Чтобы ВМ без ограничений была доступна из интернета и получала доступ к ресурсам интернета, ей должен быть присвоен внешний IP-адрес. Внешний IP-адрес [назначается](../compute-ip/compute-ip-manager#назначить-вм-внешний-ip-адрес) виртуальной машине при ее создании. Существующей ВМ назначить внешний IP-адрес нельзя.
|
||||
|
||||
## Статусы IP-адресов
|
||||
|
||||
**Используется** — IP-адрес зарезервирован и назначен ВМ.
|
||||
|
||||
**Зарезервирован** — IP-адрес зарезервирован и не назначен ВМ, доступен для назначения.
|
||||
@@ -1,20 +0,0 @@
|
||||
# Создание IP-адреса
|
||||
|
||||
Раздел описывает процедуру создания нового IP-адреса в проекте с выбором типа и параметров.
|
||||
|
||||
## Создать IP-адрес
|
||||
|
||||
Вы можете зарезервировать IP-адрес из диапазона IP-адресов и назначить этот адрес новой ВМ.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Нажмите **Создать IP-адрес**.
|
||||
6. Введите параметры адреса:
|
||||
- **Имя**: введите имя IP-адреса.
|
||||
- **Зона доступности**: выберите зону доступности, в которой будут доступен адрес.
|
||||
- добавьте тег адресу при необходимости.
|
||||
7. Нажмите **Создать**.
|
||||
|
||||
На странице **Виртуальные машины → IP-адреса** появится новый IP-адрес со статусом **Зарезервирован**.
|
||||
@@ -1,27 +0,0 @@
|
||||
# Удаление IP-адреса
|
||||
|
||||
Раздел описывает процедуру удаления IP-адреса с проверкой зависимостей и освобождением ресурсов.
|
||||
|
||||
## Удалить IP-адрес
|
||||
|
||||
:::warning Важно
|
||||
Не удаляйте внешний IP-адрес из списка IP-адресов. В случае удаления IP-адреса пропадет возможность создания ВМ с доступом в интернет.
|
||||
:::
|
||||
|
||||
Если для IP-адреса установлено автоудаление, то адрес удалится во время удаления ВМ.
|
||||
|
||||
Если для IP-адреса не установлено автоудаление, то адрес удаляется вручную:
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Удалите адрес одним из способов:
|
||||
- В разделе **IP-адреса**:
|
||||
- В списке адресов найдите IP-адрес, который необходимо удалить.
|
||||
- Cправа от имени IP-адреса нажмите кнопку .
|
||||
- Подтвердите действие.
|
||||
- На странице IP-адреса:
|
||||
- Нажмите на имя адреса в списке IP-адресов, который необходимо удалить.
|
||||
- Нажмите на … в правом углу страницы и выберите **Удалить**.
|
||||
- Подтвердите действие.
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Обзор
|
||||
link: /compute/compute-how-to/compute-ip/compute-ip-about.md
|
||||
description: Описание типов IP-адресов
|
||||
- title: Просмотр IP-адресов
|
||||
link: /compute/compute-how-to/compute-ip/compute-ip-view.md
|
||||
description: Инструкция по просмотру списка адресов и их параметров
|
||||
- title: Создание IP-адреса
|
||||
link: /compute/compute-how-to/compute-ip/compute-ip-create.md
|
||||
description: Процедура создания нового IP-адреса в проекте
|
||||
- title: Управление IP-адресами
|
||||
link: /compute/compute-how-to/compute-ip/compute-ip-manager.md
|
||||
description: Операции сохранения и переименования IP-адресов
|
||||
- title: Удаление IP-адреса
|
||||
link: /compute/compute-how-to/compute-ip/compute-ip-del.md
|
||||
description: Удаление IP-адреса и освобождение ресурсов
|
||||
---
|
||||
|
||||
# IP-адреса
|
||||
@@ -1,44 +0,0 @@
|
||||
# Управление IP-адресами
|
||||
|
||||
Раздел содержит инструкции по управлению IP-адресами: назначение виртуальным машинам, сохранение в проекте и присвоение имен.
|
||||
|
||||
## Назначить ВМ внешний IP-адрес
|
||||
|
||||
Внешний IP-адрес можно привязать ВМ при условиях:
|
||||
|
||||
- IP-адрес находится в статусе **Зарезервирован**;
|
||||
- виртуальная машина и внешний IP-адрес находятся в одной [зоне доступности](../../compute-overview.md#зоны-доступности);
|
||||
- внешний IP-адрес можно назначить только новой ВМ, существующей ВМ привязать внешний IP-адрес не получится.
|
||||
|
||||
Чтобы привязать внешний IP-адрес новой ВМ, то при создании ВМ в поле **IPv4-адрес** выберите внешний IP-адрес.
|
||||
|
||||
Если вам требуется отвязать внешний IP-адрес от существующей ВМ:
|
||||
|
||||
- убедитесь, что для IP-адреса не указан признак ****Автоудаление**, при необходимости [снимите признак **Автоудаление**](#сохранить-ip-адрес-в-проекте) у IP-адреса;
|
||||
- [удалите ВМ](../compute-servers-manage.md#удалить-вм).
|
||||
|
||||
## Сохранить IP-адрес в проекте
|
||||
|
||||
При удалении ВМ её IP-адрес удаляется и не может быть повторно использован в проекте. Если вам требуется сохранить IP-адрес и использовать его для другой ВМ, то отключите автоудаление адреса. IP-адрес сохранится в вашем проекте и может быть назначен новой ВМ.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Нажмите на имя адреса в списке IP-адресов.
|
||||
6. На странице адреса нажмите кнопку **Изменить**, расположенную ниже флажка **Автоудаление**.
|
||||
7. Снимите флажок **Автоудаление**, если он установлен.
|
||||
8. Нажмите **Сохранить**.
|
||||
|
||||
## Присвоить имя IP-адресу
|
||||
|
||||
Имя IP-адреса отображается только на странице **Виртуальные машины → IP-адреса**. На параметрах виртуальной машины отображается значение IP-адреса.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Нажмите на имя адреса в списке IP-адресов.
|
||||
6. Нажмите на … и выберите **Переименовать**.
|
||||
7. Введите новое имя IP-адреса.
|
||||
8. Нажмите ✓.
|
||||
@@ -1,21 +0,0 @@
|
||||
# Просмотр IP-адресов
|
||||
|
||||
Раздел содержит инструкции по просмотру списка IP-адресов в проекте.
|
||||
|
||||
## Посмотреть список IP-адресов
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Отобразится список всех IP-адресов проекта.
|
||||
|
||||
## Посмотреть внешний IP-адрес
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. Отобразится список всех IP-адресов проекта.
|
||||
6. Внешний IP-адрес сопоставлен с внутренним IP-адресом **10.0.0.10** и отмечен тегом **Внешний IP**. Значение внешнего IP-адреса указано в поле **Имя**.
|
||||
7. Если для внешнего IP-адреса отображается статус **Зарезервирован**, то внешний IP-адрес [доступен для назначения](../compute-ip/compute-ip-manager#назначить-вм-внешний-ip-адрес).
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Настройка site-to-site VPN с помощью VyOS
|
||||
link: /compute/compute-how-to/compute-network/compute-vpn-vyos.md
|
||||
description: Создание IPSEC-туннеля между частной сетью и Beeline Cloud с использованием VyOS 1.4.0
|
||||
- title: Подключение ВМ закрытого контура к интернету
|
||||
link: /compute/compute-how-to/compute-network/compute-network-inside.md
|
||||
description: Настройка доступа в интернет для ВМ, созданных в зоне доступности Inside, и установка ПО на ВМ
|
||||
---
|
||||
|
||||
# Сети
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
# Подключение ВМ закрытого контура к интернету
|
||||
|
||||
В зависимости от доступов ВМ в Интернет или VPN настройте DNS, NTP и другие службы (пакетный менеджер) для начала установки ПО.
|
||||
|
||||
## Пример конфигурации для службы обновления пакетов
|
||||
|
||||
1. Настройте сервис веб-прокси один из способов:
|
||||
|
||||
:::: tabs
|
||||
= VyOS
|
||||
|
||||
1. Перейдите в режим конфигурирования:
|
||||
|
||||
```
|
||||
configure
|
||||
```
|
||||
2. Включите слушание запросов (по умолчанию используется порт 3128):
|
||||
|
||||
```
|
||||
set service webproxy listen-address 10.0.0.10 disable-transparent
|
||||
```
|
||||
3. Проверьте корректность конфигурации:
|
||||
|
||||
```
|
||||
show service webproxy
|
||||
```
|
||||
4. Сохраните конфигурацию:
|
||||
|
||||
```
|
||||
save
|
||||
```
|
||||
5. Примените конфигурацию:
|
||||
|
||||
```
|
||||
commit
|
||||
```
|
||||
= Ubuntu
|
||||
|
||||
1. Обновление списка пакетов:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
```
|
||||
2. Установка Tinyproxy:
|
||||
|
||||
```
|
||||
sudo apt install tinyproxy
|
||||
```
|
||||
3. По умолчанию Tinyproxy может разрешать доступ только с локальной машины (127.0.0.1). Необходимо разрешить доступ устройствам из вашей локальной сети.
|
||||
|
||||
- откройте конфигурационный файл:
|
||||
|
||||
```
|
||||
sudo nano /etc/tinyproxy/tinyproxy.conf
|
||||
```
|
||||
- настройте разрешение доступа с необходимых вам сетей, закомментировав (#) все остальные строки:
|
||||
|
||||
```
|
||||
Allow 10.0.0.5/24
|
||||
Allow 0.0.0.0/0 - разрешает доступ из любой сети
|
||||
```
|
||||
- установите порт (по умолчанию 8888):
|
||||
|
||||
```
|
||||
Port 3128
|
||||
```
|
||||
- сохраните конфигурационный файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
|
||||
4. Запуск и проверка сервиса:
|
||||
|
||||
перезапустите сервис для применения новых настроек:
|
||||
```
|
||||
sudo systemctl restart tinyproxy
|
||||
```
|
||||
включите автозапуск (чтобы сервис прокси запускался после перезагрузки сервера):
|
||||
```
|
||||
sudo systemctl enable tinyproxy
|
||||
```
|
||||
проверьте статус (убедитесь, что он active (running)):
|
||||
```
|
||||
sudo systemctl status tinyproxy
|
||||
```
|
||||
|
||||
::::
|
||||
|
||||
2. Настройка конфигурации (клиентская часть) на ВМ с ОС Ubuntu в зоне Inside:
|
||||
|
||||
- Создайте или отредактируйте конфигурационный файл для apt:
|
||||
```
|
||||
sudo nano /etc/apt/apt.conf.d/proxy.conf
|
||||
```
|
||||
- Добавьте следующие строки. Обратите внимание на синтаксис, который отличается от синтаксиса переменных окружения:
|
||||
```
|
||||
Acquire::http::Proxy "http://10.0.0.10:3128/";
|
||||
Acquire::https::Proxy "http://10.0.0.10:3128/";
|
||||
```
|
||||
3. Сохраните и закройте файл. Теперь `sudo apt update` будет работать через прокси.
|
||||
|
||||
## Пример конфигурации для использования стороннего DNS-сервера на ВМ c ОС Ubuntu в Inside
|
||||
|
||||
Если вы измените DNS-серверы через конфигурационный файл Netplan (sudo nano/etc/netplan/*.yaml), эти настройки СОХРАНЯТСЯ после перезагрузки.
|
||||
|
||||
1. Отредактируйте файл *.yaml и добавьте блоки dhcp4-overrides и nameservers:
|
||||
```
|
||||
network:
|
||||
version: 2
|
||||
ethernets:
|
||||
enp3s0:
|
||||
dhcp4: true
|
||||
set-name: "enp3s0"
|
||||
dhcp4-overrides: # <--- Добавьте этот блок
|
||||
use-dns: false # <--- Клиент не будет использовать DNS-сервера, полученные от DHCP-сервера
|
||||
nameservers:
|
||||
addresses: [CORP_DNS_IP] # <--- укажите IP-адрес требуемого DNS-сервера
|
||||
```
|
||||
2. Примените настройки:
|
||||
```
|
||||
sudo netplan apply
|
||||
```
|
||||
3. Проверьте корректность конфигурации:
|
||||
```
|
||||
resolvectl status
|
||||
```
|
||||
@@ -1,290 +0,0 @@
|
||||
# Настройка site-to-site VPN с помощью VyOS
|
||||
|
||||
В этом руководстве рассмотрено создание VPN-туннеля site-to-site между частной сетью и Beeline Cloud с использованием VyOS версии 1.4.0.
|
||||
|
||||
В процессе выполнения этого руководства вы:
|
||||
|
||||
- настроите VPN-сервер IKEv2 на виртуальной машине с VyOS, расположенной в Beeline Cloud;
|
||||
- подключитесь к VPN-серверу из частной сети;
|
||||
- настроите маршрутизацию для беспрепятсвенного хождения трафика между частной сетью и Beeline Cloud.
|
||||
|
||||
Виртуальная частная сеть (VPN) позволяет надежно шифровать трафик, проходящий через ненадежные сети, например в кафе, на конференции или в аэропорту.
|
||||
|
||||
Internet Key Exchange v2 (IKEv2) — это протокол, обеспечивающий прямое туннелирование IPSEC между сервером и клиентом. В реализациях VPN IKEv2 IPSEC обеспечивает шифрование сетевого трафика. IKEv2 изначально поддерживается на некоторых платформах (OS X 10.11+, iOS 9.1+ и Windows 10) без необходимости установки дополнительных приложений и довольно плавно справляется с перебоями в работе клиентов.
|
||||
|
||||
## Перед началом работы
|
||||
|
||||
Условные обозначения:
|
||||
|
||||
- **customer site**: локальное защищенное пространство;
|
||||
- **beeline cloud**: изолированное пространство в Beeline Cloud, в котором создаются ресурсы.
|
||||
|
||||
Для настройки site-to-site VPN понадобится:
|
||||
|
||||
- одна виртуальная машина с ОС VyOS версии 1.4.0 в **beeline cloud** в качестве [промежуточной ВМ (джамп-хоста)](./../compute-servers-jump-create.md);
|
||||
- одна виртуальная машина с ОС VyOS версии 1.4.0, созданная в **customer site** с доступом в интернет с постоянным публичным IP-адресом `client real ip`.
|
||||
- если в сети **customer site** используется ISO-образ VyOS, то установите OC VyOS на виртуальную машину согласно официальной документации.
|
||||
|
||||

|
||||
|
||||
## 1. Посмотреть IP-адреса
|
||||
|
||||
Для настройки VPN-туннеля необходимо узнать публичный и внутренний IP-адреса виртуальных машин, на которых конфигурируется маршрутизатор VyOS.
|
||||
|
||||
В руководстве используются следующие значения IP-адресов виртуальных машин с ОС VyOS:
|
||||
|
||||
| IP-адрес | **beeline cloud** | **customer site** |
|
||||
|---|---|---|
|
||||
| публичный IP | 77.41.188.88 | 77.41.188.163 |
|
||||
| внутренний IP | 10.0.0.10 | 172.16.0.10 |
|
||||
|
||||
### Узнать публичный IP-адрес маршрутизатора
|
||||
|
||||
Для маршрутизатора на стороне **customer site** IP-адреса можно узнать c помощью команд:
|
||||
|
||||
- для публичного IP-адреса:
|
||||
|
||||
```
|
||||
curl ifconfig.me
|
||||
```
|
||||
|
||||
- для внутреннего IP-адреса:
|
||||
|
||||
```
|
||||
ip a
|
||||
```
|
||||
|
||||
Для маршрутизатора на стороне **beeline cloud** публичный IP-адрес можно узнать на странице сервиса **Виртуальные машины** в разделе **IP-адреса**.
|
||||
|
||||
IP-адрес `10.0.0.10` является внутренним и сопоставляется с публичным IP-адресом (Floating IP или FIP). Значение публичного IP-адреса указано в поле **Имя** в разделе **IP-адреса**. По публичному IP-адресу можно подключиться к маршрутизатору VyOS по SSH.
|
||||
|
||||
## 2. Сгенерировать ключевые пары
|
||||
|
||||
1. Выполните команды для генерации ключевых пар на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
- Откройте терминал и подключитесь к маршрутизатору VyOS сети **beeline cloud** по публичному IP-адресу:
|
||||
```
|
||||
ssh vyos@77.41.188.88
|
||||
```
|
||||
- Перейдите в режим конфигурирования:
|
||||
```
|
||||
configure
|
||||
```
|
||||
- Сгнерируйте сертификаты для аутентификации, во время выполнения команды согласитесь со всеми значениями по умолчанию, нажав `Enter`:
|
||||
```
|
||||
run generate pki key-pair install 'beeline-cloud'
|
||||
show pki key-pair 'beeline-cloud' public
|
||||
```
|
||||
Результатом команды будет публичный ключ.
|
||||
|
||||
= customer site
|
||||
|
||||
- Откройте еще один терминал и подключитесь к ВМ с VyOS **customer site** по внутреннему IP-адресу:
|
||||
```
|
||||
ssh vyos@172.16.0.10
|
||||
```
|
||||
- Перейдите в режим конфигурирования:
|
||||
```
|
||||
configure
|
||||
```
|
||||
- Сгнерируйте сертификаты для аутентификации, во время выполнения команды согласитесь со всеми значениями по умолчанию, нажав `Enter`:
|
||||
```
|
||||
run generate pki key-pair install 'customer-site'
|
||||
show pki key-pair 'customer-site' public
|
||||
```
|
||||
Результатом команды будет публичный ключ.
|
||||
|
||||
::::
|
||||
|
||||
2. Публичные ключи, полученные на шаге 1, необходимо перекрестно добавить на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set pki key-pair 'customer-site' public key 'FAAOCAQ8AMII...' # - ключ из customer site
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
```
|
||||
set pki key-pair 'beeline-cloud' public key 'MIIBIjANBgkqh...' # - ключ из beeline cloud
|
||||
```
|
||||
|
||||
::::
|
||||
|
||||
## 3. Настроить IPSEC
|
||||
|
||||
1. Выберите сетевой интерфейс, на котором будет настраиваться IPSEC-туннель, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set vpn ipsec interface eth1
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
- Узнайте имя сетевого интерфейса на маршрутизаторе, на котором будет настраиваться IPSEC:
|
||||
|
||||
```
|
||||
show interfaces
|
||||
```
|
||||
|
||||
- Настройте интерфейс IPSEC:
|
||||
|
||||
```
|
||||
set vpn ipsec interface <имя_сетевого_интерфейса>
|
||||
```
|
||||
|
||||
::::
|
||||
|
||||
2. Для настройки IPSEC-туннеля используется протокол IKE набора протоколов IPSEC, который имеет две фазы.
|
||||
- для настройки первой фазы выполните команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
```
|
||||
set vpn ipsec ike-group aes256-sha256 dead-peer-detection action 'restart'
|
||||
set vpn ipsec ike-group aes256-sha256 dead-peer-detection interval '30'
|
||||
set vpn ipsec ike-group aes256-sha256 dead-peer-detection timeout '120'
|
||||
set vpn ipsec ike-group aes256-sha256 key-exchange 'ikev2'
|
||||
set vpn ipsec ike-group aes256-sha256 lifetime '3600'
|
||||
set vpn ipsec ike-group aes256-sha256 proposal 1 dh-group '19'
|
||||
```
|
||||
|
||||
- для настройки второй фазы выполните команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
```
|
||||
set vpn ipsec esp-group aes256-sha256 proposal 1 encryption aes256
|
||||
set vpn ipsec esp-group aes256-sha256 proposal 1 hash sha256
|
||||
set vpn ipsec esp-group aes256-sha256 lifetime '28800'
|
||||
set vpn ipsec esp-group aes256-sha256 mode 'tunnel'
|
||||
set vpn ipsec esp-group aes256-sha256 pfs 'dh-group19'
|
||||
```
|
||||
|
||||
3. Настройте пиры и аутентификацию с использованием [публичных ключевых пар](#2-сгенерировать-ключевые-пары), выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE authentication mode 'rsa'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE authentication rsa local-key 'beeline-cloud'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE authentication rsa remote-key 'customer-site'
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD authentication mode 'rsa'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD authentication rsa local-key 'customer-site'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD authentication rsa remote-key 'beeline-cloud'
|
||||
```
|
||||
|
||||
::::
|
||||
4. Настройте для пиров адреса подключения, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
На этом шаге [укажите ваши значения IP-адресов](#1-посмотреть-ip-адреса) виртуальных машин с VyOS.
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE ike-group 'aes256-sha256'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE local-address '10.0.0.10'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE remote-address '77.41.188.163'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 esp-group 'aes256-sha256'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE default-esp-group 'aes256-sha256'
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD ike-group 'aes256-sha256'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD local-address '172.16.0.10'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD remote-address '77.41.188.88'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 esp-group 'aes256-sha256'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD default-esp-group 'aes256-sha256'
|
||||
```
|
||||
|
||||
::::
|
||||
5. Настройте статические маршруты, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
Для примера, в **customer site** используется сеть с адресом `172.16/16`, в **beeline cloud** — две сети: `10/8` и `192.168/16`.
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 local prefix '10.0.0.0/8'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 local prefix '192.168.0.0/16'
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 remote prefix '172.16.0.0/16'
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 local prefix '172.16.0.0/16'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 remote prefix '10.0.0.0/8'
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 remote prefix '192.168.0.0/16'
|
||||
```
|
||||
|
||||
::::
|
||||
6. Укажите *инициатора* и *ответчика*, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
:::: tabs
|
||||
|
||||
= beeline cloud
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer CUSTOMER-SITE connection-type respond
|
||||
```
|
||||
|
||||
= customer site
|
||||
|
||||
```
|
||||
set vpn ipsec site-to-site peer BEELINE-CLOUD connection-type initiate
|
||||
```
|
||||
|
||||
::::
|
||||
7. Сохраните конфигурации, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
```
|
||||
save
|
||||
```
|
||||
|
||||
8. Примените конфигурации, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**:
|
||||
|
||||
```
|
||||
commit
|
||||
```
|
||||
|
||||
## 4. Проверить соединение
|
||||
|
||||
Выполните команду на любом из маршрутизаторов в сети **beeline cloud** или в сети **customer site**:
|
||||
|
||||
```
|
||||
run show vpn ipsec status
|
||||
ping -c 3 172.16.0.10
|
||||
ping -c 3 10.0.0.10
|
||||
```
|
||||
|
||||
## Диагностика неисправностей
|
||||
|
||||
Если во время применения конфигурации команда `commit` завершится с ошибкой, то попробуйте выполнить команды для диагностики неисправностей.
|
||||
|
||||
Основные команды для диагностики проблем:
|
||||
|
||||
- `run show vpn ipsec status`
|
||||
- `run show vpn ipsec state`
|
||||
- `run show vpn ipsec sa`
|
||||
- `run show vpn ipsec policy`
|
||||
- `run show log vpn`
|
||||
|
Before Width: | Height: | Size: 46 KiB |
@@ -1,19 +0,0 @@
|
||||
# Группы размещения
|
||||
|
||||
Группы размещения — это правила размещения виртуальных машин на физических хостах. Правила размещения позволяют создавать виртуальные машины на разных или на одном хосте. Политика размещения виртуальных машин действует в рамках одной зоны доступности.
|
||||
|
||||
- Правило `Affinity` размещает ВМ обязательно на одном физическом хосте.
|
||||
|
||||
- Правило `Soft-Affinity` размещает ВМ по возможности на одном физическом хосте.
|
||||
|
||||
- Правило `Anti-Affinity` размещает ВМ обязательно на разных физических хостах. Такое размещение повышает производительность и предотвращает недоступность ВМ при отказе хоста.
|
||||
|
||||
- Правило `Soft-Anti-Affinity` размещает ВМ по возможности на разных физических хостах.
|
||||
|
||||
::: warning Важно
|
||||
В группу размещения можно добавить новую ВМ. Во время создания ВМ укажите группу размещения, к которой будет принадлежать ВМ.
|
||||
|
||||
Существующая ВМ не может быть добавлена в группу размещения.
|
||||
|
||||
ВМ может быть создана в группе размещения, если для выполнения правила есть ресурсы в зоне доступности. Если ресурсов нет, то ВМ не будет создан.
|
||||
:::
|
||||
@@ -1,17 +0,0 @@
|
||||
# Создание группы размещения
|
||||
|
||||
Раздел описывает процедуру создания новой группы размещения. Вы можете настроить параметры размещения виртуальных машин, выбрать имя и определить правила распределения на физических хостах.
|
||||
|
||||
## Создать группу размещения
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Группы размещения**.
|
||||
5. Нажмите **Создать группу**.
|
||||
6. Введите параметры группы размещения:
|
||||
- **Имя группы размещения**: введите имя группы размещения.
|
||||
- выберите правило размещения.
|
||||
- **Зона доступности**: выберите зону доступности, в которой будут создаваться виртуальные машины по правилу размещения.
|
||||
- добавьте тег группе размещения при необходимости.
|
||||
7. Нажмите **Создать группу**.
|
||||
@@ -1,11 +0,0 @@
|
||||
# Удаление группы размещения
|
||||
|
||||
Раздел описывает процедуру удаления группы размещения.
|
||||
|
||||
## Удалить группу размещения
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Группы размещения**.
|
||||
5. Справа от названия группы размещения нажмите кнопку .
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Обзор
|
||||
link: /compute/compute-how-to/compute-placement-groups/compute-placement-groups-about.md
|
||||
description: Типы групп размещения и правила распределения ВМ на физических хостах
|
||||
- title: Создание группы размещения
|
||||
link: /compute/compute-how-to/compute-placement-groups/compute-placement-groups-create.md
|
||||
description: Создание новой группы размещения
|
||||
- title: Управление группами размещения
|
||||
link: /compute/compute-how-to/compute-placement-groups/compute-placement-groups-manager.md
|
||||
description: Добавление ВМ в группы и редактирование параметров размещения
|
||||
- title: Удаление группы размещения
|
||||
link: /compute/compute-how-to/compute-placement-groups/compute-placement-groups-del.md
|
||||
description: Удаление группы размещения
|
||||
|
||||
---
|
||||
|
||||
# Группы размещения
|
||||
@@ -1,26 +0,0 @@
|
||||
# Управление группами размещения
|
||||
|
||||
Раздел позволяет управлять существующими группами размещения. Доступны операции добавления виртуальных машин в группах, а также редактирование параметров размещения.
|
||||
|
||||
## Добавить виртуальную машину в группу размещения
|
||||
|
||||
Принадлежность виртуальной машины к группе размещения указывается во время [создания ВМ](../compute-servers-create.md#создать-виртуальную-машину). Уже созданную виртуальную машину нельзя добавить в группу размещения.
|
||||
|
||||
## Редактировать группу размещения
|
||||
|
||||
В группе размещения можно изменить название группы и редактировать теги.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Группы размещения**.
|
||||
5. Переименовать группу размещения:
|
||||
- Нажмите на название группы в списке групп.
|
||||
- Нажмите на … и выберите **Переименовать**.
|
||||
- Введите новое имя группы размещения.
|
||||
- Нажмите ✓.
|
||||
6. Редактировать теги группы размещения:
|
||||
- Нажмите на название группы в списке групп.
|
||||
- Нажмите **Редактировать теги**.
|
||||
- Добавьте или удалите теги.
|
||||
- Нажмите **Сохранить**.
|
||||
@@ -1,69 +0,0 @@
|
||||
# Создание виртуальной машины
|
||||
|
||||
## Создать виртуальную машину
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите **Создать виртуальную машину**.
|
||||
6. В блоке **Имя и расположение** укажите имя и расположение ВМ:
|
||||
- **Имя машины**: введите название ВМ по правилам:
|
||||
- длина от 3 до 63 символов;
|
||||
- используйте только строчные латинские буквы, цифры и дефис;
|
||||
- не используйте дефис в начале или в конце имени.
|
||||
- **Зона доступности**: выберите подходящую [зону доступности](../compute-overview.md#зоны-доступности).
|
||||
7. В блоке **Образ загрузочного диска** выберите [тип и версию операционной системы](./../compute-overview.md#операционная-система).
|
||||
8. В блоке **Конфигурация** выберите количество vCPU и RAM. Наборы ресурсов заранее скомпонованы по оптимальным параметрам.
|
||||
::: tip Информация
|
||||
При выборе ресурсов рекомендуется в первую очередь ориентироваться на требуемое количество RAM.
|
||||
:::
|
||||
9. В блоке **Диски** настройте загрузочный диск и, при необходимости, добавьте дополнительные диски:
|
||||
- **Загрузочный диск**: выберите [тип диска](../compute-overview.md#диски) и укажите размер загрузочного диска.
|
||||
- Рекомендуется создать дополнительный диск для размещения ваших данных: нажмите **Добавить диск** и настройте дополнительный диск. [Дополнительный диск можно создать](#добавить-диск) позже.
|
||||
10. В блоке **Доступ** укажите логин пользователя для подключения к ВМ:
|
||||
- **Логин**: введите логин пользователя по правилам:
|
||||
- длина от 1 до 32 символов;
|
||||
- используйте только строчные латинские буквы, цифры и символы: дефис, подчеркивание и точку;
|
||||
- не используйте дефис и точку в начале;
|
||||
- не используйте дефис в конце имени.
|
||||
- выберите один из способов подключения к ВМ:
|
||||
- **SSH-ключ**: выберите SSH-ключи, с помощью которых вы можете подключаться к ВМ по SSH. Если подходящий SSH-ключ отсутствует, то нажмите [**Создать ключ**](../../admin/ssh.md#создать-ssh-ключ).
|
||||
- **Пароль**: придумайте пароль для подключения к ВМ.
|
||||
::: warning Важно
|
||||
Обязательно сохранить пароль. В дальнейшем сменить и восстановить пароль невозможно.
|
||||
:::
|
||||
11. В блоке **Настройка сети** выберите:
|
||||
- **IPv4-адрес**: выберите способ получения IP-адреса для ВМ:
|
||||
- выберите **Внутренний (назначится автоматически)**, чтобы получить IP-адрес автоматически, автоматически назначаются [внутренние IP-адреса](../compute-how-to/compute-ip/compute-ip-about.md#внутренние-ip-адреса);
|
||||
- выберите адрес из списка. В списке адресов отображается [зарезервированные IP-адреса](../compute-how-to/compute-ip/compute-ip-about.md#статусы-ip-адресов).
|
||||
12. В блоке **Размещения** выберите:
|
||||
- **Группа размещения**: выберите правило размещения ВМ на физическом хосте. [Группу размещения](./compute-placement-groups/compute-placement-groups-about.md) создайте заранее.
|
||||
13. Включите опцию **Расширенные параметры**, чтобы использовать [cloud-init](https://cloudinit.readthedocs.io/en/latest/) для настройки ВМ.
|
||||
14. Нажмите **Создать виртуальную машину**.
|
||||
|
||||
ВМ появится на странице сервиса **Виртуальные машины** в разделе **Виртуальные машины** в статусе `Cоздается`. Выполняется сборка виртуального ВМ, назначается [IP-адрес](../compute-how-to/compute-ip/compute-ip-manager.md) и полное доменное имя (FQDN). После окончания сборки ВМ перейдет в статус `Включена`.
|
||||
|
||||
## Добавить диск
|
||||
|
||||
Добавление дополнительного диска к ВМ состоит из двух шагов:
|
||||
|
||||
- 1 шаг. Добавить новое устройство.
|
||||
- 2 шаг. Подключить диск внутри операционной системы.
|
||||
|
||||
Новое устройство добавляется в личном кабинете:
|
||||
|
||||
1. Перейдите в личный кабинет.
|
||||
2. В списке **Проекты** нажмите на имя проекта, в котором нужно создать ресурс.
|
||||
3. В списке **Сервисы** нажмите на имя сервиса **Виртуальные машины**.
|
||||
4. Откройте раздел **Виртуальные машины → Виртуальные машины**.
|
||||
5. Нажмите на имя ВМ.
|
||||
6. Перейдите на вкладку **Диски**.
|
||||
7. Нажмите **Добавить диск**.
|
||||
8. Введите параметры добавляемого диска:
|
||||
- **Имя диска**: введите название диска.
|
||||
- **Тип**: выберите из списка тип хранения.
|
||||
- **Размер диска**: введите размер добавляемого диска в Гб.
|
||||
9. Нажмите **Создать диск**.
|
||||
|
||||
Далее выполните монтирование диска в операционной системе.
|
||||
@@ -1,51 +0,0 @@
|
||||
# Создание ВМ джамп-хоста
|
||||
|
||||
Промежуточная ВМ (джамп-хост) — это виртуальная машина с внешним IP-адресом, созданная в специальной приграничной зоне доступности `DMZ` и имеющая доступ к внутренней сети. Джамп-хост является шлюзом между интернетом и внутренней сетью. Через джамп-хост можно подключиться к ВМ по SSH по внутреннему IP-адресу.
|
||||
|
||||
## 1. Посмотреть внешний IP-адрес и его статус
|
||||
|
||||
Для создания промежуточной ВМ с доступом в/из интернета понадобится внешний IP-адрес.
|
||||
|
||||
Перед созданием промежуточной ВМ посмотрите статус и значение внешнего IP-адреса:
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **IP-адреса**.
|
||||
5. В списке найдите IP-адрес, который сопоставлен с IP-адресом `10.0.0.10`.
|
||||
6. Значение внешнего IP-адреса указано в поле **Имя**.
|
||||
7. Убедитесь, что IP-адрес, который сопоставлен с IP-адресом `10.0.0.10`, находится в статусе `Зарезервирован`.
|
||||
|
||||
Внешний IP-адрес может быть занят другой виртуальной машиной. Если вы не планируете использовать эту ВМ в качестве джамп-хоста, то [отвяжите внешний IP-адрес](../compute-how-to/compute-ip/compute-ip-manager.md#назначить-вм-внешний-ip-адрес) от этой ВМ и [создайте новую промежуточную ВМ с FIP](#2-создать-промежуточную-вм).
|
||||
|
||||
## 2. Создать промежуточную ВМ
|
||||
|
||||
Чтобы ВМ была доступна из интернета и имела выход в интернет, ВМ создается:
|
||||
|
||||
- в [зоне доступности](./../compute-overview.md#зоны-доступности) `DMZ`;
|
||||
- с внешним IP-адресом, который сопоставлен с внутренним IP-адресом `10.0.0.10`;
|
||||
- с образом операционной системы:
|
||||
- Linux для реализации базовой сетевой функциональности;
|
||||
- VyOS для реализации расширенной сетевой функциональности.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите **Создать виртуальную машину**.
|
||||
6. В блоке **Имя и расположение** укажите имя и расположение ВМ:
|
||||
- **Имя машины**: введите название ВМ.
|
||||
- **Зона доступности**: выберите зону доступности, содержащую в названии `DMZ`.
|
||||
:::warning Важно
|
||||
Джамп-хост и внешний IP-адрес должны находиться в одной [зоне доступности `DMZ`](./../compute-overview.md#зоны-доступности) для связанности из интернета.
|
||||
:::
|
||||
7. В блоке **Выбор образа** выберите [тип и версию операционной системы](./../compute-overview.md#операционная-система).
|
||||
8. В блоке **Конфигурация** выберите количество vCPU и RAM.
|
||||
9. В блоке **Диски** настройте загрузочный диск:
|
||||
- **Загрузочный диск**: выберите [тип диска](./../compute-overview.md#диски) и укажите размер загрузочного диска.
|
||||
10. Выберите SSH-ключ для подключения к ВМ по SSH.
|
||||
11. В блоке **Доступ** укажите логин пользователя для подключения к ВМ:
|
||||
- **Логин**: введите логин пользователя латинскими символами в нижнем регистре.
|
||||
12. В блоке **Настройки сети** выберите:
|
||||
- **IPv4-адрес**: выберите из списка внешний IP-адрес.
|
||||
13. Нажмите **Создать виртуальную машину**.
|
||||
@@ -1,160 +0,0 @@
|
||||
# Управление виртуальными машинами
|
||||
|
||||
## Посмотреть список ВМ
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
|
||||
## Посмотреть свойства ВМ
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите на имя ВМ.
|
||||
6. На вкладке **Общая информация** показана информация о ВМ:
|
||||
- **Логин**: логин пользователя для подключения к ВМ.
|
||||
- **Зона доступности**: [зона доступности](./../compute-overview.md#зоны-доступности) ВМ.
|
||||
- **Идентификатор**: уникальный идентификатор ВМ.
|
||||
- **Внутренний FQDN**: полное доменное имя ВМ.
|
||||
- **Внутренний IP-адрес**:внутренний IP-адрес, присвоенный ВМ.
|
||||
- **Образ**: операционная система, установленная на ВМ.
|
||||
- **Конфигурация**: конфигурация ЦПУ и ОЗУ.
|
||||
- **Группа размещения**: группа размещения ВМ.
|
||||
- **Дата создания**: дата и время создания ВМ.
|
||||
- **Создатель**: имя пользователя, который создал ВМ.
|
||||
- **Теги**: теги, присвоенные ВМ.
|
||||
7. На вкладке **Диски** показан загрузочный диск и дополнительные диски, подключенных к ВМ.
|
||||
|
||||
## Изменить конфигурацию ВМ
|
||||
|
||||
У ВМ можно изменить конфигурацию ЦПУ и ОЗУ: увеличить или уменьшить количество вычислительных ресурсов. Выбор конфигурации предоставляется из линейки доступных тарифов.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Нажмите на имя ВМ.
|
||||
6. На вкладке **Общая информация** нажмите **Изменить конфигурацию**.
|
||||
7. Выберите из списка новый тариф: количество ЦПУ и ОЗУ.
|
||||
8. Нажмите **Сохранить и перезагрузить**.
|
||||
9. Подтвердите действие, нажав **Перезагрузить**.
|
||||
|
||||
Во время выполнения масштабирования ВМ находится статусе `Расширение`. После применения изменений ВМ будет автоматически перезагружена. ВМ перейдет в статус `Включен`.
|
||||
|
||||
## Выключить ВМ
|
||||
|
||||
Выключение ВМ не предполагает освобождение вычислительных ресурсов, зарезервированных за этим ВМ.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Измените состояние ВМ одним из способов:
|
||||
- На странице **Виртуальные машины**:
|
||||
- В списке виртуальных ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на … и выберите **Выключить**.
|
||||
- Подтвердите действие, нажав **Выключить**.
|
||||
- На странице виртуальной машины:
|
||||
- В списке ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на имя ВМ.
|
||||
- Нажмите **Выключить**.
|
||||
- Подтвердите действие, нажав **Выключить ВМ**.
|
||||
|
||||
Выключение ВМ занимает некоторое время, отключается питание ВМ. После выключения ВМ переходит в статус `Выключен пользователем`.
|
||||
|
||||
## Включить ВМ
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Измените состояние ВМ одним из способов:
|
||||
- На странице **Виртуальные машины**:
|
||||
- В списке ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на … и выберите **Включить**.
|
||||
- На странице виртуального машины:
|
||||
- В списке ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на имя ВМ.
|
||||
- Нажмите **Включить**.
|
||||
|
||||
Включение ВМ занимает некоторое время. После включения ВМ переходит в статус `Включен`.
|
||||
|
||||
## Перезагрузить ВМ
|
||||
|
||||
Перезагрузка ВМ предполагает корректное завершение работы операционный системы без отключения питания.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Измените состояние ВМ одним из способов:
|
||||
- На странице **Виртуальные машины**:
|
||||
- В списке ВМ найдите ВМ, состояние которого необходимо изменить.
|
||||
- Нажмите на … и выберите **Перезагрузить**.
|
||||
- Подтвердите действие, нажав **Перезагрузить**.
|
||||
- На странице виртуальной машины:
|
||||
- В списке ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на имя ВМ.
|
||||
- Нажмите **Перезагрузить**.
|
||||
- Подтвердите действие, нажав **Перезагрузить**.
|
||||
|
||||
Во время выполнения перезагрузки ВМ находится в статусе `Перезагружается`. После завершения перезагрузки ВМ перейдет в статус `Включен`.
|
||||
|
||||
## Принудительная перезагрузка ВМ
|
||||
|
||||
Принудительная перезагрузка ВМ предполагает аппаратное выключение и включение. Несохраненные данные могут быть потеряны.
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Измените состояние ВМ одним из способов:
|
||||
- На странице **Виртуальные машины**:
|
||||
- В списке ВМ найдите ВМ, состояние которой необходимо изменить.
|
||||
- Нажмите на … и выберите **Принудительная перезагрузка**.
|
||||
- Подтвердите действие, нажав **Перезагрузить**.
|
||||
- На странице виртуальной машины:
|
||||
- В списке ВМ найдите ВМ, состояние которого необходимо изменить.
|
||||
- Нажмите на имя ВМ.
|
||||
- Нажмите на … в правом углу страницы и выберите **Принудительная перезагрузка**.
|
||||
- Подтвердите действие, нажав **Перезагрузить**.
|
||||
|
||||
Во время выполнения перезагрузки ВМ находится в статусе `Холодная перезагрузка`. После завершения перезагрузки ВМ перейдет в статус `Включен`.
|
||||
|
||||
## Назначить ВМ IP-адрес
|
||||
|
||||
Если вам необходимо переиспользовать IP-адрес, то перед удалением ВМ [сохраните IP-адрес](../compute-how-to/compute-ip/compute-ip-manager.md#сохранить-ip-адрес-в-проекте). При создании ВМ этот IP-адрес будет доступен для назначения.
|
||||
|
||||
::: warning Важно
|
||||
IP-адрес можно назначить новой ВМ. Назначение IP-адреса существующей ВМ не предусмотрено.
|
||||
:::
|
||||
|
||||
## Удалить ВМ
|
||||
|
||||
После удаления ВМ освобождаются вычислительные ресурсы.
|
||||
|
||||
Системный диск будет удален вместе с ВМ. Если к ВМ подключены дополнительные диски, то при удалении ВМ диски будут отключены. В дальнейшем эти диски можно подключить к другой ВМ.
|
||||
|
||||
IP-адрес будет удален вместе с ВМ. Чтобы оставить IP-адрес, перед удалением ВМ [сохраните IP-адрес в проекте](../compute-how-to/compute-ip/compute-ip-manager.md#сохранить-ip-адрес-в-проекте). Сохраненный IP-адрес после удаления ВМ остается в вашем проекте и будет доступен для назначения новой ВМ.
|
||||
|
||||
::: danger Предупреждение
|
||||
Удаление ВМ необратимо. Все данные будут удалены без возможности восстановления.
|
||||
:::
|
||||
|
||||
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||
2. Выберите нужный проект в верхнем меню **Проекты**.
|
||||
3. В верхнем меню нажмите на пункт **Сервисы** и выберите сервис **Виртуальные машины**.
|
||||
4. В левом меню откройте раздел **Виртуальные машины**.
|
||||
5. Удалите ВМ одним из способов:
|
||||
- На странице **Виртуальные машины**:
|
||||
- В списке ВМ найдите ВМ, которую необходимо удалить.
|
||||
- Нажмите на … и выберите **Удалить**.
|
||||
- Введите имя удаляемой ВМ и нажмите **Удалить виртуальную машину**.
|
||||
- На странице виртуальной машины:
|
||||
- В списке ВМ найдите ВМ, которую необходимо удалить.
|
||||
- Нажмите на имя .
|
||||
- Нажмите на … в правом углу страницы и выберите **Удалить**.
|
||||
- Введите имя удаляемого ВМа и нажмите **Удалить виртуальную машину**.
|
||||
|
Before Width: | Height: | Size: 281 B |
|
Before Width: | Height: | Size: 803 B |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 996 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 937 B |
@@ -1,11 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Техническое описание
|
||||
link: /compute/compute-overview.md
|
||||
description: Информация о зонах доступности, физических платформах сервиса
|
||||
- title: Квоты и лимиты
|
||||
link: /compute/compute-quatos.md
|
||||
description: Ограничения на количество ресурсов в сервисе
|
||||
---
|
||||
|
||||
# Обзор сервиса
|
||||
@@ -1,81 +0,0 @@
|
||||
# Техническое описание
|
||||
|
||||
## Виртуальная машина
|
||||
|
||||
Конфигурация виртуальной машины задается при ее создании:
|
||||
|
||||
- операционная система;
|
||||
- количество CPU;
|
||||
- объем RAM;
|
||||
- тип и размер диска;
|
||||
- зона доступности.
|
||||
|
||||
## Зоны доступности
|
||||
|
||||
Зона доступности — это один или несколько центров обработки данных (ЦОД), в которых могут быть размещены компоненты облачной инфраструктуры.
|
||||
|
||||
| Зона доступности |Дата-центр | Сетевой периметр |
|
||||
|---|---|---|
|
||||
|`msk-dc-1`|[Останкино](https://dc.ostankino.ru/)|`Inside`, `DMZ`|
|
||||
<!--|`msk-dc-3`|[Oxygen](https://o2dc.ru/)|
|
||||
|`msk-dc-5`|[Филанко](https://datahouse.ru/datacenter/nagornaya/)|
|
||||
|`ytc-dc-1`|[ЯТЦ Модуль 3](../platform/zones.md#доступные-центры-обработки-данных)|
|
||||
|`ytc-dc-2`|[ЯТЦ Модуль 5](../platform/zones.md#доступные-центры-обработки-данных)|
|
||||
|`ytc-dc-3`|[ЯТЦ Модуль 6](../platform/zones.md#доступные-центры-обработки-данных)|-->
|
||||
|
||||
Доступны сетевые периметры:
|
||||
|
||||
- `Inside` — закрытый контур, не подразумевает доступ в/из интернета к виртуальным машинам. По умолчанию все ВМ в зоне `Inside` имеют маршруты до сетей `Inside` и `DMZ`.
|
||||
- `DMZ` — демилитаризованная зона, подразумевает доступ из интернета к виртуальным машинам. По умолчанию все ВМ в зоне `DMZ` с внутренним IP-адресом имеют доступ в интернет через служебный внешний IP-организации организации, недоступный пользователям для управления.
|
||||
|
||||
## Шаблоны конфигурации ВМ
|
||||
|
||||
При создании виртуальной машины доступны готовые конфигурации CPU и RAM. Произвольные конфигурации недоступны.
|
||||
|
||||
## Физические платформы
|
||||
|
||||
Сервис предоставляет различные виды физических процессоров. Выбор платформы гарантирует тип физического процессора в дата-центре и определяет набор допустимых конфигураций CPU и RAM.
|
||||
|
||||
| Платформа | Процессор |Частота, ГГц | Кол-во физических CPU на сервере | RAM, ГБ | Зона доступности (*)|Характеристики на 1 ВМ (**)|
|
||||
|---|---|---|---|---|---|---|
|
||||
| Intel Ice Lake | Intel Xeon Platinum 8358 | 2,6 | 2x32 |1536|[Доступна во всех зонах](#зоны-доступности)|**Кол-во vCPU:** до 32<br> **Объем RAM:** до 256 ГБ|
|
||||
| Intel Ice Lake | Intel Xeon Platinum 8378A | 3 | 2x32 |1536|[Доступна во всех зонах](#зоны-доступности)|**Кол-во vCPU:** до 32<br> **Объем RAM:** до 256 ГБ|
|
||||
|
||||
- (*) — возможно изменение платформы на аналогичную.
|
||||
- (**) — индивидуальные конфигурации vCPU и RAM — по запросу.
|
||||
|
||||
## Диски
|
||||
|
||||
Хранение данных организовано с использованием сетевых дисков. Диск создается в определенной зоне доступности. Каждый диск автоматически реплицируется внутри своей зоны доступности, что обеспечивает надежное хранение данных.
|
||||
|
||||
Система хранения построена на платформе Ceph. Используются блочные устройства хранения данных — `NBD (network block device)`. Доступен тип диска — `SSD`.
|
||||
|
||||
## Операционная система
|
||||
|
||||
Для виртуальных машин подготовлены образы операционных систем Linux.
|
||||
|
||||
В операционных системах доступен `root`-пользователь. Для подключения к ВМ используется имя пользователя, заданное при создании ВМ.
|
||||
|
||||
| Операционная система | Версия | Размер загрузочного диска |
|
||||
|---|---|---|
|
||||
| AstraLinux | 1.8.2 | 3 ГБ |
|
||||
| CentOS | 9 | 10 ГБ |
|
||||
| CentOS | 10 | 10 ГБ |
|
||||
| Debian | 12 | 5 ГБ |
|
||||
| Rocky Linux | 9 | 10 ГБ |
|
||||
| Ubuntu | 20.04 | 5 ГБ |
|
||||
| Ubuntu | 22.04 | 5 ГБ |
|
||||
| VyOS | 13 | 2 ГБ |
|
||||
| VyOS | 14 | 2 ГБ |
|
||||
|
||||
## Группы виртуальных машин
|
||||
|
||||
Группу виртуальных машин внутри одной зоны доступности можно объединить в соответствии с определенной политикой размещения. Доступны политики:
|
||||
|
||||
- Правило `Affinity` размещает ВМ обязательно на одном физическом хосте.
|
||||
|
||||
- Правило `Soft-Affinity` размещает ВМ по возможности на одном физическом хосте.
|
||||
|
||||
- Правило `Anti-Affinity` размещает ВМ обязательно на разных физических хостах. Такое размещение повышает производительность и предотвращает недоступность ВМ при отказе хоста.
|
||||
|
||||
- Правило `Soft-Anti-Affinity` размещает ВМ по возможности на разных физических хостах.
|
||||
@@ -1,37 +0,0 @@
|
||||
# Квоты и лимиты
|
||||
|
||||
Квоты — это организационные ограничения на количество доступных ресурсов в сервисе. В некоторых случаях квоты могут быть увеличены или уменьшены по запросу.
|
||||
|
||||
Лимиты — это технические ограничения на количество доступных ресурсов в сервисе. Ограничения, обычно, связаны с характеристиками оборудования и особенностями архитектуры.
|
||||
|
||||
## Квоты
|
||||
|
||||
| Вид ограничения | Значение |
|
||||
|---|---|
|
||||
|Количество публичных IP-адресов | 1 |
|
||||
|Суммарное количество vCPU для всех виртуальных машин |32|
|
||||
|Суммарный объем RAM для всех виртуальных машин | 256 ГБ|
|
||||
|Суммарный объем дисков, включая [образы загрузочных дисков](../compute/compute-overview.md#операционная-система) | 200 ГБ |
|
||||
|
||||
Доступные шаблоны конфигураций vCPU и RAM виртуальных машин:
|
||||
|
||||
| Конфигурация | vCPU | RAM, ГБ |
|
||||
|:------------|:----|:----------|
|
||||
| cpu2ram2 | 2 | 2 |
|
||||
| cpu2ram4 | 2 | 4 |
|
||||
| cpu2ram8 | 2 | 8 |
|
||||
| cpu2ram16 | 2 | 16 |
|
||||
| cpu4ram4 | 4 | 4 |
|
||||
| cpu4ram8 | 4 | 8 |
|
||||
| cpu4ram16 | 4 | 16 |
|
||||
| cpu4ram32 | 4 | 32 |
|
||||
| cpu8ram16 | 8 | 16 |
|
||||
| cpu8ram32 | 8 | 32 |
|
||||
| cpu8ram64 | 8 | 64 |
|
||||
| cpu8ram128 | 8 | 128 |
|
||||
| cpu16ram4 | 16 | 4 |
|
||||
| cpu16ram8 | 16 | 8 |
|
||||
| cpu16ram16 | 16 | 16 |
|
||||
| cpu16ram32 | 16 | 32 |
|
||||
| cpu16ram64 | 16 | 64 |
|
||||
| cpu16ram128 | 16 | 128 |
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Обзор сервиса
|
||||
link: /compute/compute-overview-index.md
|
||||
description: Обзор сервиса, решаемые задачи, характеристики оборудования
|
||||
- title: Виртуальные машины
|
||||
link: /compute/compute-how-to/compute-index.md
|
||||
description: Создание виртуальной машины и подключение к ней, управление виртуальной машиной
|
||||
- title: Диски
|
||||
link: /compute/compute-how-to/compute-disks.md
|
||||
description: Создание, настройка и удаление дисков, подключение и отключение диска от виртуальной машины
|
||||
- title: IP-адреса
|
||||
link: /compute/compute-how-to/compute-ip.md
|
||||
description: Резервирование, назначение IP-адреса виртуальной машине, удаление IP-адресов
|
||||
- title: Группы размещения
|
||||
link: /compute/compute-how-to/compute-affinity.md
|
||||
description: Создание правил размещения виртуальных машин на физических хостах, управление группами размещения
|
||||
---
|
||||
|
||||
# Виртуальные машины
|
||||
|
||||
Сервис **Виртуальные машины** предоставляет пользователям виртуальные машины.
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
section_links:
|
||||
- title: Счета
|
||||
link:
|
||||
description: Просмотр счетов и получение документов за расчетный период в PDF
|
||||
- title: Анализ затрат
|
||||
link: /finance/cost-analysis.md
|
||||
description: Детализация расходов в различных разрезах, фильтрация, сравнение периодов и экспорт отчетов
|
||||
- title: Бюджеты
|
||||
link:
|
||||
description: Установка бюджетов для проектов и сервисов, настройка уведомлений о приближении к лимиту
|
||||
- title: Прогнозирование
|
||||
link:
|
||||
description: Оценка ожидаемых расходов и сигналы о возможном перерасходе
|
||||
- title: Рекомендации
|
||||
link:
|
||||
description: Персонализированные советы по снижению расходов на облачные ресурсы
|
||||
- title: Управление тегами
|
||||
link:
|
||||
description: Организация ресурсов с помощью пользовательских меток и кастомизированная отчетность
|
||||
---
|
||||
|
||||
# Финансы
|
||||
|
||||
Модуль Финансы позволяет отслеживать стоимость использованных ресурсов и анализировать расходы в разрезе периодов и статей затрат.
|
||||
|
||||
В модуле можно:
|
||||
|
||||
- просматривать и скачивать счета;
|
||||
- контролировать траты по договорам, проектам и сервисам;
|
||||
- анализировать объем и стоимость потребляемых ресурсов.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
verified: false
|
||||
note: Документация была написана по старому порталу. Текст требует проверки.
|
||||
---
|
||||
|
||||
# Счета
|
||||
|
||||
В разделе Счета можно посмотреть все выставленные счета Beeline Cloud. Счета формируются автоматически один раз в месяц для юридических лиц и индивидуальных предпринимателей, подключивших услуги Beeline Cloud. Для каждого расчетного периода доступны документы в формате PDF. Дата появления нового счета указана в верхней части страницы.
|
||||
|
||||
## Статусы счетов
|
||||
|
||||
Счет может иметь один из следующих статусов:
|
||||
|
||||
- **Ожидает оплаты** — счет сформирован и ожидает оплаты.
|
||||
- **Просрочен** — срок оплаты истек, требуется оплата.
|
||||
- **Закрыт** — счет оплачен и обработан.
|
||||
|
||||
## Просмотр счетов
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Счета**.
|
||||
2. Укажите расчетный период в верхней части страницы.
|
||||
3. В таблице отобразятся все счета за выбранный период. Для каждого счета указаны:
|
||||
- номер счета,
|
||||
- дата выставления,
|
||||
- расчетный период,
|
||||
- сумма,
|
||||
- статус оплаты.
|
||||
|
||||
## Просмотр деталей счета
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Счета**.
|
||||
2. Укажите расчетный период в верхней части страницы.
|
||||
3. Нажмите на строку со счетом, чтобы открыть его карточку.
|
||||
4. В карточке счета отображаются:
|
||||
- номер счета,
|
||||
- номер договора,
|
||||
- дата выставления,
|
||||
- срок оплаты,
|
||||
- расчетный период,
|
||||
- общая сумма по счету и НДС,
|
||||
- банковские реквизиты получателя,
|
||||
- контакты поддержки,
|
||||
- таблица с детализацией услуг.
|
||||
|
||||
## Оплата счета
|
||||
|
||||
Если статус счета **Ожидает оплаты** или **Просрочен**, его нужно оплатить.
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Счета**.
|
||||
2. Откройте карточку нужного счета.
|
||||
3. Нажмите **Оплатить**.
|
||||
4. Выберите способ оплаты (QR или Сбербанк Онлайн) и завершите оплату.
|
||||
|
||||
После успешной оплаты статус счета изменится на **Закрыт**.
|
||||
|
||||
## Загрузка счета
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Счета**.
|
||||
2. Откройте карточку счета.
|
||||
3. В правом верхнем углу нажмите **Скачать PDF**.
|
||||
|
||||
Файл сохранится в формате PDF.
|
||||
|
||||
## Фильтрация счетов
|
||||
|
||||
В таблице счетов доступна фильтрация по:
|
||||
|
||||
- статусу оплаты,
|
||||
- дате выставления,
|
||||
- сумме.
|
||||
|
||||
Для этого используйте фильтры в верхней части таблицы. Таблица обновится автоматически.
|
||||
|
||||
## Аналитика по счетам
|
||||
|
||||
В разделе доступна визуализация данных об оплатах:
|
||||
|
||||
- распределение расходов по месяцам, проектам или сервисам,
|
||||
- сравнение текущих расходов с предыдущими периодами.
|
||||
@@ -0,0 +1,3 @@
|
||||
# Бюджеты и уведомления
|
||||
|
||||
Раздел в разработке.
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
verified: true
|
||||
---
|
||||
|
||||
# Анализ затрат
|
||||
|
||||
В разделе Анализ затрат можно отслеживать расходы на облачные ресурсы в режиме реального времени, анализировать их по различным параметрам, сравнивать с предыдущими периодами и экспортировать данные. Доступна детализация за день, неделю, месяц, квартал, год или произвольный период.
|
||||
|
||||
Вы можете использовать раздел, чтобы:
|
||||
|
||||
- узнать сколько потрачено на определенные сервисы за последний месяц;
|
||||
- экспортировать отчет за определенный период в формате CSV для анализа в стороннем ПО;
|
||||
- выявить тренды в динамике расходов и принять меры по снижению затрат.
|
||||
|
||||
## Просмотр общих расходов
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Анализ затрат**.
|
||||
2. Перейдите на вкладку **Общие расходы**.
|
||||
3. В верхней части страницы задайте фильтры:
|
||||
- **Период**: задайте даты начала и окончания или выберите один из периодов на вкладке **Предустановленный**.
|
||||
- **Детализация** — выберите шаг агрегации данных на графиках:
|
||||
- **Договоры / Проекты**: выберите один или несколько проектов.
|
||||
- **Сервис**: выберите один или несколько сервисов.
|
||||
|
||||
4. Отобразятся:
|
||||
- сумма расходов за выбранный период.
|
||||
- график с расходами за выбранный период.
|
||||
- таблица с детализацией затрат по договорам, проектам, и сервисам.
|
||||
|
||||
В таблице для каждой записи указаны:
|
||||
|
||||
- договор
|
||||
- проект
|
||||
- сервис
|
||||
- график динамики расходов
|
||||
- средний расход (руб/час)
|
||||
- текущий расход (руб/час)
|
||||
- стоимость за использованный ресурс
|
||||
|
||||
## Просмотр расходов по сервисам
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Анализ затрат**.
|
||||
2. Перейдите на вкладку **Расходы по сервисам**.
|
||||
3. В верхней части страницы задайте фильтры:
|
||||
- **Сервис**: выберите один или несколько сервисов.
|
||||
- **Период**: задайте даты начала и окончания или выберите один из периодов на вкладке **Предустановленный**.
|
||||
- **Детализация** — выберите шаг агрегации данных на графиках.
|
||||
- **Договоры / Проекты**: выберите один или несколько проектов.
|
||||
- **Инстансы**: выберите один или несколько инстансов.
|
||||
- **Ресурс**: выберите один или несколько ресурсов.
|
||||
|
||||
4. Отобразятся:
|
||||
- сумма расходов за выбранный период.
|
||||
- график с расходами за выбранный период.
|
||||
- таблица с детализацией затрат по договорам, проектам, сервисам и ресурсам.
|
||||
|
||||
В таблице для каждой записи указаны:
|
||||
|
||||
- договор
|
||||
- проект
|
||||
- сервис
|
||||
- график динамики расходов
|
||||
- средний расход (руб/час)
|
||||
- текущий расход (руб/час)
|
||||
- стоимость за использованный ресурс
|
||||
|
||||
## Детализация расходов
|
||||
|
||||
Наведите курсор на элемент графика или строку таблицы, чтобы увидеть подробные данные в подсказке — затраты по каждому сервису и общую сумму за период.
|
||||
|
||||
## Настройка графиков
|
||||
|
||||
### Столбчатая диаграмма
|
||||
|
||||
Вы можете настроить способ отображения и диапазон данных:
|
||||
|
||||
- **Группировка**: выберите способ отображения расходов: **По договорам**, **По проектам** или **По сервисам**.
|
||||
- **Тип визуализации**: переключайтесь между столбчатой диаграммой и линейным графиком.
|
||||
- **Диапазон**: сдвигайте границы полосы для выбора подпериода внутри заданного периода.
|
||||
|
||||
### Круговая диаграмма
|
||||
|
||||
У круговой диаграммы можно настроить только **Группировку**. Можно выбрать один из способов отображения расходов: **По договорам**, **По проектам** или **По сервисам**.
|
||||
|
||||
## Посмотреть историю расходов
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Анализ затрат**.
|
||||
2. Перейдите на вкладку **Расходы по сервисам**.
|
||||
3. В верхней части страницы задайте фильтры:
|
||||
- **Сервис**: выберите один или несколько сервисов.
|
||||
- **Период**: задайте даты начала и окончания или выберите один из периодов на вкладке **Предустановленный**.
|
||||
- **Детализация** — выберите шаг агрегации данных на графиках.
|
||||
- **Договоры / Проекты**: выберите один или несколько проектов.
|
||||
- **Инстансы**: выберите один или несколько инстансов.
|
||||
- **Ресурс**: выберите один или несколько ресурсов.
|
||||
4. В нижней части страницы в подразделе **Детализация** перейдите на вкладку **История расходов**.
|
||||
5. Отобразится таблица с детализацией затрат по договорам, проектам, сервисам и ресурсам. Для каждого ресурса указаны:
|
||||
- **Кол-во**: объём потребленных ресурсов за период.
|
||||
- **Ед. измерения** — единица тарификации.
|
||||
- **Цена за ед.** — стоимость одной единицы в рублях.
|
||||
- **Стоимость, ₽** — итоговая сумма за период.
|
||||
|
||||
Чтобы раскрыть детализацию по конкретному периоду, нажмите на строку с датами — отобразится список ресурсов с разбивкой по типам.
|
||||
|
||||
## Экспорт отчета
|
||||
|
||||
1. Перейдите в раздел **Финансы** → **Анализ затрат**.
|
||||
2. Задайте нужные фильтры.
|
||||
3. Нажмите кнопку **Экспорт** под графиками.
|
||||
4. Файл сохранится на ваш компьютер.
|
||||
|
||||
Файл CSV можно открыть в Excel или другом редакторе для дальнейшего анализа.
|
||||