🤔 В чём преимущество Kubernetes как платформы?
Это платформа для оркестрации контейнеров, которая упрощает развертывание, управление и масштабирование приложений. Она имеет ряд ключевых преимуществ, которые делают её популярной в DevOps и облачных решениях.
🚩Основные плюсы
➕Автоматизация управления приложениями
Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости.
➕Масштабирование (горизонтальное и вертикальное)
Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки.
➕Высокая доступность (HA)
Kubernetes поддерживает отказоустойчивость: Если один узел (node) выходит из строя, поды перемещаются на другие узлы. Внутренний балансировщик нагрузки распределяет трафик между подами.
➕Платформонезависимость
Kubernetes работает в любых средах: Локальных (например, Minikube). В публичных облаках (AWS, Google Cloud, Azure). В гибридных и on-premise инфраструктурах.
➕Управление конфигурацией и секретами
Kubernetes упрощает работу с настройками: ConfigMaps: Для управления конфигурационными данными.
Secrets: Для безопасного хранения конфиденциальной информации, например, ключей API или паролей.
➕Эффективное использование ресурсов
Kubernetes помогает оптимизировать потребление CPU и памяти: Устанавливая минимальные и максимальные лимиты ресурсов для каждого приложения. Перераспределяя ресурсы между приложениями.
➕Расширяемость
Kubernetes поддерживает плагины и кастомизацию: Сетевые плагины (Calico, Flannel) для настройки сети. Системы мониторинга (Prometheus, Grafana). Операторы для автоматизации сложных задач.
➕Сообщество и экосистема
Kubernetes поддерживается большинством крупных облачных провайдеров. Обширная экосистема инструментов: Helm для управления шаблонами, ArgoCD для GitOps, Istio для сетевых взаимодействий.
🚩Когда особенно полезен?
Разработка микросервисных архитектур. Частые релизы и автоматизация CI/CD. Работа с масштабируемыми приложениями. Использование гибридных или мультиоблачных решений.
Ставь 👍 и забирай 📚 Базу знаний
Это платформа для оркестрации контейнеров, которая упрощает развертывание, управление и масштабирование приложений. Она имеет ряд ключевых преимуществ, которые делают её популярной в DevOps и облачных решениях.
🚩Основные плюсы
➕Автоматизация управления приложениями
Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости.
➕Масштабирование (горизонтальное и вертикальное)
Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки.
➕Высокая доступность (HA)
Kubernetes поддерживает отказоустойчивость: Если один узел (node) выходит из строя, поды перемещаются на другие узлы. Внутренний балансировщик нагрузки распределяет трафик между подами.
➕Платформонезависимость
Kubernetes работает в любых средах: Локальных (например, Minikube). В публичных облаках (AWS, Google Cloud, Azure). В гибридных и on-premise инфраструктурах.
➕Управление конфигурацией и секретами
Kubernetes упрощает работу с настройками: ConfigMaps: Для управления конфигурационными данными.
Secrets: Для безопасного хранения конфиденциальной информации, например, ключей API или паролей.
➕Эффективное использование ресурсов
Kubernetes помогает оптимизировать потребление CPU и памяти: Устанавливая минимальные и максимальные лимиты ресурсов для каждого приложения. Перераспределяя ресурсы между приложениями.
➕Расширяемость
Kubernetes поддерживает плагины и кастомизацию: Сетевые плагины (Calico, Flannel) для настройки сети. Системы мониторинга (Prometheus, Grafana). Операторы для автоматизации сложных задач.
➕Сообщество и экосистема
Kubernetes поддерживается большинством крупных облачных провайдеров. Обширная экосистема инструментов: Helm для управления шаблонами, ArgoCD для GitOps, Istio для сетевых взаимодействий.
🚩Когда особенно полезен?
Разработка микросервисных архитектур. Частые релизы и автоматизация CI/CD. Работа с масштабируемыми приложениями. Использование гибридных или мультиоблачных решений.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что в Terraform пишут в манифест?
- В .tf-файлах описывают:
- provider — с какой платформой работать;
- resource — что создать (VM, bucket, сеть);
- variable — параметры;
- output — что вернуть;
- module — переиспользуемые блоки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- В .tf-файлах описывают:
- provider — с какой платформой работать;
- resource — что создать (VM, bucket, сеть);
- variable — параметры;
- output — что вернуть;
- module — переиспользуемые блоки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2👍1
🤔 Какие есть лучшие практики в использовании инструкции add и copy?
🚩Лучшие практики по использованию `COPY` и `ADD`
🟠Используйте `COPY` вместо `ADD`, если не нужно распаковывать архивы
Плохо (избыточное использование
Хорошо (явное распаковывание в
🟠Минимизируйте число `COPY` и `ADD`, чтобы уменьшить размер образа
Плохо (копируем всё без исключений)
Хорошо (копируем только нужные файлы)
Добавьте
🟠Копируйте только изменяемые файлы, чтобы ускорить кэширование
Плохо (изменение кода приводит к пересборке зависимостей)**
Хорошо (сначала зависимости, потом код)
🟠Не используйте `ADD` для загрузки файлов из интернета
Плохо (
🟠Хорошо (используем
Ставь 👍 и забирай 📚 Базу знаний
ADD и COPY — это инструкции Dockerfile, которые копируют файлы в контейнер. Их использование влияет на размер образа, безопасность и производительность сборки. 🚩Лучшие практики по использованию `COPY` и `ADD`
🟠Используйте `COPY` вместо `ADD`, если не нужно распаковывать архивы
Плохо (избыточное использование
ADD) ADD app.tar.gz /app/
Хорошо (явное распаковывание в
RUN) COPY app.tar.gz /tmp/
RUN tar -xzf /tmp/app.tar.gz -C /app && rm /tmp/app.tar.gz
🟠Минимизируйте число `COPY` и `ADD`, чтобы уменьшить размер образа
Плохо (копируем всё без исключений)
COPY . /app
Хорошо (копируем только нужные файлы)
COPY src/ /app/src/
COPY requirements.txt /app/
Добавьте
.dockerignore.git
node_modules
__pycache__
*.log
🟠Копируйте только изменяемые файлы, чтобы ускорить кэширование
Плохо (изменение кода приводит к пересборке зависимостей)**
COPY . /app
RUN pip install -r /app/requirements.txt
Хорошо (сначала зависимости, потом код)
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY src/ /app/src/
🟠Не используйте `ADD` для загрузки файлов из интернета
Плохо (
ADD загружает файл, но не кэшируется) ADD https://example.com/file.tar.gz /tmp/
🟠Хорошо (используем
RUN curl + COPY) RUN curl -L -o /tmp/file.tar.gz https://example.com/file.tar.gz
COPY file.tar.gz /app/
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Что такое producer в Kafka?
Producer — это отправитель сообщений.
Он:
- сериализует данные;
- определяет топик и партицию;
- отправляет сообщения в Kafka брокер.
Producer может быть синхронным или асинхронным.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Producer — это отправитель сообщений.
Он:
- сериализует данные;
- определяет топик и партицию;
- отправляет сообщения в Kafka брокер.
Producer может быть синхронным или асинхронным.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие есть три вида монтирования в докере?
В Docker есть три типа монтирования данных в контейнеры:
Volumes (Тома) – рекомендуемый способ хранения данных
Bind Mounts (Привязанные тома) – монтирование локальных файлов/папок
Tmpfs (Временное хранилище в RAM) – для быстрого доступа без записи на диск
🚩Volumes (Тома) – лучший вариант хранения данных
Данные хранятся внутри Docker (
Можно использовать в нескольких контейнерах
Не зависят от файловой системы хоста
Удаление тома (только если он не используется)
🚩Bind Mounts (Привязанные тома) – монтирование папок с хоста
Монтирует директорию с хоста в контейнер
Изменения сразу видны на хосте
Зависит от структуры файлов на хосте
🚩Tmpfs (Временное хранилище в RAM) – быстрый, но не сохраняющийся вариант
Хранит данные в оперативной памяти (RAM)
Очень быстрое чтение/запись
Пропадает при перезапуске контейнера
Пример: создать
Ставь 👍 и забирай 📚 Базу знаний
В Docker есть три типа монтирования данных в контейнеры:
Volumes (Тома) – рекомендуемый способ хранения данных
Bind Mounts (Привязанные тома) – монтирование локальных файлов/папок
Tmpfs (Временное хранилище в RAM) – для быстрого доступа без записи на диск
🚩Volumes (Тома) – лучший вариант хранения данных
Данные хранятся внутри Docker (
/var/lib/docker/volumes) Можно использовать в нескольких контейнерах
Не зависят от файловой системы хоста
sh
docker volume create mydata
docker run -d -v mydata:/app/data --name mycontainer ubuntu
Удаление тома (только если он не используется)
sh
docker volume rm mydata
🚩Bind Mounts (Привязанные тома) – монтирование папок с хоста
Монтирует директорию с хоста в контейнер
Изменения сразу видны на хосте
Зависит от структуры файлов на хосте
sh
docker run -d -v /home/user/logs:/app/logs --name mycontainer ubuntu
🚩Tmpfs (Временное хранилище в RAM) – быстрый, но не сохраняющийся вариант
Хранит данные в оперативной памяти (RAM)
Очень быстрое чтение/запись
Пропадает при перезапуске контейнера
Пример: создать
tmpfs-монтирование для /app/cache sh
docker run -d --tmpfs /app/cache:size=100m --name mycontainer ubuntu
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Какие бывают виды дополнительных контейнеров в поде?
Дополнительные контейнеры включают init-контейнеры для подготовки среды и sidecar-контейнеры для дополнительных задач, таких как логирование или прокси.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какая компонента запускает под на ноде, какая отвечает за сеть?
В Kubernetes разные компоненты отвечают за запуск подов и сетевые настройки.
🚩Какая компонента запускает под на ноде? (`kubelet`)
Получает команды от
Запускает контейнеры через Container Runtime (Docker, containerd, CRI-O)
Следит за состоянием подов и перезапускает их при сбоях
Посмотреть логи
🚩Какая компонента отвечает за сеть? (CNI)
Назначает IP-адреса подам
Организует маршрутизацию трафика между подами и нодами
Настраивает Network Policies (безопасность сети)
Проверить работающие сетевые плагины
Вывод (если CNI работает нормально)
Если CNI не работает, поды могут застрять в
Ставь 👍 и забирай 📚 Базу знаний
В Kubernetes разные компоненты отвечают за запуск подов и сетевые настройки.
🚩Какая компонента запускает под на ноде? (`kubelet`)
Получает команды от
kube-scheduler (назначение подов) Запускает контейнеры через Container Runtime (Docker, containerd, CRI-O)
Следит за состоянием подов и перезапускает их при сбоях
systemctl status kubelet
Посмотреть логи
kubelet journalctl -u kubelet -f
🚩Какая компонента отвечает за сеть? (CNI)
Назначает IP-адреса подам
Организует маршрутизацию трафика между подами и нодами
Настраивает Network Policies (безопасность сети)
Проверить работающие сетевые плагины
kubectl get pods -n kube-system
Вывод (если CNI работает нормально)
NAME READY STATUS RESTARTS AGE
calico-node-xyz 1/1 Running 2 3d
Если CNI не работает, поды могут застрять в
ContainerCreating kubectl get pods
NAME READY STATUS RESTARTS AGE
web-server 0/1 ContainerCreating 0 10m
Ставь 👍 и забирай 📚 Базу знаний
🔥2
🤔 Какое практическое использование DaemonSet?
DaemonSet запускает по одному экземпляру пода на каждой ноде (или выбранных). Используется для:
- мониторинга (Prometheus Node Exporter, Fluentd);
- логгирования;
- установки агентов безопасности;
- настройки хостовых ресурсов на каждой ноде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
DaemonSet запускает по одному экземпляру пода на каждой ноде (или выбранных). Используется для:
- мониторинга (Prometheus Node Exporter, Fluentd);
- логгирования;
- установки агентов безопасности;
- настройки хостовых ресурсов на каждой ноде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Что сейчас больше используется ингресс класс в ингрессе или указывается ингресс контроллер непосредственно в апликейшене?
Сейчас стандартом является использование
🚩Что лучше использовать?
🟠`ingressClassName` (новый метод, Kubernetes 1.19+)
Современный, удобный, поддерживается официально
Работает с
Можно управлять через CRD (
🟠Аннотация `kubernetes.io/ingress.class` (старый метод, deprecated с 1.18)
Все еще работает, но устарела
Нельзя контролировать
🚩Как правильно указывать `ingressClassName`?
1⃣Настраиваем
2⃣Используем
🚩Старый способ (не рекомендуется, но все еще встречается)
Раньше использовали аннотацию
Ставь 👍 и забирай 📚 Базу знаний
Сейчас стандартом является использование
ingressClassName, а аннотации kubernetes.io/ingress.class считаются устаревшими (deprecated). 🚩Что лучше использовать?
🟠`ingressClassName` (новый метод, Kubernetes 1.19+)
Современный, удобный, поддерживается официально
Работает с
IngressClass ресурсами Можно управлять через CRD (
IngressClass) 🟠Аннотация `kubernetes.io/ingress.class` (старый метод, deprecated с 1.18)
Все еще работает, но устарела
Нельзя контролировать
IngressClass через CRD 🚩Как правильно указывать `ingressClassName`?
1⃣Настраиваем
IngressClass (если нужно) yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx
2⃣Используем
ingressClassName в Ingressyaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
🚩Старый способ (не рекомендуется, но все еще встречается)
Раньше использовали аннотацию
kubernetes.io/ingress.class yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Ставь 👍 и забирай 📚 Базу знаний
🔥2
🤔 Чем отличается CMD от ENTRYPOINT в DockerFile?
CMD задает команду по умолчанию, которая может быть переопределена при запуске контейнера. ENTRYPOINT определяет неизменяемую команду, которая всегда будет выполняться. CMD обычно используется для указания параметров для ENTRYPOINT.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое брокеры сообщений?
Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers).
🚩Основные функции брокеров сообщений
🟠Прием и маршрутизация сообщений
Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys).
🟠Асинхронное взаимодействие
Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы.
🟠Очереди сообщений
Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено.
🟠Гарантированная доставка
Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери.
🟠Распределение нагрузки
Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними.
🟠Фильтрация и маршрутизация
Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации.
🚩Примеры использования брокеров сообщений
🟠Микросервисы
Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми.
🟠Логирование и мониторинг
Сбор логов и метрик от множества источников с их дальнейшей обработкой.
🟠Управление задачами
Постановка задач в очередь для выполнения одним или несколькими воркерами.
🟠Интеграция систем
Связывание разнородных систем, которые обмениваются данными.
🚩Примеры брокеров сообщений
🟠RabbitMQ
Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации.
🟠Apache Kafka
Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени.
🟠Redis (Pub/Sub)
Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния.
🟠ActiveMQ
Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями.
🟠NATS
Легковесный и быстрый брокер для приложений, требующих низкой задержки.
🚩Как работают брокеры сообщений
Producers (отправители) отправляют сообщение в брокер.
Брокер размещает сообщение в соответствующей очереди или теме.
Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди.
🚩Пример использования RabbitMQ
1⃣Отправитель публикует сообщение в очередь:
2⃣Получатель забирает сообщение из очереди:
🚩Плюсы использования
➕Разделение ответственности
Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕Масштабируемость
Легко добавлять новых потребителей или отправителей.
➕Устойчивость к сбоям
Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕Гибкость
Возможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний
Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers).
🚩Основные функции брокеров сообщений
🟠Прием и маршрутизация сообщений
Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys).
🟠Асинхронное взаимодействие
Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы.
🟠Очереди сообщений
Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено.
🟠Гарантированная доставка
Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери.
🟠Распределение нагрузки
Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними.
🟠Фильтрация и маршрутизация
Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации.
🚩Примеры использования брокеров сообщений
🟠Микросервисы
Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми.
🟠Логирование и мониторинг
Сбор логов и метрик от множества источников с их дальнейшей обработкой.
🟠Управление задачами
Постановка задач в очередь для выполнения одним или несколькими воркерами.
🟠Интеграция систем
Связывание разнородных систем, которые обмениваются данными.
🚩Примеры брокеров сообщений
🟠RabbitMQ
Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации.
🟠Apache Kafka
Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени.
🟠Redis (Pub/Sub)
Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния.
🟠ActiveMQ
Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями.
🟠NATS
Легковесный и быстрый брокер для приложений, требующих низкой задержки.
🚩Как работают брокеры сообщений
Producers (отправители) отправляют сообщение в брокер.
Брокер размещает сообщение в соответствующей очереди или теме.
Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди.
🚩Пример использования RabbitMQ
1⃣Отправитель публикует сообщение в очередь:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()
2⃣Получатель забирает сообщение из очереди:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f"Received {body}")
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
🚩Плюсы использования
➕Разделение ответственности
Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕Масштабируемость
Легко добавлять новых потребителей или отправителей.
➕Устойчивость к сбоям
Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕Гибкость
Возможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Отличия Deployment и StatefulSet?
Deployment применяется для stateless-приложений, где не важен порядок и стабильность имён подов. StatefulSet нужен для приложений с состоянием — таких как базы данных — где важна стабильность DNS-имени, порядок запуска и постоянные тома для хранения данных. StatefulSet обеспечивает более строгую и предсказуемую организацию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Deployment применяется для stateless-приложений, где не важен порядок и стабильность имён подов. StatefulSet нужен для приложений с состоянием — таких как базы данных — где важна стабильность DNS-имени, порядок запуска и постоянные тома для хранения данных. StatefulSet обеспечивает более строгую и предсказуемую организацию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4
🤔 Какая может быть проблема если вы подключаетесь к серверу через ssh а вам приходят тикеты, что другие пользователи не могут подключиться по ssh по одной и той же учётной записи
Если вы можете подключиться к серверу по SSH, но другие пользователи, использующие ту же учетную запись, не могут, возможны следующие причины:
🟠Проблема с ограничением количества подключений
В файле конфигурации SSH (
Открываем конфигурацию SSH
Проверяем параметры
Решение
Увеличьте
Перезапустите SSH:
🟠Файл .ssh/authorized_keys имеет неверные права
Если у вас ключевая авторизация, возможно, права на файлы
На сервере выполните:
Если права не
🟠Ограничение по IP (DenyUsers, AllowUsers, TCP Wrappers)
Конфигурация SSH может блокировать подключения для определенных IP или пользователей.
Откройте
Проверьте
🟠Закончились доступные PTY (псевдотерминалы)
Если исчерпан лимит доступных PTY, новые сессии не смогут открываться.
Запустите
Если там слишком много открытых сессий, попробуйте очистить:
или увеличьте лимит в
Ставь 👍 и забирай 📚 Базу знаний
Если вы можете подключиться к серверу по SSH, но другие пользователи, использующие ту же учетную запись, не могут, возможны следующие причины:
🟠Проблема с ограничением количества подключений
В файле конфигурации SSH (
/etc/ssh/sshd_config) могут быть ограничения на число одновременных подключений. Открываем конфигурацию SSH
sudo nano /etc/ssh/sshd_config
Проверяем параметры
MaxSessions 1
MaxStartups 10:30:60
Решение
Увеличьте
MaxSessions, например: MaxSessions 10
Перезапустите SSH:
sudo systemctl restart sshd
🟠Файл .ssh/authorized_keys имеет неверные права
Если у вас ключевая авторизация, возможно, права на файлы
.ssh/authorized_keys нарушены. На сервере выполните:
ls -l ~/.ssh/authorized_keys
Если права не
600, исправьте chmod 600 ~/.ssh/authorized_keys
🟠Ограничение по IP (DenyUsers, AllowUsers, TCP Wrappers)
Конфигурация SSH может блокировать подключения для определенных IP или пользователей.
Откройте
/etc/ssh/sshd_config и проверьте параметры DenyUsers user1
AllowUsers admin
Проверьте
/etc/hosts.deny и /etc/hosts.allow cat /etc/hosts.deny
cat /etc/hosts.allow
🟠Закончились доступные PTY (псевдотерминалы)
Если исчерпан лимит доступных PTY, новые сессии не смогут открываться.
Запустите
ls /dev/pts
Если там слишком много открытых сессий, попробуйте очистить:
pkill -u user
или увеличьте лимит в
/etc/security/limits.conf * hard nproc 1024
* soft nproc 1024
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Какие минусы Stateful-приложения?
- Сложность масштабирования (не масштабируются горизонтально так же просто, как Stateless);
- Требуют постоянного хранения состояния (например, базы данных);
- Требуют использования PersistentVolume, что усложняет деплой в Kubernetes;
- Трудности с отказоустойчивостью и миграциями данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Сложность масштабирования (не масштабируются горизонтально так же просто, как Stateless);
- Требуют постоянного хранения состояния (например, базы данных);
- Требуют использования PersistentVolume, что усложняет деплой в Kubernetes;
- Трудности с отказоустойчивостью и миграциями данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 В чем разница Deployment и DaemonSet?
Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.
🚩Deployment
Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов.
🟠Масштабирование
Вы можете увеличивать или уменьшать количество подов в зависимости от нужд.
🟠Обновления
Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения.
🟠Самовосстановление
Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают.
🚩DaemonSet
Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле.
🟠Гарантия запуска
Убедитесь, что каждый узел кластера запускает копию определённого пода.
🟠Автоматическое размещение
Когда добавляются новые узлы, на них автоматически размещаются необходимые поды.
🟠Службы уровня узла
Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие.
Ставь 👍 и забирай 📚 Базу знаний
Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.
🚩Deployment
Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов.
🟠Масштабирование
Вы можете увеличивать или уменьшать количество подов в зависимости от нужд.
🟠Обновления
Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения.
🟠Самовосстановление
Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
🚩DaemonSet
Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле.
🟠Гарантия запуска
Убедитесь, что каждый узел кластера запускает копию определённого пода.
🟠Автоматическое размещение
Когда добавляются новые узлы, на них автоматически размещаются необходимые поды.
🟠Службы уровня узла
Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: fluent/fluentd:v1.0
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Как установить msodbcsql на Astra?
Пакет msodbcsql — это драйвер ODBC от Microsoft для SQL Server. Его нет в стандартных репах Astra.
1. Добавь репозиторий Microsoft:
- Установи зависимости: unixODBC, curl, gnupg2.
- Импортируй ключ и добавь репо:
- curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
- echo "deb [arch=amd64] https://packages.microsoft.com/debian/10/prod buster main" | sudo tee /etc/apt/sources.list.d/msprod.list
2. Установи:
3. sudo apt update
4. sudo apt install msodbcsql17
Примечание: требуется совместимость с Debian-базой, так что могут понадобиться обходные пути.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Добавь репозиторий Microsoft:
- Установи зависимости: unixODBC, curl, gnupg2.
- Импортируй ключ и добавь репо:
- curl
- echo "deb [arch=amd64]
2. Установи:
3. sudo apt update
4. sudo apt install msodbcsql17
Примечание: требуется совместимость с Debian-базой, так что могут понадобиться обходные пути.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Чем отличается образ от контейнера?
Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.
🚩Что такое образ (Image)?
Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
Пример списка образов
Пример создания образа через
🚩Что такое контейнер (Container)?
Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
Пример списка контейнеров
Пример остановки контейнера
Ставь 👍 и забирай 📚 Базу знаний
Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.
🚩Что такое образ (Image)?
Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
docker pull nginx:latest
Пример списка образов
docker images
Пример создания образа через
DockerfileFROM ubuntu:latest
RUN apt update && apt install -y nginx
CMD ["nginx", "-g", "daemon off;"]
docker build -t my-nginx .
🚩Что такое контейнер (Container)?
Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
docker run -d --name web -p 80:80 nginx
Пример списка контейнеров
docker ps
Пример остановки контейнера
docker stop web
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Что помимо bash sh можно в шебанг написать без проблем?
Можно использовать другие интерпретаторы, такие как zsh, python, perl, env, и т.д., в зависимости от того, на каком языке написан скрипт. Это делает скрипты переносимыми или привязывает их к конкретной среде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Можно использовать другие интерпретаторы, такие как zsh, python, perl, env, и т.д., в зависимости от того, на каком языке написан скрипт. Это делает скрипты переносимыми или привязывает их к конкретной среде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1💊1
🤔 Как бы построить выделение ресурсов, балансировку, нагрузку и всю масштабированность?
Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.
🚩Основные компоненты
Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей
🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
Пример терраформа для AWS ALB
🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
Ставь 👍 и забирай 📚 Базу знаний
Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.
🚩Основные компоненты
Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей
🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
yaml
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
cpu: "500m" # Минимально 0.5 CPU
memory: "256Mi" # Минимально 256MB RAM
limits:
cpu: "1000m" # Максимально 1 CPU
memory: "512Mi" # Максимально 512MB RAM
🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
nginx
upstream backend {
server app1:5000;
server app2:5000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Пример терраформа для AWS ALB
hcl
resource "aws_lb" "example" {
name = "my-load-balancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.lb_sg.id]
}
🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
hcl
resource "aws_autoscaling_group" "example" {
min_size = 2
max_size = 10
desired_capacity = 2
launch_configuration = aws_launch_configuration.example.name
}
Ставь 👍 и забирай 📚 Базу знаний
🔥3
🤔 Почему если поставить Docker и создать образ, он может не запускаться, в чём может быть причина?
1. Ошибки в Dockerfile: неправильные инструкции, отсутствующие зависимости или неверный базовый образ.
2. Проблемы с сетью: отсутствие необходимых портов или конфликт портов.
3. Отсутствие прав доступа: недостаточно прав для запуска контейнера.
4. Несоответствие архитектуры: образ может быть создан для другой платформы или процессора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Проблемы с сетью: отсутствие необходимых портов или конфликт портов.
3. Отсутствие прав доступа: недостаточно прав для запуска контейнера.
4. Несоответствие архитектуры: образ может быть создан для другой платформы или процессора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 По какой причине inode могут закончиться?
Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.
🚩Причины исчерпания
🟠Большое количество мелких файлов
Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.
🟠Недостаточное количество выделенных inode
При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.
🟠Особенности файловой системы
Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.
🚩Решения проблемы исчерпания
🟠Проверка использования
С помощью команды
🟠Очистка файловой системы
Удаление ненужных или временных файлов может освободить inode.
🟠Изменение файловой системы
Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.
🟠Использование других файловых систем
Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.
🟠Архивирование
Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.
Ставь 👍 и забирай 📚 Базу знаний
Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.
🚩Причины исчерпания
🟠Большое количество мелких файлов
Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.
🟠Недостаточное количество выделенных inode
При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.
🟠Особенности файловой системы
Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.
🚩Решения проблемы исчерпания
🟠Проверка использования
С помощью команды
df -i можно проверить, сколько inode используется и сколько ещё доступно в вашей файловой системе.🟠Очистка файловой системы
Удаление ненужных или временных файлов может освободить inode.
🟠Изменение файловой системы
Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.
🟠Использование других файловых систем
Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.
🟠Архивирование
Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.
Ставь 👍 и забирай 📚 Базу знаний
👍1