Compare commits
4 Commits
cc5f65be6b
...
2e967e5656
| Author | SHA1 | Date |
|---|---|---|
|
|
2e967e5656 | |
|
|
bdba1274f6 | |
|
|
7b08cef369 | |
|
|
49ab08074f |
|
|
@ -1 +1 @@
|
||||||
Production webhook test: Sat Feb 14 09:52:40 UTC 2026
|
Webhook test: Sat Feb 14 09:49:12 UTC 2026
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
|
@ -2,11 +2,11 @@
|
||||||
# Refer to the theme docs for more details about each of these parameters.
|
# Refer to the theme docs for more details about each of these parameters.
|
||||||
# https://blowfish.page/docs/getting-started/
|
# https://blowfish.page/docs/getting-started/
|
||||||
|
|
||||||
theme = "blowfish" # UNCOMMENT THIS LINE
|
theme = "blowfish"
|
||||||
baseURL = "https://oakazanin.ru/"
|
baseURL = "https://oakazanin.ru/"
|
||||||
defaultContentLanguage = "ru"
|
defaultContentLanguage = "ru"
|
||||||
|
|
||||||
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
|
pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
|
||||||
|
|
||||||
enableRobotsTXT = true
|
enableRobotsTXT = true
|
||||||
summaryLength = 0
|
summaryLength = 0
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,16 @@ title = "Олег Казанин"
|
||||||
isoCode = "ru"
|
isoCode = "ru"
|
||||||
rtl = false
|
rtl = false
|
||||||
dateFormat = "2 January 2006"
|
dateFormat = "2 January 2006"
|
||||||
# logo = "img/logo.png"
|
logo = "img/logo.png"
|
||||||
# secondaryLogo = "img/secondary-logo.png"
|
secondaryLogo = "img/logo_inverted.png"
|
||||||
# description = "My awesome website"
|
# description = "My awesome website"
|
||||||
# copyright = "Copy, _right?_ :thinking_face:"
|
# copyright = "Copy, _right?_ :thinking_face:"
|
||||||
|
|
||||||
# [params.author]
|
[params.author]
|
||||||
name = "Олег Казанин"
|
name = "Олег Казанин"
|
||||||
email = "oakazanin@ya.ru"
|
email = "oakazanin@ya.ru"
|
||||||
# image = "img/blowfish_logo.png"
|
image = "img/profile.png"
|
||||||
# imageQuality = 96
|
# imageQuality = 96
|
||||||
headline = "Infrastructure Engineer | Linux & Open Source"
|
headline = "Infrastructure Engineer | Linux & Open Source"
|
||||||
bio = "Строю полезную инфраструктуру на Open Source стеке. Документирую грабли, чтобы вы на них не наступали."
|
bio = "Строю полезную инфраструктуру на Open Source стеке. Документирую грабли, чтобы вы на них не наступали."
|
||||||
links = [
|
links = [
|
||||||
|
|
|
||||||
|
|
@ -11,30 +11,30 @@
|
||||||
# по weight от меньшего к большему.
|
# по weight от меньшего к большему.
|
||||||
|
|
||||||
|
|
||||||
[[main]]
|
#[[main]]
|
||||||
name = "О блоге"
|
# name = "О блоге"
|
||||||
pageRef = "about"
|
# pageRef = "about"
|
||||||
weight = 10
|
# weight = 10
|
||||||
|
|
||||||
[[main]]
|
#[[main]]
|
||||||
name = "Статьи"
|
# name = "Статьи"
|
||||||
pageRef = "posts"
|
# pageRef = "posts"
|
||||||
weight = 20
|
# weight = 20
|
||||||
|
|
||||||
[[main]]
|
#[[main]]
|
||||||
name = "Проекты"
|
# name = "Проекты"
|
||||||
pageRef = "projects"
|
# pageRef = "projects"
|
||||||
weight = 30
|
# weight = 30
|
||||||
|
|
||||||
[[main]]
|
#[[main]]
|
||||||
name = "Резюме"
|
# name = "Резюме"
|
||||||
pageRef = "resume"
|
# pageRef = "resume"
|
||||||
weight = 40
|
# weight = 40
|
||||||
|
|
||||||
[[main]]
|
#[[main]]
|
||||||
name = "Музыка"
|
# name = "Музыка"
|
||||||
pageRef = "music"
|
# pageRef = "music"
|
||||||
weight = 50
|
# weight = 50
|
||||||
|
|
||||||
#[[main]]
|
#[[main]]
|
||||||
# name = "Blog"
|
# name = "Blog"
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,12 @@
|
||||||
# https://blowfish.page/docs/configuration/#theme-parameters
|
# https://blowfish.page/docs/configuration/#theme-parameters
|
||||||
|
|
||||||
colorScheme = "blowfish"
|
colorScheme = "blowfish"
|
||||||
defaultAppearance = "light" # valid options: light or dark
|
defaultAppearance = "dark" # valid options: light or dark
|
||||||
autoSwitchAppearance = true
|
autoSwitchAppearance = false
|
||||||
|
|
||||||
enableA11y = false
|
enableA11y = false
|
||||||
enableSearch = true
|
enableSearch = true
|
||||||
enableCodeCopy = false
|
enableCodeCopy = true
|
||||||
enableStructuredBreadcrumbs = false
|
enableStructuredBreadcrumbs = false
|
||||||
# enableStyledScrollbar = true # disable to use native scrollbar style (defaults to true)
|
# enableStyledScrollbar = true # disable to use native scrollbar style (defaults to true)
|
||||||
|
|
||||||
|
|
@ -22,11 +22,11 @@ replyByEmail = false
|
||||||
|
|
||||||
disableImageOptimization = false
|
disableImageOptimization = false
|
||||||
disableImageOptimizationMD = false
|
disableImageOptimizationMD = false
|
||||||
disableTextInHeader = false
|
disableTextInHeader = true
|
||||||
# backgroundImageWidth = 1200
|
# backgroundImageWidth = 1200
|
||||||
|
|
||||||
# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images
|
defaultBackgroundImage = "/img/background.png" # used as default for background images
|
||||||
# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles
|
defaultFeaturedImage = "/img/background.png" # used as default for featured images in all articles
|
||||||
# defaultSocialImage = "/android-chrome-512x512.png" # used as default for social media sharing (Open Graph and Twitter)
|
# defaultSocialImage = "/android-chrome-512x512.png" # used as default for social media sharing (Open Graph and Twitter)
|
||||||
hotlinkFeatureImage = false
|
hotlinkFeatureImage = false
|
||||||
# imagePosition = "50% 50%"
|
# imagePosition = "50% 50%"
|
||||||
|
|
@ -41,7 +41,7 @@ giteaDefaultServer = "https://git.fsfe.org"
|
||||||
forgejoDefaultServer = "https://v11.next.forgejo.org"
|
forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||||
|
|
||||||
[header]
|
[header]
|
||||||
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
|
layout = "fixed" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
|
||||||
|
|
||||||
[footer]
|
[footer]
|
||||||
showMenu = true
|
showMenu = true
|
||||||
|
|
@ -51,21 +51,21 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||||
showScrollToTop = true
|
showScrollToTop = true
|
||||||
|
|
||||||
[homepage]
|
[homepage]
|
||||||
layout = "profile" # valid options: page, profile, hero, card, background, custom
|
layout = "background" # valid options: page, profile, hero, card, background, custom
|
||||||
#homepageImage = "IMAGE.jpg" # used in: hero, and card
|
#homepageImage = "IMAGE.jpg" # used in: hero, and card
|
||||||
showRecent = false
|
showRecent = true
|
||||||
showRecentItems = 5
|
showRecentItems = 18
|
||||||
showMoreLink = false
|
showMoreLink = true
|
||||||
showMoreLinkDest = "/posts/"
|
showMoreLinkDest = "/posts/"
|
||||||
cardView = false
|
cardView = true
|
||||||
cardViewScreenWidth = false
|
cardViewScreenWidth = false
|
||||||
layoutBackgroundBlur = false # only used when layout equals background
|
layoutBackgroundBlur = true # only used when layout equals background
|
||||||
disableHeroImageFilter = false # only used when layout equals hero
|
disableHeroImageFilter = false # only used when layout equals hero
|
||||||
|
|
||||||
[article]
|
[article]
|
||||||
showDate = true
|
showDate = true
|
||||||
showViews = false
|
showViews = true
|
||||||
showLikes = false
|
showLikes = true
|
||||||
showDateOnlyInArticle = false
|
showDateOnlyInArticle = false
|
||||||
showDateUpdated = false
|
showDateUpdated = false
|
||||||
showAuthor = true
|
showAuthor = true
|
||||||
|
|
@ -79,18 +79,18 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
|
||||||
showEdit = false
|
showEdit = false
|
||||||
# editURL = "https://github.com/username/repo/"
|
# editURL = "https://github.com/username/repo/"
|
||||||
editAppendPath = true
|
editAppendPath = true
|
||||||
seriesOpened = false
|
seriesOpened = true
|
||||||
showHeadingAnchors = true
|
showHeadingAnchors = true
|
||||||
showPagination = true
|
showPagination = true
|
||||||
invertPagination = false
|
invertPagination = false
|
||||||
showReadingTime = true
|
showReadingTime = true
|
||||||
showTableOfContents = false
|
showTableOfContents = true
|
||||||
# showRelatedContent = false
|
# showRelatedContent = false
|
||||||
# relatedContentLimit = 3
|
# relatedContentLimit = 3
|
||||||
showTaxonomies = false # use showTaxonomies OR showCategoryOnly, not both
|
showTaxonomies = true # use showTaxonomies OR showCategoryOnly, not both
|
||||||
showCategoryOnly = false # use showTaxonomies OR showCategoryOnly, not both
|
showCategoryOnly = false # use showTaxonomies OR showCategoryOnly, not both
|
||||||
showAuthorsBadges = false
|
showAuthorsBadges = false
|
||||||
showWordCount = true
|
showWordCount = false
|
||||||
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
|
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
|
||||||
showZenMode = false
|
showZenMode = false
|
||||||
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
|
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
title: "Hello World"
|
|
||||||
date: 2026-02-13
|
|
||||||
draft: false
|
|
||||||
description: "Первый пост на новом сайте"
|
|
||||||
tags: ["test"]
|
|
||||||
---
|
|
||||||
|
|
||||||
## Привет!
|
|
||||||
|
|
||||||
Это первый пост на новом сайте **oakazanin.ru**.
|
|
||||||
|
|
||||||
Сайт работает на Hugo + Blowfish теме.
|
|
||||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 663 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
|
@ -0,0 +1,374 @@
|
||||||
|
---
|
||||||
|
title: "K3s HA для homelab: архитектура без боли"
|
||||||
|
date: 2025-10-14
|
||||||
|
draft: false
|
||||||
|
description: "Полноценный Kubernetes в бинарнике на 50MB вместо 1.5GB зависимостей. Разбираем архитектуру K3s HA кластера: почему именно 3 master ноды, зачем embedded etcd и сколько ресурсов закладывать."
|
||||||
|
summary: "Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли."
|
||||||
|
tags: ["kubernetes", "k3s", "homelab", "proxmox", "architecture", "ha", "devops"]
|
||||||
|
series: ["K3s HA кластер для homelab"]
|
||||||
|
series_order: 1
|
||||||
|
# seriesOpened: false
|
||||||
|
# showTableOfContents: true
|
||||||
|
showAuthor: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. Знакомо? K3s решает эту проблему - полноценный Kubernetes в бинарнике на 50MB вместо 1.5GB зависимостей. Но без правильного планирования вы получите нестабильную конструкцию, которая падает в самый неподходящий момент.
|
||||||
|
|
||||||
|
В этой статье разберём архитектуру K3s HA кластера: почему именно 3 master ноды, зачем embedded etcd и сколько ресурсов закладывать. В конце - готовый план для установки.
|
||||||
|
|
||||||
|
**Результат:** понимание архитектуры + таблица ресурсов + сетевая схема. Всё, что нужно перед тем, как создавать VM.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Для кого это
|
||||||
|
|
||||||
|
**Подходит:**
|
||||||
|
- Знаком с базовыми концепциями Kubernetes (pod, service, deployment)
|
||||||
|
- Есть Proxmox с 14+ vCPU и 56GB+ RAM
|
||||||
|
- Хочешь понять *что* устанавливать, прежде чем устанавливать
|
||||||
|
|
||||||
|
**Не подходит:**
|
||||||
|
- Нужна одна нода для экспериментов - достаточно docker-compose или K3s single-node
|
||||||
|
- Ищешь managed Kubernetes для бизнеса - смотри в сторону Yandex Cloud или VK Cloud
|
||||||
|
- Хочешь сразу команды без теории - переходи к статье 2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## K3s vs Kubernetes: в чём разница
|
||||||
|
|
||||||
|
**Kubernetes (K8s)** - оркестратор контейнеров, стандарт индустрии. Добро пожаловать в enterprise, где для запуска трёх контейнеров нужно поддерживать шесть виртуальных машин.
|
||||||
|
|
||||||
|
**K3s** - тот же Kubernetes, но кто-то в Rancher (теперь SUSE) задумался: "А что если выкинуть всё, что нужно только Сберу и Yandex Cloud?"
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
**Что выкинули:**
|
||||||
|
|
||||||
|
- Интеграции с облачными провайдерами (вы же не в VK Cloud)
|
||||||
|
- Legacy API (вы же не мигрируете кластер 2016 года)
|
||||||
|
- Встроенные драйверы хранилищ на все случаи жизни (вы же не используете 47 типов СХД)
|
||||||
|
- Альфа/бета-функции (нестабильные эксперименты)
|
||||||
|
|
||||||
|
**Что осталось:** полноценный Kubernetes, сертифицированный CNCF (Cloud Native Computing Foundation - организация, которая решает, что считать "настоящим" Kubernetes). Все манифесты работают. Helm работает. kubectl работает. Ответы со StackOverflow работают.
|
||||||
|
|
||||||
|
### Сравнение в цифрах
|
||||||
|
|
||||||
|
| Характеристика | Kubernetes | K3s |
|
||||||
|
|----------------|------------|-----|
|
||||||
|
| Размер | ~1.5GB образы | 50MB бинарник |
|
||||||
|
| RAM на control plane | ~2GB на ноду | ~500MB на ноду |
|
||||||
|
| Установка | kubeadm, 10+ шагов | один curl-скрипт |
|
||||||
|
| etcd | Отдельный кластер (3+ VM) | Встроенный |
|
||||||
|
| CNI | Нужно устанавливать | Flannel из коробки |
|
||||||
|
| Совместимость | 100% | 100% |
|
||||||
|
|
||||||
|
*"Но я потеряю гибкость!"* - скажете вы. Да, вы не сможете заменить сетевой плагин Flannel без пересборки. Это критично примерно для одного проекта из тысячи, и ваш homelab в их число не входит.
|
||||||
|
|
||||||
|
**Вердикт:** для homelab K3s - очевидный выбор. Теряем 5% гибкости, получаем 90% простоты.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что такое High Availability и зачем оно вам
|
||||||
|
|
||||||
|
**HA (High Availability)** - способность системы продолжать работу при отказе компонентов. Звучит как enterprise-термин для больших компаний? На практике это разница между "кластер упал в субботу, но я починил в понедельник" и "кластер сам пережил падение ноды, пока я спал".
|
||||||
|
|
||||||
|
### Без HA (single node)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐
|
||||||
|
│ K3s Master │ ← Единственная точка отказа
|
||||||
|
│ + Worker │
|
||||||
|
└─────────────────┘
|
||||||
|
|
||||||
|
Нода упала → кластер мёртв → ваши сервисы недоступны
|
||||||
|
```
|
||||||
|
|
||||||
|
### С HA (3+ master nodes)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||||
|
│ Master 1 │ │ Master 2 │ │ Master 3 │
|
||||||
|
│ + etcd │ │ + etcd │ │ + etcd │
|
||||||
|
└──────────┘ └──────────┘ └──────────┘
|
||||||
|
↓ ↓ ↓
|
||||||
|
┌──────────┐ ┌──────────┐
|
||||||
|
│ Worker 1 │ │ Worker 2 │
|
||||||
|
└──────────┘ └──────────┘
|
||||||
|
|
||||||
|
Одна master упала → кластер работает
|
||||||
|
Один worker упал → поды переехали на другой
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сколько master нод нужно
|
||||||
|
|
||||||
|
Вот тут начинается интересное. Интуиция подсказывает: одна нода - плохо, две - уже лучше. Логично? Логично. И неправильно.
|
||||||
|
|
||||||
|
| Master нод | Выдержит отказов | Кворум | Вердикт |
|
||||||
|
|------------|------------------|--------|---------|
|
||||||
|
| 1 | 0 | 1/1 | Нет HA, но честно |
|
||||||
|
| 2 | 0 | **Ловушка!** | ⛔ Хуже, чем 1 |
|
||||||
|
| 3 | 1 | 2/3 | ✅ Минимум для HA |
|
||||||
|
| 5 | 2 | 3/5 | Для критичных систем |
|
||||||
|
|
||||||
|
### Почему 2 master ноды хуже, чем 1
|
||||||
|
|
||||||
|
etcd (база данных кластера, где хранится вообще всё) работает по принципу голосования. Чтобы записать данные, нужно согласие большинства нод. Не "хотя бы одной" - именно большинства.
|
||||||
|
|
||||||
|
Считаем:
|
||||||
|
|
||||||
|
- **1 нода:** большинство = 1. Упала - кластер мёртв. Честная игра, вы знали на что шли.
|
||||||
|
- **2 ноды:** большинство = 2. Упала одна - кворума нет, кластер мёртв. Сюрприз!
|
||||||
|
- **3 ноды:** большинство = 2. Одна упала - две оставшиеся продолжают работать.
|
||||||
|
|
||||||
|
Это как договор, требующий подписи обоих директоров - заболел один, и компания парализована.
|
||||||
|
|
||||||
|
С двумя нодами вы не получили отказоустойчивость. Вы удвоили количество точек отказа и назвали это "высокой доступностью".
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Правило:** или 1 нода (и честное понимание рисков), или 3+ (и настоящий HA). Двойка - ловушка для тех, кто не дочитал документацию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Embedded etcd vs External etcd
|
||||||
|
|
||||||
|
**etcd** - распределённое key-value хранилище. Единственный источник истины для всего состояния Kubernetes: все объекты (поды, сервисы, секреты), конфигурации, сетевые политики. Без etcd кластер не работает. Точка.
|
||||||
|
|
||||||
|
Есть два варианта архитектуры:
|
||||||
|
|
||||||
|
### External etcd (классический Kubernetes)
|
||||||
|
|
||||||
|
```
|
||||||
|
Control Plane (3 VM) etcd кластер (3 VM)
|
||||||
|
┌────────────────┐ ┌──────────────┐
|
||||||
|
│ API Server │ │ etcd-1 │
|
||||||
|
│ Scheduler │ ──────────────>│ (только etcd)│
|
||||||
|
│ Controller │ └──────────────┘
|
||||||
|
└────────────────┘ ┌──────────────┐
|
||||||
|
┌────────────────┐ │ etcd-2 │
|
||||||
|
│ API Server │ ──────────────>│ (только etcd)│
|
||||||
|
│ Scheduler │ └──────────────┘
|
||||||
|
│ Controller │ ┌──────────────┐
|
||||||
|
└────────────────┘ │ etcd-3 │
|
||||||
|
┌────────────────┐ │ (только etcd)│
|
||||||
|
│ API Server │ ──────────────>└──────────────┘
|
||||||
|
│ Scheduler │
|
||||||
|
│ Controller │
|
||||||
|
└────────────────┘
|
||||||
|
|
||||||
|
Итого: 6 виртуальных машин
|
||||||
|
```
|
||||||
|
|
||||||
|
### Embedded etcd (K3s)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────┐
|
||||||
|
│ K3s Master 1 │
|
||||||
|
│ ┌───────────────────┐ │
|
||||||
|
│ │ API + Scheduler │ │
|
||||||
|
│ │ + Controller │ │
|
||||||
|
│ └───────────────────┘ │
|
||||||
|
│ ┌───────────────────┐ │
|
||||||
|
│ │ etcd (встроенный) │◄─┼──┐
|
||||||
|
│ └───────────────────┘ │ │
|
||||||
|
└─────────────────────────┘ │ Raft protocol
|
||||||
|
┌─────────────────────────┐ │ (синхронизация)
|
||||||
|
│ K3s Master 2 │ │
|
||||||
|
│ etcd ◄────────────────────┤
|
||||||
|
└─────────────────────────┘ │
|
||||||
|
┌─────────────────────────┐ │
|
||||||
|
│ K3s Master 3 │ │
|
||||||
|
│ etcd ◄────────────────────┘
|
||||||
|
└─────────────────────────┘
|
||||||
|
|
||||||
|
Итого: 3 виртуальные машины
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Сравнение подходов
|
||||||
|
|
||||||
|
| Критерий | External etcd | Embedded etcd |
|
||||||
|
|----------|---------------|---------------|
|
||||||
|
| Количество VM | 6 (3 master + 3 etcd) | 3 (всё вместе) |
|
||||||
|
| Сложность настройки | Высокая | Один флаг `--cluster-init` |
|
||||||
|
| Сложность обновления | Отдельно etcd и K8s | Одна команда |
|
||||||
|
| Производительность | Чуть лучше | Достаточно для homelab |
|
||||||
|
| Масштаб | >500 нод | До 100-200 нод |
|
||||||
|
|
||||||
|
**Для homelab embedded etcd - очевидный выбор.** Теряем 5-10% производительности etcd, экономим 3 VM и часы настройки.
|
||||||
|
|
||||||
|
*"А если мне понадобится масштаб?"* - официально embedded etcd поддерживает до 100 нод и 5000 подов. Для homelab это как ограничение скорости 300 км/ч на велосипеде.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Зачем отдельные worker ноды
|
||||||
|
|
||||||
|
**Worker ноды** - машины для запуска ваших приложений (подов). На них не запускаются компоненты control plane.
|
||||||
|
|
||||||
|
*"А можно запускать приложения прямо на master нодах?"*
|
||||||
|
|
||||||
|
Технически - да. K3s не ставит ограничений на master ноды (в отличие от обычного Kubernetes). Но это плохая идея:
|
||||||
|
|
||||||
|
- **Control plane должен быть стабильным.** Ваше приложение съело всю память → API server упал → кластер недоступен.
|
||||||
|
- **etcd чувствителен к диску.** База данных на той же ноде создаёт I/O нагрузку → etcd тормозит → весь кластер тормозит.
|
||||||
|
- **Изоляция отказов.** Проблема с приложением не должна убивать control plane.
|
||||||
|
|
||||||
|
**2 worker ноды - минимум для HA приложений:**
|
||||||
|
- Можно запускать 2 реплики (на разных нодах)
|
||||||
|
- При падении одного worker'а второй держит нагрузку
|
||||||
|
- Легко добавить третью, четвёртую ноду потом
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Архитектура нашего кластера
|
||||||
|
|
||||||
|
Вот что мы будем строить:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Ключевые моменты:**
|
||||||
|
|
||||||
|
1. **Все master ноды равны** - нет "главной", kubectl подключается к любой.
|
||||||
|
2. **etcd синхронизируется через Raft** - алгоритм консенсуса, гарантирует согласованность данных.
|
||||||
|
3. **Workers знают только про API** - они не подключаются к etcd напрямую.
|
||||||
|
4. **Flannel создаёт overlay-сеть** - все поды получают IP из 10.42.0.0/16, видят друг друга.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Планирование ресурсов
|
||||||
|
|
||||||
|
### Таблица VM
|
||||||
|
|
||||||
|
| Hostname | VM ID | IP | vCPU | RAM | Disk | Роль |
|
||||||
|
|----------|-------|------------|------|-----|------|------|
|
||||||
|
| k3s-master-1 | 201 | 192.168.11.201 | 2 | 8GB | 32GB | Control Plane + etcd |
|
||||||
|
| k3s-master-2 | 202 | 192.168.11.202 | 2 | 8GB | 32GB | Control Plane + etcd |
|
||||||
|
| k3s-master-3 | 203 | 192.168.11.203 | 2 | 8GB | 32GB | Control Plane + etcd |
|
||||||
|
| k3s-worker-1 | 210 | 192.168.11.210 | 4 | 16GB | 50GB | Workloads |
|
||||||
|
| k3s-worker-2 | 211 | 192.168.11.211 | 4 | 16GB | 50GB | Workloads |
|
||||||
|
| **Итого** | - | - | **14** | **56GB** | **196GB** | - |
|
||||||
|
|
||||||
|
### Почему именно такие ресурсы
|
||||||
|
|
||||||
|
**Master ноды (2 vCPU / 8GB RAM / 32GB Disk):**
|
||||||
|
|
||||||
|
Реальное потребление в idle:
|
||||||
|
- API server: ~200-300MB RAM
|
||||||
|
- etcd: ~100-200MB RAM (растёт со временем)
|
||||||
|
- Scheduler + Controller: ~150MB RAM
|
||||||
|
- Системные поды: ~100-200MB RAM
|
||||||
|
- **Итого:** ~600-900MB используется
|
||||||
|
|
||||||
|
*"Зачем тогда 8GB?"* - запас для burst-нагрузки. Когда вы деплоите 50 подов одновременно, API server временно съедает больше. etcd при большом кластере может вырасти до 1-2GB. Golang GC работает лучше с запасом памяти.
|
||||||
|
|
||||||
|
**Worker ноды (4 vCPU / 16GB RAM / 50GB Disk):**
|
||||||
|
|
||||||
|
Здесь будут ваши приложения. При 16GB можно запустить:
|
||||||
|
- 5-10 средних приложений (256MB-2GB каждое)
|
||||||
|
- Или 2-3 базы данных (PostgreSQL любит память)
|
||||||
|
- Или комбинацию
|
||||||
|
|
||||||
|
50GB диска - под образы контейнеров (10-20GB), логи (5-10GB), временные данные.
|
||||||
|
|
||||||
|
### Можно ли меньше?
|
||||||
|
|
||||||
|
**Минимальная конфигурация (для экспериментов):**
|
||||||
|
- Master: 1 vCPU / 4GB RAM / 20GB Disk
|
||||||
|
- Worker: 2 vCPU / 8GB RAM / 30GB Disk
|
||||||
|
- **Итого:** 9 vCPU / 36GB RAM
|
||||||
|
|
||||||
|
**Риски:**
|
||||||
|
- Медленная работа API server
|
||||||
|
- OOM killer при нагрузке
|
||||||
|
- Нет запаса для burst
|
||||||
|
|
||||||
|
Для production-like homelab рекомендую таблицу выше. Комфортный запас стоит дешевле, чем отладка странных падений.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Сетевая схема
|
||||||
|
|
||||||
|
### IP-адреса (адаптируй под свою сеть)
|
||||||
|
|
||||||
|
```
|
||||||
|
192.168.11.0/24 - Локальная сеть
|
||||||
|
192.168.11.1 - Gateway (роутер)
|
||||||
|
192.168.11.201-203 - Master ноды
|
||||||
|
192.168.11.210-211 - Worker ноды
|
||||||
|
192.168.11.220-230 - Резерв для MetalLB (статья 2)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Kubernetes внутренние сети (создаются автоматически)
|
||||||
|
|
||||||
|
```
|
||||||
|
10.42.0.0/16 - Pod network (Flannel VXLAN overlay)
|
||||||
|
10.43.0.0/16 - Service network (ClusterIP)
|
||||||
|
10.43.0.10 - CoreDNS
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Порты между нодами
|
||||||
|
|
||||||
|
| Порт | Протокол | Направление | Назначение |
|
||||||
|
|------|----------|-------------|------------|
|
||||||
|
| 6443 | TCP | Master ← Worker | Kubernetes API |
|
||||||
|
| 2379-2380 | TCP | Master ↔ Master | etcd (client + peer) |
|
||||||
|
| 10250 | TCP | Master ↔ All | Kubelet API |
|
||||||
|
| 8472 | UDP | All ↔ All | Flannel VXLAN |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Требования к железу и софту
|
||||||
|
|
||||||
|
### Железо (Proxmox хост)
|
||||||
|
|
||||||
|
**Минимум:**
|
||||||
|
- CPU: 14 vCPU свободных
|
||||||
|
- RAM: 56GB свободных
|
||||||
|
- Disk: 200GB на SSD
|
||||||
|
- Network: 1 Gbit
|
||||||
|
|
||||||
|
**Рекомендуется:**
|
||||||
|
- CPU: 18+ vCPU (запас для приложений)
|
||||||
|
- RAM: 64GB+ (базы данных прожорливые)
|
||||||
|
- Disk: NVMe для etcd
|
||||||
|
- Network: 2.5 Gbit (для NFS, если будете использовать)
|
||||||
|
|
||||||
|
### Софт
|
||||||
|
|
||||||
|
| Компонент | Версия |
|
||||||
|
|-----------|--------|
|
||||||
|
| Proxmox VE | 7.x или 8.x |
|
||||||
|
| K3s | v1.31+ (stable) |
|
||||||
|
| ОС на нодах | Debian 12 или Ubuntu 22.04+ |
|
||||||
|
| Kernel | 5.15+ (для cgroup v2) |
|
||||||
|
|
||||||
|
## Итог
|
||||||
|
|
||||||
|
**Что мы спроектировали:**
|
||||||
|
- 5 VM: 3 master + 2 worker
|
||||||
|
- K3s с embedded etcd (HA без лишних VM)
|
||||||
|
- Отказоустойчивость: выдерживает падение 1 master и любого worker
|
||||||
|
- Ресурсы: 14 vCPU / 56GB RAM / 196GB Disk
|
||||||
|
|
||||||
|
**Что НЕ входит в эту серию** (отдельные статьи):
|
||||||
|
- LoadBalancer (MetalLB)
|
||||||
|
- Ingress (Traefik)
|
||||||
|
- SSL (cert-manager)
|
||||||
|
- Мониторинг (Prometheus/Grafana)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что дальше
|
||||||
|
|
||||||
|
**👉 "Подготовить инфраструктуру для K3s в Proxmox"**
|
||||||
|
|
||||||
|
Там мы:
|
||||||
|
- Создадим template VM с Debian 12
|
||||||
|
- Склонируем 5 VM с правильными ресурсами
|
||||||
|
- Настроим статические IP
|
||||||
|
- Подготовим ОС (swap, cgroup v2, firewall)
|
||||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 672 KiB |
|
|
@ -0,0 +1,619 @@
|
||||||
|
---
|
||||||
|
title: "Подготовить инфраструктуру для K3s в Proxmox"
|
||||||
|
date: 2025-10-21
|
||||||
|
draft: false
|
||||||
|
description: "Создаём 5 VM в Proxmox с Debian 12, настраиваем сеть, отключаем swap и готовим систему для K3s. Пошаговая инструкция без сюрпризов."
|
||||||
|
summary: "Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов."
|
||||||
|
tags: ["kubernetes", "k3s", "homelab", "proxmox", "infrastructure", "debian", "devops"]
|
||||||
|
series: ["K3s HA кластер для homelab"]
|
||||||
|
series_order: 2
|
||||||
|
# seriesOpened: true
|
||||||
|
showTableOfContents: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. В этой статье подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.
|
||||||
|
|
||||||
|
Звучит просто? В теории - да. На практике: забытый swap, cgroup v1 вместо v2, закрытые порты firewall - и вы тратите час на отладку того, что должно было работать "из коробки".
|
||||||
|
|
||||||
|
**Результат:** 5 VM (3 master + 2 worker) с Debian 12, настроенной сетью, отключённым swap и правильными параметрами ядра. SSH доступ работает, ноды видят друг друга.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Для кого это
|
||||||
|
|
||||||
|
**Подходит:**
|
||||||
|
- Прочитал первую статью (или понимаешь архитектуру K3s HA)
|
||||||
|
- Есть Proxmox с 14+ vCPU и 56GB+ RAM свободных
|
||||||
|
- Умеешь работать в терминале Proxmox (или готов учиться)
|
||||||
|
|
||||||
|
**Не подходит:**
|
||||||
|
- Proxmox ещё не установлен - сначала разберись с ним
|
||||||
|
- Хочешь использовать LXC вместо VM - K3s в контейнерах работает, но с нюансами (не покрываем)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что понадобится
|
||||||
|
|
||||||
|
| Компонент | Значение |
|
||||||
|
|-----------|----------|
|
||||||
|
| Proxmox VE | 7.x или 8.x |
|
||||||
|
| Storage pool | local-lvm или другой (минимум 200GB свободно) |
|
||||||
|
| Сетевой bridge | vmbr0 (или ваш) |
|
||||||
|
| SSH-ключ | Публичный ключ для доступа к VM |
|
||||||
|
| ОС для VM | Debian 12 cloud image |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 1: Скачать cloud image Debian 12
|
||||||
|
|
||||||
|
Cloud image - готовый образ с поддержкой cloud-init. Не нужно проходить установщик вручную: задаёшь параметры (IP, пользователь, SSH-ключ) - VM стартует уже настроенной.
|
||||||
|
|
||||||
|
**На Proxmox хосте (SSH или Shell в Web UI):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Перейти в директорию для образов
|
||||||
|
cd /var/lib/vz/template/iso
|
||||||
|
|
||||||
|
# Скачать Debian 12 cloud image
|
||||||
|
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
ls -lh debian-12-generic-amd64.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
-rw-r--r-- 1 root root 521M ... debian-12-generic-amd64.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Терминал Proxmox с выводом wget и ls -lh, показывающим скачанный образ ~500MB -->
|
||||||
|
|
||||||
|
**Если скачивание медленное:** образ ~500MB, на слабом канале может занять время. Альтернатива - скачать на локальную машину и загрузить через Proxmox Web UI (Datacenter → Storage → Upload).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 2: Создать template VM
|
||||||
|
|
||||||
|
Template - шаблон VM, из которого будем клонировать все 5 нод. Настраиваем один раз, клонируем пять.
|
||||||
|
|
||||||
|
### 2.1. Задать переменные
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Настрой под свою конфигурацию
|
||||||
|
TEMPLATE_ID=9000 # ID для template (любой свободный)
|
||||||
|
STORAGE=local-lvm # Твой storage pool
|
||||||
|
BRIDGE=vmbr0 # Сетевой bridge
|
||||||
|
SSH_KEY_PATH=~/.ssh/id_rsa.pub # Путь к публичному SSH-ключу
|
||||||
|
```
|
||||||
|
|
||||||
|
**Как узнать имя storage:**
|
||||||
|
```bash
|
||||||
|
pvesm status
|
||||||
|
```
|
||||||
|
**Ожидаемый результат**
|
||||||
|
```
|
||||||
|
Name Type Status Total Used Available %
|
||||||
|
local dir active 229199360 9095552 220103808 3.97%
|
||||||
|
local-lvm pool active 220103964 96 220103868 0.00%
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Вывод pvesm status с выделенным именем storage pool (например, local-lvm) -->
|
||||||
|
|
||||||
|
### 2.2. Создать VM и импортировать диск
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Создать пустую VM
|
||||||
|
qm create $TEMPLATE_ID \
|
||||||
|
--name debian-12-template \
|
||||||
|
--memory 2048 \
|
||||||
|
--cores 2 \
|
||||||
|
--net0 virtio,bridge=$BRIDGE
|
||||||
|
|
||||||
|
# 2. Импортировать скачанный образ как диск
|
||||||
|
qm importdisk $TEMPLATE_ID \
|
||||||
|
/var/lib/vz/template/iso/debian-12-generic-amd64.qcow2 \
|
||||||
|
$STORAGE
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
importing disk '/var/lib/vz/template/iso/debian-12-generic-amd64.qcow2' to VM 9000 ...
|
||||||
|
Successfully imported disk as 'unused0:local-lvm:vm-9000-disk-0'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3. Настроить диск и загрузку
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 3. Подключить диск к VM
|
||||||
|
qm set $TEMPLATE_ID \
|
||||||
|
--scsihw virtio-scsi-pci \
|
||||||
|
--scsi0 $STORAGE:vm-$TEMPLATE_ID-disk-0
|
||||||
|
|
||||||
|
# 4. Настроить загрузку и cloud-init
|
||||||
|
qm set $TEMPLATE_ID \
|
||||||
|
--boot c \
|
||||||
|
--bootdisk scsi0 \
|
||||||
|
--ide2 $STORAGE:cloudinit \
|
||||||
|
--serial0 socket \
|
||||||
|
--vga serial0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.4. Настроить cloud-init
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 5. Пользователь, пароль, SSH-ключ
|
||||||
|
qm set $TEMPLATE_ID \
|
||||||
|
--ciuser k3s \
|
||||||
|
--cipassword "ВашНадёжныйПароль" \
|
||||||
|
--sshkeys $SSH_KEY_PATH \
|
||||||
|
--ipconfig0 ip=dhcp
|
||||||
|
|
||||||
|
# 6. Увеличить диск до 32GB (базовый размер для master)
|
||||||
|
qm resize $TEMPLATE_ID scsi0 32G
|
||||||
|
```
|
||||||
|
|
||||||
|
**Замени:**
|
||||||
|
- `ВашНадёжныйПароль` - пароль для пользователя k3s (резервный доступ, если SSH не работает)
|
||||||
|
- `$SSH_KEY_PATH` - путь к твоему публичному ключу
|
||||||
|
|
||||||
|
### 2.5. Превратить в template
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 7. Конвертировать VM в template
|
||||||
|
qm template $TEMPLATE_ID
|
||||||
|
```
|
||||||
|
|
||||||
|
После этого VM 9000 станет шаблоном - её нельзя запустить, только клонировать.
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Proxmox Web UI - список VM, где debian-12-template отображается с иконкой template (отличается от обычных VM) -->
|
||||||
|
|
||||||
|
### Checkpoint: Template создан
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить что template существует
|
||||||
|
qm list | grep template
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
9000 debian-12-template stopped 2048 32.00 0
|
||||||
|
```
|
||||||
|
|
||||||
|
**Если ошибка "disk import failed":**
|
||||||
|
- Проверь свободное место: `pvesm status`
|
||||||
|
- Проверь путь к образу: `ls -l /var/lib/vz/template/iso/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 3: Клонировать master ноды
|
||||||
|
|
||||||
|
Теперь создаём 3 master ноды из template. Каждая получит свой IP, имя и ресурсы.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TEMPLATE_ID=9000
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Master 1
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
qm clone $TEMPLATE_ID 201 --name k3s-master-1 --full
|
||||||
|
qm set 201 --cores 2 --memory 8192
|
||||||
|
qm set 201 --ipconfig0 ip=192.168.11.201/24,gw=192.168.11.1
|
||||||
|
qm set 201 --nameserver 8.8.8.8
|
||||||
|
qm resize 201 scsi0 32G
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Master 2
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
qm clone $TEMPLATE_ID 202 --name k3s-master-2 --full
|
||||||
|
qm set 202 --cores 2 --memory 8192
|
||||||
|
qm set 202 --ipconfig0 ip=192.168.11.202/24,gw=192.168.11.1
|
||||||
|
qm set 202 --nameserver 8.8.8.8
|
||||||
|
qm resize 202 scsi0 32G
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Master 3
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
qm clone $TEMPLATE_ID 203 --name k3s-master-3 --full
|
||||||
|
qm set 203 --cores 2 --memory 8192
|
||||||
|
qm set 203 --ipconfig0 ip=192.168.11.203/24,gw=192.168.11.1
|
||||||
|
qm set 203 --nameserver 8.8.8.8
|
||||||
|
qm resize 203 scsi0 32G
|
||||||
|
```
|
||||||
|
|
||||||
|
**Параметры:**
|
||||||
|
- `--full` - полное клонирование (не linked clone), VM независима от template
|
||||||
|
- `--cores 2 --memory 8192` - 2 vCPU, 8GB RAM (как планировали)
|
||||||
|
- `--ipconfig0` - статический IP через cloud-init
|
||||||
|
- `--nameserver` - DNS сервер (можешь указать свой)
|
||||||
|
|
||||||
|
**Адаптируй под свою сеть:**
|
||||||
|
- `192.168.11.0/24` → твоя подсеть
|
||||||
|
- `192.168.11.1` → твой gateway
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 4: Клонировать worker ноды
|
||||||
|
|
||||||
|
Workers получают больше ресурсов - здесь будут работать приложения.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Worker 1
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
qm clone $TEMPLATE_ID 210 --name k3s-worker-1 --full
|
||||||
|
qm set 210 --cores 4 --memory 16384
|
||||||
|
qm set 210 --ipconfig0 ip=192.168.11.210/24,gw=192.168.11.1
|
||||||
|
qm set 210 --nameserver 8.8.8.8
|
||||||
|
qm resize 210 scsi0 50G
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Worker 2
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
qm clone $TEMPLATE_ID 211 --name k3s-worker-2 --full
|
||||||
|
qm set 211 --cores 4 --memory 16384
|
||||||
|
qm set 211 --ipconfig0 ip=192.168.11.211/24,gw=192.168.11.1
|
||||||
|
qm set 211 --nameserver 8.8.8.8
|
||||||
|
qm resize 211 scsi0 50G
|
||||||
|
```
|
||||||
|
|
||||||
|
**Отличия от master:**
|
||||||
|
- 4 vCPU вместо 2
|
||||||
|
- 16GB RAM вместо 8GB
|
||||||
|
- 50GB диск вместо 32GB
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 5: Запустить все VM
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Запустить все 5 VM
|
||||||
|
for vmid in 201 202 203 210 211; do
|
||||||
|
qm start $vmid
|
||||||
|
echo "Запущена VM $vmid"
|
||||||
|
sleep 3
|
||||||
|
done
|
||||||
|
|
||||||
|
# Проверить статус
|
||||||
|
qm list | grep k3s
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
201 k3s-master-1 running 8192 32.00 12345
|
||||||
|
202 k3s-master-2 running 8192 32.00 12346
|
||||||
|
203 k3s-master-3 running 8192 32.00 12347
|
||||||
|
210 k3s-worker-1 running 16384 50.00 12348
|
||||||
|
211 k3s-worker-2 running 16384 50.00 12349
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Proxmox Web UI - Summary или список VM, все 5 нод в статусе "running" с правильными ресурсами -->
|
||||||
|
|
||||||
|
### Checkpoint: VM работают
|
||||||
|
|
||||||
|
Подожди 1-2 минуты (cloud-init применяет настройки при первом запуске), затем проверь SSH:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить доступность всех нод
|
||||||
|
for ip in 192.168.11.201 192.168.11.202 192.168.11.203 192.168.11.210 192.168.11.211; do
|
||||||
|
echo -n "Проверяю $ip... "
|
||||||
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no k3s@$ip "hostname" 2>/dev/null && echo "OK" || echo "FAIL"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
Проверяю 192.168.11.201... k3s-master-1
|
||||||
|
OK
|
||||||
|
Проверяю 192.168.11.202... k3s-master-2
|
||||||
|
OK
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
**Если SSH не работает:**
|
||||||
|
|
||||||
|
| Симптом | Причина | Решение |
|
||||||
|
|---------|---------|---------|
|
||||||
|
| Connection refused | VM не загрузилась или SSH не запущен | Открой консоль в Proxmox, проверь загрузку |
|
||||||
|
| Connection timeout | Неправильный IP или firewall | Проверь IP в консоли: `ip addr` |
|
||||||
|
| Permission denied | Неправильный SSH-ключ | Проверь `~/.ssh/authorized_keys` на VM |
|
||||||
|
| Host key verification failed | Первое подключение | Добавь `-o StrictHostKeyChecking=no` |
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Proxmox Console для одной из VM - экран входа или вывод `ip addr show` с правильным IP -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 6: Подготовить ОС на всех нодах
|
||||||
|
|
||||||
|
Теперь нужно настроить каждую ноду: обновить пакеты, отключить swap, настроить ядро. Команды одинаковые для всех 5 нод.
|
||||||
|
|
||||||
|
### 6.1. Обновить систему
|
||||||
|
|
||||||
|
**На каждой ноде (или через цикл):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Вариант 1: по одной
|
||||||
|
ssh k3s@192.168.11.201
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade -y
|
||||||
|
sudo apt install -y curl wget vim htop iptables
|
||||||
|
|
||||||
|
# Вариант 2: массово (с локальной машины)
|
||||||
|
for ip in 192.168.11.{201..203} 192.168.11.{210..211}; do
|
||||||
|
echo "=== Обновляю $ip ==="
|
||||||
|
ssh k3s@$ip "sudo apt update && sudo apt upgrade -y && sudo apt install -y curl wget vim htop iptables"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2. Отключить swap
|
||||||
|
|
||||||
|
Kubernetes не любит swap. При включённом swap поды ведут себя непредсказуемо - OOMKiller срабатывает не тогда, когда ожидаешь.
|
||||||
|
|
||||||
|
**На всех нодах:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Отключить swap сейчас
|
||||||
|
sudo swapoff -a
|
||||||
|
|
||||||
|
# Отключить навсегда (закомментировать в fstab)
|
||||||
|
sudo sed -i '/swap/s/^/#/' /etc/fstab
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
free -h | grep Swap
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
Swap: 0B 0B 0B
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3. Загрузить kernel-модули
|
||||||
|
|
||||||
|
K3s использует overlay filesystem и bridge netfilter. Без этих модулей - ошибки при старте.
|
||||||
|
|
||||||
|
**На всех нодах:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Загрузить модули
|
||||||
|
sudo modprobe overlay
|
||||||
|
sudo modprobe br_netfilter
|
||||||
|
|
||||||
|
# Настроить автозагрузку
|
||||||
|
cat <<EOF | sudo tee /etc/modules-load.d/k3s.conf
|
||||||
|
overlay
|
||||||
|
br_netfilter
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
lsmod | grep -E 'overlay|br_netfilter'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
overlay 151552 0
|
||||||
|
br_netfilter 32768 0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4. Настроить sysctl
|
||||||
|
|
||||||
|
Параметры для сетевого взаимодействия между подами.
|
||||||
|
|
||||||
|
**На всех нодах:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создать конфиг
|
||||||
|
cat <<EOF | sudo tee /etc/sysctl.d/k3s.conf
|
||||||
|
net.ipv4.ip_forward = 1
|
||||||
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
|
net.bridge.bridge-nf-call-ip6tables = 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Применить
|
||||||
|
sudo sysctl --system
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
sysctl net.ipv4.ip_forward net.bridge.bridge-nf-call-iptables
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
net.ipv4.ip_forward = 1
|
||||||
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.5. Проверить cgroup v2
|
||||||
|
|
||||||
|
Debian 12 по умолчанию использует cgroup v2 - просто проверим.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mount | grep cgroup
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат (cgroup v2):**
|
||||||
|
```
|
||||||
|
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Если видишь `tmpfs on /sys/fs/cgroup type tmpfs`** - это cgroup v1. Нужно включить v2:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Добавить параметр ядра
|
||||||
|
sudo sed -i 's|^GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"|GRUB_CMDLINE_LINUX_DEFAULT="\1 systemd.unified_cgroup_hierarchy=1"|' /etc/default/grub
|
||||||
|
|
||||||
|
# Обновить GRUB
|
||||||
|
sudo update-grub
|
||||||
|
|
||||||
|
# Перезагрузить
|
||||||
|
sudo reboot
|
||||||
|
|
||||||
|
# После reboot проверить
|
||||||
|
mount | grep cgroup2
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 7: Настроить firewall
|
||||||
|
|
||||||
|
UFW - простой интерфейс к iptables. Откроем только нужные порты.
|
||||||
|
|
||||||
|
### 7.1. На master нодах (201, 202, 203)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Установить UFW
|
||||||
|
sudo apt install -y ufw
|
||||||
|
|
||||||
|
# Базовые правила
|
||||||
|
sudo ufw default deny incoming
|
||||||
|
sudo ufw default allow outgoing
|
||||||
|
|
||||||
|
# SSH (чтобы не потерять доступ)
|
||||||
|
sudo ufw allow 22/tcp
|
||||||
|
|
||||||
|
# Kubernetes API
|
||||||
|
sudo ufw allow 6443/tcp
|
||||||
|
|
||||||
|
# etcd (между masters)
|
||||||
|
sudo ufw allow 2379:2380/tcp
|
||||||
|
|
||||||
|
# Kubelet
|
||||||
|
sudo ufw allow 10250/tcp
|
||||||
|
|
||||||
|
# Flannel VXLAN
|
||||||
|
sudo ufw allow 8472/udp
|
||||||
|
|
||||||
|
# Включить
|
||||||
|
sudo ufw --force enable
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
sudo ufw status
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2. На worker нодах (210, 211)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install -y ufw
|
||||||
|
|
||||||
|
sudo ufw default deny incoming
|
||||||
|
sudo ufw default allow outgoing
|
||||||
|
|
||||||
|
sudo ufw allow 22/tcp # SSH
|
||||||
|
sudo ufw allow 10250/tcp # Kubelet
|
||||||
|
sudo ufw allow 8472/udp # Flannel VXLAN
|
||||||
|
|
||||||
|
sudo ufw --force enable
|
||||||
|
sudo ufw status
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 8: Настроить /etc/hosts
|
||||||
|
|
||||||
|
Не обязательно, но удобно - ноды смогут обращаться друг к другу по имени.
|
||||||
|
|
||||||
|
**На всех нодах:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat <<EOF | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
|
# K3s Cluster
|
||||||
|
192.168.11.201 k3s-master-1
|
||||||
|
192.168.11.202 k3s-master-2
|
||||||
|
192.168.11.203 k3s-master-3
|
||||||
|
192.168.11.210 k3s-worker-1
|
||||||
|
192.168.11.211 k3s-worker-2
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить:
|
||||||
|
```bash
|
||||||
|
ping -c 1 k3s-master-2
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Финальная проверка
|
||||||
|
|
||||||
|
Перед переходом к установке K3s убедись, что всё готово. Запусти на любой ноде:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "=== Проверка готовности ноды ==="
|
||||||
|
|
||||||
|
echo -n "1. Swap отключён: "
|
||||||
|
[ $(free | grep Swap | awk '{print $2}') -eq 0 ] && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "2. Модуль overlay: "
|
||||||
|
lsmod | grep -q overlay && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "3. Модуль br_netfilter: "
|
||||||
|
lsmod | grep -q br_netfilter && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "4. IP forwarding: "
|
||||||
|
[ $(sysctl -n net.ipv4.ip_forward) -eq 1 ] && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "5. bridge-nf-call-iptables: "
|
||||||
|
[ $(sysctl -n net.bridge.bridge-nf-call-iptables) -eq 1 ] && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "6. cgroup v2: "
|
||||||
|
mount | grep -q "cgroup2" && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "7. UFW активен: "
|
||||||
|
sudo ufw status | grep -q "Status: active" && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
|
||||||
|
echo -n "8. Пинг k3s-master-1: "
|
||||||
|
ping -c 1 -W 1 k3s-master-1 >/dev/null 2>&1 && echo "✓" || echo "✗ ОШИБКА"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
=== Проверка готовности ноды ===
|
||||||
|
1. Swap отключён: ✓
|
||||||
|
2. Модуль overlay: ✓
|
||||||
|
3. Модуль br_netfilter: ✓
|
||||||
|
4. IP forwarding: ✓
|
||||||
|
5. bridge-nf-call-iptables: ✓
|
||||||
|
6. cgroup v2: ✓
|
||||||
|
7. UFW активен: ✓
|
||||||
|
8. Пинг k3s-master-1: ✓
|
||||||
|
```
|
||||||
|
|
||||||
|
Если где-то ✗ - вернись к соответствующему шагу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
| Симптом | Причина | Решение |
|
||||||
|
|---------|---------|---------|
|
||||||
|
| VM не получает IP | cloud-init не отработал | Проверь консоль, жди 2-3 минуты, перезагрузи VM |
|
||||||
|
| SSH connection refused | sshd не запущен | Открой консоль, проверь `systemctl status ssh` |
|
||||||
|
| Swap не отключается | Строка не закомментирована в fstab | `cat /etc/fstab`, проверь swap строку, `reboot` |
|
||||||
|
| cgroup v1 после reboot | GRUB не обновился | Проверь `/proc/cmdline`, повтори `update-grub` |
|
||||||
|
| UFW блокирует всё | Забыл разрешить SSH до включения | Через консоль Proxmox: `ufw allow 22/tcp` |
|
||||||
|
| Ноды не пингуются | UFW или неправильный IP | Проверь `ip addr`, проверь правила UFW |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Итог
|
||||||
|
|
||||||
|
**Что сделано:**
|
||||||
|
- ✅ Скачан Debian 12 cloud image
|
||||||
|
- ✅ Создан template VM с cloud-init
|
||||||
|
- ✅ Склонированы 5 VM (3 master + 2 worker)
|
||||||
|
- ✅ Настроены статические IP
|
||||||
|
- ✅ Подготовлена ОС (swap, modules, sysctl, cgroup v2)
|
||||||
|
- ✅ Настроен firewall с нужными портами
|
||||||
|
- ✅ SSH работает на все ноды
|
||||||
|
|
||||||
|
**Что дальше:**
|
||||||
|
|
||||||
|
👉 **Следующая статья: "Установить K3s HA кластер"**
|
||||||
|
|
||||||
|
Там мы:
|
||||||
|
- Сгенерируем token для кластера
|
||||||
|
- Установим K3s на первую master ноду
|
||||||
|
- Добавим ещё 2 master ноды (HA)
|
||||||
|
- Подключим worker ноды
|
||||||
|
- Настроим kubectl
|
||||||
|
- Проверим работу кластера
|
||||||
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 741 KiB |
|
|
@ -0,0 +1,650 @@
|
||||||
|
---
|
||||||
|
title: "Установить K3s HA кластер"
|
||||||
|
date: 2025-11-02
|
||||||
|
draft: false
|
||||||
|
description: "Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер. Устанавливаем K3s на 3 master и 2 worker ноды, настраиваем kubectl."
|
||||||
|
summary: "Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер."
|
||||||
|
tags: ["kubernetes", "k3s", "homelab", "installation", "ha", "etcd", "devops"]
|
||||||
|
series: ["K3s HA кластер для homelab"]
|
||||||
|
series_order: 3
|
||||||
|
# seriesOpened: true
|
||||||
|
showTableOfContents: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.
|
||||||
|
|
||||||
|
Звучит слишком просто? Потому что сложная часть уже позади - в предыдущих статьях. Теперь осталось не перепутать флаги и порядок установки.
|
||||||
|
|
||||||
|
**Результат:** 5 нод в статусе Ready, etcd кластер 3/3 healthy, kubectl работает с локальной машины.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Для кого это
|
||||||
|
|
||||||
|
**Подходит:**
|
||||||
|
- Прошёл статьи 1 и 2 (или имеешь готовые VM с настроенной ОС)
|
||||||
|
- Все 5 нод доступны по SSH
|
||||||
|
- Понимаешь разницу между master и worker
|
||||||
|
|
||||||
|
**Не подходит:**
|
||||||
|
- VM ещё не созданы → статья 2
|
||||||
|
- Не понимаешь зачем 3 master ноды → статья 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что понадобится
|
||||||
|
|
||||||
|
| Компонент | Значение |
|
||||||
|
|-----------|----------|
|
||||||
|
| K3s версия | v1.31.4+k3s1 (или актуальная stable) |
|
||||||
|
| Token | Сгенерируем на первом шаге |
|
||||||
|
| SSH доступ | Ко всем 5 нодам |
|
||||||
|
| Время | ~15-20 минут |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 1: Сгенерировать token
|
||||||
|
|
||||||
|
Token - общий секрет для всех нод кластера. Без правильного token нода не присоединится.
|
||||||
|
|
||||||
|
**На локальной машине:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Сгенерировать случайный token
|
||||||
|
openssl rand -base64 32
|
||||||
|
```
|
||||||
|
|
||||||
|
**Пример вывода:**
|
||||||
|
```
|
||||||
|
K10f8c9a7b6e5d4c3b2a1f0e9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4==
|
||||||
|
```
|
||||||
|
|
||||||
|
**Сохрани этот token** - он понадобится для каждой ноды. Положи в менеджер паролей или временный файл.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Для удобства - сохранить в переменную (на время сессии)
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
echo $K3S_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 2: Установить K3s на первую master ноду
|
||||||
|
|
||||||
|
Первая нода инициализирует etcd кластер. Она особенная - использует флаг `--cluster-init`.
|
||||||
|
|
||||||
|
**SSH на k3s-master-1:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh k3s@192.168.11.201
|
||||||
|
```
|
||||||
|
|
||||||
|
**Установка:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Задать переменные
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
export INSTALL_K3S_VERSION="v1.31.4+k3s1"
|
||||||
|
|
||||||
|
# Установить K3s
|
||||||
|
curl -sfL https://get.k3s.io | sh -s - server \
|
||||||
|
--cluster-init \
|
||||||
|
--tls-san=192.168.11.201 \
|
||||||
|
--disable=traefik \
|
||||||
|
--disable=servicelb \
|
||||||
|
--write-kubeconfig-mode=644
|
||||||
|
```
|
||||||
|
|
||||||
|
**Разбор флагов:**
|
||||||
|
|
||||||
|
| Флаг | Зачем |
|
||||||
|
|------|-------|
|
||||||
|
| `server` | Режим control plane (не agent) |
|
||||||
|
| `--cluster-init` | **Ключевой!** Инициализирует etcd. Только на первой ноде |
|
||||||
|
| `--tls-san=192.168.11.201` | Добавить IP в сертификат API server |
|
||||||
|
| `--disable=traefik` | Отключить встроенный Traefik (установим свой через Helm) |
|
||||||
|
| `--disable=servicelb` | Отключить встроенный LB (установим MetalLB) |
|
||||||
|
| `--write-kubeconfig-mode=644` | Разрешить чтение kubeconfig без sudo |
|
||||||
|
|
||||||
|
**Установка займёт 1-2 минуты.** K3s скачает бинарник (~50MB) и запустит все компоненты.
|
||||||
|
|
||||||
|
### Проверка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Статус сервиса
|
||||||
|
sudo systemctl status k3s
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
● k3s.service - Lightweight Kubernetes
|
||||||
|
Loaded: loaded
|
||||||
|
Active: active (running) since ...
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 2. Статус ноды
|
||||||
|
sudo k3s kubectl get nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
NAME STATUS ROLES AGE VERSION
|
||||||
|
k3s-master-1 Ready control-plane,etcd,master 45s v1.31.4+k3s1
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Терминал с выводом `sudo k3s kubectl get nodes` - одна нода в статусе Ready -->
|
||||||
|
|
||||||
|
### Checkpoint: Первая master работает
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Быстрая проверка
|
||||||
|
sudo systemctl is-active k3s && \
|
||||||
|
sudo k3s kubectl get nodes | grep -q "Ready" && \
|
||||||
|
echo "✓ Master-1 готов" || echo "✗ Проблема"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Если статус NotReady или сервис не запустился:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Смотреть логи
|
||||||
|
sudo journalctl -u k3s -f --no-pager | tail -50
|
||||||
|
```
|
||||||
|
|
||||||
|
| Ошибка в логах | Причина | Решение |
|
||||||
|
|----------------|---------|---------|
|
||||||
|
| `cgroup v1 is not supported` | Нужен cgroup v2 | Вернись к статье 2, шаг 6.5 |
|
||||||
|
| `port 6443 already in use` | Что-то занимает порт | `sudo ss -tlnp \| grep 6443` |
|
||||||
|
| `etcd failed to start` | Мало места на диске | `df -h`, увеличь диск |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 3: Добавить вторую master ноду
|
||||||
|
|
||||||
|
Теперь присоединяем вторую master. Она подключается к существующему кластеру - **без** `--cluster-init`.
|
||||||
|
|
||||||
|
**SSH на k3s-master-2:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh k3s@192.168.11.202
|
||||||
|
```
|
||||||
|
|
||||||
|
**Установка:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
export INSTALL_K3S_VERSION="v1.31.4+k3s1"
|
||||||
|
|
||||||
|
curl -sfL https://get.k3s.io | sh -s - server \
|
||||||
|
--server=https://192.168.11.201:6443 \
|
||||||
|
--tls-san=192.168.11.202 \
|
||||||
|
--disable=traefik \
|
||||||
|
--disable=servicelb \
|
||||||
|
--write-kubeconfig-mode=644
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ключевое отличие:**
|
||||||
|
- ❌ Нет `--cluster-init` - кластер уже инициализирован
|
||||||
|
- ✅ Есть `--server=https://192.168.11.201:6443` - адрес существующего кластера
|
||||||
|
|
||||||
|
### Проверка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# На master-2
|
||||||
|
sudo k3s kubectl get nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
NAME STATUS ROLES AGE VERSION
|
||||||
|
k3s-master-1 Ready control-plane,etcd,master 3m v1.31.4+k3s1
|
||||||
|
k3s-master-2 Ready control-plane,etcd,master 30s v1.31.4+k3s1
|
||||||
|
```
|
||||||
|
|
||||||
|
Две ноды - но кворума ещё нет. etcd требует большинство, а 2 из 3 - это ещё не "большинство от трёх".
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 4: Добавить третью master ноду
|
||||||
|
|
||||||
|
**SSH на k3s-master-3:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh k3s@192.168.11.203
|
||||||
|
```
|
||||||
|
|
||||||
|
**Установка (аналогично master-2):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
export INSTALL_K3S_VERSION="v1.31.4+k3s1"
|
||||||
|
|
||||||
|
curl -sfL https://get.k3s.io | sh -s - server \
|
||||||
|
--server=https://192.168.11.201:6443 \
|
||||||
|
--tls-san=192.168.11.203 \
|
||||||
|
--disable=traefik \
|
||||||
|
--disable=servicelb \
|
||||||
|
--write-kubeconfig-mode=644
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checkpoint: Control Plane HA готов
|
||||||
|
|
||||||
|
**На любой master ноде:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Все 3 master ноды Ready
|
||||||
|
sudo k3s kubectl get nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
NAME STATUS ROLES AGE VERSION
|
||||||
|
k3s-master-1 Ready control-plane,etcd,master 5m v1.31.4+k3s1
|
||||||
|
k3s-master-2 Ready control-plane,etcd,master 3m v1.31.4+k3s1
|
||||||
|
k3s-master-3 Ready control-plane,etcd,master 1m v1.31.4+k3s1
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 2. etcd кластер здоров
|
||||||
|
sudo k3s kubectl exec -n kube-system \
|
||||||
|
$(sudo k3s kubectl get pods -n kube-system -l component=etcd -o name | head -1) \
|
||||||
|
-- etcdctl endpoint health --cluster
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
https://192.168.11.201:2379 is healthy: successfully committed proposal: took = 2.1ms
|
||||||
|
https://192.168.11.202:2379 is healthy: successfully committed proposal: took = 1.8ms
|
||||||
|
https://192.168.11.203:2379 is healthy: successfully committed proposal: took = 2.3ms
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Терминал с выводом etcdctl endpoint health - все 3 endpoint healthy -->
|
||||||
|
|
||||||
|
**Теперь у вас настоящий HA.** Можете остановить любую master ноду - кластер продолжит работать.
|
||||||
|
|
||||||
|
### Тест отказоустойчивости (опционально)
|
||||||
|
|
||||||
|
Хотите убедиться, что HA работает? Проверьте:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# С локальной машины - остановить master-2
|
||||||
|
ssh k3s@192.168.11.202 "sudo systemctl stop k3s"
|
||||||
|
|
||||||
|
# Подождать 30-40 секунд, затем на master-1:
|
||||||
|
ssh k3s@192.168.11.201 "sudo k3s kubectl get nodes"
|
||||||
|
# master-2 станет NotReady, но кластер работает
|
||||||
|
|
||||||
|
# Проверить etcd - 2/3 кворум есть
|
||||||
|
ssh k3s@192.168.11.201 "sudo k3s kubectl exec -n kube-system \
|
||||||
|
\$(sudo k3s kubectl get pods -n kube-system -l component=etcd -o name | head -1) \
|
||||||
|
-- etcdctl endpoint health --cluster"
|
||||||
|
# 2 из 3 healthy - кворум есть
|
||||||
|
|
||||||
|
# Вернуть master-2
|
||||||
|
ssh k3s@192.168.11.202 "sudo systemctl start k3s"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 5: Добавить worker ноды
|
||||||
|
|
||||||
|
Worker ноды устанавливаются как **agent** - они не участвуют в etcd и не запускают control plane.
|
||||||
|
|
||||||
|
### 5.1. Установить K3s agent на worker-1
|
||||||
|
|
||||||
|
**SSH на k3s-worker-1:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh k3s@192.168.11.210
|
||||||
|
```
|
||||||
|
|
||||||
|
**Установка:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
export INSTALL_K3S_VERSION="v1.31.4+k3s1"
|
||||||
|
|
||||||
|
curl -sfL https://get.k3s.io | sh -s - agent \
|
||||||
|
--server=https://192.168.11.201:6443
|
||||||
|
```
|
||||||
|
|
||||||
|
**Отличия от master:**
|
||||||
|
- `agent` вместо `server` - режим worker
|
||||||
|
- Нет флагов `--disable` и `--tls-san` - они не нужны для worker
|
||||||
|
- Только `--server` - куда подключаться
|
||||||
|
|
||||||
|
### 5.2. Установить K3s agent на worker-2
|
||||||
|
|
||||||
|
**SSH на k3s-worker-2:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh k3s@192.168.11.211
|
||||||
|
```
|
||||||
|
|
||||||
|
**Установка:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export K3S_TOKEN="твой_сгенерированный_token"
|
||||||
|
export INSTALL_K3S_VERSION="v1.31.4+k3s1"
|
||||||
|
|
||||||
|
curl -sfL https://get.k3s.io | sh -s - agent \
|
||||||
|
--server=https://192.168.11.201:6443
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checkpoint: Все ноды в кластере
|
||||||
|
|
||||||
|
**На любой master ноде:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo k3s kubectl get nodes -o wide
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
NAME STATUS ROLES AGE VERSION INTERNAL-IP
|
||||||
|
k3s-master-1 Ready control-plane,etcd,master 10m v1.31.4+k3s1 192.168.11.201
|
||||||
|
k3s-master-2 Ready control-plane,etcd,master 8m v1.31.4+k3s1 192.168.11.202
|
||||||
|
k3s-master-3 Ready control-plane,etcd,master 6m v1.31.4+k3s1 192.168.11.203
|
||||||
|
k3s-worker-1 Ready <none> 2m v1.31.4+k3s1 192.168.11.210
|
||||||
|
k3s-worker-2 Ready <none> 1m v1.31.4+k3s1 192.168.11.211
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Терминал с выводом kubectl get nodes - все 5 нод Ready -->
|
||||||
|
|
||||||
|
**Обрати внимание:**
|
||||||
|
- Master: роли `control-plane,etcd,master`
|
||||||
|
- Worker: роли `<none>` - только выполнение workloads
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 6: Настроить kubectl на локальной машине
|
||||||
|
|
||||||
|
Сейчас kubectl работает только на master нодах через `sudo k3s kubectl`. Настроим доступ с вашей рабочей машины.
|
||||||
|
|
||||||
|
### 6.1. Скопировать kubeconfig
|
||||||
|
|
||||||
|
**На локальной машине (не на ноде):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Создать директорию
|
||||||
|
mkdir -p ~/.kube
|
||||||
|
|
||||||
|
# 2. Скопировать конфиг с master-1
|
||||||
|
scp k3s@192.168.11.201:/etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||||
|
|
||||||
|
# 3. Заменить localhost на реальный IP
|
||||||
|
sed -i 's/127.0.0.1/192.168.11.201/g' ~/.kube/config
|
||||||
|
|
||||||
|
# Для macOS:
|
||||||
|
# sed -i '' 's/127.0.0.1/192.168.11.201/g' ~/.kube/config
|
||||||
|
|
||||||
|
# 4. Права доступа
|
||||||
|
chmod 600 ~/.kube/config
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2. Установить kubectl (если нет)
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||||
|
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
|
||||||
|
rm kubectl
|
||||||
|
```
|
||||||
|
|
||||||
|
**macOS:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew install kubectl
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3. Проверить подключение
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Версия
|
||||||
|
kubectl version
|
||||||
|
|
||||||
|
# Ноды
|
||||||
|
kubectl get nodes
|
||||||
|
|
||||||
|
# Все поды
|
||||||
|
kubectl get pods -A
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат `kubectl get pods -A`:**
|
||||||
|
```
|
||||||
|
NAMESPACE NAME READY STATUS RESTARTS AGE
|
||||||
|
kube-system coredns-xxx 1/1 Running 0 10m
|
||||||
|
kube-system local-path-provisioner-xxx 1/1 Running 0 10m
|
||||||
|
kube-system metrics-server-xxx 1/1 Running 0 10m
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- СКРИНШОТ: Терминал локальной машины с выводом kubectl get nodes и kubectl get pods -A -->
|
||||||
|
|
||||||
|
**Если kubectl не подключается:**
|
||||||
|
|
||||||
|
| Симптом | Причина | Решение |
|
||||||
|
|---------|---------|---------|
|
||||||
|
| `connection refused` | k3s не запущен | `ssh k3s@192.168.11.201 "sudo systemctl status k3s"` |
|
||||||
|
| `connection timeout` | Firewall блокирует | Проверь UFW на master: `sudo ufw status \| grep 6443` |
|
||||||
|
| `certificate signed by unknown authority` | Неправильный kubeconfig | Скопируй заново с master ноды |
|
||||||
|
|
||||||
|
### 6.4. Настроить автодополнение (опционально)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Bash
|
||||||
|
echo 'source <(kubectl completion bash)' >> ~/.bashrc
|
||||||
|
echo 'alias k=kubectl' >> ~/.bashrc
|
||||||
|
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
# Zsh
|
||||||
|
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
|
||||||
|
source ~/.zshrc
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь работает `k get nodes` и Tab-автодополнение.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Финальная проверка
|
||||||
|
|
||||||
|
Полный чеклист работоспособности кластера:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "=== Проверка K3s HA кластера ==="
|
||||||
|
|
||||||
|
echo -n "1. Все ноды Ready: "
|
||||||
|
[ $(kubectl get nodes --no-headers | grep -c "Ready") -eq 5 ] && echo "✓ (5/5)" || echo "✗"
|
||||||
|
|
||||||
|
echo -n "2. Master ноды: "
|
||||||
|
kubectl get nodes --no-headers | grep -c "control-plane" | xargs -I {} echo "✓ ({}/3)"
|
||||||
|
|
||||||
|
echo -n "3. Worker ноды: "
|
||||||
|
kubectl get nodes --no-headers | grep -c "<none>" | xargs -I {} echo "✓ ({}/2)"
|
||||||
|
|
||||||
|
echo -n "4. etcd healthy: "
|
||||||
|
kubectl exec -n kube-system \
|
||||||
|
$(kubectl get pods -n kube-system -l component=etcd -o name | head -1) \
|
||||||
|
-- etcdctl endpoint health --cluster 2>/dev/null | grep -c "is healthy" | xargs -I {} echo "✓ ({}/3)"
|
||||||
|
|
||||||
|
echo -n "5. CoreDNS Running: "
|
||||||
|
kubectl get pods -n kube-system -l k8s-app=kube-dns --no-headers | grep -q "Running" && echo "✓" || echo "✗"
|
||||||
|
|
||||||
|
echo -n "6. Metrics Server Running: "
|
||||||
|
kubectl get pods -n kube-system -l k8s-app=metrics-server --no-headers | grep -q "Running" && echo "✓" || echo "✗"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Информация о кластере ==="
|
||||||
|
kubectl cluster-info
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
=== Проверка K3s HA кластера ===
|
||||||
|
1. Все ноды Ready: ✓ (5/5)
|
||||||
|
2. Master ноды: ✓ (3/3)
|
||||||
|
3. Worker ноды: ✓ (2/2)
|
||||||
|
4. etcd healthy: ✓ (3/3)
|
||||||
|
5. CoreDNS Running: ✓
|
||||||
|
6. Metrics Server Running: ✓
|
||||||
|
|
||||||
|
=== Информация о кластере ===
|
||||||
|
Kubernetes control plane is running at https://192.168.11.201:6443
|
||||||
|
CoreDNS is running at https://192.168.11.201:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
|
||||||
|
Metrics-server is running at https://192.168.11.201:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Тестовый деплой
|
||||||
|
|
||||||
|
Убедимся, что кластер может запускать приложения:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Создать тестовый под
|
||||||
|
kubectl run nginx-test --image=nginx:alpine --port=80
|
||||||
|
|
||||||
|
# 2. Подождать запуска
|
||||||
|
kubectl wait --for=condition=Ready pod/nginx-test --timeout=60s
|
||||||
|
|
||||||
|
# 3. Проверить на какой ноде запустился
|
||||||
|
kubectl get pod nginx-test -o wide
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:**
|
||||||
|
```
|
||||||
|
NAME READY STATUS RESTARTS AGE IP NODE
|
||||||
|
nginx-test 1/1 Running 0 30s 10.42.1.5 k3s-worker-1
|
||||||
|
```
|
||||||
|
|
||||||
|
Под запустился на worker ноде - как и должно быть.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 4. Проверить доступность изнутри кластера
|
||||||
|
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -qO- nginx-test
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ожидаемый результат:** HTML-страница nginx.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 5. Удалить тестовые ресурсы
|
||||||
|
kubectl delete pod nginx-test
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Нода не присоединяется к кластеру
|
||||||
|
|
||||||
|
**Симптом:** После установки нода не появляется в `kubectl get nodes`.
|
||||||
|
|
||||||
|
| Причина | Диагностика | Решение |
|
||||||
|
|---------|-------------|---------|
|
||||||
|
| Неправильный token | Логи: `sudo journalctl -u k3s-agent -f` | Проверь token, переустанови |
|
||||||
|
| Firewall блокирует | `curl -k https://192.168.11.201:6443` | Открой порт 6443 на masters |
|
||||||
|
| DNS не резолвит | `ping k3s-master-1` | Проверь /etc/hosts или DNS |
|
||||||
|
|
||||||
|
### etcd не формирует кворум
|
||||||
|
|
||||||
|
**Симптом:** `etcdctl endpoint health` показывает unhealthy.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить членов etcd
|
||||||
|
sudo k3s kubectl exec -n kube-system \
|
||||||
|
$(sudo k3s kubectl get pods -n kube-system -l component=etcd -o name | head -1) \
|
||||||
|
-- etcdctl member list --write-out=table
|
||||||
|
```
|
||||||
|
|
||||||
|
| Причина | Диагностика | Решение |
|
||||||
|
|---------|-------------|---------|
|
||||||
|
| Порты 2379-2380 закрыты | `sudo ufw status` | `sudo ufw allow 2379:2380/tcp` |
|
||||||
|
| Нода недоступна по сети | `ping 192.168.11.20X` | Проверь сеть, UFW |
|
||||||
|
| etcd ещё стартует | `uptime` на ноде | Подожди 2-3 минуты |
|
||||||
|
|
||||||
|
### Поды не запускаются на workers
|
||||||
|
|
||||||
|
**Симптом:** Все поды на master нодах, workers пустые.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить taints
|
||||||
|
kubectl describe node k3s-worker-1 | grep Taints
|
||||||
|
```
|
||||||
|
|
||||||
|
Если есть taints - убрать:
|
||||||
|
```bash
|
||||||
|
kubectl taint nodes k3s-worker-1 node.kubernetes.io/not-ready:NoSchedule-
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Откат: удаление K3s
|
||||||
|
|
||||||
|
Если нужно начать заново:
|
||||||
|
|
||||||
|
**На master ноде:**
|
||||||
|
```bash
|
||||||
|
sudo /usr/local/bin/k3s-uninstall.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**На worker ноде:**
|
||||||
|
```bash
|
||||||
|
sudo /usr/local/bin/k3s-agent-uninstall.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Что удаляется:**
|
||||||
|
- Бинарники K3s
|
||||||
|
- Systemd сервисы
|
||||||
|
- Данные из `/var/lib/rancher/k3s/`
|
||||||
|
- etcd данные (на masters)
|
||||||
|
- Контейнеры и образы
|
||||||
|
|
||||||
|
**⚠️ Внимание:** etcd снапшоты тоже удаляются. Если нужен бэкап:
|
||||||
|
```bash
|
||||||
|
# Перед удалением - сохранить снапшоты
|
||||||
|
sudo cp -r /var/lib/rancher/k3s/server/db/snapshots/ ~/k3s-backup/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Итог
|
||||||
|
|
||||||
|
**Что сделано:**
|
||||||
|
- ✅ Сгенерирован token для кластера
|
||||||
|
- ✅ Установлен K3s на 3 master ноды с embedded etcd
|
||||||
|
- ✅ Добавлены 2 worker ноды
|
||||||
|
- ✅ Настроен kubectl на локальной машине
|
||||||
|
- ✅ Проверена работоспособность кластера
|
||||||
|
|
||||||
|
**Что имеем:**
|
||||||
|
- HA Control Plane - выдерживает падение 1 master ноды
|
||||||
|
- 2 worker ноды для приложений
|
||||||
|
- kubectl доступ с локальной машины
|
||||||
|
- Встроенные компоненты: CoreDNS, metrics-server, local-path storage
|
||||||
|
|
||||||
|
**Что ещё не настроено** (следующие статьи):
|
||||||
|
- LoadBalancer (MetalLB) - для доступа к сервисам извне
|
||||||
|
- Ingress Controller (Traefik) - для HTTP/HTTPS routing
|
||||||
|
- SSL сертификаты (cert-manager) - для автоматического HTTPS
|
||||||
|
- Мониторинг (Prometheus/Grafana) - для наблюдения за кластером
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что дальше
|
||||||
|
|
||||||
|
Кластер готов, но пока он изолирован от внешнего мира. Чтобы запускать реальные приложения с доступом извне, нужны:
|
||||||
|
|
||||||
|
1. **MetalLB** - выдаёт IP-адреса для LoadBalancer сервисов
|
||||||
|
2. **Traefik** - маршрутизирует HTTP/HTTPS трафик
|
||||||
|
3. **cert-manager** - автоматически получает SSL сертификаты
|
||||||
|
|
||||||
|
Это темы для следующей серии статей.
|
||||||
|
|
||||||
|
**А пока можно:**
|
||||||
|
- Поэкспериментировать с kubectl
|
||||||
|
- Задеплоить тестовые приложения
|
||||||
|
- Изучить как работает scheduling между нодами
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -0,0 +1,80 @@
|
||||||
|
global:
|
||||||
|
language: "RU"
|
||||||
|
|
||||||
|
article:
|
||||||
|
anchor_label: "Якорь"
|
||||||
|
date: "{{ .Date }}"
|
||||||
|
date_updated: "Обновлено: {{ .Date }}"
|
||||||
|
draft: "Черновик"
|
||||||
|
edit_title: "Редактировать содержимое"
|
||||||
|
reading_time:
|
||||||
|
one: "{{ .Count }} минута"
|
||||||
|
other: "{{ .Count }} минут"
|
||||||
|
reading_time_title: "Время чтения"
|
||||||
|
table_of_contents: "Оглавление"
|
||||||
|
word_count:
|
||||||
|
one: "{{ .Count }} слово"
|
||||||
|
other: "{{ .Count }} слов"
|
||||||
|
views:
|
||||||
|
one: "{{ .Count }} просмотр"
|
||||||
|
other: "{{ .Count }} просмотров"
|
||||||
|
likes:
|
||||||
|
one: "{{ .Count }} нравится"
|
||||||
|
other: "{{ .Count }} нравится"
|
||||||
|
part_of_series: "Эта статья — часть серии."
|
||||||
|
part: "Часть"
|
||||||
|
this_article: "Читаешь сейчас"
|
||||||
|
related_articles: "Статьи по теме"
|
||||||
|
reply_by_email: "Ответить по электронной почте"
|
||||||
|
|
||||||
|
a11y:
|
||||||
|
title: "Настройки доступности"
|
||||||
|
disable_blur: "Отключить размытие"
|
||||||
|
disable_images: "Отключить изображения"
|
||||||
|
show_link_underline: "Показать подчеркивание ссылок"
|
||||||
|
font_size: "Размер шрифта"
|
||||||
|
|
||||||
|
author:
|
||||||
|
byline_title: "Автор"
|
||||||
|
|
||||||
|
code:
|
||||||
|
copy: "Копировать"
|
||||||
|
copied: "Скопировано"
|
||||||
|
|
||||||
|
error:
|
||||||
|
404_title: "Страница не найдена: в замешательстве:"
|
||||||
|
404_error: "Ошибка 404"
|
||||||
|
404_description: "Похоже, запрошенная вами страница не существует."
|
||||||
|
|
||||||
|
footer:
|
||||||
|
dark_appearance: "Переключить на темный вид"
|
||||||
|
light_appearance: "Переключить на светлый вид"
|
||||||
|
powered_by: "Работает на {{ .Hugo }} & {{ .Theme }}"
|
||||||
|
|
||||||
|
list:
|
||||||
|
externalurl_title: "Ссылка на внешний сайт"
|
||||||
|
no_articles: "Здесь пока нет статей."
|
||||||
|
|
||||||
|
nav:
|
||||||
|
scroll_to_top_title: "Пролистать наверх"
|
||||||
|
skip_to_main: "Перейти к основному содержимому"
|
||||||
|
|
||||||
|
search:
|
||||||
|
open_button_title: "Поиск (/)"
|
||||||
|
close_button_title: "Закрыть (Esc)"
|
||||||
|
input_placeholder: "Поиск"
|
||||||
|
|
||||||
|
sharing:
|
||||||
|
email: "Отправить по электронной почте"
|
||||||
|
facebook: "Поделиться через Facebook"
|
||||||
|
line: "Поделиться через LINE"
|
||||||
|
linkedin: "Поделиться через LinkedIn"
|
||||||
|
pinterest: "Добавить в Pinterest"
|
||||||
|
reddit: "Отправить в Reddit"
|
||||||
|
twitter: "Твитнуть в Twitter"
|
||||||
|
|
||||||
|
shortcode:
|
||||||
|
recent_articles: "Недавние"
|
||||||
|
|
||||||
|
recent:
|
||||||
|
show_more: "Показать еще"
|
||||||
303
public/404.html
|
|
@ -3,8 +3,8 @@
|
||||||
lang="ru"
|
lang="ru"
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="scroll-smooth"
|
class="scroll-smooth"
|
||||||
data-default-appearance="light"
|
data-default-appearance="dark"
|
||||||
data-auto-appearance="true"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta http-equiv="content-language" content="ru">
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
@ -29,6 +29,38 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -92,8 +124,8 @@
|
||||||
|
|
||||||
<script
|
<script
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js"
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
integrity="sha512-b0EXSzoFtoCCD+CMrb+l+3p8o0e3aglVzcaLnYrKHOJPBUfhOM6jO8x5BNVRqQr8scx/LZ/oVXB11QFBkEbAjA=="></script>
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -118,12 +150,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
id="script-bundle"
|
id="script-bundle"
|
||||||
src="/js/main.bundle.min.858f7f82734cfae08d59fcf8d0eb186f01706a84e2f7d20d39edfd7bc8bed6166e02d5c65ecce1de82b1ac52d1e01d77bd1a82d19186fdae5fe6e12d867fcf68.js"
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
integrity="sha512-hY9/gnNM+uCNWfz40OsYbwFwaoTi99INOe39e8i+1hZuAtXGXszh3oKxrFLR4B13vRqC0ZGG/a5f5uEthn/PaA=="
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
data-copy="Копировать"
|
data-copy="Копировать"
|
||||||
data-copied="Скопировано"></script>
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
@ -197,7 +231,7 @@
|
||||||
"url" : "http://192.168.11.190:1313/404.html",
|
"url" : "http://192.168.11.190:1313/404.html",
|
||||||
"author" : {
|
"author" : {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": ""
|
"name": "Олег Казанин"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -238,6 +272,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -256,12 +298,31 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="/" class="text-base font-medium truncate min-w-0 shrink">
|
|
||||||
Олег Казанин
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="flex items-center ms-auto">
|
<div class="flex items-center ms-auto">
|
||||||
<div class="hidden md:flex">
|
<div class="hidden md:flex">
|
||||||
|
|
@ -270,98 +331,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="О блоге"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Статьи"
|
|
||||||
title="Posts">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Проекты"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Резюме"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Музыка"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -429,122 +398,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input type="checkbox" id="mobile-menu-toggle" autocomplete="off" class="hidden peer">
|
|
||||||
<label for="mobile-menu-toggle" class="flex items-center justify-center cursor-pointer bf-icon-color-hover">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div
|
|
||||||
role="dialog"
|
|
||||||
aria-modal="true"
|
|
||||||
style="scrollbar-gutter: stable;"
|
|
||||||
class="fixed inset-0 z-50 invisible overflow-y-auto px-6 py-20 opacity-0 transition-[opacity,visibility] duration-300 peer-checked:visible peer-checked:opacity-100 bg-neutral-50/97 dark:bg-neutral-900/99
|
|
||||||
bf-scrollbar">
|
|
||||||
<label
|
|
||||||
for="mobile-menu-toggle"
|
|
||||||
class="fixed end-8 top-5 flex items-center justify-center z-50 h-12 w-12 cursor-pointer select-none rounded-full bf-icon-color-hover border bf-border-color bf-border-color-hover bg-neutral-50 dark:bg-neutral-900">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<nav class="mx-auto max-w-md space-y-6">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="О блоге"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
aria-label="Статьи"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="Posts" class="text-2xl font-bold tracking-tight">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Проекты"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Резюме"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Музыка"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -561,6 +414,16 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
<div class="relative flex flex-col grow">
|
<div class="relative flex flex-col grow">
|
||||||
<main id="main-content" class="grow">
|
<main id="main-content" class="grow">
|
||||||
|
|
@ -650,7 +513,7 @@
|
||||||
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
©
|
©
|
||||||
2026
|
2026
|
||||||
|
Олег Казанин
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
lang="ru"
|
lang="ru"
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="scroll-smooth"
|
class="scroll-smooth"
|
||||||
data-default-appearance="light"
|
data-default-appearance="dark"
|
||||||
data-auto-appearance="true"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta http-equiv="content-language" content="ru">
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
@ -32,6 +32,38 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -95,8 +127,8 @@
|
||||||
|
|
||||||
<script
|
<script
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js"
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
integrity="sha512-b0EXSzoFtoCCD+CMrb+l+3p8o0e3aglVzcaLnYrKHOJPBUfhOM6jO8x5BNVRqQr8scx/LZ/oVXB11QFBkEbAjA=="></script>
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,12 +153,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
id="script-bundle"
|
id="script-bundle"
|
||||||
src="/js/main.bundle.min.858f7f82734cfae08d59fcf8d0eb186f01706a84e2f7d20d39edfd7bc8bed6166e02d5c65ecce1de82b1ac52d1e01d77bd1a82d19186fdae5fe6e12d867fcf68.js"
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
integrity="sha512-hY9/gnNM+uCNWfz40OsYbwFwaoTi99INOe39e8i+1hZuAtXGXszh3oKxrFLR4B13vRqC0ZGG/a5f5uEthn/PaA=="
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
data-copy="Копировать"
|
data-copy="Копировать"
|
||||||
data-copied="Скопировано"></script>
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
@ -200,7 +234,7 @@
|
||||||
"url" : "http://192.168.11.190:1313/authors/",
|
"url" : "http://192.168.11.190:1313/authors/",
|
||||||
"author" : {
|
"author" : {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": ""
|
"name": "Олег Казанин"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -241,6 +275,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -259,12 +301,31 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="/" class="text-base font-medium truncate min-w-0 shrink">
|
|
||||||
Олег Казанин
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="flex items-center ms-auto">
|
<div class="flex items-center ms-auto">
|
||||||
<div class="hidden md:flex">
|
<div class="hidden md:flex">
|
||||||
|
|
@ -273,98 +334,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="О блоге"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Статьи"
|
|
||||||
title="Posts">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Проекты"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Резюме"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Музыка"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -432,122 +401,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input type="checkbox" id="mobile-menu-toggle" autocomplete="off" class="hidden peer">
|
|
||||||
<label for="mobile-menu-toggle" class="flex items-center justify-center cursor-pointer bf-icon-color-hover">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div
|
|
||||||
role="dialog"
|
|
||||||
aria-modal="true"
|
|
||||||
style="scrollbar-gutter: stable;"
|
|
||||||
class="fixed inset-0 z-50 invisible overflow-y-auto px-6 py-20 opacity-0 transition-[opacity,visibility] duration-300 peer-checked:visible peer-checked:opacity-100 bg-neutral-50/97 dark:bg-neutral-900/99
|
|
||||||
bf-scrollbar">
|
|
||||||
<label
|
|
||||||
for="mobile-menu-toggle"
|
|
||||||
class="fixed end-8 top-5 flex items-center justify-center z-50 h-12 w-12 cursor-pointer select-none rounded-full bf-icon-color-hover border bf-border-color bf-border-color-hover bg-neutral-50 dark:bg-neutral-900">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<nav class="mx-auto max-w-md space-y-6">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="О блоге"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
aria-label="Статьи"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="Posts" class="text-2xl font-bold tracking-tight">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Проекты"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Резюме"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Музыка"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -564,6 +417,16 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
<div class="relative flex flex-col grow">
|
<div class="relative flex flex-col grow">
|
||||||
<main id="main-content" class="grow">
|
<main id="main-content" class="grow">
|
||||||
|
|
@ -690,7 +553,7 @@
|
||||||
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
©
|
©
|
||||||
2026
|
2026
|
||||||
|
Олег Казанин
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@
|
||||||
<description>Recent content in Authors on Олег Казанин</description>
|
<description>Recent content in Authors on Олег Казанин</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>ru</language>
|
<language>ru</language>
|
||||||
<copyright>© 2026 </copyright>
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
<atom:link href="http://192.168.11.190:1313/authors/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="http://192.168.11.190:1313/authors/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
lang="ru"
|
lang="ru"
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="scroll-smooth"
|
class="scroll-smooth"
|
||||||
data-default-appearance="light"
|
data-default-appearance="dark"
|
||||||
data-auto-appearance="true"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta http-equiv="content-language" content="ru">
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
@ -32,6 +32,38 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -95,8 +127,8 @@
|
||||||
|
|
||||||
<script
|
<script
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js"
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
integrity="sha512-b0EXSzoFtoCCD+CMrb+l+3p8o0e3aglVzcaLnYrKHOJPBUfhOM6jO8x5BNVRqQr8scx/LZ/oVXB11QFBkEbAjA=="></script>
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,12 +153,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
id="script-bundle"
|
id="script-bundle"
|
||||||
src="/js/main.bundle.min.858f7f82734cfae08d59fcf8d0eb186f01706a84e2f7d20d39edfd7bc8bed6166e02d5c65ecce1de82b1ac52d1e01d77bd1a82d19186fdae5fe6e12d867fcf68.js"
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
integrity="sha512-hY9/gnNM+uCNWfz40OsYbwFwaoTi99INOe39e8i+1hZuAtXGXszh3oKxrFLR4B13vRqC0ZGG/a5f5uEthn/PaA=="
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
data-copy="Копировать"
|
data-copy="Копировать"
|
||||||
data-copied="Скопировано"></script>
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
@ -200,7 +234,7 @@
|
||||||
"url" : "http://192.168.11.190:1313/categories/",
|
"url" : "http://192.168.11.190:1313/categories/",
|
||||||
"author" : {
|
"author" : {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": ""
|
"name": "Олег Казанин"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -241,6 +275,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -259,12 +301,31 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="/" class="text-base font-medium truncate min-w-0 shrink">
|
|
||||||
Олег Казанин
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="flex items-center ms-auto">
|
<div class="flex items-center ms-auto">
|
||||||
<div class="hidden md:flex">
|
<div class="hidden md:flex">
|
||||||
|
|
@ -273,98 +334,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="О блоге"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Статьи"
|
|
||||||
title="Posts">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Проекты"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Резюме"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Музыка"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -432,122 +401,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input type="checkbox" id="mobile-menu-toggle" autocomplete="off" class="hidden peer">
|
|
||||||
<label for="mobile-menu-toggle" class="flex items-center justify-center cursor-pointer bf-icon-color-hover">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div
|
|
||||||
role="dialog"
|
|
||||||
aria-modal="true"
|
|
||||||
style="scrollbar-gutter: stable;"
|
|
||||||
class="fixed inset-0 z-50 invisible overflow-y-auto px-6 py-20 opacity-0 transition-[opacity,visibility] duration-300 peer-checked:visible peer-checked:opacity-100 bg-neutral-50/97 dark:bg-neutral-900/99
|
|
||||||
bf-scrollbar">
|
|
||||||
<label
|
|
||||||
for="mobile-menu-toggle"
|
|
||||||
class="fixed end-8 top-5 flex items-center justify-center z-50 h-12 w-12 cursor-pointer select-none rounded-full bf-icon-color-hover border bf-border-color bf-border-color-hover bg-neutral-50 dark:bg-neutral-900">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<nav class="mx-auto max-w-md space-y-6">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="О блоге"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
aria-label="Статьи"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="Posts" class="text-2xl font-bold tracking-tight">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Проекты"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Резюме"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Музыка"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -564,6 +417,16 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
<div class="relative flex flex-col grow">
|
<div class="relative flex flex-col grow">
|
||||||
<main id="main-content" class="grow">
|
<main id="main-content" class="grow">
|
||||||
|
|
@ -690,7 +553,7 @@
|
||||||
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
©
|
©
|
||||||
2026
|
2026
|
||||||
|
Олег Казанин
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@
|
||||||
<description>Recent content in Categories on Олег Казанин</description>
|
<description>Recent content in Categories on Олег Казанин</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>ru</language>
|
<language>ru</language>
|
||||||
<copyright>© 2026 </copyright>
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
<atom:link href="http://192.168.11.190:1313/categories/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="http://192.168.11.190:1313/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 655 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 52 KiB |
1323
public/index.html
|
|
@ -6,17 +6,39 @@
|
||||||
<description>Recent content on Олег Казанин</description>
|
<description>Recent content on Олег Казанин</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>ru</language>
|
<language>ru</language>
|
||||||
<copyright>© 2026 </copyright>
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
<lastBuildDate>Fri, 13 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/index.xml" rel="self" type="application/rss+xml" />
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sun, 02 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>Hello World</title>
|
<title>Установить K3s HA кластер</title>
|
||||||
<link>http://192.168.11.190:1313/posts/hello-world/</link>
|
<link>http://192.168.11.190:1313/posts/k3s-installation/</link>
|
||||||
<pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
|
<pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-installation/</guid>
|
||||||
|
<description>Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-installation/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
<guid>http://192.168.11.190:1313/posts/hello-world/</guid>
|
<item>
|
||||||
<description></description>
|
<title>Подготовить инфраструктуру для K3s в Proxmox</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-infrastructure/</link>
|
||||||
|
<pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-infrastructure/</guid>
|
||||||
|
<description>Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-infrastructure/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>K3s HA для homelab: архитектура без боли</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-architecture/</link>
|
||||||
|
<pubDate>Tue, 14 Oct 2025 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-architecture/</guid>
|
||||||
|
<description>Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-architecture/featured.png" />
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
const sitePreference=document.documentElement.getAttribute("data-default-appearance"),userPreference=localStorage.getItem("appearance");(sitePreference==="dark"&&userPreference===null||userPreference==="dark")&&document.documentElement.classList.add("dark"),document.documentElement.getAttribute("data-auto-appearance")==="true"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&userPreference!=="light"&&document.documentElement.classList.add("dark"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}));var updateMeta,updateLogo,getTargetAppearance,updateMermaidTheme=()=>{if(typeof mermaid!="undefined"){const e=document.documentElement.classList.contains("dark"),t=document.querySelectorAll("pre.mermaid");t.forEach(e=>{e.getAttribute("data-processed")?(e.removeAttribute("data-processed"),e.innerHTML=e.getAttribute("data-graph")):e.setAttribute("data-graph",e.textContent)}),e?(initMermaidDark(),mermaid.run()):(initMermaidLight(),mermaid.run())}};window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("appearance-switcher"),n=document.getElementById("appearance-switcher-mobile");updateMeta(),this.updateLogo?.(getTargetAppearance()),updateMermaidTheme(),t&&(t.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),updateMermaidTheme(),this.updateLogo?.(e)}),t.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")})),n&&(n.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),updateMermaidTheme(),this.updateLogo?.(e)}),n.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")}))}),updateMeta=()=>{var e=document.querySelector("body"),t=getComputedStyle(e);document.querySelector('meta[name="theme-color"]').setAttribute("content",t.backgroundColor)},updateLogo=e=>{var t=document.querySelectorAll("img.logo"),n=document.querySelectorAll("span.logo");targetLogoPath=e=="dark"?"/img/logo.png":"/img/logo_inverted.png";for(const e of t)e.setAttribute("src",targetLogoPath)},getTargetAppearance=()=>document.documentElement.classList.contains("dark")?"dark":"light",window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("top-scroller"),n=document.getElementById("site-footer");t&&n&&t.getBoundingClientRect().top>n.getBoundingClientRect().top&&(t.hidden=!0)})
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
function setBackgroundBlur(e,t=300,n=!1,s=!1){if(!e){console.error("data-blur-id is null");return}const o=document.getElementById(e);if(!o)return;n?(o.setAttribute("aria-hidden","true"),s?o.style.display="":(o.style.display="none",o.style.opacity="0")):(o.style.display="",o.removeAttribute("aria-hidden"));const i=()=>{if(!n||s){const e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;o.style.opacity=e/t}};o.setAttribute("role","presentation"),o.setAttribute("tabindex","-1"),window.addEventListener("scroll",i),i()}document.querySelectorAll("script[data-blur-id]").forEach(e=>{const t=e.getAttribute("data-blur-id"),n=Number(e.getAttribute("data-scroll-divisor")||300),s=t==="menu-blur",o=JSON.parse(localStorage.getItem("a11ySettings")||"{}"),i=o.disableBlur;setBackgroundBlur(t,n,i,s)})
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<title>http://192.168.11.190:1313/</title>
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=http://192.168.11.190:1313/">
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="canonical" href="http://192.168.11.190:1313/posts/hello-world/">
|
<link rel="canonical" href="http://localhost:1313/posts/hello-world/">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<meta property="og:url" content="http://192.168.11.190:1313/posts/hello-world/">
|
<meta property="og:url" content="http://localhost:1313/posts/hello-world/">
|
||||||
<meta property="og:site_name" content="Олег Казанин">
|
<meta property="og:site_name" content="Олег Казанин">
|
||||||
<meta property="og:title" content="Hello World">
|
<meta property="og:title" content="Hello World">
|
||||||
<meta property="og:description" content="Первый пост на новом сайте">
|
<meta property="og:description" content="Первый пост на новом сайте">
|
||||||
|
|
@ -204,7 +204,7 @@
|
||||||
"headline": "Hello World",
|
"headline": "Hello World",
|
||||||
"description": "Первый пост на новом сайте",
|
"description": "Первый пост на новом сайте",
|
||||||
"inLanguage": "ru",
|
"inLanguage": "ru",
|
||||||
"url" : "http://192.168.11.190:1313/posts/hello-world/",
|
"url" : "http://localhost:1313/posts/hello-world/",
|
||||||
"author" : {
|
"author" : {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": ""
|
"name": ""
|
||||||
|
|
@ -736,6 +736,34 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="pt-8">
|
||||||
|
<hr class="border-dotted border-neutral-300 dark:border-neutral-600">
|
||||||
|
<div class="flex justify-between pt-3">
|
||||||
|
<span class="flex flex-col">
|
||||||
|
|
||||||
|
</span>
|
||||||
|
<span class="flex flex-col items-end">
|
||||||
|
|
||||||
|
<a
|
||||||
|
class="flex text-right text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
href="/posts/k3s-architecture/">
|
||||||
|
<span class="leading-6">
|
||||||
|
K3s HA для homelab: архитектура без боли <span class="inline-block rtl:rotate-180">→</span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<span class="me-6 mt-1 text-xs text-neutral-500 dark:text-neutral-400">
|
||||||
|
<time datetime="2026-02-14T00:00:00+00:00">14 февраля 2026</time>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
|
|
@ -846,7 +874,7 @@
|
||||||
<div
|
<div
|
||||||
id="search-wrapper"
|
id="search-wrapper"
|
||||||
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh] z-500"
|
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh] z-500"
|
||||||
data-url="http://192.168.11.190:1313/">
|
data-url="http://localhost:1313/">
|
||||||
<div
|
<div
|
||||||
id="search-modal"
|
id="search-modal"
|
||||||
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800">
|
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800">
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,39 @@
|
||||||
<description>Recent content in Posts on Олег Казанин</description>
|
<description>Recent content in Posts on Олег Казанин</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>ru</language>
|
<language>ru</language>
|
||||||
<copyright>© 2026 </copyright>
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
<lastBuildDate>Fri, 13 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/posts/index.xml" rel="self" type="application/rss+xml" />
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/posts/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>Hello World</title>
|
<title>K3s HA для homelab: архитектура без боли</title>
|
||||||
<link>http://192.168.11.190:1313/posts/hello-world/</link>
|
<link>http://192.168.11.190:1313/posts/k3s-architecture/</link>
|
||||||
<pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-architecture/</guid>
|
||||||
|
<description>Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-architecture/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
<guid>http://192.168.11.190:1313/posts/hello-world/</guid>
|
<item>
|
||||||
<description></description>
|
<title>Подготовить инфраструктуру для K3s в Proxmox</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-infrastructure/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-infrastructure/</guid>
|
||||||
|
<description>Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-infrastructure/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Установить K3s HA кластер</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-installation/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-installation/</guid>
|
||||||
|
<description>Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-installation/featured.png" />
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 663 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 909 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 568 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 663 KiB |
|
After Width: | Height: | Size: 672 KiB |
|
After Width: | Height: | Size: 222 KiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 290 KiB |
|
After Width: | Height: | Size: 509 KiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 561 KiB |
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 672 KiB |
|
After Width: | Height: | Size: 741 KiB |
|
After Width: | Height: | Size: 253 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 741 KiB |
|
|
@ -3,8 +3,8 @@
|
||||||
lang="ru"
|
lang="ru"
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="scroll-smooth"
|
class="scroll-smooth"
|
||||||
data-default-appearance="light"
|
data-default-appearance="dark"
|
||||||
data-auto-appearance="true"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta http-equiv="content-language" content="ru">
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
@ -32,6 +32,38 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -95,8 +127,8 @@
|
||||||
|
|
||||||
<script
|
<script
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js"
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
integrity="sha512-b0EXSzoFtoCCD+CMrb+l+3p8o0e3aglVzcaLnYrKHOJPBUfhOM6jO8x5BNVRqQr8scx/LZ/oVXB11QFBkEbAjA=="></script>
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,12 +153,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
id="script-bundle"
|
id="script-bundle"
|
||||||
src="/js/main.bundle.min.858f7f82734cfae08d59fcf8d0eb186f01706a84e2f7d20d39edfd7bc8bed6166e02d5c65ecce1de82b1ac52d1e01d77bd1a82d19186fdae5fe6e12d867fcf68.js"
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
integrity="sha512-hY9/gnNM+uCNWfz40OsYbwFwaoTi99INOe39e8i+1hZuAtXGXszh3oKxrFLR4B13vRqC0ZGG/a5f5uEthn/PaA=="
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
data-copy="Копировать"
|
data-copy="Копировать"
|
||||||
data-copied="Скопировано"></script>
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
@ -200,13 +234,13 @@
|
||||||
"url" : "http://192.168.11.190:1313/series/",
|
"url" : "http://192.168.11.190:1313/series/",
|
||||||
"author" : {
|
"author" : {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": ""
|
"name": "Олег Казанин"
|
||||||
},
|
},
|
||||||
|
"copyrightYear": "2026",
|
||||||
|
"dateCreated": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
"datePublished": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
"dateModified": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -241,6 +275,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -259,12 +301,31 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a href="/" class="text-base font-medium truncate min-w-0 shrink">
|
|
||||||
Олег Казанин
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="flex items-center ms-auto">
|
<div class="flex items-center ms-auto">
|
||||||
<div class="hidden md:flex">
|
<div class="hidden md:flex">
|
||||||
|
|
@ -273,98 +334,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="О блоге"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Статьи"
|
|
||||||
title="Posts">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Проекты"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Резюме"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
|
|
||||||
class="flex items-center bf-icon-color-hover"
|
|
||||||
aria-label="Музыка"
|
|
||||||
title="">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="text-base font-medium break-normal">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -432,122 +401,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input type="checkbox" id="mobile-menu-toggle" autocomplete="off" class="hidden peer">
|
|
||||||
<label for="mobile-menu-toggle" class="flex items-center justify-center cursor-pointer bf-icon-color-hover">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div
|
|
||||||
role="dialog"
|
|
||||||
aria-modal="true"
|
|
||||||
style="scrollbar-gutter: stable;"
|
|
||||||
class="fixed inset-0 z-50 invisible overflow-y-auto px-6 py-20 opacity-0 transition-[opacity,visibility] duration-300 peer-checked:visible peer-checked:opacity-100 bg-neutral-50/97 dark:bg-neutral-900/99
|
|
||||||
bf-scrollbar">
|
|
||||||
<label
|
|
||||||
for="mobile-menu-toggle"
|
|
||||||
class="fixed end-8 top-5 flex items-center justify-center z-50 h-12 w-12 cursor-pointer select-none rounded-full bf-icon-color-hover border bf-border-color bf-border-color-hover bg-neutral-50 dark:bg-neutral-900">
|
|
||||||
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<nav class="mx-auto max-w-md space-y-6">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="О блоге"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
О блоге
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href="/posts/"
|
|
||||||
aria-label="Статьи"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="Posts" class="text-2xl font-bold tracking-tight">
|
|
||||||
Статьи
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Проекты"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Проекты
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Резюме"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Резюме
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="px-2">
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
aria-label="Музыка"
|
|
||||||
|
|
||||||
class="flex items-center gap-4 group bf-icon-color-hover text-neutral-700 dark:text-neutral-200">
|
|
||||||
|
|
||||||
<span title="" class="text-2xl font-bold tracking-tight">
|
|
||||||
Музыка
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -564,6 +417,16 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
<div class="relative flex flex-col grow">
|
<div class="relative flex flex-col grow">
|
||||||
<main id="main-content" class="grow">
|
<main id="main-content" class="grow">
|
||||||
|
|
@ -610,6 +473,23 @@
|
||||||
|
|
||||||
<section class="flex flex-wrap max-w-prose -mx-2 overflow-hidden">
|
<section class="flex flex-wrap max-w-prose -mx-2 overflow-hidden">
|
||||||
|
|
||||||
|
<article class="w-full px-2 my-3 overflow-hidden sm:w-1/2 md:w-1/3 lg:w-1/4 xl:w-1/4">
|
||||||
|
<h2 class="flex items-center">
|
||||||
|
<a
|
||||||
|
class="text-xl font-medium decoration-primary-500 hover:underline hover:underline-offset-2"
|
||||||
|
href="/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/"
|
||||||
|
>K3s HA Кластер Для Homelab</a
|
||||||
|
>
|
||||||
|
|
||||||
|
<span class="px-2 text-base text-primary-500">·</span>
|
||||||
|
<span class="text-base text-neutral-400">
|
||||||
|
3
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -690,7 +570,7 @@
|
||||||
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
©
|
©
|
||||||
2026
|
2026
|
||||||
|
Олег Казанин
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,20 @@
|
||||||
<description>Recent content in Series on Олег Казанин</description>
|
<description>Recent content in Series on Олег Казанин</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>ru</language>
|
<language>ru</language>
|
||||||
<copyright>© 2026 </copyright>
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
<atom:link href="http://192.168.11.190:1313/series/index.xml" rel="self" type="application/rss+xml" />
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/series/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>K3s HA Кластер Для Homelab</title>
|
||||||
|
<link>http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/</guid>
|
||||||
|
<description></description>
|
||||||
|
|
||||||
|
</item>
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>K3s HA Кластер Для Homelab on Олег Казанин</title>
|
||||||
|
<link>http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/</link>
|
||||||
|
<description>Recent content in K3s HA Кластер Для Homelab on Олег Казанин</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>ru</language>
|
||||||
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>K3s HA для homelab: архитектура без боли</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-architecture/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-architecture/</guid>
|
||||||
|
<description>Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-architecture/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Подготовить инфраструктуру для K3s в Proxmox</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-infrastructure/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-infrastructure/</guid>
|
||||||
|
<description>Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-infrastructure/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Установить K3s HA кластер</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-installation/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-installation/</guid>
|
||||||
|
<description>Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-installation/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<title>http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/</title>
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=http://192.168.11.190:1313/series/k3s-ha-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-homelab/">
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
|
@ -3,20 +3,32 @@
|
||||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>http://192.168.11.190:1313/posts/hello-world/</loc>
|
<loc>http://192.168.11.190:1313/posts/k3s-architecture/</loc>
|
||||||
<lastmod>2026-02-13T00:00:00+00:00</lastmod>
|
<lastmod>2026-02-14T00:00:00+00:00</lastmod>
|
||||||
<changefreq>daily</changefreq>
|
<changefreq>daily</changefreq>
|
||||||
<priority>0.5</priority>
|
<priority>0.5</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>http://192.168.11.190:1313/posts/</loc>
|
<loc>http://192.168.11.190:1313/posts/</loc>
|
||||||
<lastmod>2026-02-13T00:00:00+00:00</lastmod>
|
<lastmod>2026-02-14T00:00:00+00:00</lastmod>
|
||||||
<changefreq>daily</changefreq>
|
<changefreq>daily</changefreq>
|
||||||
<priority>0.5</priority>
|
<priority>0.5</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>http://192.168.11.190:1313/</loc>
|
<loc>http://192.168.11.190:1313/</loc>
|
||||||
<lastmod>2026-02-13T00:00:00+00:00</lastmod>
|
<lastmod>2026-02-14T00:00:00+00:00</lastmod>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://192.168.11.190:1313/posts/k3s-infrastructure/</loc>
|
||||||
|
<lastmod>2026-02-14T00:00:00+00:00</lastmod>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://192.168.11.190:1313/posts/k3s-installation/</loc>
|
||||||
|
<lastmod>2026-02-14T00:00:00+00:00</lastmod>
|
||||||
<changefreq>daily</changefreq>
|
<changefreq>daily</changefreq>
|
||||||
<priority>0.5</priority>
|
<priority>0.5</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,920 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html
|
||||||
|
lang="ru"
|
||||||
|
dir="ltr"
|
||||||
|
class="scroll-smooth"
|
||||||
|
data-default-appearance="dark"
|
||||||
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<meta name="theme-color">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<title>Architecture · Олег Казанин</title>
|
||||||
|
<meta name="title" content="Architecture · Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/architecture/">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" href="/tags/architecture/index.xml" title="Олег Казанин" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta property="og:url" content="http://192.168.11.190:1313/tags/architecture/">
|
||||||
|
<meta property="og:site_name" content="Олег Казанин">
|
||||||
|
<meta property="og:title" content="Architecture">
|
||||||
|
<meta property="og:locale" content="ru">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:title" content="Architecture">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link
|
||||||
|
type="text/css"
|
||||||
|
rel="stylesheet"
|
||||||
|
href="/css/main.bundle.min.b5bc3f4587655153415b7825fd1716f97df9c99f87c23f81146f4dd4f9f49f04ad031e3b5f0ee5c0416707a1455ca2cfa8fc1f3a19ece1486b0126dcd310a63e.css"
|
||||||
|
integrity="sha512-tbw/RYdlUVNBW3gl/RcW+X35yZ+Hwj+BFG9N1Pn0nwStAx47Xw7lwEFnB6FFXKLPqPwfOhns4UhrASbc0xCmPg==">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js" integrity="sha512-pScQm2jAgqcPNpdxbdcqnVqotUXPgAzsu8c5nyym9uDOPkMfIGK0i7+kfJ6kKCJxQGC+8wm+Bz9JucDjDTGNew=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
defer
|
||||||
|
type="text/javascript"
|
||||||
|
id="script-bundle"
|
||||||
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
|
data-copy="Копировать"
|
||||||
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
[{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Article",
|
||||||
|
"articleSection": "Tags",
|
||||||
|
"name": "Architecture",
|
||||||
|
"headline": "Architecture",
|
||||||
|
|
||||||
|
"inLanguage": "ru",
|
||||||
|
"url" : "http://192.168.11.190:1313/tags/architecture/",
|
||||||
|
"author" : {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Олег Казанин"
|
||||||
|
},
|
||||||
|
"copyrightYear": "2026",
|
||||||
|
"dateCreated": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
"datePublished": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
"dateModified": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"mainEntityOfPage": "true",
|
||||||
|
"wordCount": "0"
|
||||||
|
}]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<body class="flex flex-col h-screen m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32 text-lg bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral bf-scrollbar">
|
||||||
|
<div id="the-top" class="absolute flex self-center">
|
||||||
|
<a
|
||||||
|
class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600"
|
||||||
|
href="#main-content">
|
||||||
|
<span class="font-bold text-primary-600 pe-2 dark:text-primary-400">↓</span>
|
||||||
|
Перейти к основному содержимому
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center ms-auto">
|
||||||
|
<div class="hidden md:flex">
|
||||||
|
<nav class="flex items-center gap-x-5 h-12">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button"
|
||||||
|
aria-label="Search"
|
||||||
|
class="text-base bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center">
|
||||||
|
<button
|
||||||
|
id="appearance-switcher"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
type="button"
|
||||||
|
class="text-base bf-icon-color-hover">
|
||||||
|
<div class="flex items-center justify-center dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="items-center justify-center hidden dark:flex">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="flex md:hidden">
|
||||||
|
<div class="flex items-center h-14 gap-4">
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button-mobile"
|
||||||
|
aria-label="Search"
|
||||||
|
class="flex items-center justify-center bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="appearance-switcher-mobile"
|
||||||
|
type="button"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
class="flex items-center justify-center text-neutral-900 hover:text-primary-600 dark:text-neutral-200 dark:hover:text-primary-400">
|
||||||
|
<div class="dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="hidden dark:block">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="relative flex flex-col grow">
|
||||||
|
<main id="main-content" class="grow">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<header class="mt-5">
|
||||||
|
|
||||||
|
<h1 class="mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral">Architecture</h1>
|
||||||
|
<div class="mt-1 mb-2 text-base text-neutral-500 dark:text-neutral-400 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="flex flex-col max-w-full mt-0 mb-5 prose dark:prose-invert lg:flex-row">
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section class="space-y-10 w-full">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<article class="article-link--simple flex flex-col md:flex-row relative">
|
||||||
|
|
||||||
|
<div class="flex-none relative overflow-hidden thumbnail-shadow md:mr-7 thumbnail">
|
||||||
|
<img
|
||||||
|
src="/posts/k3s-architecture/featured_hu_98be5cabbf317c61.png"
|
||||||
|
role="presentation"
|
||||||
|
loading="lazy"
|
||||||
|
decoding="async"
|
||||||
|
class="not-prose absolute inset-0 w-full h-full object-cover">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class=" mt-3 md:mt-0">
|
||||||
|
<header class="items-center text-start text-xl font-semibold">
|
||||||
|
<a
|
||||||
|
|
||||||
|
href="/posts/k3s-architecture/"
|
||||||
|
|
||||||
|
class="not-prose before:absolute before:inset-0 decoration-primary-500 dark:text-neutral text-xl font-bold text-neutral-800 hover:underline hover:underline-offset-2">
|
||||||
|
<h2>
|
||||||
|
K3s HA для homelab: архитектура без боли
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
<div class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
<time datetime="2026-02-14T00:00:00+00:00">14 февраля 2026</time><span class="px-2 text-primary-500">·</span><span title="Время чтения">8 минут</span><span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="views_posts/k3s-architecture/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="views"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
|
||||||
|
<path fill="currentColor" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
<span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="likes_posts/k3s-architecture/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="likes"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||||
|
<path fill="currentColor" d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/kubernetes/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Kubernetes
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/k3s/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
K3s
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/homelab/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Homelab
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/proxmox/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Proxmox
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/architecture/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Architecture
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/ha/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Ha
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/devops/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Devops
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="px-6 pt-4 pb-2"></div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div
|
||||||
|
id="scroll-to-top"
|
||||||
|
class="fixed bottom-6 end-6 z-50 transform translate-y-4 opacity-0 duration-200">
|
||||||
|
<a
|
||||||
|
href="#the-top"
|
||||||
|
class="pointer-events-auto flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
aria-label="Пролистать наверх"
|
||||||
|
title="Пролистать наверх">
|
||||||
|
↑
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</main><footer id="site-footer" class="py-10 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400 ">
|
||||||
|
<ul class="flex list-none flex-col sm:flex-row">
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/tags/"
|
||||||
|
title="Tags">
|
||||||
|
|
||||||
|
Теги
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/categories/"
|
||||||
|
title="Categories">
|
||||||
|
|
||||||
|
Категории
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/authors/"
|
||||||
|
title="Authors">
|
||||||
|
|
||||||
|
Авторы
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
©
|
||||||
|
2026
|
||||||
|
Олег Казанин
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
Работает на <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
mediumZoom(document.querySelectorAll("img:not(.nozoom)"), {
|
||||||
|
margin: 24,
|
||||||
|
background: "rgba(0,0,0,0.5)",
|
||||||
|
scrollOffset: 0,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
<div
|
||||||
|
id="search-wrapper"
|
||||||
|
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh] z-500"
|
||||||
|
data-url="http://192.168.11.190:1313/">
|
||||||
|
<div
|
||||||
|
id="search-modal"
|
||||||
|
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800">
|
||||||
|
<header class="relative z-10 flex items-center justify-between flex-none px-2">
|
||||||
|
<form class="flex items-center flex-auto min-w-0">
|
||||||
|
<div class="flex items-center justify-center w-8 h-8 text-neutral-400">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
id="search-query"
|
||||||
|
class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent"
|
||||||
|
placeholder="Поиск"
|
||||||
|
tabindex="0">
|
||||||
|
</form>
|
||||||
|
<button
|
||||||
|
id="close-search-button"
|
||||||
|
class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
title="Закрыть (Esc)">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</header>
|
||||||
|
<section class="flex-auto px-2 overflow-auto">
|
||||||
|
<ul id="search-results">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Architecture on Олег Казанин</title>
|
||||||
|
<link>http://192.168.11.190:1313/tags/architecture/</link>
|
||||||
|
<description>Recent content in Architecture on Олег Казанин</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>ru</language>
|
||||||
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>K3s HA для homelab: архитектура без боли</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-architecture/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-architecture/</guid>
|
||||||
|
<description>Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-architecture/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<title>http://192.168.11.190:1313/tags/architecture/</title>
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/architecture/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=http://192.168.11.190:1313/tags/architecture/">
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,928 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html
|
||||||
|
lang="ru"
|
||||||
|
dir="ltr"
|
||||||
|
class="scroll-smooth"
|
||||||
|
data-default-appearance="dark"
|
||||||
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<meta name="theme-color">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<title>Debian · Олег Казанин</title>
|
||||||
|
<meta name="title" content="Debian · Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/debian/">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" href="/tags/debian/index.xml" title="Олег Казанин" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta property="og:url" content="http://192.168.11.190:1313/tags/debian/">
|
||||||
|
<meta property="og:site_name" content="Олег Казанин">
|
||||||
|
<meta property="og:title" content="Debian">
|
||||||
|
<meta property="og:locale" content="ru">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:title" content="Debian">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link
|
||||||
|
type="text/css"
|
||||||
|
rel="stylesheet"
|
||||||
|
href="/css/main.bundle.min.b5bc3f4587655153415b7825fd1716f97df9c99f87c23f81146f4dd4f9f49f04ad031e3b5f0ee5c0416707a1455ca2cfa8fc1f3a19ece1486b0126dcd310a63e.css"
|
||||||
|
integrity="sha512-tbw/RYdlUVNBW3gl/RcW+X35yZ+Hwj+BFG9N1Pn0nwStAx47Xw7lwEFnB6FFXKLPqPwfOhns4UhrASbc0xCmPg==">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js" integrity="sha512-pScQm2jAgqcPNpdxbdcqnVqotUXPgAzsu8c5nyym9uDOPkMfIGK0i7+kfJ6kKCJxQGC+8wm+Bz9JucDjDTGNew=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
defer
|
||||||
|
type="text/javascript"
|
||||||
|
id="script-bundle"
|
||||||
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
|
data-copy="Копировать"
|
||||||
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
[{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Article",
|
||||||
|
"articleSection": "Tags",
|
||||||
|
"name": "Debian",
|
||||||
|
"headline": "Debian",
|
||||||
|
|
||||||
|
"inLanguage": "ru",
|
||||||
|
"url" : "http://192.168.11.190:1313/tags/debian/",
|
||||||
|
"author" : {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Олег Казанин"
|
||||||
|
},
|
||||||
|
"copyrightYear": "2026",
|
||||||
|
"dateCreated": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
"datePublished": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
"dateModified": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"mainEntityOfPage": "true",
|
||||||
|
"wordCount": "0"
|
||||||
|
}]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<body class="flex flex-col h-screen m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32 text-lg bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral bf-scrollbar">
|
||||||
|
<div id="the-top" class="absolute flex self-center">
|
||||||
|
<a
|
||||||
|
class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600"
|
||||||
|
href="#main-content">
|
||||||
|
<span class="font-bold text-primary-600 pe-2 dark:text-primary-400">↓</span>
|
||||||
|
Перейти к основному содержимому
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center ms-auto">
|
||||||
|
<div class="hidden md:flex">
|
||||||
|
<nav class="flex items-center gap-x-5 h-12">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button"
|
||||||
|
aria-label="Search"
|
||||||
|
class="text-base bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center">
|
||||||
|
<button
|
||||||
|
id="appearance-switcher"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
type="button"
|
||||||
|
class="text-base bf-icon-color-hover">
|
||||||
|
<div class="flex items-center justify-center dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="items-center justify-center hidden dark:flex">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="flex md:hidden">
|
||||||
|
<div class="flex items-center h-14 gap-4">
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button-mobile"
|
||||||
|
aria-label="Search"
|
||||||
|
class="flex items-center justify-center bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="appearance-switcher-mobile"
|
||||||
|
type="button"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
class="flex items-center justify-center text-neutral-900 hover:text-primary-600 dark:text-neutral-200 dark:hover:text-primary-400">
|
||||||
|
<div class="dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="hidden dark:block">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="relative flex flex-col grow">
|
||||||
|
<main id="main-content" class="grow">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<header class="mt-5">
|
||||||
|
|
||||||
|
<h1 class="mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral">Debian</h1>
|
||||||
|
<div class="mt-1 mb-2 text-base text-neutral-500 dark:text-neutral-400 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="flex flex-col max-w-full mt-0 mb-5 prose dark:prose-invert lg:flex-row">
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section class="space-y-10 w-full">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<article class="article-link--simple flex flex-col md:flex-row relative">
|
||||||
|
|
||||||
|
<div class="flex-none relative overflow-hidden thumbnail-shadow md:mr-7 thumbnail">
|
||||||
|
<img
|
||||||
|
src="/posts/k3s-infrastructure/featured_hu_45645f28ebee5362.png"
|
||||||
|
role="presentation"
|
||||||
|
loading="lazy"
|
||||||
|
decoding="async"
|
||||||
|
class="not-prose absolute inset-0 w-full h-full object-cover">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class=" mt-3 md:mt-0">
|
||||||
|
<header class="items-center text-start text-xl font-semibold">
|
||||||
|
<a
|
||||||
|
|
||||||
|
href="/posts/k3s-infrastructure/"
|
||||||
|
|
||||||
|
class="not-prose before:absolute before:inset-0 decoration-primary-500 dark:text-neutral text-xl font-bold text-neutral-800 hover:underline hover:underline-offset-2">
|
||||||
|
<h2>
|
||||||
|
Подготовить инфраструктуру для K3s в Proxmox
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="ms-2"><span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Черновик
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
<div class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
<time datetime="2026-02-14T00:00:00+00:00">14 февраля 2026</time><span class="px-2 text-primary-500">·</span><span title="Время чтения">10 минут</span><span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="views_posts/k3s-infrastructure/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="views"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
|
||||||
|
<path fill="currentColor" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
<span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="likes_posts/k3s-infrastructure/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="likes"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||||
|
<path fill="currentColor" d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/kubernetes/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Kubernetes
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/k3s/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
K3s
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/homelab/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Homelab
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/proxmox/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Proxmox
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/infrastructure/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Infrastructure
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/debian/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Debian
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/devops/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Devops
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="px-6 pt-4 pb-2"></div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div
|
||||||
|
id="scroll-to-top"
|
||||||
|
class="fixed bottom-6 end-6 z-50 transform translate-y-4 opacity-0 duration-200">
|
||||||
|
<a
|
||||||
|
href="#the-top"
|
||||||
|
class="pointer-events-auto flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
aria-label="Пролистать наверх"
|
||||||
|
title="Пролистать наверх">
|
||||||
|
↑
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</main><footer id="site-footer" class="py-10 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400 ">
|
||||||
|
<ul class="flex list-none flex-col sm:flex-row">
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/tags/"
|
||||||
|
title="Tags">
|
||||||
|
|
||||||
|
Теги
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/categories/"
|
||||||
|
title="Categories">
|
||||||
|
|
||||||
|
Категории
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/authors/"
|
||||||
|
title="Authors">
|
||||||
|
|
||||||
|
Авторы
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
©
|
||||||
|
2026
|
||||||
|
Олег Казанин
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
Работает на <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
mediumZoom(document.querySelectorAll("img:not(.nozoom)"), {
|
||||||
|
margin: 24,
|
||||||
|
background: "rgba(0,0,0,0.5)",
|
||||||
|
scrollOffset: 0,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
<div
|
||||||
|
id="search-wrapper"
|
||||||
|
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh] z-500"
|
||||||
|
data-url="http://192.168.11.190:1313/">
|
||||||
|
<div
|
||||||
|
id="search-modal"
|
||||||
|
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800">
|
||||||
|
<header class="relative z-10 flex items-center justify-between flex-none px-2">
|
||||||
|
<form class="flex items-center flex-auto min-w-0">
|
||||||
|
<div class="flex items-center justify-center w-8 h-8 text-neutral-400">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
id="search-query"
|
||||||
|
class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent"
|
||||||
|
placeholder="Поиск"
|
||||||
|
tabindex="0">
|
||||||
|
</form>
|
||||||
|
<button
|
||||||
|
id="close-search-button"
|
||||||
|
class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
title="Закрыть (Esc)">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</header>
|
||||||
|
<section class="flex-auto px-2 overflow-auto">
|
||||||
|
<ul id="search-results">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Debian on Олег Казанин</title>
|
||||||
|
<link>http://192.168.11.190:1313/tags/debian/</link>
|
||||||
|
<description>Recent content in Debian on Олег Казанин</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>ru</language>
|
||||||
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/tags/debian/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Подготовить инфраструктуру для K3s в Proxmox</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-infrastructure/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-infrastructure/</guid>
|
||||||
|
<description>Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-infrastructure/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<title>http://192.168.11.190:1313/tags/debian/</title>
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/debian/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=http://192.168.11.190:1313/tags/debian/">
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Devops on Олег Казанин</title>
|
||||||
|
<link>http://192.168.11.190:1313/tags/devops/</link>
|
||||||
|
<description>Recent content in Devops on Олег Казанин</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>ru</language>
|
||||||
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/tags/devops/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>K3s HA для homelab: архитектура без боли</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-architecture/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-architecture/</guid>
|
||||||
|
<description>Kubernetes слишком тяжёлый, Docker Swarm мёртв, а хочется нормальный кластер для экспериментов. K3s решает эту проблему - полноценный Kubernetes в 50MB. Разберём архитектуру HA кластера без боли.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-architecture/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Подготовить инфраструктуру для K3s в Proxmox</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-infrastructure/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-infrastructure/</guid>
|
||||||
|
<description>Архитектура спланирована, ресурсы посчитаны - пора создавать виртуальные машины. Подготовим 5 VM в Proxmox и настроим ОС так, чтобы K3s установился без сюрпризов.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-infrastructure/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Установить K3s HA кластер</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-installation/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-installation/</guid>
|
||||||
|
<description>Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-installation/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<title>http://192.168.11.190:1313/tags/devops/</title>
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/devops/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=http://192.168.11.190:1313/tags/devops/">
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,928 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html
|
||||||
|
lang="ru"
|
||||||
|
dir="ltr"
|
||||||
|
class="scroll-smooth"
|
||||||
|
data-default-appearance="dark"
|
||||||
|
data-auto-appearance="false"><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta http-equiv="content-language" content="ru">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<meta name="theme-color">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<title>Etcd · Олег Казанин</title>
|
||||||
|
<meta name="title" content="Etcd · Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://192.168.11.190:1313/tags/etcd/">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" href="/tags/etcd/index.xml" title="Олег Казанин" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="author" content="Олег Казанин">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://t.me/oa_msk" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://oakazanin.ru/" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://git.jn4.ru/astronit" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="https://obrtv.ru/a/chiefengineer" rel="me">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta property="og:url" content="http://192.168.11.190:1313/tags/etcd/">
|
||||||
|
<meta property="og:site_name" content="Олег Казанин">
|
||||||
|
<meta property="og:title" content="Etcd">
|
||||||
|
<meta property="og:locale" content="ru">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:title" content="Etcd">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link
|
||||||
|
type="text/css"
|
||||||
|
rel="stylesheet"
|
||||||
|
href="/css/main.bundle.min.b5bc3f4587655153415b7825fd1716f97df9c99f87c23f81146f4dd4f9f49f04ad031e3b5f0ee5c0416707a1455ca2cfa8fc1f3a19ece1486b0126dcd310a63e.css"
|
||||||
|
integrity="sha512-tbw/RYdlUVNBW3gl/RcW+X35yZ+Hwj+BFG9N1Pn0nwStAx47Xw7lwEFnB6FFXKLPqPwfOhns4UhrASbc0xCmPg==">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/appearance.min.a0c4d367419d691bf95fc98ffcaf55ce81db3412c3dfbd6c4fbe968f56f77347f5a8512b0916a65a5f496dbec1ef0590dbadcf2fbd0de3c919e525f11c32d0e3.js"
|
||||||
|
integrity="sha512-oMTTZ0GdaRv5X8mP/K9VzoHbNBLD371sT76Wj1b3c0f1qFErCRamWl9Jbb7B7wWQ263PL70N48kZ5SXxHDLQ4w=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js" integrity="sha512-pScQm2jAgqcPNpdxbdcqnVqotUXPgAzsu8c5nyym9uDOPkMfIGK0i7+kfJ6kKCJxQGC+8wm+Bz9JucDjDTGNew=="></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
defer
|
||||||
|
type="text/javascript"
|
||||||
|
id="script-bundle"
|
||||||
|
src="/js/main.bundle.min.bdda7dece6cbaf08deef7d254f7f842f3261c2524d247905127c9a20decc03f1011a2950048464c79272c1ce0705a49a41147f39f2b95163bb71d404b33263ef.js"
|
||||||
|
integrity="sha512-vdp97ObLrwje730lT3+ELzJhwlJNJHkFEnyaIN7MA/EBGilQBIRkx5Jywc4HBaSaQRR/OfK5UWO7cdQEszJj7w=="
|
||||||
|
data-copy="Копировать"
|
||||||
|
data-copied="Скопировано"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
[{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Article",
|
||||||
|
"articleSection": "Tags",
|
||||||
|
"name": "Etcd",
|
||||||
|
"headline": "Etcd",
|
||||||
|
|
||||||
|
"inLanguage": "ru",
|
||||||
|
"url" : "http://192.168.11.190:1313/tags/etcd/",
|
||||||
|
"author" : {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Олег Казанин"
|
||||||
|
},
|
||||||
|
"copyrightYear": "2026",
|
||||||
|
"dateCreated": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
"datePublished": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
"dateModified": "2026-02-14T00:00:00\u002b00:00",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"mainEntityOfPage": "true",
|
||||||
|
"wordCount": "0"
|
||||||
|
}]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<body class="flex flex-col h-screen m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32 text-lg bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral bf-scrollbar">
|
||||||
|
<div id="the-top" class="absolute flex self-center">
|
||||||
|
<a
|
||||||
|
class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600"
|
||||||
|
href="#main-content">
|
||||||
|
<span class="font-bold text-primary-600 pe-2 dark:text-primary-400">↓</span>
|
||||||
|
Перейти к основному содержимому
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="min-h-[148px]"></div>
|
||||||
|
<div class="fixed inset-x-0 z-100">
|
||||||
|
<div
|
||||||
|
id="menu-blur"
|
||||||
|
class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom backdrop-blur-2xl shadow-2xl bg-neutral/25 dark:bg-neutral-800/25"></div>
|
||||||
|
<div class="relative m-auto leading-7 max-w-7xl px-6 sm:px-14 md:px-24 lg:px-32">
|
||||||
|
<div class="main-menu flex items-center w-full gap-2 p-1 pl-0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="/" class="flex">
|
||||||
|
<span class="sr-only">Олег Казанин</span>
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="/img/logo.png"
|
||||||
|
width="285"
|
||||||
|
height="175"
|
||||||
|
class="logo max-h-20 max-w-20 object-scale-down object-left nozoom"
|
||||||
|
alt="">
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center ms-auto">
|
||||||
|
<div class="hidden md:flex">
|
||||||
|
<nav class="flex items-center gap-x-5 h-12">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button"
|
||||||
|
aria-label="Search"
|
||||||
|
class="text-base bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center">
|
||||||
|
<button
|
||||||
|
id="appearance-switcher"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
type="button"
|
||||||
|
class="text-base bf-icon-color-hover">
|
||||||
|
<div class="flex items-center justify-center dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="items-center justify-center hidden dark:flex">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="flex md:hidden">
|
||||||
|
<div class="flex items-center h-14 gap-4">
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="search-button-mobile"
|
||||||
|
aria-label="Search"
|
||||||
|
class="flex items-center justify-center bf-icon-color-hover"
|
||||||
|
title="Поиск (/)">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="appearance-switcher-mobile"
|
||||||
|
type="button"
|
||||||
|
aria-label="Dark mode switcher"
|
||||||
|
class="flex items-center justify-center text-neutral-900 hover:text-primary-600 dark:text-neutral-200 dark:hover:text-primary-400">
|
||||||
|
<div class="dark:hidden">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="hidden dark:block">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/js/background-blur.min.605b3b942818f0ab5a717ae446135ec46b8ee5a2ad12ae56fb90dc2a76ce30c388f9fec8bcc18db15bd47e3fa8a09d779fa12aa9c184cf614a315bc72c6c163d.js"
|
||||||
|
integrity="sha512-YFs7lCgY8KtacXrkRhNexGuO5aKtEq5W+5DcKnbOMMOI+f7IvMGNsVvUfj+ooJ13n6EqqcGEz2FKMVvHLGwWPQ=="
|
||||||
|
data-blur-id="menu-blur"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="relative flex flex-col grow">
|
||||||
|
<main id="main-content" class="grow">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<header class="mt-5">
|
||||||
|
|
||||||
|
<h1 class="mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral">Etcd</h1>
|
||||||
|
<div class="mt-1 mb-2 text-base text-neutral-500 dark:text-neutral-400 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="flex flex-col max-w-full mt-0 mb-5 prose dark:prose-invert lg:flex-row">
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section class="space-y-10 w-full">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<article class="article-link--simple flex flex-col md:flex-row relative">
|
||||||
|
|
||||||
|
<div class="flex-none relative overflow-hidden thumbnail-shadow md:mr-7 thumbnail">
|
||||||
|
<img
|
||||||
|
src="/posts/k3s-installation/featured_hu_7e9629130f91cc.png"
|
||||||
|
role="presentation"
|
||||||
|
loading="lazy"
|
||||||
|
decoding="async"
|
||||||
|
class="not-prose absolute inset-0 w-full h-full object-cover">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class=" mt-3 md:mt-0">
|
||||||
|
<header class="items-center text-start text-xl font-semibold">
|
||||||
|
<a
|
||||||
|
|
||||||
|
href="/posts/k3s-installation/"
|
||||||
|
|
||||||
|
class="not-prose before:absolute before:inset-0 decoration-primary-500 dark:text-neutral text-xl font-bold text-neutral-800 hover:underline hover:underline-offset-2">
|
||||||
|
<h2>
|
||||||
|
Установить K3s HA кластер
|
||||||
|
|
||||||
|
</h2>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="ms-2"><span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Черновик
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
<div class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
<time datetime="2026-02-14T00:00:00+00:00">14 февраля 2026</time><span class="px-2 text-primary-500">·</span><span title="Время чтения">10 минут</span><span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="views_posts/k3s-installation/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="views"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
|
||||||
|
<path fill="currentColor" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
<span class="px-2 text-primary-500">·</span><span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span
|
||||||
|
id="likes_posts/k3s-installation/index.md"
|
||||||
|
class="animate-pulse inline-block text-transparent max-h-3 rounded-full -mt-[2px] align-middle bg-neutral-300 dark:bg-neutral-400"
|
||||||
|
title="likes"
|
||||||
|
>loading</span
|
||||||
|
>
|
||||||
|
<span class="inline-block align-text-bottom"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||||
|
<path fill="currentColor" d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg></span></span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex flex-row flex-wrap items-center">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/kubernetes/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Kubernetes
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/k3s/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
K3s
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/homelab/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Homelab
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/installation/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Installation
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/ha/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Ha
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/etcd/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Etcd
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="relative mt-[0.5rem] me-2" href="/tags/devops/">
|
||||||
|
<span class="flex cursor-pointer">
|
||||||
|
<span
|
||||||
|
class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
|
||||||
|
Devops
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="px-6 pt-4 pb-2"></div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div
|
||||||
|
id="scroll-to-top"
|
||||||
|
class="fixed bottom-6 end-6 z-50 transform translate-y-4 opacity-0 duration-200">
|
||||||
|
<a
|
||||||
|
href="#the-top"
|
||||||
|
class="pointer-events-auto flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
aria-label="Пролистать наверх"
|
||||||
|
title="Пролистать наверх">
|
||||||
|
↑
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</main><footer id="site-footer" class="py-10 print:hidden">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400 ">
|
||||||
|
<ul class="flex list-none flex-col sm:flex-row">
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/tags/"
|
||||||
|
title="Tags">
|
||||||
|
|
||||||
|
Теги
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/categories/"
|
||||||
|
title="Categories">
|
||||||
|
|
||||||
|
Категории
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class=" flex mb-1 text-end sm:mb-0 sm:me-7 sm:last:me-0 ">
|
||||||
|
<a
|
||||||
|
class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center"
|
||||||
|
href="/authors/"
|
||||||
|
title="Authors">
|
||||||
|
|
||||||
|
Авторы
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-sm text-neutral-500 dark:text-neutral-400">
|
||||||
|
©
|
||||||
|
2026
|
||||||
|
Олег Казанин
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
||||||
|
|
||||||
|
|
||||||
|
Работает на <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
|
||||||
|
href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
mediumZoom(document.querySelectorAll("img:not(.nozoom)"), {
|
||||||
|
margin: 24,
|
||||||
|
background: "rgba(0,0,0,0.5)",
|
||||||
|
scrollOffset: 0,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
<div
|
||||||
|
id="search-wrapper"
|
||||||
|
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh] z-500"
|
||||||
|
data-url="http://192.168.11.190:1313/">
|
||||||
|
<div
|
||||||
|
id="search-modal"
|
||||||
|
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800">
|
||||||
|
<header class="relative z-10 flex items-center justify-between flex-none px-2">
|
||||||
|
<form class="flex items-center flex-auto min-w-0">
|
||||||
|
<div class="flex items-center justify-center w-8 h-8 text-neutral-400">
|
||||||
|
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="search"
|
||||||
|
id="search-query"
|
||||||
|
class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent"
|
||||||
|
placeholder="Поиск"
|
||||||
|
tabindex="0">
|
||||||
|
</form>
|
||||||
|
<button
|
||||||
|
id="close-search-button"
|
||||||
|
class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
|
||||||
|
title="Закрыть (Esc)">
|
||||||
|
<span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</header>
|
||||||
|
<section class="flex-auto px-2 overflow-auto">
|
||||||
|
<ul id="search-results">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Etcd on Олег Казанин</title>
|
||||||
|
<link>http://192.168.11.190:1313/tags/etcd/</link>
|
||||||
|
<description>Recent content in Etcd on Олег Казанин</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>ru</language>
|
||||||
|
<managingEditor>oakazanin@ya.ru (Олег Казанин)</managingEditor>
|
||||||
|
<webMaster>oakazanin@ya.ru (Олег Казанин)</webMaster>
|
||||||
|
<copyright>© 2026 Олег Казанин</copyright>
|
||||||
|
<lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://192.168.11.190:1313/tags/etcd/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Установить K3s HA кластер</title>
|
||||||
|
<link>http://192.168.11.190:1313/posts/k3s-installation/</link>
|
||||||
|
<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
|
||||||
|
<author>oakazanin@ya.ru (Олег Казанин)</author>
|
||||||
|
<guid>http://192.168.11.190:1313/posts/k3s-installation/</guid>
|
||||||
|
<description>Инфраструктура готова: 5 VM работают, ОС настроена, порты открыты. Пора устанавливать K3s. Один curl-скрипт на каждую ноду - и через 15 минут у вас работающий HA-кластер.</description>
|
||||||
|
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://192.168.11.190:1313/posts/k3s-installation/featured.png" />
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||