Библиотека собеса по 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
加入频道
На всех серверах должен быть набор пользователей, с доступом по ssh-ключу, стандартный модуль user не позволяет вносить ssh ключ в authorized_keys. Предложите решение.

1. Использовать модуль authorized_key для добавления ключей.
2. Использовать модуль shell, чтобы вручную с использованием команды cat {{ PUBLIC_SSH_KEY }} >> /home/{{ USER }}/.ssh/authorized_keys добавить ключ. В данном случае шаблоны Jinja2 PUBLIC_SSH_KEY и USER должны быть заданы.
3. Есть группы пользователей, которые должны заводиться не на всех серверах. Как ограничить заведение пользователей?
Для чего нужна команда git commit --amend?

commit --ammend используется для исправления сообщения последнего коммита. Также возможно использовать, чтобы добавить файлы в индекс (git add), после добавить файлы в коммит git commit --ammend.
Что такое VACUUM в PostgreSQL?

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

Без параметра команда VACUUM обрабатывает все таблицы в текущей базе данных, которые может очистить текущий пользователь. Если в параметре передаётся имя таблицы, VACUUM обрабатывает только эту таблицу.

Простая команда VACUUM (без FULL) только высвобождает пространство и делает его доступным для повторного использования. Эта форма команды может работать параллельно с обычными операциями чтения и записи таблицы, так она не требует исключительной блокировки. Однако освобождённое место не возвращается операционной системе (в большинстве случаев); оно просто остаётся доступным для размещения данных этой же таблицы. VACUUM FULL переписывает всё содержимое таблицы в новый файл на диске, не содержащий ничего лишнего, что позволяет возвратить неиспользованное пространство операционной системе. Эта форма работает намного медленнее и запрашивает исключительную блокировку для каждой обрабатываемой таблицы.
Что такое модуль в terraform? Для чего он нужен?

Модуль в Terraform — пакет конфигурации Terraform, который можно использовать при повторной конфигурации компонентов инфраструктуры, а также базовой организации кода Terraform в директориях. При подключения модуля, ему даётся имя.
Что такое файл в понятиях Unix-like операцинных системах?

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

Типы файлов в Linux:

Обычные файлы, для хранения информации;
Специальные файлы — для устройств и туннелей;
Директории.
В ветке develop есть коммит с изменениями, которые нужно перенести в ветку master. Как это сделать?

Необходимо найти хеш этого коммита и выполнить следующую комманду в ветке, в которую нужно перенести коммит.

git cherry-pick <commit_hash>
Чем отличаются ReplicationController от ReplicaSet?

ReplicationController гарантирует, что указанное количество реплик подов будут работать одновременно. Другими словами, ReplicationController гарантирует, что под или набор подов всегда активен и доступен.

ReplicaSet — это следующее поколение Replication Controller. Единственная разница между ReplicaSet и Replication Controller - это поддержка селектора. ReplicaSet поддерживает множественный выбор в селекторе, тогда как ReplicationController поддерживает в селекторе только выбор на основе равенства.
Что такое Trunk-based development?

Trunk-based Development (TBD) — модель ветвления, в которой разработчики совместно работают над кодом в одной ветви, называемой "стволом" (trunk). При этом другие ветви имеют короткий срок жизни благодаря использованию документированных методов.
На новом сервере не установлен Python, который требуется для работы Ansible. Как выполнить установку Python на сервере используя Ansible?

Использовать модуль raw, которому необходимо передать команду для установки python на сервере. Модуль raw принимает команду без дополнительной обработки Python и выполняет её на сервере.
Как обеспечить, чтобы поды никогда не перешли в состояние Evicted на ноде?

Когда узлу (node) кластера не хватает памяти или дискового пространства, он активирует флаг, сигнализирующий о данной проблеме. Данное действие блокирует любое новое выделение ресурсов на ноде и запускает процесс "выселения" (evicted) пода с ноды.

В этот момент kubelet начинает восстанавливать ресурсы, удаляя контейнеры и объявляя поды, как Failed, пока использование ресурсов снова не станет ниже порога "выселения".

Сначала kubelet пытается освободить ресурсы узла, особенно диск, путем удаления мертвых модулей и их контейнеров, а затем неиспользуемых образов. Если этого недостаточно, kubelet начинает выселять поды конечных пользователей в следующем порядке:

Best Effort.
Burstable поды, использующие больше ресурсов, чем запрос истощенного ресурса.
Burstable поды, использующие меньше ресурсов, чем запрос истощенного ресурса.
Чтобы под не был удален при "выселении", необходимо настроить политики QoS для пода как Guaranteed.
В Ansible роли есть директории vars и default. Что они содержат и чем отличаются?

Ansible применяет порядок приоритета переменных. Ниже представлен список в порядке повышения приоритета.

