DevOps | Вопросы собесов
5.2K subscribers
30 photos
821 links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Что такое Kubernetes?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤔 Что делает git remote?

Команда git remote в системе управления версиями Git используется для управления удаленными репозиториями, связанными с локальным репозиторием. Удаленные репозитории представляют собой версии проекта, которые находятся на сервере и могут быть доступны для совместной работы. Команда git remote позволяет добавлять, удалять и просматривать удаленные репозитории, а также управлять их настройками.

🚩Функции

🟠Просмотр списка удаленных репозиториев
Команда git remote без аргументов выводит список всех удаленных репозиториев, настроенных для текущего локального репозитория. Команда git remote -v выводит список удаленных репозиториев вместе с их URL.
🟠Добавление удаленного репозитория
Команда git remote add <name> <url> добавляет новый удаленный репозиторий с указанным именем и URL.
🟠Удаление удаленного репозитория
Команда git remote remove <name> удаляет указанный удаленный репозиторий из списка.
🟠Переименование удаленного репозитория
Команда git remote rename <old-name> <new-name> переименовывает существующий удаленный репозиторий.
🟠Изменение URL удаленного репозитория
Команда git remote set-url <name> <newurl> изменяет URL для указанного удаленного репозитория.

🚩Синтаксис и примеры использования

1⃣Просмотр списка удаленных репозиториев
Список имен удаленных репозиториев
git remote     


Список имен и URL удаленных репозиториев
git remote -v     


2⃣Добавление удаленного репозитория
   git remote add origin https://github.com/username/repository.git


3️⃣ Удаление удаленного репозитория:
   git remote remove origin


4️⃣ Переименование удаленного репозитория:
   git remote rename origin new-origin


5️⃣ Изменение URL удаленного репозитория:
git remote set-url origin https://github.com/username/new-repository-url.git   


🚩Примеры использования

1⃣Добавление нового удаленного репозитория
git remote add upstream https://github.com/anotheruser/another-repository.git   


2⃣Просмотр текущих удаленных репозиториев
git remote -v   


Вывод
origin    https://github.com/username/repository.git (fetch)
origin https://github.com/username/repository.git (push)
upstream https://github.com/anotheruser/another-repository.git (fetch)
upstream https://github.com/anotheruser/another-repository.git (push)


4⃣Переименование удаленного репозитория
В этом примере удаленный репозиторий origin переименовывается в old-origin.
git remote rename origin old-origin   


5⃣Изменение URL удаленного репозитория
Этот пример изменяет URL удаленного репозитория origin.
git remote set-url origin git@github.com:username/new-repository.git   


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
🤔 Где лучше всего хранить state?

State лучше хранить в управляемых внешних хранилищах, таких как базы данных или распределённые системы (Redis, Consul). Это упрощает масштабирование и сохраняет данные при перезапуске контейнеров. Использование локального хранилища не рекомендуется из-за рисков потери данных.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
🤔 В чём плюсы redis?

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

🚩Плюсы

Высокая производительность
Быстродействие: Redis хранит данные в оперативной памяти, что обеспечивает очень низкую задержку при доступе к данным. Операции чтения и записи могут выполняться за миллисекунды.
Поддержка миллионов запросов в секунду: Благодаря своему дизайну и хранению данных в памяти, Redis может обрабатывать миллионы запросов в секунду на мощном оборудовании.

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

Функции для сложных сценариев
Публикация/подписка (Pub/Sub): Redis поддерживает механизм публикации/подписки, что позволяет использовать его для создания систем обмена сообщениями в реальном времени.
Транзакции: Redis поддерживает атомарные операции через механизм транзакций, что позволяет группировать несколько команд в одну транзакцию.
Lua-скрипты: Возможность выполнения скриптов на языке Lua непосредственно на сервере позволяет оптимизировать выполнение сложных операций.

Поддержка распределённых систем
Репликация: Redis поддерживает асинхронную мастеровую репликацию, что позволяет создавать отказоустойчивые и высокодоступные конфигурации.
Сентинел (Sentinel): Redis Sentinel обеспечивает автоматическое обнаружение сбоев и автоматическое переключение на резервные узлы, что повышает надежность системы.
Кластеризация: Redis Cluster позволяет распределять данные по нескольким узлам, обеспечивая масштабируемость и высокую доступность.

Настройка и масштабируемость
Гибкость настройки: Redis предоставляет множество опций для настройки, что позволяет оптимизировать его под конкретные рабочие нагрузки.
Масштабируемость: Возможность горизонтального масштабирования через Redis Cluster делает его подходящим для использования в крупных распределенных системах.

