В открытый доступ начал выходить цикл видео про Cilium.
Видео доступны на следующих площадках:
Список и время премьер можно посмотреть на канале в Youtube.
AI — инструмент, который позволяет реализовать свои хотелки, которые в жизни никогда бы не смог развить. Ну или не дано по жизни.
Я не умею рисовать. Максимум квадраты Малевича получаются. Но могу объяснить, что я хочу видеть на рисунке.
В общем, добрался до сбычи мечт!
Решил начать с заставок для своих Youtube видео. Это первое видео в серии для начинающих.
Раньше там было мое ничем не запоминающееся лицо. А теперь китайская манга 🙂
Я постепенно перехожу с vs code на zed. Мне для работы с claude code достаточно простой консоли и приложения для просмотра файлов. vs code штука хорошая, но достаточно медленная.
В zed всякие spell checkers подключаются как модули. Их там несколько и у всех есть различные проблемы. Самый простой по подключению к zed, по моему мнению — это cSpell. Но… У него в поставке по умолчанию нет русского словаря. И как его туда впихнуть, совсем непонятно.
Т.е. стандартная рекомендация: создайте файл ~/.cspell.json и добавтье в него:
{
"language": "en-EN,ru-RU",
}
не подходит. Словаря то нет. Да и ошибки в описании локали как то не заметил.
Хорошо, что под рукой есть claude code на этой же машине. Запрос:
Проблема проверка русского языка в Zed. Установлен cspell есть файл ~/.cspell.json cspell сервер стартует, но все русские слова подчеркиваются как не правильные
В ответ
Проблема ясна. Две причины:
1. Пакет русского словаря не установлен — @cspell/dict-ru_ru отсутствует
2. Неправильные имена словарей в конфиге — cspell использует ru_RU (с подчёркиванием), а не ru-RU. Также en-EN не
существует, нужен en_US
Вывод cspell trace "привет" подтверждает: русский словарь не подключён, слово не найдено ни в одном словаре.
Исправляем. Сначала установим словарь:
Дальше, в течении 5-ти минут он находит решение и все заработало.
Ниже привожу инструкцию, сгенеированную им для устранения прболемы на MacOs.
# Добавление русского языка в cspell (Zed editor)
## Проблема
cspell в Zed по умолчанию не включает русский словарь. Пакет `@cspell/dict-ru_ru` не входит в `@cspell/cspell-bundled-dicts`, поэтому даже при указании `"language": "en,ru"` русские слова не распознаются.
## Решение (пошагово)
### 1. Установить пакет русского словаря
```bash
cd ~/Library/Application\ Support/Zed/extensions/work/cspell
npm install @cspell/dict-ru_ru
```
Словарь устанавливается в node_modules расширения cspell для Zed.
### 2. Настроить cspell конфиг
Создать/обновить `~/.cspell.json` (глобальный конфиг для всех проектов):
```json
{
"language": "en,ru",
"dictionaryDefinitions": [
{
"name": "ru-ru",
"path": "~/Library/Application Support/Zed/extensions/work/cspell/node_modules/@cspell/dict-ru_ru/ru_ru.trie.gz"
}
],
"dictionaries": ["ru-ru"]
}
```
### 3. Перезапустить Zed или перезагрузить cspell LSP
## Ключевые моменты
- **Имена словарей**: русский словарь регистрируется как `"ru-ru"` (нижний регистр, дефис). НЕ `"ru-RU"`.
- **Английский**: `Английский bundled и включается автоматически через `"language": "en,ru"`.
- **`import` не работает** для абсолютных путей к небандленным словарям — используй `dictionaryDefinitions` + `dictionaries`.
- **`language`** задаёт локаль для languageSettings, но без `dictionaryDefinitions` словарь не подключится, т.к. он не bundled.
- **Глобальный конфиг**: `~/.cspell.json` — cspell ищет конфиг вверх по дереву директорий.
- **Путь Zed extension**: `~/Library/Application Support/Zed/extensions/work/cspell/node_modules/`
- **cspell-ext.json** словаря находится в `@cspell/dict-ru_ru/cspell-ext.json`, но `import` из конфига его не подхватывает.
## Проверка
```bash
cd ~/Library/Application\ Support/Zed/extensions/work/cspell
node -e "
async function main() {
const lib = await import('cspell-lib');
const defaults = await lib.getDefaultBundledSettingsAsync();
const config = await lib.searchForConfig(process.env.HOME + '/');
const merged = lib.mergeSettings(defaults, config || {});
const s = lib.constructSettingsForText(merged, 'привет мир', 'markdown');
const dict = await lib.getDictionary(s);
console.log('привет:', dict.has('привет')); // true
console.log('мир:', dict.has('мир')); // true
console.log('ошибко:', dict.has('ошибко')); // false
}
main();
"
```
В общий доступ вышли два видео про технологию создания виртуальных кластеров kubernetes — vcluster.
Описание проекта.
Настройка и запуск виртуального кластера.
00:00 — Вступление
01:09 — Пример, где это можно использовать
13:13 — Внутреннее устройство vCluster
17:47 — Предварительные требования
21:33 — Конфигурационный файл
32:13 — Запуск vCluster
34:55 — Config файл виртуального сервера
37:12 — Заключение
Примеры настройки.
Синхронизация ресурсов между хост и виртуальными кластерами.
00:00 — Вступление
00:18 — Безопасность
08:23 — Тестовое приложение
13:56 — Синхронизация ресурсов между хост и виртуальным кластерами
15:51 — Синхронизация PVC
21:09 — Использование ingress controller хост кластера в vcluster
27:14 — Заключение
Начинаем разбираться с Istio.
Теория.
Установка Istio.
00:00 — Вступление
00:46 — Теория
04:40 — Тестовый стенд
12:02 — Теория (продолжаем)
14:54 — Ambient mode
21:43 — Установка тестового приложения
26:19 — Установка istio
32:35 — Доступ к тестовому приложению
37:38 — Заключение
Поддержи канал на Boosty
Тем, кто не верит в boosty можно на ВТБ: 2200 2460 1569 3404
Это видео на других площадках:
Что такое GatewayAPI?
Сравнение с Ingress.
Пример реализации на базе traefik.
Gateway — два https listener и cert-manager.
Всякое разное про TCPRoute.
На https://boosty.to/bigkaa вышли первые три видео о kyverno.
01 —
Общие сведения о kyverno.
Дружим kyverno и argocd.
Установка kyverno
02 —
Постановка задачи.
Validating rules: patterns and deny.
03 —
Generate и Mutate rules.
Aggregated ClusterRoles
Создание шаблона для содержимого namespace.
Премьера на Youtube, Rutube, VK Video и Telegram, запланирована в Январе 2025.
Задача стояла простая – развернуть кубер в закрытом периметре. Для этого в этот самый периметр надо передать используемые контейнеры. Загрузить их в локальное хранилище оных. Банальная операция:
docker save -> ctr image import
Дальше теги, пуши и установка кубера.
И вот… Ставлю это я кубер. Запускается контейнер coredns и отваливается. Запускается и отваливается. Мягко говоря – необычная ситуация. Ясное дело, без внутреннего DNS ничего работать не будет.
Дескрайб пода показывает, что не срабатывают пробы. Судя по сообщению, очень похоже на то, когда кто-то режет подключение по сети к порту. Логов контейнер не дает, только сообщения о рестарте контейнера кубелетом из-за проваленных проб. Это очень странно.
Линукс, используемый на ноде, импортозамещенный с наворотами по безопасности. Первая мысль – опять что-то ИБ закрутило. Но нет. Там все оказалось в пределах нормы. Но время на проверку потратили много.
Дольше смотрим CNI куба. Первый раз в жизни я по логам containerd и calico отследил процесс от загрузки контейнера до выдачи поду IP адреса. Серьезно прокачал эту тему. Не то что бы что-то новое узнал, но погрузился значительно глубже чем нырял раньше.
В итоге картина: контейнер загружен, под запущен, сетевой интерфейс для пода создан, IPAM IP выделил, маршруты в таблице маршрутизации есть. В кубе это все видно. В Linux это все видно. Но не работает. Curl говорит, что отказано в подключении.
В голову полезли нехорошие мысли: потерял квалификацию, пора на пенсию, придется возвращать гонорар.
Ладно, проведем еще один эксперимент: вместо стандартного coredns, который ставит по умолчанию kubeadm, поставлю его последнюю версию. Закачали образ, намутил манифесты. Установил кубер без coredns по умолчанию. Запустил свой coredns – заработало! Эээ!
И тут я вспомнил – Telegram! В качестве среды передачи контейнера от меня к ним на первом хопе был Telegram. Где-то года полтора назад, мы через телегу перекидывали большой конфиг одного приложения. После подкидывания конфига, приложение тупо не заводилось. Обнаружили, что телега внесла изменения в файл, пока передавала его на ту сторону. Вот так вот.
Проверил контрольную сумму файла контейнера предыдущего coredns на своей машине и на сервере. Оба на! Контрольная сумма не совпадает.
Получается, что containerd запустил контейнер из битого образа! Скорее всего какой-то слой контейнера не того. (Это что получается, в файле контейнера не передаются контрольные суммы слоев?) Все остальные приложения обращаются к containerd, тот уверенно говорит: все Ок! Запущен, работает. Вот вам контейнер ID, работаем! Да уж.
Долго и витеевато матерился. Мораль: