Fixed grammar issues and logo.
Signed-off-by: Pavel Kirilin <win10@list.ru>
This commit is contained in:
@ -9,12 +9,12 @@ category: DevOps
|
|||||||
# Разделение докера на среды
|
# Разделение докера на среды
|
||||||
|
|
||||||
Должен ли ты разделять среды докера в несколько `docker-compose` файлов?
|
Должен ли ты разделять среды докера в несколько `docker-compose` файлов?
|
||||||
Определенно! В некоторых случаях невозможно разобраться что разработчики хотели сделать или почему ничего не работает. Настройка раздельных сред может стать настоязей мешанино. В этой статье я покажу как настроить `docker-compose` и избежать миллиона проблем.
|
Определенно! В некоторых случаях невозможно разобраться что разработчики хотели сделать или почему ничего не работает. Настройка раздельных сред может стать настояшей мешаниной. В этой статье я покажу как настроить `docker-compose` и избежать миллиона проблем.
|
||||||
|
|
||||||
Как мы вообще можем разделить среды для локальной разработки и продовые?
|
Как мы вообще можем разделить среды для локальной разработки и продовые?
|
||||||
Отет прост: Требуется декомпозировать проект и создать отдельные файлы под каждую из сред или даже сервисов.
|
Отет прост: Требуется декомпозировать проект и создать отдельные файлы под каждую из сред или даже сервисов.
|
||||||
|
|
||||||
Это нормально, если у тебя будет больше 2-ч `docker-compose` файлов.
|
Это нормально, если у тебя будет больше 2-х `docker-compose` файлов.
|
||||||
|
|
||||||
Например:
|
Например:
|
||||||
```
|
```
|
||||||
@ -33,9 +33,9 @@ deploy
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Как это работает?
|
### Как это работает?
|
||||||
Докер умеет работать с множеством `docker-compose` файлов одновременно.И мы можем использовать это для разделения сред.
|
Докер умеет работать с множеством `docker-compose` файлов одновременно. И мы можем использовать это для разделения сред.
|
||||||
|
|
||||||
Выглядит это следующим образом.
|
Запуск таких конфигураций выглядит следующим образом:
|
||||||
```bash
|
```bash
|
||||||
docker-compose \
|
docker-compose \
|
||||||
-f "deploy/docker-compose.yml" \
|
-f "deploy/docker-compose.yml" \
|
||||||
@ -46,12 +46,11 @@ docker-compose \
|
|||||||
|
|
||||||
В каждом из этих файлов определен какой-то кусок конфигурации, который не пересекается. Например в `docker-compose.yml` определено приложение и некоторые необходимые сервисы, а в остальных файлах добавляются сервисы или меняются значения предыдущих.
|
В каждом из этих файлов определен какой-то кусок конфигурации, который не пересекается. Например в `docker-compose.yml` определено приложение и некоторые необходимые сервисы, а в остальных файлах добавляются сервисы или меняются значения предыдущих.
|
||||||
|
|
||||||
Наверное, тут проще на примере пояснить.
|
Наверное, тут проще показать на примере.
|
||||||
|
|
||||||
Допустим у нас есть проект, у которого поднимается бекенд с параметрами, которые отличаются на проде и локально.
|
Допустим у нас есть проект, у которого поднимается бекенд с параметрами, которые отличаются на проде и локально.
|
||||||
|
|
||||||
Для простоты создадим простецикий проект со следующей структурой.
|
Для простоты примера создадим простецкий проект со следующей структурой:
|
||||||
|
|
||||||
```
|
```
|
||||||
proj
|
proj
|
||||||
├── deploy
|
├── deploy
|
||||||
@ -66,7 +65,7 @@ proj
|
|||||||
from sys import argv # это аргуметы переданные в скрипт
|
from sys import argv # это аргуметы переданные в скрипт
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print("; ".join(argv[1:])) # выводитна экран все аргументы программы
|
print("; ".join(argv[1:])) # выводит на экран все аргументы программы
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
@ -6,9 +6,12 @@ category: 'DevOps'
|
|||||||
---
|
---
|
||||||
|
|
||||||
# Makefiles для чайников
|
# Makefiles для чайников
|
||||||
Если описывать в двух словах, то это просто описание команд для упрощения работы с проектом. Изначально делались для того, чтобы удобно компилировать всякие проекты на любых языках.
|
Что такое мейкфайлы? Вы наверняка их встречали,
|
||||||
|
если собирали проекты из ихсодных файлов.
|
||||||
|
Если описывать в двух словах, то это просто описание команд для упрощения работы
|
||||||
|
с проектом. Изначально делались для того, чтобы удобно компилировать всякие проекты на любых языках.
|
||||||
|
|
||||||
## Как они работают
|
## Как они работают?
|
||||||
Достаточно просто.
|
Достаточно просто.
|
||||||
|
|
||||||
Вот пример `Makefile`:
|
Вот пример `Makefile`:
|
||||||
@ -37,7 +40,7 @@ Hi!
|
|||||||
|
|
||||||
## Зависимости таргетов
|
## Зависимости таргетов
|
||||||
|
|
||||||
На строчке объявления таргета `run` видно, что объявлен `test.gen`. Это зависимость данного таргета и она будет вызвана до того, как выполнится скрипт описываемого таргета. Таких зависимостей может быть много, перечисляются они чере пробел.
|
На строчке объявления таргета `run` видно, что объявлен `test.gen`. Это зависимость данного таргета и она будет вызвана до того, как выполнится скрипт описываемого таргета. Таких зависимостей может быть много, перечисляются они через пробел.
|
||||||
|
|
||||||
Например:
|
Например:
|
||||||
```makefile{}[Makefile]
|
```makefile{}[Makefile]
|
||||||
@ -96,7 +99,7 @@ memes
|
|||||||
|
|
||||||
## Валидация сгенерированных файлов
|
## Валидация сгенерированных файлов
|
||||||
Зачастую `Makefile` используют для компиляции С и зачастую требуется
|
Зачастую `Makefile` используют для компиляции С и зачастую требуется
|
||||||
собрать какую-либо часть проект и пропустить сборку этой части, если эта часть уже собрана.
|
собрать какую-либо часть проекта в файл и пропустить сборку этого файла, если он уже собран.
|
||||||
Раскрою секрет, в Makefile это базовый функционал.
|
Раскрою секрет, в Makefile это базовый функционал.
|
||||||
|
|
||||||
Давайте немного поменяем первый Makefile и запустим дважды.
|
Давайте немного поменяем первый Makefile и запустим дважды.
|
||||||
|
@ -7,15 +7,15 @@ position: 4
|
|||||||
|
|
||||||
# Проблема в изучении кубернетес
|
# Проблема в изучении кубернетес
|
||||||
|
|
||||||
Многие люди, кто задавались вопросом как начать работать с
|
Многие люди, кто задавались вопросом "Как начать работать с
|
||||||
кубернетесом сталкивались с тем, что документация крайне
|
кубернетес?", сталкивались с тем, что документация крайне
|
||||||
большая сложная и нет нормального описания как
|
большая сложная и нет нормального описания как
|
||||||
завернуть маленький проект из одного проекта в свой кластер или
|
завернуть маленький проект из одного контейнра в свой кластер или
|
||||||
как развернуть свой кластер без боли.
|
как развернуть сам кластер без боли.
|
||||||
|
|
||||||
А всё потому что вся документация нацелена на большие
|
А всё потому что вся документация нацелена на большие
|
||||||
production-ready системы с большим rps и тому подобным.
|
production-ready системы с большим rps и тому подобным.
|
||||||
|
<br>
|
||||||
В данной статье я попробую исправить это вселенское
|
В данной статье я попробую исправить это вселенское
|
||||||
недопонимание используя k3s, свой комплюктер и немного знаний по кодингу.
|
недопонимание используя k3s, свой комплюктер и немного знаний по кодингу.
|
||||||
|
|
||||||
@ -28,12 +28,12 @@ production-ready системы с большим rps и тому подобны
|
|||||||
# Что такое кубернетес и почему это лучше докера
|
# Что такое кубернетес и почему это лучше докера
|
||||||
|
|
||||||
Многие ребята, кто хорошо знаком с докером и его
|
Многие ребята, кто хорошо знаком с докером и его
|
||||||
возможностями могут задаваться таким вопросом.
|
возможностями, могут задаваться таким вопросом.
|
||||||
Для тех кто в танке, напомню, что докер
|
Для тех кто в танке, напомню, что докер
|
||||||
имеет вариант запуска в режиме кластера.
|
имеет вариант запуска в режиме кластера.
|
||||||
Этот функционал называется docker swarm.
|
Этот функционал называется [docker swarm](https://docs.docker.com/engine/swarm/).
|
||||||
В целом, swarm отдалённо напоминает kubernetes,
|
В целом, swarm отдалённо напоминает kubernetes,
|
||||||
так как в этом режиме докер, худо-бедно но умеет
|
так как в этом режиме докер худо-бедно умеет
|
||||||
автоскейлится и запускаться в кластере,
|
автоскейлится и запускаться в кластере,
|
||||||
но это всё равно немного не то.
|
но это всё равно немного не то.
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ production-ready системы с большим rps и тому подобны
|
|||||||
|
|
||||||
Так как я в этой статье хотел затронуть
|
Так как я в этой статье хотел затронуть
|
||||||
совсем базовые и практические вещи, то рассматривать
|
совсем базовые и практические вещи, то рассматривать
|
||||||
мы будем только крайне полезные компоненты.
|
мы будем только самые часто используемые компоненты.
|
||||||
|
|
||||||
- Container
|
- Container
|
||||||
- Pod
|
- Pod
|
||||||
@ -65,12 +65,12 @@ production-ready системы с большим rps и тому подобны
|
|||||||
- Secret
|
- Secret
|
||||||
- ConfigMap
|
- ConfigMap
|
||||||
|
|
||||||
А теперь рассмотрим немного поподробнее.
|
А теперь рассмотрим каждый ресурс немного поподробнее.
|
||||||
|
|
||||||
## Container
|
## Container
|
||||||
|
|
||||||
Контейнеры не то чтобы часть специфичная для кубернетес.
|
Контейнеры не являются чем-то специфичным для кубернетес.
|
||||||
С контейнерами вы можете быть знакомы из кучи систем.
|
С контейнерами вы можете быть знакомы из кучи других систем.
|
||||||
В контексте кубера они не обладают никакими дополнительными
|
В контексте кубера они не обладают никакими дополнительными
|
||||||
свойствами. Это ровно то же, что и контейнеры `containerd`
|
свойствами. Это ровно то же, что и контейнеры `containerd`
|
||||||
или те, с которыми вы возились с докером. Ничего нового.
|
или те, с которыми вы возились с докером. Ничего нового.
|
||||||
@ -80,9 +80,9 @@ production-ready системы с большим rps и тому подобны
|
|||||||
|
|
||||||
<b-message type="is-warning" has-icon>
|
<b-message type="is-warning" has-icon>
|
||||||
|
|
||||||
Важная ремарка. Кубер начиная с 2021 кубернетес не поддерживает
|
Важная ремарка. Кубер, начиная с 2021 года, не поддерживает
|
||||||
докер как бэкенд. Теперь кубер будет общаться с
|
докер как бэкенд. Теперь он будет общаться с
|
||||||
containerd напрямую. Это значит, что теперь перед использованием
|
containerd напрямую. Это значит, что перед использованием
|
||||||
контейнеров собранных на локальной машине надо будет импортировать их
|
контейнеров собранных на локальной машине надо будет импортировать их
|
||||||
в `containerd` используя `ctr image import`.
|
в `containerd` используя `ctr image import`.
|
||||||
|
|
||||||
@ -101,9 +101,9 @@ production-ready системы с большим rps и тому подобны
|
|||||||
|
|
||||||
В поде находится от одного до множества контейнеров.
|
В поде находится от одного до множества контейнеров.
|
||||||
Интересная особенность пода в том, что все контейнеры
|
Интересная особенность пода в том, что все контейнеры
|
||||||
делят один сетевой адресс. Другими словами,
|
делят один сетевой адрес. Другими словами,
|
||||||
если у вас один из контейнеров открыл порт `3000`,
|
если у вас один из контейнеров открыл порт `3000`,
|
||||||
то другие контейнеры из пода эти порты использовать не смогут.
|
то другие контейнеры из пода этот порт использовать не смогут.
|
||||||
|
|
||||||
То есть, если вы хотите логически связанные приложения
|
То есть, если вы хотите логически связанные приложения
|
||||||
поместить в под, то они могут ходить друг к другу через лупбек
|
поместить в под, то они могут ходить друг к другу через лупбек
|
||||||
@ -120,10 +120,10 @@ production-ready системы с большим rps и тому подобны
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Deployment нужна именно для описания подов и создания
|
Deployment нужен именно для описания подов и создания
|
||||||
некоторых ресурсов, нужных для скейлинга.
|
некоторых ресурсов, нужных для скейлинга.
|
||||||
Также с помощью деплойментов можно делать откаты приложения через
|
Также с помощью деплойментов можно делать откаты приложения через
|
||||||
механиз роллбеков. Я это рассматривать не буду. Тут только база.
|
механиз роллбеков. Я это рассматривать не буду. В этой статье только база.
|
||||||
|
|
||||||
## Service
|
## Service
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ Deployment нужна именно для описания подов и соз
|
|||||||
Также сервис выступает как балансировщик.
|
Также сервис выступает как балансировщик.
|
||||||
|
|
||||||
<b-message type="is-info" has-icon>
|
<b-message type="is-info" has-icon>
|
||||||
Если вы хотите сделать запрос от одного пода до дргого внутри кластера, то
|
Если вы хотите сделать запрос от одного пода до дргого, внутри кластера, то
|
||||||
вам придётся использовать сервис.
|
вам придётся использовать сервис.
|
||||||
<br>
|
<br>
|
||||||
Если вы попробуете сделать запрос напрямую по IP пода, то у вас, конечно же,
|
Если вы попробуете сделать запрос напрямую по IP пода, то у вас, конечно же,
|
||||||
@ -157,7 +157,7 @@ Deployment нужна именно для описания подов и соз
|
|||||||
|
|
||||||
## Ingress
|
## Ingress
|
||||||
|
|
||||||
Ингрессы это сервис описывающий куда пускать трафик,
|
Ингресс - это сервис описывающий куда пускать трафик,
|
||||||
который поступает снаружи кластера.
|
который поступает снаружи кластера.
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
@ -168,9 +168,9 @@ Deployment нужна именно для описания подов и соз
|
|||||||
|
|
||||||
Принцип работы ингресса следующий:
|
Принцип работы ингресса следующий:
|
||||||
|
|
||||||
Вы указываете хост ингресса и различные регексы пути.
|
Вы указываете хост ингресса и различные пути.
|
||||||
В зависимости от входящего запроса ингресс выбирает в какой сервис
|
В зависимости от входящего запроса ингресс выбирает в какой сервис
|
||||||
направить его и в какой порт.
|
направить запрос и в какой порт.
|
||||||
|
|
||||||
Настройка ингресса достаточно гибкая и я не думаю,
|
Настройка ингресса достаточно гибкая и я не думаю,
|
||||||
что вы можете столкнуться с какими либо проблемами.
|
что вы можете столкнуться с какими либо проблемами.
|
||||||
@ -218,10 +218,10 @@ Deployment нужна именно для описания подов и соз
|
|||||||
- minikube
|
- minikube
|
||||||
|
|
||||||
На первый взгляд minikube может показаться лучшим вариантом.
|
На первый взгляд minikube может показаться лучшим вариантом.
|
||||||
И он действительно хорош тем, что его легко почистить после
|
И он действительно хорош тем, что его легко развернуть и почистить после
|
||||||
своих экспериментов. Однако, там есть проблемы с ингрессами.
|
своих экспериментов. Однако, там есть проблемы с ингрессами.
|
||||||
По факту они не работают и там надо окольными путями получать
|
По факту они не работают и там надо окольными путями получать
|
||||||
адреса приложения.
|
адреса.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@ -238,11 +238,10 @@ k3s - это легковесная production-ready реализация k8s. I
|
|||||||
|
|
||||||
## Подключение кластера
|
## Подключение кластера
|
||||||
|
|
||||||
После установки в домашней дериктории должен был быть
|
После установки `kubectl` в домашней дериктории должен был быть
|
||||||
сгенерирован файл `.kube/config`. Этот файл содержит данные для
|
сгенерирован файл `.kube/config`. Этот файл содержит данные для
|
||||||
подключения к различным кластерам. `minikube` Сам добавляет
|
подключения к различным кластерам. `minikube` Сам добавляет
|
||||||
ключи для подключения к .kube/config. `K3S` не изменяет
|
ключи для подключения к .kube/config. `K3S` никак не изменяет `.kube/config`, поэтому надо будет это сделать вручную.
|
||||||
никаким образом `.kube/config`, поэтому надо будет это сделать вручную.
|
|
||||||
|
|
||||||
Для того, чтобы это сделать сначала разберёмся как выглядит конфиг.
|
Для того, чтобы это сделать сначала разберёмся как выглядит конфиг.
|
||||||
|
|
||||||
@ -298,27 +297,28 @@ current-context: "k3s"
|
|||||||
можете передать параметр `--context $CONTEXT_NAME`, где `$CONTEXT_NAME` это название контекста.
|
можете передать параметр `--context $CONTEXT_NAME`, где `$CONTEXT_NAME` это название контекста.
|
||||||
|
|
||||||
Чтобы достать данные для подключения к `k3s` надо посмотреть его конфиг
|
Чтобы достать данные для подключения к `k3s` надо посмотреть его конфиг
|
||||||
и скопировать данные. Либо выставить переменную среды, которая будет
|
и скопировать данные. Либо выставить переменную среды `KUBECONFIG`, которая будет
|
||||||
указывать конфиг k3s. Конфиг подключения `k3s` лежит в файле `/etc/rancher/k3s/k3s.yaml`.
|
указывать конфиг k3s. Конфиг подключения `k3s` лежит в файле `/etc/rancher/k3s/k3s.yaml`.
|
||||||
|
|
||||||
Можете выполнить команду, которая будет просить kubectl использовать указанный конфиг:
|
Можете выполнить команду, которая будет просить kubectl использовать указанный конфиг:
|
||||||
`export KUBE_CONFIG=/etc/rancher/k3s/k3s.yaml`
|
`export KUBECONFIG=/etc/rancher/k3s/k3s.yaml`
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Либо скопируйте нужные данные для подключения себе в `.kube/config`.
|
Либо скопируйте нужные данные для подключения себе в `.kube/config`.
|
||||||
|
|
||||||
После настройки выполните команду и проверьте что вам вернулось
|
После настройки выполните команду и проверьте что вам вернулось
|
||||||
что-то подобное. Это значит, что никаких ресурсов пока в
|
что-то подобное.
|
||||||
кластере нет. Это мы исправим позже. Пока что можно сказать,
|
|
||||||
что подключение прошло успешно.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl --context "my-context" get pods
|
$ kubectl --context "my-context" get pods
|
||||||
No resources found in default namespace.
|
No resources found in default namespace.
|
||||||
```
|
```
|
||||||
|
|
||||||
Если же у вас выпадает ошибка, например такая.
|
Это значит, что никаких ресурсов пока в
|
||||||
|
кластере нет. Это мы исправим чуть позже. Пока что можно сказать,
|
||||||
|
что подключение прошло успешно.
|
||||||
|
Если же у вас выпадает ошибка, например такая:
|
||||||
|
|
||||||
```
|
```
|
||||||
The connection to the server localhost:8080 was refused - did you specify the right host or port?
|
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](https://k8slens.dev/). Это крайне
|
||||||
удобный интерфейс для управления своим кластером.
|
удобный интерфейс для управления своим кластером.
|
||||||
Также там есть очень клёвая настрока, которая сама включит мониторинг
|
Также там есть очень клёвая настройка, которая сама включит мониторинг
|
||||||
потребления памяти и процессора для всех подов и кластера в общем.
|
потребления памяти и процессора для всех подов и кластера в общем.
|
||||||
|
|
||||||
На локальной машине это не очень много смысла имеет,
|
На локальной машине это не имеет смысла,
|
||||||
а вот в проде было бы очень полезно.
|
а вот в проде было бы очень полезно.
|
||||||
|
|
||||||
Выглядит Lens примерно так:
|
Выглядит Lens примерно так:
|
||||||
@ -437,7 +438,7 @@ app.listen(port, host, () => {
|
|||||||
Это всё. Сервер готов.
|
Это всё. Сервер готов.
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
Протестируем запуск сервера выполнив команду ниже и открыв в
|
Протестируем запуск сервера, выполнив команду ниже и открыв в
|
||||||
своём любимом браузере http://localhost:8080.
|
своём любимом браузере 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/) и использовать его.
|
- Вы можете запушить собранное приложение в [Docker HUB](https://hub.docker.com/) и использовать его.
|
||||||
- Можете использовать мой образ `s3rius/req-counter-express:latest`
|
- Можете использовать мой образ `s3rius/req-counter-express:latest`
|
||||||
- Импортировать собранный образ как tar файл и импортировать его в containerd напрямую.
|
- Сохранить собранный образ как tar файл и импортировать его в containerd напрямую.
|
||||||
Как это сделать почитать можно в [этой статье](https://cwienczek.com/2020/06/import-images-to-k3s-without-docker-registry/).
|
Как это сделать почитать можно в [этой статье](https://cwienczek.com/2020/06/import-images-to-k3s-without-docker-registry/).
|
||||||
|
|
||||||
### Деплой в k8s
|
### Деплой в k8s
|
||||||
@ -645,7 +646,7 @@ service/req-counter-service created
|
|||||||
Готово. Теперь вы можете зайти в lens, выбрать свой кластер из списка
|
Готово. Теперь вы можете зайти в lens, выбрать свой кластер из списка
|
||||||
и посмотреть как там поживает ваше приложение.
|
и посмотреть как там поживает ваше приложение.
|
||||||
|
|
||||||
Также не забудьте указать неймспей, в который вы беплоиди приложение.
|
Также не забудьте указать неймспейс, в который вы деплоили приложение.
|
||||||
|
|
||||||
Выглядит это чудо примерно так:
|
Выглядит это чудо примерно так:
|
||||||
|
|
||||||
@ -694,7 +695,7 @@ ingress.networking.k8s.io/req-counter-ingress unchanged
|
|||||||
service/req-counter-service 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` на линуксе или в `C:\Windows\System32\drivers\etc\hosts` на windows,
|
||||||
дописав в конец файла следующее:
|
дописав в конец файла следующее:
|
||||||
|
|
||||||
```
|
```[/etc/hosts]
|
||||||
...
|
|
||||||
127.0.0.1 req-couter.local
|
127.0.0.1 req-couter.local
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<b-navbar type="is-primary w-100" :fixed-top="true">
|
<b-navbar type="is-primary w-100" :fixed-top="true">
|
||||||
<template #brand>
|
<template #brand>
|
||||||
<NuxtLink to="/" class="navbar-item">
|
<NuxtLink to="/" class="navbar-item">
|
||||||
<img src="/icon.png" alt="Logo" /> Dev blog
|
<img src="/logo.png" alt="Logo" /> Dev blog
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</template>
|
</template>
|
||||||
<template #end>
|
<template #end>
|
||||||
|
@ -13,8 +13,12 @@ export default {
|
|||||||
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
||||||
{ hid: 'description', name: 'description', content: '' },
|
{ hid: 'description', name: 'description', content: '' },
|
||||||
{ name: 'format-detection', content: 'telephone=no' },
|
{ name: 'format-detection', content: 'telephone=no' },
|
||||||
|
{ hid: "og:image", name: 'og:image', content: "https://s3rius.blog/icon.png"}
|
||||||
],
|
],
|
||||||
link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }],
|
link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }],
|
||||||
|
headAttrs: {
|
||||||
|
"prefix": "og: http://ogp.me/ns#"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Global CSS: https://go.nuxtjs.dev/config-css
|
// Global CSS: https://go.nuxtjs.dev/config-css
|
||||||
|
@ -48,12 +48,6 @@ export default defineComponent({
|
|||||||
name: 'og:image',
|
name: 'og:image',
|
||||||
content: doc.image,
|
content: doc.image,
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
meta_data.push({
|
|
||||||
hid: 'og:image',
|
|
||||||
name: 'og:image',
|
|
||||||
content: 'https://s3rius.blog/logo.png',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
meta.value = meta_data
|
meta.value = meta_data
|
||||||
})
|
})
|
||||||
|
BIN
static/icon.png
BIN
static/icon.png
Binary file not shown.
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 40 KiB |
BIN
static/logo.png
Normal file
BIN
static/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Reference in New Issue
Block a user