Поддержка долговременного хранения данных
Снапшоты и журналы изменений (AOF): Redis поддерживает создание снапшотов (RDB) и журналов изменений (AOF) для обеспечения долговременного хранения данных и восстановления после сбоев.
Персистентность: Эти механизмы позволяют сохранять данные на диск, что обеспечивает долговременное хранение и восстановление данных после перезапуска.

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

🚩Примеры использования

🟠Кэширование
Быстрое кэширование данных для ускорения доступа и уменьшения нагрузки на базу данных.
🟠Сеансовое хранилище
Хранение данных сеансов пользователей в веб-приложениях.
🟠Очереди задач
Использование списков и множества для создания очередей задач и обработки фоновых задач.
🟠Системы обмена сообщениями
Реализация систем реального времени для чатов и уведомлений через механизм Pub/Sub.
🟠Аналитика и мониторинг
Хранение и обработка временных рядов данных для аналитики и мониторинга.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
🤔 Отличия виртуальной машины от контейнеров?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👾5🤔1
🤔 Какие плюсы у mongodb?

🚩Плюсы

Гибкость в работе с данными
Документно-ориентированная модель: MongoDB использует JSON-подобные документы (BSON) для хранения данных. Это позволяет хранить сложные вложенные структуры и динамические схемы данных, что делает ее более гибкой по сравнению с реляционными базами данных.
Схема-менее: MongoDB не требует предварительно определенной схемы, что позволяет легко вносить изменения в структуру данных без необходимости изменения всей базы данных.

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

Высокая производительность
Высокая скорость операций: MongoDB обеспечивает высокую производительность для операций чтения и записи, что делает ее подходящей для приложений с высокими требованиями к скорости доступа к данным.
Индексы: MongoDB поддерживает создание индексов на любые поля в документах, что значительно ускоряет операции поиска и сортировки.

Удобные инструменты разработки
MongoDB Atlas: Это облачная платформа, предоставляющая полностью управляемую базу данных MongoDB с автоматическим управлением инфраструктурой, мониторингом и безопасностью.
Широкий спектр драйверов: MongoDB поддерживает множество языков программирования и платформ, включая JavaScript, Python, Java, C#, Go и другие.

Возможности для анализа данных
Агрегации: MongoDB предоставляет мощный фреймворк агрегации, который позволяет выполнять сложные запросы и операции над данными, включая фильтрацию, сортировку, группировку и преобразование данных.
Поддержка MapReduce: MongoDB поддерживает MapReduce для выполнения сложных аналитических задач и обработки больших объемов данных.

Высокая доступность и отказоустойчивость
Репликация: MongoDB поддерживает репликационные наборы (replica sets), которые обеспечивают высокую доступность и отказоустойчивость данных за счет создания копий данных на нескольких серверах.
Автоматическое переключение (failover): В случае сбоя основного сервера, MongoDB автоматически переключает операции на один из вторичных серверов, что обеспечивает непрерывность работы.

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

🚩Примеры использования

🟠Веб-приложения
MongoDB идеально подходит для хранения данных пользователей, сеансов, контента и метаданных в динамических веб-приложениях.
🟠Интернет вещей (IoT)
Гибкость и масштабируемость MongoDB делают ее подходящей для хранения и анализа данных, собираемых с устройств IoT.
🟠Большие данные и аналитика
Возможности агрегации и MapReduce позволяют эффективно обрабатывать и анализировать большие объемы данных.
🟠Социальные сети
MongoDB может использоваться для хранения и обработки данных пользователей, сообщений, комментариев и взаимодействий в реальном времени.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Какие бывают виды дополнительных контейнеров в поде?

В поде Kubernetes могут быть init-контейнеры для предварительной настройки окружения и sidecar-контейнеры для дополнительных задач, таких как логирование или прокси. Они обеспечивают гибкость и функциональность при развертывании приложений.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7
🤔 Какая разница между SQL и nosql базами?

Базы данных различаются по нескольким ключевым аспектам, включая модель данных, язык запросов, масштабируемость, схему данных и многие другие характеристики. Вот основные различия между SQL и NoSQL базами данных:

🚩Модель данных

🟠SQL базы данных
Реляционная модель: SQL базы данных используют реляционную модель, где данные хранятся в таблицах, состоящих из строк и столбцов. Таблицы могут быть связаны друг с другом с помощью ключей (первичных и внешних).
Схема: Строгая схема данных, которая требует определения структуры данных (таблиц, столбцов и типов данных) перед вставкой данных.

