Библиотека собеса по DevOps | вопросы с собеседований
3.07K subscribers
121 photos
4 videos
2 files
154 links
Вопросы с собеседований по DevOps и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d7e18893

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что такое kube-proxy и для чего он нужен?

Это элемент данных Kubernetes, который работает на каждой ноде, взаимодействует с CNI-плагином для обеспечения работы сети pod и обеспечивает функционирование сервисов в кластере на своей ноде, действуя как прокси или контроллер правил IPTABLES/IPVS в зависимости от режима.
Из каких компонентов состоит k8s и каково их назначение?

Kubernetes (K8s) включает в себя плоскость управления и плоскость данных.

Плоскость управления — это уровень управления, который работает на узлах, называемых главными узлами, и может работать в конфигурации с одним главным узлом или несколькими главными узлами.
Плоскость управления включает в себя:
ETCD: хранилище конфигурации кластера
Kubernetes API: предоставляет API для взаимодействия между компонентами K8s и клиентами внутри и вне кластера
Kubernetes controller manager: реализует контроллеры, управляющие основными сущностями кластера, такими как контроллер узлов, контроллер задач и контроллер срезов конечных точек
Kubernetes scheduler: выбирает узлы, на которых будут запускаться POD
cloud controller manager: используется для реализации функций, специфичных для работы с облаком (если кластер K8s работает в облачной среде)

Плоскость данных состоит из компонентов, работающих на каждом узле:
kubelet: отслеживает изменения конфигурации узла, применяет изменения конфигурации, выполняет проверки контейнера, сообщает о статусе контейнера, работает с плагином CRI и обеспечивает функции запуска и остановки контейнера
kube-proxy: отвечает за сетевой компонент, работает с плагином CNI и обеспечивает работу сущности «сервис» на своем узле.
Допустим, у вас есть YAML-файл, в котором описаны deployment и service. Вы вводите команду kubectl create -f file.yaml . Как можно подробнее опишите, что произойдёт после нажатия клавиши Enter.

В начале операции утилита kubectl будет искать и анализировать kubeconfig, извлекая оттуда данные о адресе Kubernetes API, сертификатах для проверки, и ключе доступа. Затем она отправит запрос.
API Kubernetes будет обрабатывать запрос, аутентифицировать пользователя, учитывая его права, и, в случае соответствия правам, сохранять информацию о новом развёртывании (deployment) и сервисе (service) в ETCD.
Контроллер Kubernetes узнает о созданном deployment и, используя Kubernetes API, запишет информацию в ETCD о replicaset и создаст необходимое количество PODов. В этот момент могут быть задействованы admission controller’ы для проверки корректности PODов или их преобразования.
Контроллер Kubernetes будет обнаруживать новые POD'ы и автоматически распределять их по узлам, учитывая их параметры, необходимые ресурсы, специфические требования к узлам (nodeSelector), а также другие настройки, такие как taints/tolerations, podAntiAffinity и т.д.
Kubelet, просматривая изменения в конфигурации ноды через Kubernetes API, начнет вносить изменения: запустит контейнеры через CRI, настроит сеть через kube-proxy, выполнит пробы и, по прохождении проб, изменит статус POD’а в ETCD на Ready через Kubernetes API.
Контроллер Kubernetes увидит готовые PODы, соответствующие service, и создаст записи о новых Endpoint’ах для соответствующих PODов.
Kubelet’ы на всех нодах кластера увидят изменения в конфигурации и вызовут kube-proxy для создания Endpoint’ов.
Kube-proxy вызовет CNI-плагины, которые реализуют Endpoint’ы на уровне инфраструктуры.
При обращении к сервису трафик будет направлен на новые поды.
Как объединить две метрики?

В Prometheus объединение двух метрик можно выполнить с помощью функции *join()*. Функция *join()* объединяет два или более временных ряда на основе значений их меток. Она принимает два обязательных аргумента: *on* и *table*. Аргумент on указывает метки для объединения *on*, а аргумент *table* указывает временной ряд для объединения. На картинке пример того, как объединить две метрики с помощью функции join().
Что означает «плоскость данных»?

Плоскость данных — это часть сети, которая фактически пересылает данные/пакеты.
Какие есть недостатки у service mesh?

Излишняя сложность, увеличенное потребление ресурсов и дополнительные затраты.
Что такое egress?

Возможность установить внешний IP-адрес для исходящего трафика приложений за пределы кластера k8s может быть реализована через поддержку egress на уровне CNI-плагина. Эта функциональность может быть описана специальным объектом в неймспейсе.
Что вы можете рассказать об архитектуре Horizon?

API обратно совместим. Существует три типа панелей мониторинга: пользовательские, системные и настройки. Он обеспечивает базовую поддержку всех основных проектов OpenStack, таких как Neutron, Nova и т. д. (из коробки, нет необходимости устанавливать дополнительные пакеты или плагины). Любой может расширить информационные панели и добавить новые компоненты. Horizon предоставляет шаблоны и основные классы, на основе которых можно создать собственную панель мониторинга.
Что означает «плоскость управления»?

Плоскость управления — это часть сети, которая решает, как маршрутизировать и пересылать пакеты в другое место.
Простенький вопрос, который часто предлагают в начале собеса

Представлен вывод команды top. Что означает каждая запись в выводе?

top — 10:44:36 up 91 days, 19:29, 7 users, load average: 0,00, 0,02, 0,05
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0,0 us, 1,5 sy, 0,0 ni, 96,9 id, 0,0 wa, 0,0 hi, 0,0 si, 1,5 st
KiB Mem : 12137392 total, 6227844 free, 1117728 used, 4791820 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem

top — утилита
10:44:36 — время системы
up — сколько система работает с момента последнего запуска
7 user — количество авторизованных юзеров в системе
load average: 0.00, 0.02, 0.05 — параметр средней нагрузки на систему за период времени 1 минута, 5 минут, 15 минут
156 total — всего процессов в системе
1 running — количество процессов в работе
155 sleeping — ожидание процесса или сигнала
0 stopped — количество приостановленных процессов сигналом STOP или выполнение трассировки
0 zombie — количество зомби-процессов, которые завершили своё выполнение, но присутствующие в системе, чтобы дать родительскому процессу считать свой код завершения.
Если вы остановите контейнер — потеряете данные?

При остановке контейнера Docker данные не теряются, так как они записываются на диск приложением исключительно для хранения. Этот процесс продолжается до тех пор, пока контейнер не будет удален окончательно. Кроме того, файловая система контейнера сохраняет изменения даже после полной остановки контейнера.
Правда или ложь? Загрузка программы в память происходит жадно (все сразу)

Это было правдой в прошлом, но сегодняшние операционные системы выполняют отложенную загрузку, что означает, что сначала загружаются только те части, которые необходимы для запуска процесса.
👶 Новичок в компании: 18 советов, как быстро адаптироваться и освоить новые навыки

Начало работы в новой компании может быть волнующим и сложным, особенно если вы новичок в отрасли. Как быстро освоиться, произвести хорошее впечатление и стать ценным сотрудником?


Читать статью

#туториал
Что такое MCollective?

MCollective — это система промежуточного программного обеспечения, которая интегрируется с Puppet для обеспечения оркестрации, удаленного выполнения и параллельного выполнения заданий.
Правда или ложь? Любой действительный файл JSON также является действительным файлом YAML.

Правда. Потому что YAML — это суперсет JSON.
🐍🕵 5 лучших Python инструментов для специалистов по кибербезопасности

В данной статье представлен обзор пяти высокоэффективных инструментов на базе языка Python, применяемых в сфере информационной безопасности. Рассматриваются их ключевые функции и области применения.

🔗 Читать статью
🔗 Зеркало
Можете ли вы сравнить Puppet с другими инструментами управления конфигурациями? Почему вы решили использовать Puppet?

Puppet часто сравнивают с другими инструментами управления конфигурацией, такими как Chef, Ansible, SaltStack и cfengine. Выбор использования Puppet часто зависит от потребностей организации, таких как простота использования, масштабируемость и поддержка сообщества.
Что такое пропускная способность?

Пропускная способность — это способность канала связи измерять, какой объем данных он может обработать за определенный период времени. Большая пропускная способность будет означать большую обработку трафика и, следовательно, большую передачу данных.
Правда или ложь? В одном контейнере могут быть два объекта с одинаковым именем, но не в двух разных контейнерах.

ЛОЖЬ. Два объекта могут иметь одно и то же имя, если они находятся в разных контейнерах.
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут.

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое userspace, kernelspace? Чем они отличаются?

Под пользовательским пространством понимается весь код операционной системы, который находится вне ядра.

Большинство Unix-подобных операционных систем (включая Linux) поставляются с разнообразными предустановленными утилитами, средствами разработки и графическими инструментами — это все приложения пространства пользователя.

Все пользовательские приложения (и контейнеризированные, и нет) при работе используют различные данные, но где эти данные хранятся?

Ядро обеспечивает абстракцию для безопасности, оборудования и внутренних структур данных. Например, системный вызов open() используется для получения дескриптора файла в Python, C, Ruby и других языках программирования. Вряд ли бы вы хотели, чтобы ваша программа работала с XFS на уровне битов, поэтому ядро предоставляет системные вызовы и работает с драйверами. Фактически этот системный вызов настолько распространен, что является частью библиотеки POSIX .

Краткое определение:

👉 Пользовательское пространство представляющее собой набор местоположений, в которых выполняются обычные пользовательские процессы (т. е. все, кроме ядра). Роль ядра состоит в том, чтобы управлять приложениями, работающими в этом пространстве, от взаимодействия друг с другом и с машиной.
👉 Пространство ядра , то есть место, где хранится и выполняется код ядра.
Пользовательское пространство имеет доступ к ограниченной памяти, ядро имеет всю память.

И чтобы работать, приложения взаимодействуют через интерфейс, которое называется системным вызовом.