и посмотреть медиа
DevOps - preguntas de entrevista
и посмотреть медиа
Entrevistas con DevOps.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Preguntas de entrevista en DevOps.
🤔 Как задать права на всё? В Linux права доступа к файлам и папкам регулируются с помощью команд chmod и chown. 🟠Назначение всех прав (777) Если вам нужно дать полный доступ ко всем файлам и папкам, используйте chmod -R 777 /путь/к/папке -R (recursive) — применяет права ко всем вложенным файлам и каталогам. 777 означает: 7 (чтение, запись, выполнение) для владельца 7 (чтение, запись, выполнение) для группы 7 (чтение, запись, выполнение) для всех остальных 🟠Передача владения (если нет прав) Если текущий пользователь не владеет файлами, назначьте нового владельца chown -R username:group /путь/к/папке username — новый владелец group — новая группа 🟠Лучший вариант — более безопасные права Вместо 777 лучше дать только нужные права: Для исполняемых файлов: chmod 755 Для конфигураций и данных: chmod 644 Для приватных ключей и чувствительных файлов: chmod 600 Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое IaC? Это практика управления и настройки IT-инфраструктуры (серверов, сетей, баз данных и других ресурсов) с помощью кода, а не вручную через консоли или графические интерфейсы. 🚩Зачем нужен IaC? 🟠Автоматизация вместо ручной настройки серверов вы пишете код, который делает это автоматически. 🟠Консистентность одинаковая среда на всех серверах, исключение человеческих ошибок. 🟠Быстрое развертывание развернуть инфраструктуру можно за минуты. 🟠Легкость в откате если что-то пошло не так, можно быстро вернуть предыдущее состояние. 🟠Масштабируемость легко добавить новые серверы или ресурсы при увеличении нагрузки. 🚩Как работает IaC? С помощью IaC вы описываете всю инфраструктуру в коде (например, в YAML, JSON, HCL и др.), а затем используете инструменты для автоматического развертывания. provider "aws" { region = "us-east-1" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" } 🚩Основные инструменты IaC 🟠Terraform универсальный инструмент для облаков (AWS, Azure, GCP и др.). 🟠Ansible удобен для настройки серверов (конфигурации ПО). 🟠Puppet / Chef похожи на Ansible, но требуют агента на серверах. 🟠CloudFormation инструмент от AWS для управления ресурсами. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что используется внутри докер контейнера? Внутри Docker-контейнера используется изолированная среда, которая позволяет запускать приложения в предсказуемом и воспроизводимом окружении. Контейнер предоставляет доступ к базовой файловой системе, процессам, сетевым интерфейсам и другим ресурсам, изолированным от хоста и других контейнеров. Давайте разберем основные компоненты, которые используются внутри Docker-контейнера. 🟠Файловая система Каждый контейнер имеет собственную файловую систему, основанную на многослойной архитектуре. Это изолированное пространство предоставляет доступ к: Образу Docker (image): Базовый набор файлов, определенных в Docker Image. Copy-on-write (COW): Контейнеры используют copy-on-write слой для изменений. Базовый образ остается неизменным, а любые изменения записываются в слой контейнера. Точки монтирования: Возможность монтировать директории хоста или сетевые тома (volumes) для сохранения данных. docker run -v /host/path:/container/path nginx 🟠Процессы В контейнере запускаются процессы, как в обычной операционной системе. Главный процесс контейнера (например, команда из CMD или ENTRYPOINT) работает с PID 1 и отвечает за выполнение приложения. Процессы внутри контейнера изолированы от процессов на хосте благодаря использованию Linux namespaces. docker exec ps aux 🟠Сетевые интерфейсы Docker-контейнеры используют виртуальные сетевые интерфейсы для связи: veth-pair: Каждый контейнер имеет виртуальный интерфейс, подключенный к мосту (docker0 по умолчанию). Типы сетей: bridge (по умолчанию): Локальная сеть между контейнерами. host: Контейнер использует сетевой стек хоста. none: Полностью изолированный контейнер без сети. overlay: Сеть для соединения контейнеров на разных хостах. docker network create my_network docker run --network my_network nginx 🟠Ресурсы хоста (CPU, память, диски) Контейнеры используют ресурсы хоста, но их потребление можно ограничить: CPU: Контейнер может использовать определенную долю процессора. docker run --cpus="2" nginx Память: Лимит на использование оперативной памяти. docker run -m 512m nginx I/O (диск): Возможность ограничения операций чтения/записи. docker run --device-read-bps=/dev/sda:1mb nginx 🟠Изоляция (Namespaces и Control Groups) Docker использует технологии изоляции, встроенные в ядро Linux: Namespaces: Обеспечивают изоляцию пространства имен (PID, сети, файловой системы и т.д.). Control Groups (cgroups): Управляют использованием ресурсов (CPU, RAM, I/O). lsns 🟠Среда выполнения (Runtime) Docker-контейнеры работают благодаря среде выполнения, например: runc: Легковесное средство выполнения контейнеров, совместимое со стандартом OCI. containerd: Менеджер для запуска контейнеров, который Docker использует для взаимодействия с низкоуровневыми компонентами. 🟠Настройки и переменные среды Контейнер может быть настроен с использованием: Переменных среды: Устанавливаются через ENV в Dockerfile или с помощью флага -e. docker run -e ENV_VAR=value nginx Аргументов при сборке: Используются в Dockerfile через ARG. ARG BUILD_VERSION 🟠Приложение или служба Главное, что работает внутри контейнера, — это само приложение: Например, веб-сервер (Nginx, Apache) или база данных (MySQL, PostgreSQL). Контейнеры упрощают запуск приложений с предсказуемыми зависимостями. 🟠Логи и мониторинг Docker предоставляет возможность просматривать логи контейнера и собирать метрики Логи docker logs Информация о контейнере docker inspect Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как бы организовал хранение и доступ к секретам? В DevOps и Kubernetes важно безопасно хранить секретные данные (пароли, API-ключи, токены). Нельзя хранить их в коде, в Git, в .env файлах без шифрования. 🚩HashiCorp Vault (лучший вариант для масштабных проектов) Полностью управляемое решение для хранения и динамической ротации секретов. Шифрование с поддержкой KMS. API-доступ и интеграция с CI/CD. Как получить секрет через CLI? vault kv put secret/db password="SuperSecret123" vault kv get secret/db Как использовать в Jenkins? withVault([vaultSecrets: [[path: 'secret/db', secretValues: [['envVar': 'DB_PASS', 'vaultKey': 'password']]]]]) { sh 'echo $DB_PASS' # Переменная доступна только внутри блока } 🚩Kubernetes Secrets (если приложение в K8s) Интеграция с Kubernetes, управление через kubectl. Доступ через переменные окружения или монтирование в файл. Можно использовать Sealed Secrets или SOPS для шифрования. Как создать секрет? kubectl create secret generic db-secret --from-literal=password='SuperSecret123' Как использовать в Deployment? env: - name: DB_PASS valueFrom: secretKeyRef: name: db-secret key: password 🚩AWS Secrets Manager / Azure Key Vault / GCP Secret Manager Интеграция с облачными сервисами (IAM, Lambda, RDS). Автоматическая ротация ключей. Как получить секрет в AWS? aws secretsmanager get-secret-value --secret-id my-secret Как подключить к Kubernetes? Используем External Secrets Operator: apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: db-secret spec: secretStoreRef: name: aws-secrets kind: SecretStore target: name: db-secret data: - secretKey: password remoteRef: key: my-db-password 🚩SOPS + GitOps (для хранения в Git, но зашифрованно) Позволяет хранить секреты в Git без утечек. Работает с KMS, PGP, age. Как зашифровать секрет? sops --encrypt --age YOUR_PUBLIC_KEY secrets.yaml > secrets.enc.yaml Как расшифровать? sops --decrypt secrets.enc.yaml Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Из чего состоит 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), связанными с облачными хранилищами. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Динамическая маршрутизация и разные протоколы динамической маршрутизации, ebgp ibgp, константы bgp. На чём сейчас принято строить bgp-пиринги? 🟠Динамическая маршрутизация Динамическая маршрутизация – это механизм автоматического выбора маршрута на основе изменяющихся сетевых условий. В отличие от статической маршрутизации, она автоматически адаптируется к изменениям в сети. Протоколы динамической маршрутизации делятся на: Протоколы внутреннего шлюза (IGP – Interior Gateway Protocol) RIP (Routing Information Protocol) – устаревший, работает на алгоритме дистанционно-векторного маршрутизации. OSPF (Open Shortest Path First) – основан на SPF (Dijkstra) и работает по принципу линк-стейт. IS-IS (Intermediate System to Intermediate System) – аналог OSPF, но чаще используется в провайдерских сетях. Протоколы внешнего шлюза (EGP – Exterior Gateway Protocol) BGP (Border Gateway Protocol) – основной протокол маршрутизации в интернете. 🟠BGP: Основной протокол глобальной маршрутизации eBGP vs iBGP BGP бывает двух типов: eBGP (External BGP) – маршрутизация между автономными системами (AS). Используется для обмена маршрутами между разными организациями или провайдерами. iBGP (Internal BGP) – работает внутри одной AS, передавая BGP-маршруты между роутерами этой сети. 🚩Константы BGP (Attributes) BGP использует атрибуты маршрута для выбора наилучшего пути. Основные атрибуты: 🟠Local Preference приоритетный маршрут внутри AS (чем выше, тем лучше). 🟠AS Path список AS, через которые проходит маршрут (короче – лучше). 🟠MED (Multi-Exit Discriminator) предпочтение одного из выходов из AS (меньше – лучше). 🟠Origin источник маршрута (IGP < EGP < Incomplete). 🟠Community метки маршрутов для упрощения политики маршрутизации. 🟠Weight (Cisco-only) локальный параметр (чем больше, тем лучше). 🚩На чём сейчас строят BGP-пиринги? BGP можно развернуть на разных платформах, включая аппаратные и программные решения: 🟠Оборудование (Аппаратные маршрутизаторы) Cisco (IOS, IOS-XE, IOS-XR, NX-OS) – классика для крупных сетей. Juniper (Junos OS) – мощное решение для дата-центров и операторов. Arista (EOS) – высокопроизводительные маршрутизаторы для ЦОДов. Huawei (VRP) – популярно в крупных корпоративных сетях. 🟠Программные решения (SOFT-router) FRRouting (FRR) – open-source, поддерживает BGP, OSPF, IS-IS. BIRD – лёгкий BGP-демон для Linux, используется в IX (Internet Exchange). GoBGP – BGP-демон, написанный на Go. VyOS – Linux-маршрутизатор с поддержкой BGP. MikroTik (RouterOS) – бюджетное, но мощное решение. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое pv, pvc? Это понятия из Kubernetes, которые используются для управления хранилищем данных (storage). Они решают задачу обеспечения долгоживущего хранилища для приложений, которое сохраняется независимо от жизненного цикла подов (Pods). 🚩Persistent Volume (PV) Это объект Kubernetes, который представляет физическое хранилище, доступное в кластере. Это может быть локальное хранилище, сетевой диск (например, NFS), или облачный сервис хранения (например, Amazon EBS, Google Persistent Disk, Azure Disk). PV создается администратором или автоматически через StorageClass. Это ресурс хранилища, выделенный для использования в кластере. Независим от подов, что позволяет хранить данные, даже если под был удален или перезапущен. apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: "/mnt/data" 🚩Persistent Volume Claim (PVC) Это запрос на использование хранилища (PV) со стороны пользователя или приложения. Это как "заявка" на нужное количество места и определенный тип хранилища. PVC создается разработчиком или приложением. PVC связывается с подходящим PV, который соответствует запросу. Если подходящий PV найден, он "привязывается" к PVC. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi 🚩Как работают PV и PVC вместе? 🟠Создание PV Администратор или динамическое создание выделяет хранилище (например, сетевой диск). 🟠Создание PVC Приложение запрашивает хранилище с помощью PVC. 🟠Привязка Kubernetes автоматически находит подходящий PV, который соответствует запросу PVC (по размерам, режимам доступа и другим параметрам). После этого PVC "связывается" с PV. 🟠Использование в поде PVC указывается в поде как volume, что позволяет контейнерам работать с данным хранилищем. apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: "/data" name: my-storage volumes: - name: my-storage persistentVolumeClaim: claimName: my-pvc Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сделать так чтобы клиенты отдавали метрики в Prometheus? В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно: 1. Настроить приложение на экспонирование метрик в формате Prometheus. 2. Добавить Prometheus job для сбора этих метрик. 3. Опционально – использовать Pushgateway, если pull-модель не подходит. 🚩Экспонирование метрик в формате Prometheus Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки: Go: [prometheus/client_golang](Ссылка скрыта Python: [prometheus_client](Ссылка скрыта Java: [simpleclient](Ссылка скрыта Node.js: [prom-client](Ссылка скрыта Пример для Python 1⃣Установим библиотеку pip install prometheus_client 2⃣Добавим в код экспонирование метрик from prometheus_client import start_http_server, Counter import time # Создаем счетчик запросов REQUEST_COUNT = Counter('app_requests_total', 'Total requests') def process_request(): REQUEST_COUNT.inc() # Увеличиваем счетчик time.sleep(1) # Имитация обработки запроса if __name__ == '__main__': start_http_server(8000) # Открываем метрики на 8000 порту while True: process_request() 🚩Пример для Node.js 1⃣Установим библиотеку: npm install prom-client express 2⃣Код сервера: const express = require('express'); const client = require('prom-client'); const app = express(); const collectDefaultMetrics = client.collectDefaultMetrics; collectDefaultMetrics(); const requestCounter = new client.Counter({ name: 'http_requests_total', help: 'Total HTTP requests', }); app.get('/', (req, res) => { requestCounter.inc(); res.send('Hello, World!'); }); app.get('/metrics', (req, res) => { res.set('Content-Type', client.register.contentType); res.end(client.register.metrics()); }); app.listen(3000, () => { console.log('Server running on port 3000'); }); 🚩Настроить Prometheus для сбора метрик Добавляем job в prometheus.yml scrape_configs: - job_name: 'my_app' static_configs: - targets: ['app_host:8000'] 🚩Push-модель через Pushgateway (если нужно) Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway. Запускаем Pushgateway: docker run -d -p 9091:9091 prom/pushgateway Отправляем метрики через curl echo "job_execution_time 5.3" | curl --data-binary @- Ссылка скрыта Настраиваем Prometheus на сбор данных из Pushgateway scrape_configs: - job_name: 'pushgateway' static_configs: - targets: ['localhost:9091'] Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Если переменная объявлена внутри функции, можно ли её использовать в другой функции? Нет. Переменная, объявленная внутри функции, имеет локальную область видимости — она недоступна в других функциях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!