🟠NoSQL базы данных
Нереляционные модели: NoSQL базы данных используют различные модели данных, включая документные, графовые, ключ-значение и колоночные модели.
Гибкая схема: NoSQL базы данных часто не требуют предварительного определения схемы, что позволяет легко изменять структуру данных.

🚩Язык запросов

🟠SQL базы данных
Язык SQL: Используют Structured Query Language (SQL) для выполнения операций с базой данных, таких как создание, чтение, обновление и удаление данных (CRUD-операции).

🟠NoSQL базы данных
Разнообразные языки запросов: В зависимости от типа NoSQL базы данных, могут использоваться разные языки запросов и API. Например, MongoDB использует запросы на основе JSON, а Cassandra использует CQL (Cassandra Query Language).

🚩Масштабируемость

🟠SQL базы данных
Вертикальная масштабируемость: SQL базы данных обычно масштабируются путем увеличения ресурсов (памяти, процессоров) на одном сервере.
Ограниченная горизонтальная масштабируемость: Хотя можно настроить кластеризацию и репликацию, горизонтальная масштабируемость может быть сложной и ограниченной.

🟠NoSQL базы данных
Горизонтальная масштабируемость: NoSQL базы данных изначально спроектированы для горизонтального масштабирования, что позволяет распределять данные и нагрузку по множеству серверов.
Легкость масштабирования: Добавление новых узлов в кластер часто происходит без значительных изменений в архитектуре приложения.

🚩Согласованность данных

🟠SQL базы данных
ACID-свойства: Поддержка свойств ACID (Atomicity, Consistency, Isolation, Durability), что обеспечивает надежную обработку транзакций и согласованность данных.

🟠NoSQL базы данных
BASE-свойства: Поддержка свойств BASE (Basically Available, Soft state, Eventual consistency), что позволяет достичь высокой доступности и производительности, но может допускать временную несогласованность данных.

🚩Примеры использования

🟠SQL базы данных
Традиционные бизнес-приложения: Финансовые системы, CRM-системы, ERP-системы, где важна согласованность данных и транзакционная целостность.

🟠NoSQL базы данных
Веб-приложения и социальные сети: Где данные могут быть неструктурированными или полуструктурированными и требуется высокая скорость доступа к данным.
Интернет вещей (IoT): Для хранения больших объемов данных, собираемых с различных устройств.
Аналитика и большие данные: Где требуется быстрое чтение и запись больших объемов данных, часто в реальном времени.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161
🤔 Что такое факты в ansible?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥6
🤔 Какая самая популярная хранилка memory для Java?

Самым популярным in-memory (в памяти) хранилищем данных для Java является Hazelcast. Это распределенное in-memory хранилище данных, которое обеспечивает высокую доступность, масштабируемость и производительность. Hazelcast часто используется в Java-приложениях для кэширования, управления сеансами, распределенных вычислений и многого другого.

🚩Плюсы

Простота интеграции
Hazelcast легко интегрируется с Java-приложениями. Библиотека Hazelcast доступна через Maven и Gradle, что делает процесс подключения простым и удобным.

Высокая производительность
Так как данные хранятся в памяти, доступ к ним происходит очень быстро, что значительно улучшает производительность приложений.

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

Распределенные структуры данных
Hazelcast предоставляет различные структуры данных, такие как карты (maps), множества (sets), очереди (queues), списки (lists) и другие, которые можно использовать в распределенном режиме.

Функции высокой доступности
Hazelcast поддерживает репликацию данных между узлами кластера, что обеспечивает высокую доступность и отказоустойчивость системы.

Поддержка вычислений
В Hazelcast можно выполнять распределенные вычисления с использованием MapReduce, входящих задач и прочих механизмов.

🚩Пример использования

<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>4.2.5</version>
</dependency>


🚩Пример кода

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;

public class HazelcastExample {
public static void main(String[] args) {
// Создаем экземпляр Hazelcast
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

// Получаем ссылку на распределенную карту
IMap<Integer, String> map = hazelcastInstance.getMap("my-distributed-map");

// Добавляем данные в карту
map.put(1, "value1");
map.put(2, "value2");

// Получаем данные из карты
String value1 = map.get(1);
String value2 = map.get(2);

// Выводим значения
System.out.println("Value for key 1: " + value1);
System.out.println("Value for key 2: " + value2);

// Закрываем экземпляр Hazelcast
hazelcastInstance.shutdown();
}
}


🚩Альтернативы

🟠Apache Ignite
Это распределенная in-memory платформа, которая предоставляет как in-memory хранилище, так и возможности для распределенных вычислений и обработки данных в реальном времени.
🟠Ehcache
Простое и мощное кэширование в памяти, часто используемое для ускорения доступа к часто запрашиваемым данным. Поддерживает интеграцию с Hibernate.
🟠Redis
В то время как Redis чаще используется как отдельный сервер для in-memory данных, он также может использоваться в Java-приложениях через клиентские библиотеки, такие как Jedis и Lettuce.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Как делается деплой на гитлабе?

Деплой на GitLab осуществляется через .gitlab-ci.yml, где описываются этапы сборки, тестирования и развертывания. Используются Runner’ы для выполнения заданий, а переменные хранят конфиденциальные данные. Интеграция с хранилищами или облаками автоматизирует процесс развертывания.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
🤔 Что такое custom resourse definition?

Это механизм в Kubernetes, позволяющий пользователям определять свои собственные ресурсы (Custom Resources) и управлять ими так же, как и встроенными ресурсами Kubernetes (например, Pod, Service, Deployment). CRD расширяет API Kubernetes, предоставляя возможность создать пользовательские объекты с уникальными схемами и поведением.

🚩Аспекты

🟠Расширяемость API
CRD позволяет разработчикам расширять стандартный API Kubernetes, добавляя новые типы ресурсов, специфичные для их приложений или доменов.

🟠Определение схемы
Пользователи могут определить схему (структуру) своих пользовательских ресурсов с помощью YAML или JSON. Это включает описание полей, типов данных, обязательных полей и других ограничений.

🟠Использование контроллеров
Для управления состоянием пользовательских ресурсов можно разработать кастомные контроллеры (Custom Controllers), которые будут следить за изменениями в этих ресурсах и выполнять соответствующие действия.

🚩Пример использования

🟠Определение CRD
Создаем YAML-файл для определения CRD, который будет описывать пользовательский ресурс типа MyResource:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
field1:
type: string
field2:
type: integer
scope: Namespaced
names:
plural: myresources
singular: myresource
kind: MyResource
shortNames:
- myr


🟠Применение CRD
Примените файл CRD, чтобы создать новый тип ресурса в Kubernetes:
kubectl apply -f myresource-crd.yaml


🟠Создание пользовательского ресурса
После создания CRD можно создавать объекты пользовательского ресурса:
apiVersion: example.com/v1
kind: MyResource
metadata:
name: my-custom-resource
spec:
field1: "value1"
field2: 42


Примените файл с пользовательским ресурсом:
kubectl apply -f my-custom-resource.yaml


🚩Контроллер для пользовательского ресурса

Чтобы управлять состоянием пользовательских ресурсов, необходимо создать контроллер. Контроллеры обычно пишутся на Go с использованием фреймворка kubebuilder или operator-sdk.

Установка Kubebuilder. Заполнение логики контроллера в сгенерированных файлах и деплой оператора в кластер.
curl -L -o kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/vX.Y.Z/kubebuilder_linux_amd64
chmod +x kubebuilder
mv kubebuilder /usr/local/bin/


Создание нового проекта оператора:
kubebuilder init --domain example.com --repo github.com/your-repo/my-operator
kubebuilder create api --group example --version v1 --kind MyResource


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что такое мультистейдж в докере?

Мультистейдж — это подход в Dockerfile, позволяющий использовать несколько этапов сборки. Он помогает минимизировать размер образа, сохраняя только необходимые файлы на финальном этапе. Это упрощает управление сложными процессами сборки и делает их более эффективными.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5
🤔 Какими механизмами организовывается доступ к кастомным ресурсам?

Доступ к кастомным ресурсам организуется с помощью механизмов аутентификации (проверка идентификации пользователя), авторизации (определение прав доступа), контроля доступа через URL (например, через фильтры или маршрутизацию), использования сессий и токенов (например, JWT), а также с помощью ACL (списки контроля доступа) или ролей пользователей для ограничения прав.

🟠RBAC (Role-Based Access Control)
Настройка ролей и привилегий для управления доступом к кастомным ресурсам.
   apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: myresource-role
rules:
- apiGroups: ["example.com"]
resources: ["myresources"]
verbs: ["get", "list", "watch", "create", "update", "patch"]


