и посмотреть медиа
DevOps - interview questions
и посмотреть медиа
DevOps interviews.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Interview questions on DevOps.
🤔 Как дебажить поды в Kubernetes? Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить. 🟠Проверить статус пода Сначала смотрим, работает ли под вообще kubectl get pods 🟠Посмотреть логи контейнера Если под запустился, но работает странно, смотрим логи: kubectl logs pod-name Если в поде несколько контейнеров: kubectl logs pod-name -c container-name Если под перезапускается, а нам нужны старые логи: kubectl logs pod-name --previous 🟠Проверить события (`describe`) Смотрим подробную информацию о поде: kubectl describe pod pod-name 🟠Зайти внутрь контейнера (`exec`) Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы: kubectl exec -it pod-name -- /bin/sh Если в контейнере есть только bash: kubectl exec -it pod-name -- /bin/bash Полезные команды внутри контейнера: ps aux # Смотрим запущенные процессы netstat -tulnp # Проверяем открытые порты env # Проверяем переменные окружения cat /etc/resolv.conf # Проверяем DNS 🟠Проверить манифест пода (`get pod -o yaml`) Если под ведёт себя странно, можно посмотреть его полное описание: kubectl get pod pod-name -o yaml 🟠Проверить ресурсы (describe node) Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (node): kubectl describe node node-name Если проблема с ресурсами, будет что-то вроде: Warning FailedScheduling insufficient memory 🟠Проверить сеть (`nslookup`, `ping`, `curl`) Если под не может достучаться до сервиса, тестируем сеть: kubectl exec -it pod-name -- nslookup service-name kubectl exec -it pod-name -- ping 8.8.8.8 kubectl exec -it pod-name -- curl Ссылка скрыта 🟠Дебажить с помощью `kubectl debug` (Kubernetes 1.23+) Если под не стартует, можно запустить дебажный контейнер kubectl debug pod-name -it --image=busybox Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Удалил файлы, но место не очищается, в чем дело? Если вы удалили файлы, но место на диске не освободилось, это может происходить по нескольким причинам. 🚩Файл все еще используется процессом Если файл удален, но он открыт каким-либо процессом, его содержимое остается в памяти или файловой системе до завершения работы этого процесса. Это называется "удаление с дескриптором". 🟠Как проверить: Используйте команду lsof (list open files), чтобы найти процессы, удерживающие файл lsof | grep deleted 🟠Как исправить Перезапустите процесс или завершите его с помощью kill: kill -9 🚩Файл удален, но он находился в другом файловом пространстве Например: - Файл был удален внутри Docker-контейнера, но место занято в образе. - Файл находился на смонтированном диске, и удаление произошло в другом контексте. 🟠Как проверить Убедитесь, что вы работаете в правильной файловой системе: df -h 🟠Как исправить Убедитесь, что удаление происходит в нужной директории или файловой системе. 🚩Файл был удален из директории, но находится в другой ссылке (hard link) Если файл имеет несколько жестких ссылок, удаление одного из них не освободит место до тех пор, пока не удалены все ссылки. 🟠Как проверить Используйте команду find, чтобы найти оставшиеся ссылки: find / -samefile 🟠Как исправить Удалите все ссылки на файл. 🚩Файл был удален, но находился в файловой системе с квотой Если используется файловая система с ограничением (например, квоты пользователей или групп), возможно, квота пользователя исчерпана, и это мешает очистке. 🟠Как проверить Проверьте квоты: quota -u 🟠Как исправить Убедитесь, что квоты настроены правильно, или освободите больше места. 🚩Кэшированные данные или временные файлы Иногда удаленные файлы остаются в виде кэша, временных данных или не удаляются из корзины. 🟠Как проверить Очистите кэш или проверьте корзину. Например, для очистки временных файлов sudo du -sh /tmp sudo rm -rf /tmp/* 🟠Как исправить Удалите временные файлы, очистите кэш: sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое squash в Docker? В Docker термин "squash" (от англ. "раздавить", "сплющить") относится к процессу объединения нескольких слоев образа Docker в один. Это делается для уменьшения размера итогового образа и оптимизации хранения. 🚩Зачем нужен `squash`? Docker-образы состоят из последовательности слоев. Каждый слой создается на основе команд в Dockerfile. Например, если ваш Dockerfile выглядит так: FROM ubuntu:latest RUN apt update && apt install -y nginx RUN echo "Hello, World!" > /usr/share/nginx/html/index.html 🚩Как использовать `squash`? В Docker squash можно выполнить с помощью флага --squash при сборке образа: docker build --squash -t my-squashed-image . Для включения экспериментального режима: 1. Открываем /etc/docker/daemon.json (или создаем, если его нет). 2. Добавляем строку "experimental": true. 3. Перезапускаем Docker: systemctl restart docker 🚩Пример с `squash` Без --squash docker history my-image С --squash docker build --squash -t my-squashed-image . docker history my-squashed-image Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как решить проблему, если Jenkins не видит merge request и ветки из GitLab? - Убедиться, что используется GitLab Plugin. - Включить webhook из GitLab. - Установить refspec: - +refs/merge-requests/*/head:refs/remotes/origin/mr/* - Убедиться, что Jenkins имеет доступ к правильным permissions в GitLab. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что за протокол http, зачем он нужен? HTTP (HyperText Transfer Protocol) — это протокол передачи данных в интернете. Он используется для обмена данными между клиентом (браузером) и сервером. 🚩Пример работы HTTP Браузер отправляет запрос → "GET /index.html HTTP/1.1". Сервер отвечает → HTML-страницей (200 OK). Браузер отображает страницу. 🚩Основные принципы HTTP Клиент-серверная модель → браузер запрашивает, сервер отвечает. Без состояния (stateless) → каждый запрос независим (нет сессий). Текстовый протокол → данные передаются в читаемом формате. 🚩Структура HTTP-запроса Пример запроса от браузера к серверу GET /index.html HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое config map в кубере? ConfigMap в Kubernetes – это механизм хранения конфигурационных данных. Он позволяет разделять код приложения и настройки, храня конфигурацию в виде ключ-значение. ConfigMap удобен для передачи переменных окружения, файлов конфигурации, командных аргументов без изменения образа контейнера. 🚩Основные способы использования ConfigMap 🟠Переменные окружения передача настроек через ENV. 🟠Файлы конфигурации монтирование в контейнер как файл. 🟠Параметры командной строки передача аргументов в command. 🚩Как создать ConfigMap? 1⃣Создание из манифеста apiVersion: v1 kind: ConfigMap metadata: name: my-config data: APP_ENV: "production" LOG_LEVEL: "debug" CONFIG_FILE: | [settings] mode = "production" debug = true 2⃣Создание из командной строки kubectl create configmap my-config --from-literal=APP_ENV=production --from-literal=LOG_LEVEL=debug 3⃣Создание из файла kubectl create configmap my-config --from-file=config.ini 🚩Как использовать ConfigMap в подах? 1⃣Как переменные окружения apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app image: my-app env: - name: APP_ENV valueFrom: configMapKeyRef: name: my-config key: APP_ENV 2⃣Как монтируемый файл apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app image: my-app volumeMounts: - name: config-volume mountPath: "/etc/config" volumes: - name: config-volume configMap: name: my-config Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сделать донастройку контейнера? Донастройка контейнера может понадобиться, если: Нужно изменить файлы конфигурации. Установить дополнительные пакеты. Задать переменные среды. Подключить тома или сети. Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD. 🟠Донастройка через Dockerfile (Лучший способ) Если контейнер нужно модифицировать перед запуском, создаем свой Dockerfile на основе существующего образа. FROM nginx:latest COPY my-nginx.conf /etc/nginx/nginx.conf CMD ["nginx", "-g", "daemon off;"] Собираем новый образ docker build -t my-nginx . docker run -d -p 80:80 my-nginx 🟠Донастройка через `docker-compose` (Гибкость) Можно задать окружение, тома, команды. version: '3' services: db: image: postgres:15 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: secret POSTGRES_DB: mydb volumes: - ./custom-postgres.conf:/etc/postgresql/postgresql.conf command: postgres -c config_file=/etc/postgresql/postgresql.conf Запуск docker-compose up -d 🟠Донастройка запущенного контейнера (`docker exec`) Если контейнер уже работает, можно внести изменения прямо в него. docker exec -it my-container bash apt update && apt install -y vim 🟠Донастройка через тома (Volumes) Если нужно изменять файлы без пересборки образа, подключаем тома. docker run -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx 🟠Использование `ENTRYPOINT` или `CMD` Можно задать скрипт донастройки, который выполнится при старте контейнера. FROM postgres:15 COPY setup.sh /docker-entrypoint-initdb.d/setup.sh RUN chmod +x /docker-entrypoint-initdb.d/setup.sh В setup.sh: #!/bin/bash psql -U postgres -d mydb -c "CREATE TABLE test (id SERIAL PRIMARY KEY);" Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чем разница Deployment и 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 Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Из чего состоит ELK стек? ELK (Elasticsearch, Logstash, Kibana) – это стек для сбора, обработки, хранения и визуализации логов. Он помогает DevOps-инженерам анализировать логи в реальном времени и выявлять проблемы в системе. 🚩Elasticsearch – хранилище и поиск логов - Хранит структурированные и неструктурированные данные (логи, метрики) - Поддерживает быстрый полнотекстовый поиск - Использует кластеризацию для высокой доступности json GET /logs/_search { "query": { "match": { "message": "error" } } } 🚩Logstash – обработка и отправка логов - Собирает логи из файлов, TCP, Kafka, Beats - Фильтрует и преобразует данные перед отправкой в Elasticsearch - Поддерживает шифрование и маршрутизацию yaml input { file { path => "/var/log/nginx/access.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["Ссылка скрыта } } 🚩Kibana – визуализация и анализ - Позволяет строить дашборды и графики - Делает поиск по логам и метрикам - Визуализирует реальное время работы системы message: "error" AND @timestamp:[now-24h TO now] 🚩Как ELK-стек работает вместе? Logstash собирает и обрабатывает логи Отправляет их в Elasticsearch Kibana визуализирует данные yaml version: "3" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0 environment: - discovery.type=single-node ports: - "9200:9200" logstash: image: docker.elastic.co/logstash/logstash:8.5.0 depends_on: - elasticsearch volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf ports: - "5044:5044" kibana: image: docker.elastic.co/kibana/kibana:8.5.0 depends_on: - elasticsearch ports: - "5601:5601" Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!