Pull to refresh

Введение в Docker и Kubernetes: основы контейнерных технологий

Level of difficultyEasy
Reading time7 min
Views20K

Docker и Kubernetes — два инструмента, которые прочно вошли в арсенал современных разработчиков. Хотите разобраться в основах контейнеризации и оркестрации? Наша статья поможет вам в этом, раскрывая ключевые концепции и принципы работы этих технологий.

Все дело в контейнеризации!

С появлением технологии контейнеризации, которая позволяет упаковывать приложения в изолированные «ящики», отличающиеся высокой переносимостью и небольшим размером, один за другим стали появляться новые инструменты для удобной и эффективной работы с ними. Docker и Kubernetes стали наиболее востребованными среди вышедших на рынок продуктов. При этом Kubernetes — это оркестратор контейнеров. Он «прожёвывает» либо Docker, либо OCI-образы и запускает их с помощью containerd или CRI-O. Далее мы подробно изучим, как и с помощью чего работает контейнеризация, а также разберемся в этом загадочном, на первый взгляд, термине оркестрация и узнаем, что он означает в контексте работы с Kubernetes.

Предыстория: всё началось с виртуальных машин

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

Посмотрим на определение, которое выдает нам Microsoft:

Виртуальная машина (часто сокращается до ВМ) мало чем отличается от физических компьютеров — ноутбука, смартфона или сервера. У нее есть ЦП, память, диски для хранения файлов и возможность подключения к Интернету. Компоненты вашего компьютера (аппаратная часть) материальны и осязаемы, тогда как виртуальные машины часто рассматриваются как виртуальные или программно-определяемые компьютеры в физических серверах, существующие только в виде кода.

Если простыми словами, то основная идея виртуализации в том, чтобы поставить сколько угодно «виртуальных» машин на одном физическом (реально существующем) компьютере

А у каждого компьютера есть что? Правильно — своя операционная система: Windows, MacOS, Linux (Ubuntu,Centos) и т. д.

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

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

Новый виток изолирования: контейнеры

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

Что такое Docker?

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

Как устроен Docker?

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

Как устроен Docker
Как устроен Docker

Он пользуется встроенными технологиями Linux, среди которых: 

  • cgroups позволяет выделять на каждый контейнер ресурсы компьютера, такие как оперативная память, ядра, память, сетевые ресурсы и т. д.

  • Namespaces изолируют такие системные ресурсы, как процессы, сети, идентификаторы пользователей и файловую систему, позволяя контейнерам работать независимо друг от друга.

  • Union File System (UnionFS) Docker использует многослойную файловую систему (OverlayFS, AUFS или btrfs), которая позволяет создавать легковесные и изменяемые образы контейнеров. Это дает возможность эффективно управлять слоями файловой системы, повторно используя неизменяемые слои между различными контейнерами и образами.

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

  • Docker engine (иначе containerd) — для того чтобы иметь возможность развертывать контейнеры и взаимодействовать с ними, необходимо установить Docker Engine. Существует несколько способов сделать это: например, для macOS достаточно просто загрузить приложение Docker. Так как Docker использует механизмы ядра Linux, то Docker Desktop for Mac и Docker Desktop for Windows запускают виртуальную машину с Linux на борту, где уже запускаются контейнеры.

  • Docker image — далее, для работы с нашими контейнерами, необходимо разработать или скачать шаблон для их создания. По сути, каждый контейнер — это уникальная программа, и мы можем создавать несколько копий одного и того же приложения, и все они будут строиться на основе некоторого шаблона, который и называется Docker image (образ).

  • Контейнеры Docker (Docker Containers) — исполняемые экземпляры образов Docker, обособленные от хостовой системы и друг от друга. Они обеспечивают изолированную среду выполнения приложений.

  • Docker Hub — официальный репозиторий Docker для хранения и обмена образами (шаблонами Docker-контейнеров). Это ресурс похожий на Github, на котором компании и частные разработчики делятся между собой написанными шаблонами для развертки определенных приложений в контейнерах. В качестве примера вы можете легко скачать образ nginx, mysql и даже мини linux-компьютера и на основе него быстро развернуть свои приложения.

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

