Объясните непрерывное тестирование и опишите его цель.
Непрерывное тестирование — это процесс, в котором автоматизированное тестирование происходит на каждом этапе жизненного цикла разработки продукта. В нем используется стратегия сдвига влево, что означает, что команды проводят тестирование на начальных этапах процесса разработки, а не в конце. Целью непрерывного тестирования является улучшение тестового покрытия для функциональных, нефункциональных и автоматизированных тестовых кейсов, которые представляют собой наборы действий, выполняемых в системах, чтобы определить, удовлетворяют ли они требованиям конечного пользователя. Благодаря этому процессу разные команды могут быстро выявлять проблемы и быстрее их обеспечивать. поставки программного обеспечения.
Непрерывное тестирование — это процесс, в котором автоматизированное тестирование происходит на каждом этапе жизненного цикла разработки продукта. В нем используется стратегия сдвига влево, что означает, что команды проводят тестирование на начальных этапах процесса разработки, а не в конце. Целью непрерывного тестирования является улучшение тестового покрытия для функциональных, нефункциональных и автоматизированных тестовых кейсов, которые представляют собой наборы действий, выполняемых в системах, чтобы определить, удовлетворяют ли они требованиям конечного пользователя. Благодаря этому процессу разные команды могут быстро выявлять проблемы и быстрее их обеспечивать. поставки программного обеспечения.
В gitlab CI необходимо, чтобы джоба выполнялась всегда только при ручной активации. Что для этого необходимо сделать?
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
Какие факторы необходимы для успешного выполнения непрерывной интеграции?
Для успешной непрерывной интеграции необходимо несколько факторов. К ним относятся хорошо поддерживаемая библиотека кода, автоматизированные сборки и тестирование, а также комплексный набор автоматизированных тестов. Перед непрерывной интеграцией важно запустить все тесты на локальном компьютере.
Для успешной непрерывной интеграции необходимо несколько факторов. К ним относятся хорошо поддерживаемая библиотека кода, автоматизированные сборки и тестирование, а также комплексный набор автоматизированных тестов. Перед непрерывной интеграцией важно запустить все тесты на локальном компьютере.
Зачем использовать контроль версий в DevOps?
Система контроля версий позволяет командам работать независимо над различными компонентами проекта и легко объединять их после завершения. Система также упаковывает все предыдущие версии. Это может быть удобно, если вы хотите вернуться к предыдущей версии, чтобы со временем управлять изменениями в исходном коде.
Система контроля версий позволяет командам работать независимо над различными компонентами проекта и легко объединять их после завершения. Система также упаковывает все предыдущие версии. Это может быть удобно, если вы хотите вернуться к предыдущей версии, чтобы со временем управлять изменениями в исходном коде.
Зачем вообще нужен DevOps?
Основные причины для принятия DevOps перечислены ниже:
✍🏻 Ускорение инноваций
✍🏻 Сокращение циклов разработки
✍🏻 Снижение количества ошибок при развертывании
✍🏻 Улучшение коммуникации и совместной работы
✍🏻 Более стабильная операционная среда
✍🏻 Повышение эффективности
✍🏻 Сокращение затрат и численности ИТ-персонала
Основные причины для принятия DevOps перечислены ниже:
✍🏻 Ускорение инноваций
✍🏻 Сокращение циклов разработки
✍🏻 Снижение количества ошибок при развертывании
✍🏻 Улучшение коммуникации и совместной работы
✍🏻 Более стабильная операционная среда
✍🏻 Повышение эффективности
✍🏻 Сокращение затрат и численности ИТ-персонала
Каковы компоненты непрерывной интеграции и DevOps? Как вы относитесь к каждому из них?
Пример ответа: «Непрерывная интеграция включает в себя автоматическое тестирование и интеграцию кода, а DevOps охватывает весь конвейер доставки. Я подхожу к CI, настраивая автоматизированные конвейеры сборки и тестирования, а в DevOps я фокусируюсь на циклах сотрудничества, мониторинга и обратной связи.»
Пример ответа: «Непрерывная интеграция включает в себя автоматическое тестирование и интеграцию кода, а DevOps охватывает весь конвейер доставки. Я подхожу к CI, настраивая автоматизированные конвейеры сборки и тестирования, а в DevOps я фокусируюсь на циклах сотрудничества, мониторинга и обратной связи.»
Что такое Ethernet?
Ethernet просто относится к наиболее распространенному типу локальной сети (LAN), используемому сегодня. LAN — в отличие от WAN (глобальной сети), которая охватывает большую географическую территорию, — это объединенная сеть компьютеров на небольшой территории, например, в вашем офисе, кампусе колледжа или даже дома.
Ethernet просто относится к наиболее распространенному типу локальной сети (LAN), используемому сегодня. LAN — в отличие от WAN (глобальной сети), которая охватывает большую географическую территорию, — это объединенная сеть компьютеров на небольшой территории, например, в вашем офисе, кампусе колледжа или даже дома.
Что такое Pod Disruption Budget (PDB)?
Этот функционал в k8s позволяет поддерживать минимально необходимое количество запущенных PODов приложения. При возникновении событий, таких как удаление PODов, вытеснение PODов с узла или удаления с ноды, Kubernetes не удалит PODы, если общее количество PODов приложения останется ниже значения PDB.
Этот функционал в k8s позволяет поддерживать минимально необходимое количество запущенных PODов приложения. При возникновении событий, таких как удаление PODов, вытеснение PODов с узла или удаления с ноды, Kubernetes не удалит PODы, если общее количество PODов приложения останется ниже значения PDB.
Что такое ingress и зачем он нужен?
Ingress дает возможность настраивать маршрутизацию трафика от внешних источников к сервисам внутри кластера.
В Ingress описываются правила маршрутизации к сетевым сервисам, а контроллер Ingress отвечает за их выполнение. Контроллер не входит в поставку Kubernetes, но можно использовать стороннее решение, если вы сможете до этого изучить его возможности и особенности.
Ingress дает возможность настраивать маршрутизацию трафика от внешних источников к сервисам внутри кластера.
В Ingress описываются правила маршрутизации к сетевым сервисам, а контроллер Ingress отвечает за их выполнение. Контроллер не входит в поставку Kubernetes, но можно использовать стороннее решение, если вы сможете до этого изучить его возможности и особенности.
Какая роль у контроллера DaemonSet?
DaemonSet используется в Kubernetes, когда необходимо запустить один или несколько экземпляров приложения на всех узлах кластера. Это означает, что при добавлении новых узлов в кластер необходимость вручного запуска подов, предназначенных для определенных служебных задач, отпадает. Например, с помощью DaemonSet можно автоматически развернуть поды с Prometheus Node Exporter для мониторинга, collectd, а также поды с fluentd или logstash для логирования данных с узлов.
DaemonSet используется в Kubernetes, когда необходимо запустить один или несколько экземпляров приложения на всех узлах кластера. Это означает, что при добавлении новых узлов в кластер необходимость вручного запуска подов, предназначенных для определенных служебных задач, отпадает. Например, с помощью DaemonSet можно автоматически развернуть поды с Prometheus Node Exporter для мониторинга, collectd, а также поды с fluentd или logstash для логирования данных с узлов.
Какую функцию выполняет ReplicaSet?
Функция ReplicaSet (RS) в Kubernetes заключается в обеспечении стабильного количества экземпляров подов в кластере. RS является основным компонентом Kubernetes, который используется для развертывания Stateless-приложений. Он обеспечивает непрерывную доступность приложения, автоматически запуская новые экземпляры подов в случае их выхода из строя. Без использования RS такие поды пришлось бы запускать вручную, что затруднило бы поддержание доступности приложения для пользователей.
Функция ReplicaSet (RS) в Kubernetes заключается в обеспечении стабильного количества экземпляров подов в кластере. RS является основным компонентом Kubernetes, который используется для развертывания Stateless-приложений. Он обеспечивает непрерывную доступность приложения, автоматически запуская новые экземпляры подов в случае их выхода из строя. Без использования RS такие поды пришлось бы запускать вручную, что затруднило бы поддержание доступности приложения для пользователей.
Что такое пространство имен (namespaces)? Почему не стоит использовать одно namespace для всех приложений?
Пространства имен позволяют разделить кластер на виртуальные группы, внутри которых можно объединять приложения по нужному принципу. Таким образом, создается возможность изолировать различные группы приложений друг от друга. Например, благодаря этой функции можно создать приложение с одинаковым именем в двух разных пространствах.
Если использовать только одно пространство имен, которое было задано по умолчанию при запуске кластера, со временем может стать сложно ориентироваться во всех приложениях, запущенных в нем. Группировка приложений в разных пространствах имен упрощает работу: например, можно разместить приложение мониторинга в одном пространстве, а приложения, связанные с информационной безопасностью, в другом.
Еще один случай, когда несколько пространств имен могут пригодиться, — это ситуация, когда несколько команд работают с одним кластером.
Пространства имен позволяют разделить кластер на виртуальные группы, внутри которых можно объединять приложения по нужному принципу. Таким образом, создается возможность изолировать различные группы приложений друг от друга. Например, благодаря этой функции можно создать приложение с одинаковым именем в двух разных пространствах.
Если использовать только одно пространство имен, которое было задано по умолчанию при запуске кластера, со временем может стать сложно ориентироваться во всех приложениях, запущенных в нем. Группировка приложений в разных пространствах имен упрощает работу: например, можно разместить приложение мониторинга в одном пространстве, а приложения, связанные с информационной безопасностью, в другом.
Еще один случай, когда несколько пространств имен могут пригодиться, — это ситуация, когда несколько команд работают с одним кластером.
Как Kubernetes соотносится с Docker?
Docker является широко используемым стандартом контейнеризации, который используется для упаковки приложений в контейнеры, автоматизации их запуска, развертывания и управления их жизненным циклом. Docker позволяет запускать один контейнер на одном хосте. Однако, если требуется запустить несколько контейнеров на разных хостах и управлять ими, тогда вступает в игру Kubernetes. Он помогает настраивать сетевую связность Docker-контейнеров, запущенных на разных хостах, и оркестрировать их. То есть Docker является контейнером, а Kubernetes — платформой для управления контейнерами, или оркестратором контейнеров.
Docker является широко используемым стандартом контейнеризации, который используется для упаковки приложений в контейнеры, автоматизации их запуска, развертывания и управления их жизненным циклом. Docker позволяет запускать один контейнер на одном хосте. Однако, если требуется запустить несколько контейнеров на разных хостах и управлять ими, тогда вступает в игру Kubernetes. Он помогает настраивать сетевую связность Docker-контейнеров, запущенных на разных хостах, и оркестрировать их. То есть Docker является контейнером, а Kubernetes — платформой для управления контейнерами, или оркестратором контейнеров.
За что отвечает StatefulSet?
StatefulSet контролирует развертывание и масштабирование группы подов, обеспечивая сохранение их состояния и характеристик.
Например, если требуется, чтобы поды запускались в определенном порядке на тех же узлах, имели доступ к постоянному хранилищу (PVC) или специальные сетевые идентификаторы, то используется StatefulSet.
Этот механизм часто применяется для развертывания подов с очередями сообщений, брокерами и базами данных.
StatefulSet контролирует развертывание и масштабирование группы подов, обеспечивая сохранение их состояния и характеристик.
Например, если требуется, чтобы поды запускались в определенном порядке на тех же узлах, имели доступ к постоянному хранилищу (PVC) или специальные сетевые идентификаторы, то используется StatefulSet.
Этот механизм часто применяется для развертывания подов с очередями сообщений, брокерами и базами данных.
В чем разница stateful и stateless?
Stateful-приложение сохраняет данные внутри себя во время работы, например, сессии пользователей на сервере. Ответ на запрос пользователя зависит от состояния сессии. Такие приложения сложнее масштабировать горизонтально, так как для развертывания нескольких экземпляров необходимо переносить состояния на новые машины и синхронизировать их.
Stateless-приложения не хранят состояние и гарантируют, что каждый запрос обрабатывается независимо от других. Они легко масштабируются горизонтально и упрощают автоматизированное тестирование, поскольку не требуется воспроизводить состояние приложения.
Stateful-приложение сохраняет данные внутри себя во время работы, например, сессии пользователей на сервере. Ответ на запрос пользователя зависит от состояния сессии. Такие приложения сложнее масштабировать горизонтально, так как для развертывания нескольких экземпляров необходимо переносить состояния на новые машины и синхронизировать их.
Stateless-приложения не хранят состояние и гарантируют, что каждый запрос обрабатывается независимо от других. Они легко масштабируются горизонтально и упрощают автоматизированное тестирование, поскольку не требуется воспроизводить состояние приложения.
Что такое маршрутизатор?
Маршрутизатор — это физическое или виртуальное устройство, которое передает информацию между двумя или более компьютерными сетями с коммутацией пакетов. Маршрутизатор проверяет адрес Интернет-протокола назначения данного пакета данных (IP-адрес), вычисляет наилучший способ его достижения и затем соответствующим образом пересылает его.
Маршрутизатор — это физическое или виртуальное устройство, которое передает информацию между двумя или более компьютерными сетями с коммутацией пакетов. Маршрутизатор проверяет адрес Интернет-протокола назначения данного пакета данных (IP-адрес), вычисляет наилучший способ его достижения и затем соответствующим образом пересылает его.
Docker-контейнер и runtime — это одно и то же?
Docker используется как основной стандарт для описания контейнеров, а Docker-движок, также известный как runtime, отвечает за их запуск.
В Kubernetes благодаря API Container Runtime Interface (CRI) можно использовать различные runtime для запуска контейнеров, такие как CRI-O и Containerd.
Поскольку Docker-движок был создан раньше Kubernetes, он не соответствует стандартам CRI, поэтому поддержка Docker runtime в Kubernetes была прекращена.
Тем не менее, это не значит, что Docker-контейнеры не могут быть использованы в Kubernetes.
Docker используется как основной стандарт для описания контейнеров, а Docker-движок, также известный как runtime, отвечает за их запуск.
В Kubernetes благодаря API Container Runtime Interface (CRI) можно использовать различные runtime для запуска контейнеров, такие как CRI-O и Containerd.
Поскольку Docker-движок был создан раньше Kubernetes, он не соответствует стандартам CRI, поэтому поддержка Docker runtime в Kubernetes была прекращена.
Тем не менее, это не значит, что Docker-контейнеры не могут быть использованы в Kubernetes.
Назовите главные компоненты архитектуры Kubernetes.
Master-ноды (master node, control plane) координируют все операции кластера: управляют распределением и резервированием ресурсов, контролируют состояние контейнеров, управляют масштабированием и выполняют обновления. Компоненты мастер-нод включают:
kube-apiserver — точка доступа к панели управления мастер-ноды, обеспечивает взаимодействие между мастер- и рабочими узлами, отслеживает состояние рабочих узлов и информирует мастер о важных изменениях;
kube-scheduler — отвечает за распределение нагрузки на рабочие узлы, постоянно мониторит доступные ресурсы и используемые ресурсы на каждом узле, принимает решение о запуске нового Pod;
Controller Manager — управляет работой контроллеров, таких как Deployment, ReplicaSet, StatefulSets, DaemonSet, Jobs, CronJob;
ETCD — хранит информацию о настройках и состоянии кластера, его метаданные, представляет собой распределенную базу данных в формате ключ-значение.
Nodes (рабочие узлы) — на них запускаются поды с контейнерами. На каждой worker ноде Kubernetes работают:
kubelet — процесс, который управляет запуском, удалением и обновлением подов с контейнерами;
kube-proxy — настраивает сетевые правила на рабочих узлах.
Master-ноды (master node, control plane) координируют все операции кластера: управляют распределением и резервированием ресурсов, контролируют состояние контейнеров, управляют масштабированием и выполняют обновления. Компоненты мастер-нод включают:
kube-apiserver — точка доступа к панели управления мастер-ноды, обеспечивает взаимодействие между мастер- и рабочими узлами, отслеживает состояние рабочих узлов и информирует мастер о важных изменениях;
kube-scheduler — отвечает за распределение нагрузки на рабочие узлы, постоянно мониторит доступные ресурсы и используемые ресурсы на каждом узле, принимает решение о запуске нового Pod;
Controller Manager — управляет работой контроллеров, таких как Deployment, ReplicaSet, StatefulSets, DaemonSet, Jobs, CronJob;
ETCD — хранит информацию о настройках и состоянии кластера, его метаданные, представляет собой распределенную базу данных в формате ключ-значение.
Nodes (рабочие узлы) — на них запускаются поды с контейнерами. На каждой worker ноде Kubernetes работают:
kubelet — процесс, который управляет запуском, удалением и обновлением подов с контейнерами;
kube-proxy — настраивает сетевые правила на рабочих узлах.
Как в Kubernetes сделать приложение доступным извне по сети интернет?
Для этого необходимо настроить сервисы.
ClusterIP представляет собой сущность, которая направляет запросы к подам на статичный IP-адрес. Благодаря ClusterIP у нас будет постоянная точка входа, даже если сами поды будут перезагружаться и восстанавливаться.
NodePort делает сервис доступным снаружи через статический порт на каждом узле кластера. Любой трафик, направленный на этот порт, будет перенаправлен на сервис. При этом ClusterIP создается автоматически.
LoadBalancer публикует сервис наружу и направляет трафик от балансировщика облачного провайдера внутрь кластера.
External name связывает сервис с DNS-именем (например, example.com). Он создает CNAME-запись, которая соединяет DNS-имя с определенным именем внутри кластера. Это действует как прокси, позволяющий пользователю направлять запросы к сервису, находящемуся внутри или за пределами кластера.
Для этого необходимо настроить сервисы.
ClusterIP представляет собой сущность, которая направляет запросы к подам на статичный IP-адрес. Благодаря ClusterIP у нас будет постоянная точка входа, даже если сами поды будут перезагружаться и восстанавливаться.
NodePort делает сервис доступным снаружи через статический порт на каждом узле кластера. Любой трафик, направленный на этот порт, будет перенаправлен на сервис. При этом ClusterIP создается автоматически.
LoadBalancer публикует сервис наружу и направляет трафик от балансировщика облачного провайдера внутрь кластера.
External name связывает сервис с DNS-именем (например, example.com). Он создает CNAME-запись, которая соединяет DNS-имя с определенным именем внутри кластера. Это действует как прокси, позволяющий пользователю направлять запросы к сервису, находящемуся внутри или за пределами кластера.
Как в Kubernetes устроена работа с хранилищами?
Kubernetes имеет различные типы хранилищ, включая встроенный emtyDir. Некоторые из них являются stateless, что означает, что они существуют только во время работы пода. Данные, которые хранятся там, также имеют такой же срок жизни.
Для statefull-приложений используются постоянные хранилища, называемые Persistent Volumes (PV). PV — это запас хранилища, выделенный администратором кластера Kubernetes. Это могут быть локальные диски, СХД или внешние диски. Они не зависят от жизненного цикла подов.
Persistent Volume Claim (PVC) — это запрос на выделение PV с определенными характеристиками, такими как тип хранилища, объем и тип доступа. Для описания доступных PV используются Storage Classes.
В процессе работы под отправляет запрос PVC, который затем обращается к PV и передает его поду.
Kubernetes имеет различные типы хранилищ, включая встроенный emtyDir. Некоторые из них являются stateless, что означает, что они существуют только во время работы пода. Данные, которые хранятся там, также имеют такой же срок жизни.
Для statefull-приложений используются постоянные хранилища, называемые Persistent Volumes (PV). PV — это запас хранилища, выделенный администратором кластера Kubernetes. Это могут быть локальные диски, СХД или внешние диски. Они не зависят от жизненного цикла подов.
Persistent Volume Claim (PVC) — это запрос на выделение PV с определенными характеристиками, такими как тип хранилища, объем и тип доступа. Для описания доступных PV используются Storage Classes.
В процессе работы под отправляет запрос PVC, который затем обращается к PV и передает его поду.