Исправьте неправильно написанный 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"]
#вопросы_с_собеседований
Есть условное 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": "*"
}
]
}
#вопросы_с_собеседований
{
"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 доверяют ему и выполняют в нем свои самые конфиденциальные и критически важные приложения.
#вопросы_с_собеседований
Определение Amazon: Amazon Elastic Container Service (Amazon ECS) — это полностью управляемый сервис оркестрации контейнеров. Благодаря безопасности, надежности и масштабируемости сервиса ECS ряд заказчиков, например компании Duolingo, Samsung, GE и Cookpad доверяют ему и выполняют в нем свои самые конфиденциальные и критически важные приложения.
#вопросы_с_собеседований
👍1
Почему при высоких показателях значения LA на сервере может не наблюдаться проблем (консоль ssh отзывается, сервисы работают в обычном режиме)?
На параметр нагрузки LA влияет также и ожидание ввода-вывода (параметр wa в утилите top) в дисков и задержка сети. Данные параметры могут не влиять на работу основных сервисов в системе, но учитываются при расчете общей нагрузки на систему.
#вопросы_с_собеседований
На параметр нагрузки 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.
#вопросы_с_собеседований
Зависит от требованиям к хранению состояния.
✍️ 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) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
#вопросы_с_собеседований
Теорема CAP (известная также как теорема Брюера) — эвристическое утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:
Согласованность данных (англ. consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;
Доступность (англ. availability) — любой запрос к распределённой системе завершается корректным откликом, однако без гарантии, что ответы всех узлов системы совпадают;
Устойчивость к разделению (англ. partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
#вопросы_с_собеседований
👍6
Зачем нужен terraform taint?
Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
#вопросы_с_собеседований
Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
#вопросы_с_собеседований
В gitlab CI необходимо, чтобы джоба выполнялась всегда только при ручной активации. Что для этого необходимо сделать?
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
#вопросы_с_собеседований
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
#вопросы_с_собеседований
Что выполняет конструкция extends: .plan в gitlab CI?
extends используется для повторного использования секции пайплайна (аналог фунции). .plan указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends.
#вопросы_с_собеседований
extends используется для повторного использования секции пайплайна (аналог фунции). .plan указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends.
#вопросы_с_собеседований
👍3
Вопрос по Bash-у
#вопросы_с_собеседований
Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
...............................................................................................................
cmd 2>&1 >/dev/null | grep что-то
#вопросы_с_собеседований
Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
...............................................................................................................
👍6⚡1🌚1
Простой вопрос по Linux для новичков
#вопросы_с_собеседований
Что произойдет при выполнении команд:
1. cat [что-то] > file2
2. cat [что-то] >> file2
...............................................................................................................
1. Перенаправление вывода в файл, а не в стандартный вывод. Конечный файл будет создан, если он не существует, и будет перезаписан, если он существует.
2. Допишутся в конец существующего файла выходные данные команды. Конечный файл будет создан, если он не существует.
#вопросы_с_собеседований
Что произойдет при выполнении команд:
1. cat [что-то] > file2
2. cat [что-то] >> file2
...............................................................................................................
👍13🥱3🤔2❤1
Вопрос по 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 — количество зомби-процессов, которые завершили своё выполнение, но присутствующие в системе, чтобы дать родительскому процессу считать свой код завершения.
Простенький вопрос, который часто предлагают вначале собеса
Представлен вывод команды 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
👍11❤6🔥5🥰5🎉2
#вопросы_с_собеседований
Как работает OOM Killer и для чего нужен?
Когда в Linux-е заканчивается память, ядро вызывает OOM для ее освобождения. Это часто встречается на серверах, на которых запущен ряд процессов с интенсивным использованием памяти.
ООМ освобождает память для спасения системы, но чтобы процессы освобождаемые были наименее важны для системы.
У нас не только физическая и виртуальная память может закончиться. А если процесс потребляет страницу определенного размера, то могут быть не очень хорошие вещи.
Ядро Linux дает оценку каждому запущенному процессу, называемому oom_score, которая показывает, насколько вероятно, что он будет остановлен в случае нехватки доступной памяти.
Оценка пропорциональна количеству памяти, используемой процессом. Оценка - 10% процентов памяти, используемой процессом. Таким образом, максимальная оценка составляет 100% x 10 = 1000.
Подробнее об убийце здесь
Как работает OOM Killer и для чего нужен?
👍20🔥12❤4
#вопросы_с_собеседований
a=5; true | { true && a=10; } чему будет равно a?
Ответ будет 5. Потому что каждая команда конвейера исполняется в отдельной подоболочке
kannabis@fuse:~$ a=5; true | { true && a=10; echo $a; }
10
kannabis@fuse:~$ echo $a
5
a=5; true | { true && a=10; } чему будет равно a?
❤8🥰1
#вопросы_с_собеседований
Как процессы в системе взаимодействуют между собой?
🔹 Пайпы — связь между двумя взаимосвязанными процессами. Механизм является полудуплексным, что означает, что первый процесс связан со вторым. Для взаимодействия второго процесса с первым процессом требуется другой канал.
🔹 FIFO — Связь между двумя не связанными процессами. FIFO — это полный дуплекс, что означает, что первый процесс может взаимодействовать со вторым процессом и наоборот одновременно.
🔹 Очереди сообщений — связь между двумя или более процессами с полной дуплексной пропускной способностью. Процессы будут связываться друг с другом, отправляя сообщение и извлекая его из очереди. Полученное сообщение больше не доступно в очереди.
🔹 Совместно используемая память. Связь между двумя или более процессами достигается за счет совместного использования памяти всеми процессами. Совместно используемая память должна быть защищена друг от друга путем синхронизации доступа ко всем процессам.
🔹 Семафоры — предназначены для синхронизации доступа к нескольким процессам. Когда один процесс хочет получить доступ к памяти (для чтения или записи), он должен быть заблокирован (или защищен) и освобожден при удалении доступа. Это должно быть повторено всеми процессами для защиты данных.
🔹 Сигналы — это механизм связи между несколькими процессами посредством сигнализации. Это означает, что исходный процесс отправит сигнал (распознанный по номеру), а целевой процесс обработает его соответствующим образом.
Как процессы в системе взаимодействуют между собой?
👍11🔥2