🟠Admission Controllers
Использование валидирующих вебхуков для валидации и контроля запросов к кастомным ресурсам.
   apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: myresource-webhook
webhooks:
- name: myresource.example.com
clientConfig:
service:
name: myresource-webhook-service
namespace: default
path: "/validate"
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: ["example.com"]
apiVersions: ["v1"]
resources: ["myresources"]


🟠CRD Validation
Определение схемы в CRD для автоматической проверки данных.
   apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
field1:
type: string
field2:
type: integer
minimum: 0
names:
plural: myresources
singular: myresource
kind: MyResource


🟠Кастомные контроллеры и операторы

Автоматизация управления
Написание контроллеров для управления состоянием кастомных ресурсов.

🟠CLI и API

Интерактивное управление
Использование команд kubectl и API для взаимодействия с кастомными ресурсами.
   kubectl apply -f my-custom-resource.yaml
kubectl get myresources
kubectl describe myresource my-custom-resource


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Что такое Kata Containers?

Kata Containers — это лёгкие виртуальные машины, сочетающие преимущества контейнеров (быстрое развертывание, низкая нагрузка) и виртуализации (изолированность и безопасность). Они используют гипервизоры для запуска каждого контейнера в изолированной среде, обеспечивая более высокий уровень безопасности.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍2
🤔 Что такое роуты в кубере и зачем они используются?

В Kubernetes "роуты" (routes) обычно ассоциируются с концепцией маршрутизации сетевого трафика к нужным сервисам и подам в кластере.

🚩Основные компоненты маршрутизации в Kubernetes

🟠Service
Абстракция, определяющая логический набор подов и политику доступа к ним. Обеспечивает стабильную точку доступа (IP-адрес и порт) к динамически изменяющемуся набору подов.
ClusterIP: Доступ только внутри кластера.
NodePort: Открывает статический порт на каждом узле для внешнего доступа.
LoadBalancer: Создает внешний балансировщик нагрузки (используется в облачных провайдерах).
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: ClusterIP


🟠Ingress
API-объект, который управляет внешним доступом к сервисам в кластере, обычно HTTP/HTTPS.
Предоставляет возможность настройки правил маршрутизации, SSL/TLS терминальной точки, виртуальных хостов и балансировки нагрузки. Специальный компонент, который реализует правила Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80


🟠Network Policies
Объект, определяющий правила контроля трафика для подов. Ограничивает и контролирует входящий и исходящий сетевой трафик между подами и сервисами, обеспечивая безопасность сети.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: example-network-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
egress:
- to:
- podSelector:
matchLabels:
role: backend


🚩Как работают роуты

🟠Service
Маршрутизирует запросы на уровне кластера, обеспечивая доступ к группе подов через один IP-адрес.
🟠Ingress
Обеспечивает маршрутизацию HTTP/HTTPS запросов от внешних клиентов к нужным сервисам в кластере, используя правила маршрутизации.
🟠Network Policies
Контролируют сетевой трафик между подами, ограничивая или разрешая доступ по заданным правилам.

🚩Зачем используются роуты

🟠Упрощение доступа
Services и Ingress предоставляют стабильные точки доступа к подам, упрощая взаимодействие между компонентами приложения и внешними клиентами.
🟠Безопасность
Network Policies обеспечивают контроль сетевого трафика, что помогает защитить приложение от несанкционированного доступа и атак.
🟠Балансировка нагрузки
Services типа LoadBalancer и Ingress могут распределять входящий трафик между подами, обеспечивая равномерную нагрузку и улучшая производительность.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Что такое volume и persistent volume и какие есть типы этих вольюмов?

Volume — это механизм для хранения данных контейнера вне его файловой системы, чтобы данные сохранялись между перезапусками. Persistent Volume (PV) в Kubernetes представляет собой хранилище, которое существует независимо от подов. Типы volumes включают emptyDir, hostPath, NFS, CIFS, AWS EBS, Azure Disk и PersistentVolumeClaim.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
🤔 Каким образом вы шифруете переменные в CI?

Шифрование переменных в CI/CD пайплайнах является критически важной задачей для обеспечения безопасности секретных данных, таких как API-ключи, пароли и другие конфиденциальные данные.

🚩Основные подходы и инструменты

Предоставляют встроенные механизмы для безопасного хранения и использования секретов.

🟠GitHub Actions
Добавление секретов в репозиторий: Перейдите в настройки репозитория (Settings) -> Secrets and variables -> Actions -> New repository secret. Добавьте новый секрет, указав имя и значение.
Использование секретов в workflow
name: CI Pipeline
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use secret
run: echo ${{ secrets.MY_SECRET }}