И после этого создайте nginx-контейнер. Или же изучите документацию Docker и станьте мастером контейнеризации! 

Кстати, недавно Docker попытался уйти из России и ограничил доступ к Docker Hub (хранилищу образов), но проблема уже устранена — Docker Hub снова заработал в России.  Если он еще раз примет решение уйти, вот как можно решить этот вопрос на VPS (при этом важно учитывать, что подобные неофициальные сервисы могут быть потенциально опасны, поэтому решение об их использовании должно быть обоснованным и взвешенным):

Откроем файл, выполнив команду sudo nano/etc/docker/daemon.json. Если у вас появился пустой редактор, значит, файла у вас не было, и после сохранения он появится. Затем добавим в JSON-ключ со списком. Если файла раньше не было, просто вставьте следующий JSON:

{
  "registry-mirrors": [
        "https://mirror.gcr.io",
        "https://daocloud.io",
        "https://c.163.com",
        "https://registry.docker-cn.com"
  ]
}

Если файл конфигурации был, то добавьте новый блок.
Сохраняем файл сочетанием клавиш CTRL+S и закрываем CTRL+X.

После этого перезапускаем службу Docker, выполнив следующую команду: sudo systemctl restart docker.

Kubernetes

Следующим этапом развития контейнеризации стали приложения, которые оркестрируют контейнеры. То есть приложения, которые автоматизируют запуск, поддержку стабильной и безопасной работы и так далее. Одним из первых и популярных инструментов для оркестрации стал Docker compose, из которого вырос Docker Swarm. Компания сделала этот инструмент платным, что вызвало бурное негодование в opensource-сообществе и способствовало популяризации Kubernetes.

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

Инструменты Kubernetes

Теперь давайте разберемся, как устроен такой мощный инструмент изнутри.

Архитектура
Архитектура

Минимальный примитив в k8s — это Pod, и кубер работает только с pod-ами, внутрь pod-а он не лезет. Pod — это некая «капсула», которая может содержать в себе один или несколько контейнеров. В дальнейшем, для упрощения, во всех примерах мы будем рассматривать один контейнер в поде. Но бывают случаи, когда некоторые контейнеры работают в группе, чтобы решить какую-то одну примитивную задачу, и тогда их помещают в один Pod. Например часто используют контейнер redis (для хранения кеша) и контейнер основного приложения в одном Pod.

Далее Pod нужно разместить на каком-то Node (физическом сервере) и тут в Kubernetes вводится два новых понятия: рабочие ноды (Worker nodes) или ноды менеджеры (Manager nodes или Master nodes). 

Worker nodes отвечают за размещение на себе подов (Pod). В то время как Менеджеры (Manager nodes) управляют размещением контейнеров и другими процессами, с этим связанными. Чаще всего один менеджер отвечает за три и более воркеров.

Kubernetes
Kubernetes

Далее при более подробном изучении Kubernetes у вас появится множество вопросов по его архитектуре. 

Например, как устроен Master node и как он взаимодействует с Воркерами. Какие инструменты используются для автоматической развертки множества контейнеров в одном конфигурационном файле. Как обеспечивается балансировка нагрузки между подами. На эти и другие вопросы подробно отвечает документация Kubernetes.

Рекомендуем ознакомиться с инструментами, которые позволяют развернуть мини-версию Kubernetes локально для экспериментов и обучения:

  • Minikube — инструмент для запуска одноузлового кластера Kubernetes на виртуальной машине в персональном компьютере.

  • Kind — инструмент для запуска локальных K8s-кластеров, который использует в качестве узлов Docker-контейнеры.

  • K3s — облегчённая версия Kubernetes, специально созданная для использования в средах с ограниченными ресурсами.

Итоги

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

Поделитесь своими прогнозами: как вы думаете, какое будущее ждет контейнеризацию и оркестрацию в ближайшие 5-10 лет?

Tags:
Hubs:
Total votes 15: ↑12 and ↓3+10
Comments16

Articles

Information

Website
sibur.digital
Registered
Employees
1,001–5,000 employees
Location
Россия