command line values (for example, -u my_user, these are not variables)
role defaults (defined in role/defaults/main.yml)
inventory file or script group vars
inventory group_vars/all
playbook group_vars/all
inventory group_vars/*
playbook group_vars/*
inventory file or script host vars
inventory host_vars/*
playbook host_vars/*
host facts / cached set_facts
play vars
play vars_prompt
play vars_files
role vars (определяемые в role/vars/main.yml)
block vars (только для задач в block)
task vars (только для задач)
include_vars
set_facts / registered vars
role (и include_role) params
include params
extra vars (например, -e "user=my_user") (всегда приоритетнее)

Соответственно, переменные в vars будут приорететнее, чем в defaults.
Что такое Docker? В чем отличие контейнера от образа?

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.

Образ — шаблон приложения, который содержит слои файловой системы в режиме "только-чтение".

Контейнер — запущенный образ приложения, который кроме нижних слоев в режиме "только чтение" содержит верхний слой в режиме "чтение-запись".
Что такое эфемерные контейнеры?

Эфемерные контейнеры стали бета-функцией в Kubernetes v1.23 и теперь включены по умолчанию. Эфемерные контейнеры предназначены для транзитных задач, когда вам нужно временно подключить дополнительный контейнер к существующему поду. Это идеально подходит для отладочных операций, когда вы хотите проверить поды, не затрагивая живые экземпляры контейнеров.
Чем отличается StatefulSet от Deployment?

Deployment — ресурс Kubernetes предназнваенный для развертывания приложения без сохранения состояния. При использовании PVC все реплики будут использовать один и тот же том, и ни один из них не будет иметь собственного состояния.

StatefulSet — поддерживают состояние приложений за пределами жизненного цикла отдельных модулей pod, например для хранилища. Используется для приложений с отслеживанием состояния, каждая реплика модуля будет иметь собственное состояние и будет использовать свой собственный том.
Зачем нужен terraform taint?

Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
Чем отличается count от for_each?

count — это итерация по списку, который содержит целочисленные элементы, for_each — это итерация по корневым ключам словаря, которые могут содержать данные любого типа.

resource "aws_instance" "web" {
count = 3

instance_type = "t2.micro"
ami = data.aws_ami.debian_buster.id
tags = {
Name = "WebServer-${count.index + 1}"
}
}
Описание ресурса выше создаст 3 одинаковых EC2 инстанса, изменив имя с указанием номера текущего состояния счётчика. count начинает отсчет с 0, поэтому чтобы 1 EC2 инстанс был с индексом 1 в имени ему прибавили 1.

resource "aws_instance" "server" {
for_each = {
web = { type = "t2.micro", public_ip = true },
db = { type = "m5.large", public_ip = false }
}

instance_type = each.value["type"]
ami = data.aws_ami.debian_buster.id
associate_public_ip_address = each.value["public_ip"]
tags = {
Name = "each.key"
}
}
Ресурс выше создаст 2 EC2 инстанса с итерацией по ключам each.key и использовав значения вложенных словарей в конфигурации EC2.
Чем отличается Kubernetes от Openshift?

Openshift имеет более строгие политики безопасности и модели аутентификации.
Openshift поддерживает полную интеграцию CI/CD Jenkins.
Openshift имеет веб-консоль по-умолчанию. В Kubernetes консоль необходимо дополнительно устанавливать консоль.
В Kubernetes возможно устанавливать сторонние сетевые плагины. В Openshift используется собственное сетевое решение Open vSwitch, которое предоставляет 3 различный плагина.
Kubernetes может быть установлен практически на любой дистрибутив Linux. Openshift имеет ограничения на устанавливаемые дистрибутивы, преимущественно используются RH-дистрибутивы.
Kubernets доступен в большинстве облачных платформ - GCP, AWS, Azure, Yandex.Cloud. Openshift доступен на облачной платформе Azure и облаке от IBM.
По-умолчанию, в Openshift поды в кластере могут быть запущены только под обычным пользователем, чтобы запустить под под пользователем root необходимо выдать права для сервисного аккаунта. В Kubernetes по-умолчанию поды могут быть запущены по пользователем root.
Теорема САР. Что это такое?

Теорема CAP (известная также как теорема Брюера) — эвристическое утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:

Согласованность данных (англ. consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;
Доступность (англ. availability) — любой запрос к распределённой системе завершается корректным откликом, однако без гарантии, что ответы всех узлов системы совпадают;
Устойчивость к разделению (англ. partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
Что такое операторы в понятиях Kubernetes?

Операторы — это программные расширения Kubernetes,призванное автоматизировать выполнение рутинных действий над объектами кластера при определённых событиях.

Оператор работает по подписке на события к API Kubernetes.