Библиотека девопса | DevOps, SRE, Sysadmin
10.2K subscribers
1.54K photos
74 videos
4 files
2.77K links
Все самое полезное для девопсера в одном канале.

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

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

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
#вопросы_с_собеседований
Что такое непрерывная интеграция?

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

Каждый фрагмент кода (изменение / патч) проверяется для того, чтобы изменения можно было безопасно объединить. Сегодня обычной практикой является тестирование изменений с помощью автоматизированной сборки, которая обеспечивает интеграцию кода. Это может быть одна сборка, которая запускает несколько тестов на разных уровнях (модульных, функциональных и т. д.), или несколько отдельных сборок, которые нужно пройти, чтобы изменения были добавлены в репозиторий.
👍2
Напишите простой демон для systemd, который будет поддерживать работу процесса и перезапускаться в случае выхода из строя процесса.

[Unit]
Description=Test_service
After=postgres.service
StartLimitBurst=5
StartLimitIntervalSec=10
[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=/usr/bin/env python /app/server.py
[Install]
WantedBy=multi-user.target
#вопросы_с_собеседований
👍5
Что такое CI/CD в двух словах?

Свод практик, направленный на автоматизацию тестирования и доставки новых компонент проекта заинтересованным сторонам (разработчики, аналитики, инженеры качества, конечные пользователи и др.).
#вопросы_с_собеседований
👍1
Что такое inode в Linux?

Индексный дескриптор в файловой системе, который хранит метаданные о файлах, за исключением имени файла. В дескрипторе хранится: длина файла в байтах, id устройства с файлом, id пользователя владельца файла, id группы файла, режим файла (права доступа), timestamp последнего изменения файла, счётчик хардлинков, указатели на блоки файла.
#вопросы_с_собеседований
👍73
Объясните паттерны IaaS/PaaS/SaaS на примере пиццы.

На картинках варианты ответов.
#вопросы_с_собеседований
👍62
Исправьте неправильно написанный Dockerfile

Есть условное Node.js приложение, и неправильно написанный Dockerfile, который не будет кэшироваться и будет занимать много места. Нужно переписать его в соответствии с best practices.

#плохой файл
FROM ubuntu:18.04
COPY ./src /app
RUN apt-get update -y
RUN apt-get install -y nodejs
RUN npm install
ENTRYPOINT ["npm"]
CMD ["run", "prod"]

Вариант решения:
FROM node:14.15.4-buster as BUILDER
COPY ./src /build
RUN npm install
FROM node:14.15.4-alpine3.12
WORKDIR /app
COPY --from=BUILDER /build/out /app
CMD ["server.js"]
#вопросы_с_собеседований
👍6
Напишите политику для AWS S3 бакета, которая разрешает доступ только с определенных IP адресов.

{
"Id": "AllowFromSourceIP",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIP",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::demo-bucket",
"arn:aws:s3:::demo-bucket/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"11.11.11.11/32",
"22.22.22.22/32"
]
}
},
"Principal": "*"
}
]
}
#вопросы_с_собеседований
4
Что такое Amazon ECS?

Определение Amazon: Amazon Elastic Container Service (Amazon ECS) — это полностью управляемый сервис оркестрации контейнеров. Благодаря безопасности, надежности и масштабируемости сервиса ECS ряд заказчиков, например компании Duolingo, Samsung, GE и Cookpad доверяют ему и выполняют в нем свои самые конфиденциальные и критически важные приложения.
#вопросы_с_собеседований
👍1
Почему при высоких показателях значения LA на сервере может не наблюдаться проблем (консоль ssh отзывается, сервисы работают в обычном режиме)?

На параметр нагрузки LA влияет также и ожидание ввода-вывода (параметр wa в утилите top) в дисков и задержка сети. Данные параметры могут не влиять на работу основных сервисов в системе, но учитываются при расчете общей нагрузки на систему.
#вопросы_с_собеседований
👍3
Terraform Backend. Какой лучше?

