DevOps | Вопросы собесов – Telegram
DevOps | Вопросы собесов
5.37K subscribers
30 photos
1.06K links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Что будет происходить после внесения изменений в image?

- Сборка создаст новый слой поверх существующего;
- Старый image сохраняется, пока не удалён;
- Изменения можно сравнить, протестировать или запушить в репозиторий;
- При развертывании — будет использоваться обновлённая версия образа.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как определить опции запуска пайплайна при редактировании определенных ресурсов в гите?

При работе с CI/CD (GitHub Actions, GitLab CI, Jenkins) часто нужно запускать пайплайн только при изменении определенных файлов. Это помогает оптимизировать сборку, экономить ресурсы и время.

🚩В GitHub Actions (on: push, paths)

В GitHub Actions можно указать файлы, изменения в которых запустят пайплайн.
name: Infra Pipeline
on:
push:
paths:
- 'infra/**'
- 'k8s/**'
pull_request:
paths:
- 'infra/**'
- 'k8s/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy Infrastructure
run: ./deploy.sh


🚩В GitLab CI/CD (only: changes)

В GitLab можно настроить запуск пайплайна по изменению файлов с помощью only: changes.
stages:
- deploy

terraform:
stage: deploy
noscript:
- terraform apply -auto-approve
only:
changes:
- terraform/**


🚩В Jenkins (when { changes })

В Jenkins Declarative Pipeline можно использовать when { changes } для проверки измененных файлов.
pipeline {
agent any
stages {
stage('Deploy Ansible') {
when { changes path: 'ansible/**' }
steps {
sh './deploy_ansible.sh'
}
}
stage('Deploy Helm') {
when { changes path: 'helm/**' }
steps {
sh './deploy_helm.sh'
}
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие есть сущности в Kubernetes, минимальные и далее по возрастанию?

- Pod — минимальная сущность, может содержать один или несколько контейнеров.
- ReplicaSet — управляет количеством pod'ов.
- Deployment — управляет ReplicaSet'ами, обновлениями и откатами.
- Service — обеспечивает доступ к pod'ам.
- Namespace — логическое разделение ресурсов.
- Node — физическая или виртуальная машина.
- Cluster — объединение всех вышеуказанных компонентов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Для чего используется clickhouse?

ClickHouse – это высокопроизводительная колоночная база данных для аналитики.

Она предназначена для быстрого выполнения аналитических запросов на больших объемах данных (миллиарды строк). Используется в BI-системах, логировании, мониторинге и обработке событий.

🚩Основные возможности

🟠Очень быстрые запросы
за счёт хранения данных по колонкам и сжатия.
🟠Отлично масштабируется
работает на одной машине или в кластере.
🟠Поддержка SQL
работает с привычными SQL-запросами.
🟠Хорош для real-time аналитики
обработка миллионов событий в секунду.
🟠Без индексов
использует Primary Key + MergeTree, что упрощает оптимизацию.
🟠Хорошее сжатие данных
благодаря специальным алгоритмам хранения.

🚩Где используется?

🟠Аналитика и отчёты
BI-системы (анализ продаж, маркетинга, поведения пользователей).
Агрегация данных по времени (финансы, реклама, ретеншн).

🟠Логирование и мониторинг
Хранение логов (NGINX, Kubernetes, Clickstream).
Аналитика событий в реальном времени.

🟠IoT и Big Data
Обработка телеметрии с датчиков.
Анализ поведения пользователей в приложениях.

🟠Пример работы с ClickHouse
1⃣Создание таблицы
CREATE TABLE visits (
user_id UInt32,
url String,
duration UInt32,
event_time DateTime
) ENGINE = MergeTree()
ORDER BY event_time;


2⃣Вставка данных
INSERT INTO visits VALUES (1, 'https://example.com', 30, now());


3⃣Аналитический запрос (например, среднее время посещения сайта)
SELECT url, AVG(duration) 
FROM visits
GROUP BY url
ORDER BY AVG(duration) DESC;


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой номер порта используется для ping-коммуникации?

Ping не использует порты, так как работает на уровне ICMP, а не TCP или UDP.
ICMP — это протокол сетевого уровня, используемый для диагностики (например, ping, traceroute).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊5
🤔 Как оптимизировать имедж?

Оптимизация Docker-имеджа (или другого контейнерного имеджа) необходима для уменьшения его размера, ускорения сборки, повышения безопасности и повышения производительности контейнеров.

🟠Используйте минимальную базовую ОС
Почему: Базовый образ сильно влияет на размер. Например, alpine занимает ~5 МБ, в то время как ubuntu или debian могут превышать сотни мегабайт.
Как: Замените базовый образ:
FROM alpine:latest


🟠Удаляйте ненужные файлы
Почему: Временные файлы, кэш или артефакты сборки занимают место.
Как: Добавьте команды для очистки временных данных:
RUN apt-get update && apt-get install -y curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*


🟠Используйте многоэтапную сборку (multi-stage builds)
Почему: Стадия сборки может содержать инструменты, которые не нужны в финальном образе.
Как
# Стадия сборки
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app .

# Финальный образ
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]


🟠Минимизируйте количество слоёв
Почему: Каждый RUN, COPY, ADD создаёт новый слой. Слишком много слоёв увеличивают размер образа.
Как: Объединяйте команды:
RUN apt-get update && apt-get install -y curl wget \
&& apt-get clean && rm -rf /var/lib/apt/lists/*


🟠Не сохраняйте секреты
Почему: Переменные окружения с паролями или токенами могут быть случайно унаследованы.
Как: Используйте Docker secrets или .env-файлы и исключайте их из COPY
ENV APP_ENV=production


🟠Кэшируйте зависимости
Почему: Частое скачивание зависимостей замедляет сборку.
Как: Переносите команды загрузки зависимостей ближе к началу:
COPY go.mod go.sum ./
RUN go mod download


🟠Проверяйте зависимости
Почему: Устаревшие или ненужные зависимости увеличивают размер и могут содержать уязвимости.
Как: Используйте сканеры вроде Trivy или Docker Scan для анализа.
trivy image myimage:latest


🚩Пример полного Dockerfile

# 1. Используем минимальный базовый образ
FROM node:20-alpine as builder

# 2. Устанавливаем зависимости
WORKDIR /app
COPY package*.json ./
RUN npm install

# 3. Копируем код
COPY . .

# 4. Собираем проект
RUN npm run build

# Финальный минимальный образ
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Во сколько зонах можно включить репликацию в RDS Aurora?

Aurora поддерживает до 5 read-replicas в разных зонах/регионах с высокой доступностью и кросс-региональным фейловером.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
🤔 Можно ли на лету изменить настройки dns контейнре через cli?

Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!

🚩Остановка и перезапуск контейнера с новыми DNS

Самый надежный способ — перезапустить контейнер с нужными DNS-серверами
docker run --dns 8.8.8.8 --dns 8.8.4.4 -d my_container


Или задать DNS через docker network
docker network create mynet --dns=1.1.1.1
docker run --net=mynet -d my_container


🚩Изменение `/etc/resolv.conf` внутри контейнера (может сработать)

Можно изменить DNS вручную внутри работающего контейнера
docker exec -it my_container sh
echo "nameserver 1.1.1.1" > /etc/resolv.conf


🚩Использование `network connect` (только для user-defined сетей)
Можно подключить контейнер к другой сети с нужными DNS:
docker network create mynewnet --dns=8.8.8.8
docker network connect mynewnet my_container


🚩Изменение настроек `systemd-resolved` (для контейнеров с `host`-сетью)

Если контейнер использует сеть хоста (--network host), можно поменять DNS на хосте:
resolvectl dns eth0 8.8.8.8


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как Kafka записывает сообщения и как их отдаёт?

- Producer отправляет сообщение в топик, который разбит на партиции.
- Kafka записывает в лог-файл на диск.
- Consumer читает сообщения, обращаясь к нужной партиции.
- Каждый consumer хранит offset, Kafka ничего не удаляет, пока не истечёт retention.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Бесплатный вебинар: «GitOps + Flux — ваш путь к автоматизированному деплою в Kubernetes»!

Вы хотите развернуть приложение в Kubernetes без тонны ручных команд и нервов? Мечтаете о системе, где код сам «доставляется» в прод по принципу «закоммитил — заработало»?

Приглашаем вас на открытый урок в рамках курса «Инфраструктурная платформа на основе Kubernetes , где разберём»:
- как перестать вручную деплоить приложения;
- как добиться стабильного состояния кластера;
- как сделать процессы прозрачными и контролируемыми.

🗓 Когда: 23.12, в 20-00
Для кого: DevOps‑инженеры, разработчики, администраторы Kubernetes, все, кто хочет автоматизировать деплой.

На уроке вы узнаете:
💚 Что такое GitOps и почему это новый стандарт работы с Kubernetes.
💚 Как Flux автоматизирует синхронизацию кластера с Git‑репозиторием.
💚Практические примеры настройки Flux для реальных сценариев.
💚Как избежать типичных ошибок при внедрении GitOps.
💚Какие преимущества даёт подход «конфигурация как код».

После урока вы сможете:
- настроить базовый пайплайн GitOps с Flux;
- понять, как интегрировать Flux в существующую инфраструктуру;
- оценить, подходит ли GitOps для вашего проекта.

➡️ Регистрирация: https://otus.pw/LUdW/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Из чего состоит control plane?

В Kubernetes Control Plane — это набор компонентов, которые управляют всей кластерной системой. Он отвечает за контроль над состоянием кластера, управлением узлами (nodes) и развертыванием приложений.

🟠kube-apiserver
Что делает: Это центральный компонент, предоставляющий API для управления кластером.
Почему нужен: Все взаимодействия, включая добавление/удаление узлов, создание подов и настройку сетей, проходят через API-сервер.
Как работает:
Принимает запросы от пользователей, kubectl, и других компонентов.
Проверяет подлинность запросов и валидирует данные.
Передает команды другим компонентам через REST API.

🟠etcd
Что делает: Это распределённое key-value хранилище, которое сохраняет все данные о состоянии кластера.
Почему нужен: Все данные о конфигурации, статусе и метаданных кластера сохраняются в etcd. Если etcd выходит из строя, кластер теряет свою управляемость.
Как работает:
Хранит информацию о подах, конфигурации сетей и статусе всех компонентов.
Поддерживает консенсус между узлами, обеспечивая надёжность данных.

🟠kube-scheduler
Что делает: Назначает поды на доступные узлы.
Почему нужен: Без планировщика поды не смогут быть развернуты на узлах.
Как работает:
Считывает незапланированные поды из API-сервера.
Анализирует доступные узлы на основе их ресурсов (CPU, память и т.д.).
Назначает узел для каждого пода на основе алгоритмов (например, минимальная загрузка).

🟠kube-controller-manager
Что делает: Управляет контроллерами, которые следят за состоянием ресурсов в кластере.
Почему нужен: Контроллеры — это "надсмотрщики", которые автоматически исправляют отклонения от желаемого состояния.
Как работает:
Включает несколько встроенных контроллеров:
Node Controller: Следит за доступностью узлов.
Replication Controller: Поддерживает нужное количество реплик подов.
Endpoint Controller: Обновляет Endpoints-объекты.
Service Account Controller: Создает учетные записи для сервисов.

🟠cloud-controller-manager
Что делает: Управляет интеграцией с облачными провайдерами (например, AWS, GCP).
Почему нужен: Позволяет использовать облачные функции, такие как балансировка нагрузки, управление дисками и маршрутизацией.
Как работает:
Отвечает за создание LoadBalancer.
Управляет постоянными томами (Persistent Volumes), связанными с облачными хранилищами.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Пример асимметричного шифрования?

- RSA — самый популярный алгоритм.
- Пример: клиент шифрует данные публичным ключом сервера, а сервер расшифровывает их своим приватным.
Также используется в TLS-сертификатах, PGP, SSH.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие есть правила которые запрещают запускаться какой-либо ноде?

В Kubernetes есть несколько механизмов, которые могут запретить или ограничить запуск подов на определенных нодах.

🚩Taints & Tolerations (Метки и допуска)

Taints – метки на нодах, запрещающие размещение подов, если у них нет соответствующего допуска (Toleration).
Используется для изоляции, приоритизации узлов или резервирования ресурсов.
kubectl taint nodes my-node key=value:NoSchedule


Разрешить конкретному поду запускаться на этой ноде
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"


🚩Node Selectors (Выбор ноды по меткам)

Запрещает запускаться на всех нодах, кроме указанных.
Используется для привязки подов к определенным серверам.
spec:
nodeSelector:
disktype: ssd


🚩Node Affinity (Расширенные правила выбора ноды)

Позволяет задать гибкие условия (обязательные и предпочтительные).
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: region
operator: In
values:
- us-east-1


🚩Pod Disruption Budget (Ограничение количества перезапусков)

Запрещает запуск новых подов, если их уже запущено определенное количество.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
spec:
maxUnavailable: 3
selector:
matchLabels:
app: my-app


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊1
🤔 Как работает DNS?

DNS (Domain Name System) преобразует читаемые доменные имена (например,
google.com) в IP-адреса.
Процесс включает:
- запрос к локальному кешу;
- обращение к DNS-рекурсору;
- переход к корневым серверам, затем к серверам доменов верхнего уровня (TLD), затем к авторитетным серверам;
- возврат IP-адреса клиенту.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM