Лидер эпохи контейнеризации: Docker и Kubernetes — золотые партнеры в эпоху облачных вычислений.

1. Докер

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

  1. Образ: образ — это основной строительный блок в Docker, это легкий автономный исполняемый пакет, который содержит все необходимое для запуска приложения, включая код, среду выполнения, библиотеки, переменные среды, файлы конфигурации и т. д. Образы доступны только для чтения, что означает, что после создания их содержимое нельзя изменить. Разработчики могут использовать Dockerfile для определения правил создания образа, а затем использовать команды Docker для создания образа. Образы можно использовать для создания контейнеров Docker.
  2. Контейнер: Контейнер — это работающий экземпляр, созданный на основе образа. Это изолированная среда выполнения, в которой могут работать приложения. Контейнер содержит копию образа, но может читать и записывать на основе образа, поэтому контейнер является изменяемым. Контейнер изолирован от операционной системы хоста во время выполнения, но совместно использует ядро ​​с хостом. Это делает контейнеры быстрыми для запуска, легкими и портативными, обеспечивая при этом высокую степень изоляции и безопасности.
  3. Склад (Репозиторий): Склад — это место для хранения образов Docker, похожее на базу кода. Репозитории можно разделить на два типа: общедоступные репозитории и частные репозитории. Публичные хранилища, такие как Docker Hub, предназначены для общего пользования. Разработчики могут помещать свои собственные созданные образы в общедоступное хранилище или извлекать образы, совместно используемые другими разработчиками, из общедоступного хранилища. Частные репозитории обычно используются предприятиями внутри компании для хранения личных изображений и защиты интеллектуальной собственности компании и кода приложений. Разработчики могут отправлять образы в частные хранилища с помощью команд Docker и извлекать образы из частных хранилищ для использования в своих собственных средах.

1. Что такое контейнер?

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

  • является исполняемым экземпляром образа. Вы можете создавать, запускать, останавливать, перемещать или удалять контейнеры с помощью DockerAPI или CLI.
  • Можно запустить на локальном компьютере, виртуальной машине или развернуть в облаке.
  • является переносимым (работает на любой операционной системе).
  • Изолируйтесь от других контейнеров и запускайте собственное программное обеспечение, двоичные файлы и конфигурации.

2. Архитектура докера

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

3. Докер достижения

  1. Количество разработчиков: сообщество Docker насчитывает более 180 000 активных разработчиков. Эти разработчики играют важную роль в развитии и улучшении Docker.
  2. Количество приложений. Технология контейнеров Docker предоставляет разработчикам гибкие и легкие решения для развертывания, поэтому более 70 000 приложений использовали контейнеры Docker.
  3. Скачивание образов: Docker Hub – один из самых популярных репозиториев образов Docker. В качестве платформы для обмена и хранения образов сообщество Docker ежемесячно загружает образы более 1,3 миллиарда раз. Это отражает степень широкого распространения Docker среди разработчиков и пользователей.

2. К8С

k8s — это система управления контейнерными кластерами с открытым исходным кодом, которая может реализовать автоматическое развертывание, расширение, обслуживание и другие функции контейнерных кластеров. Существует четыре основных концепции k8s: узел, модуль, служба и контроллер. Узлы — это хосты, на которых запущены контейнеры, и они могут быть физическими или виртуальными машинами. Pod — это наименьшая единица планирования в k8s, которая содержит один или несколько тесно связанных контейнеров, совместно использующих сеть и пространство для хранения. Служба — это уровень абстракции, который определяет, как осуществляется доступ к набору модулей, обычно посредством балансировки нагрузки. Контроллер — это механизм управления подами и сервисами, который может автоматически создавать, обновлять, удалять и выполнять другие операции.

Kubernetes предоставляет богатый набор функций, в том числе:

  1. Автоматическое развертывание: Kubernetes может автоматически развертывать контейнерные приложения, создавая и запуская контейнеры в кластере в соответствии с определенными файлами конфигурации.
  2. Балансировка нагрузки: Kubernetes поддерживает автоматическую балансировку нагрузки сервисов, чтобы приложения могли эффективно обрабатывать трафик.
  3. Автоматическое масштабирование: Kubernetes может автоматически масштабировать приложения в зависимости от использования ресурсов для удовлетворения возросших требований к трафику.
  4. Возможность самовосстановления: Kubernetes обладает способностью самовосстановления, которая может автоматически обнаруживать и заменять неработоспособные контейнеры, чтобы обеспечить высокую доступность приложений.
  5. Оркестрация хранилища: Kubernetes может управлять системами хранения и предоставлять решения постоянного хранения для приложений.
  6. Управление конфигурацией и ключами: Kubernetes поддерживает управление конфигурацией и ключами приложений, обеспечивая безопасность и гибкость.
  7. Горизонтальное расширение: Kubernetes может динамически регулировать количество копий в соответствии с потребностями приложения для достижения горизонтального расширения.

1. Эволюция контейнерных технологий

Эра традиционного развертывания:

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

Эпоха развертывания виртуализации:

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

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

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

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

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

2. Зачем нужен Kubernetes и что он умеет?

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

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