Зависит от требованиям к хранению состояния.
✍️ AWS S3 — Standard (с locking через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB.

✍️ terraform enterprise — Standard (без блокировки).

✍️ etcd — Standard (без лока). Сохраняет состояние в etcd 2.x по заданному пути.

✍️ etcdv3 — Standard (с блокировкой). Сохраняет состояние в хранилище etcd в виде K/V с заданным префиксом.

✍️ gcs — Standard (с локом). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния.

Существуют также и другие Backend для Terraform.
#вопросы_с_собеседований
👍3
Теорема САР. Что это такое?

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

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

Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
#вопросы_с_собеседований
В gitlab CI необходимо, чтобы джоба выполнялась всегда только при ручной активации. Что для этого необходимо сделать?

Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
#вопросы_с_собеседований
Что выполняет конструкция extends: .plan в gitlab CI?

extends используется для повторного использования секции пайплайна (аналог фунции). .plan указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends.
#вопросы_с_собеседований
👍3
Вопрос по Bash-у
#вопросы_с_собеседований

Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
...............................................................................................................
cmd 2>&1 >/dev/null | grep что-то
👍61🌚1
Простой вопрос по Linux для новичков
#вопросы_с_собеседований

Что произойдет при выполнении команд:
1. cat [что-то] > file2
2. cat [что-то] >> file2

...............................................................................................................

1. Перенаправление вывода в файл, а не в стандартный вывод. Конечный файл будет создан, если он не существует, и будет перезаписан, если он существует.
2. Допишутся в конец существующего файла выходные данные команды. Конечный файл будет создан, если он не существует.
👍13🥱3🤔21
Вопрос по Linux
#вопросы_с_собеседований

Что такое системные вызовы? Зачем они нужны и как они работают? Какие системные вызовы знаешь?
...............................................................................................................
Системный вызов — это то, посредством чего код приложения, выполняющегося в пользовательском режиме, запрашивает службу, предоставляемую кодом, который выполняется в режиме ядра.

read - чтение из файлового дескриптора.
open - открывающий и по возможности создающий файл или устройство
close - закрыть файловый дескриптор
access - проверка пользовательских привилегий для этого файла
mmap - служит для отображения предварительно открытого файла (например, с помощью системного вызова open()) в адресное пространство вычислительной системы
👍13🔥4
#вопросы_с_собеседований
Простенький вопрос, который часто предлагают вначале собеса

Представлен вывод команды 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 — количество зомби-процессов, которые завершили своё выполнение, но присутствующие в системе, чтобы дать родительскому процессу считать свой код завершения.
👍116🔥5🥰5🎉2
#вопросы_с_собеседований

Как работает OOM Killer и для чего нужен?

Когда в Linux-е заканчивается память, ядро вызывает OOM для ее освобождения. Это часто встречается на серверах, на которых запущен ряд процессов с интенсивным использованием памяти.

ООМ освобождает память для спасения системы, но чтобы процессы освобождаемые были наименее важны для системы.

У нас не только физическая и виртуальная память может закончиться. А если процесс потребляет страницу определенного размера, то могут быть не очень хорошие вещи.

Ядро Linux дает оценку каждому запущенному процессу, называемому oom_score, которая показывает, насколько вероятно, что он будет остановлен в случае нехватки доступной памяти.

Оценка пропорциональна количеству памяти, используемой процессом. Оценка - 10% процентов памяти, используемой процессом. Таким образом, максимальная оценка составляет 100% x 10 = 1000.

Подробнее об убийце здесь
👍20🔥124
#вопросы_с_собеседований

a=5; true | { true && a=10; } чему будет равно a?

Ответ будет 5. Потому что каждая команда конвейера исполняется в отдельной подоболочке

kannabis@fuse:~$ a=5; true | { true && a=10; echo $a; }
10
kannabis@fuse:~$ echo $a
5
8🥰1