🟠GitLab CI
Добавление переменных в GitLab: Перейдите в настройки проекта (Settings) -> CI/CD -> Variables -> Expand -> Add variable. Добавьте новую переменную, указав имя и значение, и отметьте ее как Protected и Masked.
Использование переменных в .gitlab-ci.yml
stages:
- build
build:
stage: build
script:
- echo $MY_SECRET


🟠Jenkins
Добавление секретов в Jenkins: Перейдите в настройки Jenkins -> Manage Jenkins -> Manage Credentials -> (global) -> Add Credentials. Добавьте новый секрет, указав Scope, ID и значение.
Использование секретов в Jenkins pipeline
pipeline {
agent any
environment {
MY_SECRET = credentials('my-secret-id')
}
stages {
stage('Build') {
steps {
sh 'echo $MY_SECRET'
}
}
}
}


🚩Использование сторонних инструментов для управления секретами

🟠HashiCorp Vault
Установка и настройка Vault: Запустите Vault сервер и инициализируйте его. Создайте секрет и настройте политики доступа.
Пример использования Vault в CI/CD:
Создайте и инициализируйте секрет
vault kv put secret/myapp MY_SECRET=my_secret_value    


Включите аутентификацию и предоставьте доступ CI/CD системе
vault auth enable approle
vault write auth/approle/role/my-role token_policies=my-policy


Использование секрета в GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Vault
run: |
curl -o vault.zip https://releases.hashicorp.com/vault/1.8.2/vault_1.8.2_linux_amd64.zip
unzip vault.zip
sudo mv vault /usr/local/bin/
vault login ${{ secrets.VAULT_TOKEN }}
vault kv get -field=MY_SECRET secret/myapp


🚩Шифрование и расшифрование переменных вручную

🟠Использование GPG
Зашифруйте файл с переменными
gpg --symmetric --cipher-algo AES256 secrets.env    


Расшифруйте файл в CI/CD процессе
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Decrypt secrets
run: |
gpg --batch --passphrase ${{ secrets.GPG_PASSPHRASE }} -o secrets.env -d secrets.env.gpg
source secrets.env


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Какие протоколы знаешь?

Протоколы: TCP (надежная передача данных), UDP (быстрая и ненадёжная), HTTP/HTTPS (веб-протоколы), FTP (передача файлов), SMTP/IMAP/POP3 (почтовые протоколы), WebSocket (двусторонняя связь) и DNS (разрешение имён).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁8💊1
🤔 Какие ещё есть системы контейнеризации помимо докера?

🟠Podman
Без демона: Не требует отдельного демона, контейнеры работают как процессы.
Совместимость с Docker: Поддерживает Docker CLI.
rootless режим: Запуск без привилегий суперпользователя.
podman run -d --name my-container nginx


🟠CRI-O
Интеграция с Kubernetes: Оптимизирован для Kubernetes.
Легковесность: Минимальные зависимости.
Поддержка OCI: Соответствует стандартам Open Container Initiative.
criSocket: /var/run/crio/crio.sock


🟠containerd
Высокая производительность: Эффективное управление контейнерами.
Интеграция с Kubernetes: Используется напрямую через CRI.
Поддержка OCI: Полная совместимость с OCI.
ctr run -d --name my-container docker.io/library/nginx:latest


🟠LXC/LXD
Полная виртуализация ОС: Изоляция процессов, сети и файловой системы.
Управление контейнерами: Удобные инструменты для управления.
Гибкость: Поддержка различных дистрибутивов Linux.
lxc launch ubuntu:20.04 my-container


🟠Rkt
Без демона: Запуск контейнеров без постоянного демона.
Безопасность: Изолированные окружения и аутентификация.
Интеграция с Kubernetes: Альтернатива Docker в Kubernetes.
rkt run --insecure-options=image docker://nginx


🟠OpenVZ
Виртуализация на уровне ОС: Запуск изолированных виртуальных окружений.
Производительность: Минимальная изоляция для высокой производительности.
Управление ресурсами: Контроль ресурсов для каждого окружения.
vzctl create 101 --ostemplate centos-7


🟠Singularity
Фокус на HPC: Оптимизирован для научных вычислений.
rootless контейнеры: Запуск без прав суперпользователя.
Совместимость: Поддержка Docker контейнеров и OCI форматов.
singularity pull docker://nginx


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8