Kubernetes дает вам:

  • Обнаружение служб и балансировка нагрузки Kubernetes может предоставлять контейнеры с использованием DNS-имен или собственных IP-адресов. Если в контейнер поступает много трафика, Kubernetes может балансировать нагрузку и распределять сетевой трафик, делая развертывание стабильным.
  • Оркестрация хранилища Kubernetes позволяет автоматически монтировать систему хранения по вашему выбору, например локальное хранилище, общедоступные облачные сервисы и т. д.
  • Автоматическое развертывание и откат Вы можете использовать Kubernetes для описания желаемого состояния развернутого контейнера, который может изменить фактическое состояние на желаемое с контролируемой скоростью. Например, вы можете автоматизировать Kubernetes для создания новых контейнеров для вашего развертывания, удаления существующих контейнеров и использования всех их ресурсов для новых контейнеров.
  • Автоматически завершить расчет упаковки коробки. Вы предоставляете Kubernetes кластер из множества узлов и запускаете контейнерные задачи в этом кластере. Вы сообщаете Kubernetes, сколько ЦП и памяти (ОЗУ) требуется каждому контейнеру. Kubernetes может планировать эти контейнеры на ваших узлах по мере необходимости, чтобы оптимально использовать ваши ресурсы.
  • Самовосстановление Kubernetes перезапускает неисправные контейнеры, заменяет контейнеры, уничтожает контейнеры, которые не отвечают на определенные пользователем проверки работоспособности, и не уведомляет о них клиентов, пока они не будут готовы к обслуживанию.
  • Управление ключами и конфигурациями Kubernetes позволяет хранить и управлять конфиденциальной информацией, такой как пароли, токены OAuth и ключи SSH. Вы можете развертывать и обновлять секреты и конфигурации приложений, не перестраивая образы контейнеров и не раскрывая секреты в конфигурациях стека.

3. Докер против K8s

докер к8с
контейнерный двигатель оркестратор контейнеров
Управление контейнерами на одном хосте Управление кластерами контейнеров на нескольких хостах
Поддерживаются только образы докеров Поддерживает несколько типов образов контейнеров.
Определить образы с помощью dockerfile Определяйте объекты ресурсов с помощью файлов yaml или json.

Container Engine и Container Orchestrator:

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

Поддерживаемые типы изображений:

    • Docker в основном поддерживает образы Docker. Образ Docker определяется Dockerfile, который содержит информацию об упаковке для приложения и его зависимостей.
    • Kubernetes не ограничивает использование определенных типов образов контейнеров и может поддерживать несколько типов образов контейнеров, включая образы Docker, образы containerd и другие. Это позволяет Kubernetes интегрироваться с различными средами выполнения контейнеров.

Метод определения зеркала:

    • Docker использует Dockerfile для определения правил сборки образа, а Dockerfile содержит шаги и зависимости, необходимые для сборки образа.
    • Kubernetes использует файлы YAML или JSON для определения объектов ресурсов, включая Pod, Service, Deployment и т. д. Объект ресурса обычно содержит информацию об образе контейнера, которая используется для определения режима работы и конфигурации контейнера.

四、Docker Swarm против K8s

И k8s, и Docker Swarm — популярные инструменты оркестровки контейнеров, но у них разные функции и преимущества.

● k8s — это независимый от докера проект, созданный Google и управляемый Cloud Native Computing Foundation (CNCF). Он поддерживает несколько сред выполнения контейнеров, таких как docker, rkt, containerd и т. д. Docker Swarm — это система оркестрации контейнеров Docker, которая использует стандартный интерфейс Docker API и тесно связана с Docker.

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

● k8s имеет более крупное и активное сообщество со многими проектами с открытым исходным кодом и корпоративной поддержкой. Он стал стандартом де-факто в пространстве оркестрации контейнеров. docker swarm относительно небольшой и новый, и сообщество не очень активно.

● Кривая обучения k8s относительно крутая, и многие концепции и команды необходимо освоить. Кроме того, он сложнее в установке и настройке. docker swarm прост в использовании и легко интегрируется в существующие системы. Он также относительно прост в установке и настройке.

5. Откажется ли K8s от Docker?

У официального представителя k8s есть следующие объяснения причин удаления докера:

  • То, что k8s удаляет, на самом деле является dockershi, который представляет собой адаптер между kubelet и docker, который используется для преобразования интерфейса docker в CRI (интерфейс времени выполнения контейнера), необходимый для k8s. Это сделано для упрощения архитектуры k8s, повышения производительности и безопасности, а также поддержки большего числа сред выполнения контейнеров.
  • k8s не полностью отказывается от Docker, но отказывается от поддержки Docker как среды выполнения контейнера. Это означает, что k8s больше не будет использовать docker для создания и запуска контейнеров, а будет использовать другие среды выполнения, совместимые с CRI, такие как containerd или CRI-O123. Причина этого в том, что docker не соответствует стандарту CRI и требует промежуточного уровня, называемого dockershim, для адаптации к API k8s.
  • Удаление докера из k8s не означает, что докер бесполезен или что вы не можете или не должны использовать его в качестве инструмента разработки. Docker по-прежнему является очень полезным инструментом для создания образов контейнеров, а создаваемые им образы соответствуют требованиям OCI (Open Container Initiative). Это означает, что любой образ, созданный с помощью docker, будет нормально работать с другими средами выполнения контейнеров в k8s. Так что вам не нужно беспокоиться о том, что ваш образ докера станет недействительным или несовместимым.


Если статья оказалась для вас полезной, прошу обратить внимание + поставить лайк! ! !

Acho que você gosta

Origin blog.csdn.net/citywu123/article/details/131801878
Recomendado
Clasificación