diff --git a/content/ru/docker-envs.md b/content/ru/docker-envs.md index e450755..79873a0 100644 --- a/content/ru/docker-envs.md +++ b/content/ru/docker-envs.md @@ -9,12 +9,12 @@ category: DevOps # Разделение докера на среды Должен ли ты разделять среды докера в несколько `docker-compose` файлов? -Определенно! В некоторых случаях невозможно разобраться что разработчики хотели сделать или почему ничего не работает. Настройка раздельных сред может стать настоязей мешанино. В этой статье я покажу как настроить `docker-compose` и избежать миллиона проблем. +Определенно! В некоторых случаях невозможно разобраться что разработчики хотели сделать или почему ничего не работает. Настройка раздельных сред может стать настояшей мешаниной. В этой статье я покажу как настроить `docker-compose` и избежать миллиона проблем. Как мы вообще можем разделить среды для локальной разработки и продовые? Отет прост: Требуется декомпозировать проект и создать отдельные файлы под каждую из сред или даже сервисов. -Это нормально, если у тебя будет больше 2-ч `docker-compose` файлов. +Это нормально, если у тебя будет больше 2-х `docker-compose` файлов. Например: ``` @@ -33,9 +33,9 @@ deploy ``` ### Как это работает? -Докер умеет работать с множеством `docker-compose` файлов одновременно.И мы можем использовать это для разделения сред. +Докер умеет работать с множеством `docker-compose` файлов одновременно. И мы можем использовать это для разделения сред. -Выглядит это следующим образом. +Запуск таких конфигураций выглядит следующим образом: ```bash docker-compose \ -f "deploy/docker-compose.yml" \ @@ -46,12 +46,11 @@ docker-compose \ В каждом из этих файлов определен какой-то кусок конфигурации, который не пересекается. Например в `docker-compose.yml` определено приложение и некоторые необходимые сервисы, а в остальных файлах добавляются сервисы или меняются значения предыдущих. -Наверное, тут проще на примере пояснить. +Наверное, тут проще показать на примере. Допустим у нас есть проект, у которого поднимается бекенд с параметрами, которые отличаются на проде и локально. -Для простоты создадим простецикий проект со следующей структурой. - +Для простоты примера создадим простецкий проект со следующей структурой: ``` proj ├── deploy @@ -66,7 +65,7 @@ proj from sys import argv # это аргуметы переданные в скрипт def main(): - print("; ".join(argv[1:])) # выводитна экран все аргументы программы + print("; ".join(argv[1:])) # выводит на экран все аргументы программы if __name__ == "__main__": main() diff --git a/content/ru/makefiles.md b/content/ru/makefiles.md index c9fa26a..cfc5482 100644 --- a/content/ru/makefiles.md +++ b/content/ru/makefiles.md @@ -6,9 +6,12 @@ category: 'DevOps' --- # Makefiles для чайников -Если описывать в двух словах, то это просто описание команд для упрощения работы с проектом. Изначально делались для того, чтобы удобно компилировать всякие проекты на любых языках. +Что такое мейкфайлы? Вы наверняка их встречали, +если собирали проекты из ихсодных файлов. +Если описывать в двух словах, то это просто описание команд для упрощения работы +с проектом. Изначально делались для того, чтобы удобно компилировать всякие проекты на любых языках. -## Как они работают +## Как они работают? Достаточно просто. Вот пример `Makefile`: @@ -37,7 +40,7 @@ Hi! ## Зависимости таргетов -На строчке объявления таргета `run` видно, что объявлен `test.gen`. Это зависимость данного таргета и она будет вызвана до того, как выполнится скрипт описываемого таргета. Таких зависимостей может быть много, перечисляются они чере пробел. +На строчке объявления таргета `run` видно, что объявлен `test.gen`. Это зависимость данного таргета и она будет вызвана до того, как выполнится скрипт описываемого таргета. Таких зависимостей может быть много, перечисляются они через пробел. Например: ```makefile{}[Makefile] @@ -96,7 +99,7 @@ memes ## Валидация сгенерированных файлов Зачастую `Makefile` используют для компиляции С и зачастую требуется -собрать какую-либо часть проект и пропустить сборку этой части, если эта часть уже собрана. +собрать какую-либо часть проекта в файл и пропустить сборку этого файла, если он уже собран. Раскрою секрет, в Makefile это базовый функционал. Давайте немного поменяем первый Makefile и запустим дважды. diff --git a/content/ru/start-with-k8s.md b/content/ru/start-with-k8s.md index 02f6dcd..94892e3 100644 --- a/content/ru/start-with-k8s.md +++ b/content/ru/start-with-k8s.md @@ -7,15 +7,15 @@ position: 4 # Проблема в изучении кубернетес -Многие люди, кто задавались вопросом как начать работать с -кубернетесом сталкивались с тем, что документация крайне +Многие люди, кто задавались вопросом "Как начать работать с +кубернетес?", сталкивались с тем, что документация крайне большая сложная и нет нормального описания как -завернуть маленький проект из одного проекта в свой кластер или -как развернуть свой кластер без боли. +завернуть маленький проект из одного контейнра в свой кластер или +как развернуть сам кластер без боли. А всё потому что вся документация нацелена на большие production-ready системы с большим rps и тому подобным. - +
В данной статье я попробую исправить это вселенское недопонимание используя k3s, свой комплюктер и немного знаний по кодингу. @@ -28,12 +28,12 @@ production-ready системы с большим rps и тому подобны # Что такое кубернетес и почему это лучше докера Многие ребята, кто хорошо знаком с докером и его -возможностями могут задаваться таким вопросом. +возможностями, могут задаваться таким вопросом. Для тех кто в танке, напомню, что докер имеет вариант запуска в режиме кластера. -Этот функционал называется docker swarm. +Этот функционал называется [docker swarm](https://docs.docker.com/engine/swarm/). В целом, swarm отдалённо напоминает kubernetes, -так как в этом режиме докер, худо-бедно но умеет +так как в этом режиме докер худо-бедно умеет автоскейлится и запускаться в кластере, но это всё равно немного не то. @@ -54,7 +54,7 @@ production-ready системы с большим rps и тому подобны Так как я в этой статье хотел затронуть совсем базовые и практические вещи, то рассматривать -мы будем только крайне полезные компоненты. +мы будем только самые часто используемые компоненты. - Container - Pod @@ -65,12 +65,12 @@ production-ready системы с большим rps и тому подобны - Secret - ConfigMap -А теперь рассмотрим немного поподробнее. +А теперь рассмотрим каждый ресурс немного поподробнее. ## Container -Контейнеры не то чтобы часть специфичная для кубернетес. -С контейнерами вы можете быть знакомы из кучи систем. +Контейнеры не являются чем-то специфичным для кубернетес. +С контейнерами вы можете быть знакомы из кучи других систем. В контексте кубера они не обладают никакими дополнительными свойствами. Это ровно то же, что и контейнеры `containerd` или те, с которыми вы возились с докером. Ничего нового. @@ -80,9 +80,9 @@ production-ready системы с большим rps и тому подобны - Важная ремарка. Кубер начиная с 2021 кубернетес не поддерживает - докер как бэкенд. Теперь кубер будет общаться с - containerd напрямую. Это значит, что теперь перед использованием + Важная ремарка. Кубер, начиная с 2021 года, не поддерживает + докер как бэкенд. Теперь он будет общаться с + containerd напрямую. Это значит, что перед использованием контейнеров собранных на локальной машине надо будет импортировать их в `containerd` используя `ctr image import`. @@ -101,9 +101,9 @@ production-ready системы с большим rps и тому подобны В поде находится от одного до множества контейнеров. Интересная особенность пода в том, что все контейнеры -делят один сетевой адресс. Другими словами, +делят один сетевой адрес. Другими словами, если у вас один из контейнеров открыл порт `3000`, -то другие контейнеры из пода эти порты использовать не смогут. +то другие контейнеры из пода этот порт использовать не смогут. То есть, если вы хотите логически связанные приложения поместить в под, то они могут ходить друг к другу через лупбек @@ -120,10 +120,10 @@ production-ready системы с большим rps и тому подобны
-Deployment нужна именно для описания подов и создания +Deployment нужен именно для описания подов и создания некоторых ресурсов, нужных для скейлинга. Также с помощью деплойментов можно делать откаты приложения через -механиз роллбеков. Я это рассматривать не буду. Тут только база. +механиз роллбеков. Я это рассматривать не буду. В этой статье только база. ## Service @@ -147,7 +147,7 @@ Deployment нужна именно для описания подов и соз Также сервис выступает как балансировщик. - Если вы хотите сделать запрос от одного пода до дргого внутри кластера, то + Если вы хотите сделать запрос от одного пода до дргого, внутри кластера, то вам придётся использовать сервис.
Если вы попробуете сделать запрос напрямую по IP пода, то у вас, конечно же, @@ -157,7 +157,7 @@ Deployment нужна именно для описания подов и соз ## Ingress -Ингрессы это сервис описывающий куда пускать трафик, +Ингресс - это сервис описывающий куда пускать трафик, который поступает снаружи кластера.
@@ -168,9 +168,9 @@ Deployment нужна именно для описания подов и соз Принцип работы ингресса следующий: -Вы указываете хост ингресса и различные регексы пути. +Вы указываете хост ингресса и различные пути. В зависимости от входящего запроса ингресс выбирает в какой сервис -направить его и в какой порт. +направить запрос и в какой порт. Настройка ингресса достаточно гибкая и я не думаю, что вы можете столкнуться с какими либо проблемами. @@ -218,10 +218,10 @@ Deployment нужна именно для описания подов и соз - minikube На первый взгляд minikube может показаться лучшим вариантом. -И он действительно хорош тем, что его легко почистить после +И он действительно хорош тем, что его легко развернуть и почистить после своих экспериментов. Однако, там есть проблемы с ингрессами. По факту они не работают и там надо окольными путями получать -адреса приложения. +адреса.
@@ -238,11 +238,10 @@ k3s - это легковесная production-ready реализация k8s. I ## Подключение кластера -После установки в домашней дериктории должен был быть +После установки `kubectl` в домашней дериктории должен был быть сгенерирован файл `.kube/config`. Этот файл содержит данные для подключения к различным кластерам. `minikube` Сам добавляет -ключи для подключения к .kube/config. `K3S` не изменяет -никаким образом `.kube/config`, поэтому надо будет это сделать вручную. +ключи для подключения к .kube/config. `K3S` никак не изменяет `.kube/config`, поэтому надо будет это сделать вручную. Для того, чтобы это сделать сначала разберёмся как выглядит конфиг. @@ -298,27 +297,28 @@ current-context: "k3s" можете передать параметр `--context $CONTEXT_NAME`, где `$CONTEXT_NAME` это название контекста. Чтобы достать данные для подключения к `k3s` надо посмотреть его конфиг -и скопировать данные. Либо выставить переменную среды, которая будет +и скопировать данные. Либо выставить переменную среды `KUBECONFIG`, которая будет указывать конфиг k3s. Конфиг подключения `k3s` лежит в файле `/etc/rancher/k3s/k3s.yaml`. Можете выполнить команду, которая будет просить kubectl использовать указанный конфиг: -`export KUBE_CONFIG=/etc/rancher/k3s/k3s.yaml` +`export KUBECONFIG=/etc/rancher/k3s/k3s.yaml`
Либо скопируйте нужные данные для подключения себе в `.kube/config`. После настройки выполните команду и проверьте что вам вернулось -что-то подобное. Это значит, что никаких ресурсов пока в -кластере нет. Это мы исправим позже. Пока что можно сказать, -что подключение прошло успешно. +что-то подобное. ```bash $ kubectl --context "my-context" get pods No resources found in default namespace. ``` -Если же у вас выпадает ошибка, например такая. +Это значит, что никаких ресурсов пока в +кластере нет. Это мы исправим чуть позже. Пока что можно сказать, +что подключение прошло успешно. +Если же у вас выпадает ошибка, например такая: ``` The connection to the server localhost:8080 was refused - did you specify the right host or port? @@ -331,18 +331,19 @@ sudo systemctl start k3s.service ``` Либо у вас неверные данные для входа. +Перепроверьте свой `.kube/config`. ### Мониторинг кластера -Для просматривания управления кластером используется cli утилита `kubectl`. -Но для того, чтобы с ней работать нужно получше понять что вообще в кластере есть. +Для просмотра ресурсов и управления кластером используется `kubectl`. +Но для того, чтобы с ней работать нужно получше понять, что вообще в кластере есть. Для этого я советую использовать [Lens](https://k8slens.dev/). Это крайне удобный интерфейс для управления своим кластером. -Также там есть очень клёвая настрока, которая сама включит мониторинг +Также там есть очень клёвая настройка, которая сама включит мониторинг потребления памяти и процессора для всех подов и кластера в общем. -На локальной машине это не очень много смысла имеет, +На локальной машине это не имеет смысла, а вот в проде было бы очень полезно. Выглядит Lens примерно так: @@ -437,7 +438,7 @@ app.listen(port, host, () => { Это всё. Сервер готов.
-Протестируем запуск сервера выполнив команду ниже и открыв в +Протестируем запуск сервера, выполнив команду ниже и открыв в своём любимом браузере http://localhost:8080. ``` @@ -501,7 +502,7 @@ docker run --rm -it -p 3400:8000 "s3rius/req-counter-express:latest" - Вы можете запушить собранное приложение в [Docker HUB](https://hub.docker.com/) и использовать его. - Можете использовать мой образ `s3rius/req-counter-express:latest` -- Импортировать собранный образ как tar файл и импортировать его в containerd напрямую. +- Сохранить собранный образ как tar файл и импортировать его в containerd напрямую. Как это сделать почитать можно в [этой статье](https://cwienczek.com/2020/06/import-images-to-k3s-without-docker-registry/). ### Деплой в k8s @@ -645,7 +646,7 @@ service/req-counter-service created Готово. Теперь вы можете зайти в lens, выбрать свой кластер из списка и посмотреть как там поживает ваше приложение. -Также не забудьте указать неймспей, в который вы беплоиди приложение. +Также не забудьте указать неймспейс, в который вы деплоили приложение. Выглядит это чудо примерно так: @@ -694,7 +695,7 @@ ingress.networking.k8s.io/req-counter-ingress unchanged service/req-counter-service unchanged ``` -Как можно видеть изменился только наш `Deployment`. +Как можно видеть, изменился только наш `Deployment`. Остальные ресурсы остались нетронутыми. Давайте посмотрим на поды в нашем неймспейсе. @@ -711,16 +712,15 @@ req-counter-deployment-764476db97-x28fr 1/1 Running 0 69s нашего приложения. -Теперь я пойду и выполню кучу запросов по адресу http://req-counter.local/ -и получу балансировку между подами из коробки, без дополнительных +Теперь можно выполнить кучу запросов по адресу http://req-counter.local/ +и получить балансировку между подами из коробки, без дополнительных конфигураций. Если у вас не получается найти адрес. Добавьте данный хост себе в `/etc/hosts` на линуксе или в `C:\Windows\System32\drivers\etc\hosts` на windows, дописав в конец файла следующее: -``` -... +```[/etc/hosts] 127.0.0.1 req-couter.local ``` diff --git a/layouts/default.vue b/layouts/default.vue index 80912f7..0577cdf 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -3,7 +3,7 @@