Начало работы с Docker и Kubernetes: руководство для начинающих

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

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

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

Сегодня мы рассмотрим:

  • Что такое Docker и контейнеры Docker и почему я должен их использовать?

  • Что такое Kubernetes и почему я должен его использовать?

  • Разница между Docker и Kubernetes

  • Docker и Kubernetes: лучше вместе

  • Начало работы с Docker

  • Начало работы с Kubernetes

Если вы уже знакомы с Docker и Kubernetes, вы можете сразу перейти к «Начало работы» разделы

Содержание
  1. Освойте основы Kubernetes
  2. Что такое Docker и зачем его использовать?
  3. Что такое Kubernetes и почему я должен его использовать?
  4. Разница между Docker и Kubernetes
  5. Docker и Kubernetes: лучше вместе
  6. Начало работы с Docker
  7. Основные концепции Docker
  8. Контейнеры
  9. Изображения
  10. Реестры
  11. Продолжайте изучать Kubernetes и Docker
  12. Настройка и запуск Docker
  13. Выбор продукта Docker на основе требований
  14. Hello World Test
  15. Установка Docker — Windows, Linux, Mac
  16. Настройка Docker в Windows 10
  17. Настройка Docker в Linux
  18. Для настройки Docker на Mac
  19. Создание вашего первого образа Docker
  20. Создание простого образа Docker
  21. Dockerfile
  22. Публикация образа Docker
  23. Начало работы с Kubernetes
  24. Pods
  25. ReplicaSets
  26. Services
  27. Развертывания
  28. Начало работы с Kubernetes и локальное развертывание кластера
  29. Установка kubectl
  30. Установка Minikube
  31. Создание локального кластера на Minikube
  32. Создание модуля с помощью декларативного синтаксиса
  33. Создание служб с помощью декларативного синтаксиса
  34. Развертывание новой версии
  35. Заключение
  36. Читать о Kubernetes

Освойте основы Kubernetes

Быстро освоите Kubernetes с практические и карьерные уроки.

Практическое руководство по Kubernetes

Что такое Docker и зачем его использовать?

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

До Docker: разработчик отправляет код тестировщику, но он не запускается в системе тестировщика из-за различных проблем с зависимостями. , однако он отлично работает со стороны разработчика.

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

Еще немного о Docker и контейнерах:

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

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

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

Кредит через https://www.educba.com/docker-vs-vms/

Что такое Kubernetes и почему я должен его использовать?

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

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

Недостаточно запускать контейнеры; вам необходимо уметь:

  • интегрировать и согласовывать эти модульные части
  • увеличивать и уменьшать масштаб в зависимости от спроса
  • Сделайте их отказоустойчивыми
  • Обеспечьте связь в кластере

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

Подробнее об этом читайте в нашем руководстве: Почему и когда рекомендуется использовать Kubernetes.

Разница между Docker и Kubernetes

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

С учетом сказанного, вот разница:

Docker используется для изоляции вашего приложения в контейнерах. Он используется для упаковки и доставки вашего приложения.

Kubernetes с другой стороны. hand — это планировщик контейнеров. Он используется для развертывания и масштабирования вашего приложения.

Docker и Kubernetes: лучше вместе

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

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

Давайте начнем работать с этими двумя инструментами, поучившись у экспертов, Арно Вейля и Виктора Фарчича.

Начало работы с Docker

Основные концепции Docker

Есть несколько основных концепций, которые вы нужно изучить, и это:

  • Контейнеры
  • Изображения
  • Реестры

Контейнеры

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

С концептуальной точки зрения, контейнер работает внутри хоста Docker, изолированного от других контейнеров и даже хоста. ОПЕРАЦИОННЫЕ СИСТЕМЫ. Он не может видеть другие контейнеры, физическое хранилище или получать входящие соединения, если вы явно не укажете, что это может. Он содержит все необходимое для запуска: ОС, пакеты, среду выполнения, файлы, переменные среды, стандартный ввод и вывод.

Типичный сервер Docker будет выглядеть так — хост для множества контейнеров:

Тот факт, что в приведенной выше схеме два контейнера app2 — это нормально; обычно это случается, когда на сервере размещается выпуск и тестовая версия. Это означает, что вы можете разместить обе версии на одном сервере.

Изображения

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

Реестры

Изображения хранятся в регистре Стрый. В приведенном выше примере изображение app2 используется для создания двух контейнеров. Каждый контейнер живет своей собственной жизнью, и у них обоих общий корень: их образ из реестра.

Чтобы узнать о дополнительных концепциях Docker, ознакомьтесь с Docker Compose Tutorial. : расширенный Docker стал проще

Продолжайте изучать Kubernetes и Docker

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

Образовательные текстовые курсы помогут вам быстро освоить реальные приложения и практические задачи.

Практическое руководство по Kubernetes

Настройка и запуск Docker

Выбор продукта Docker на основе требований

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

Однако , на вашем компьютере для разработки или на машине для непрерывной интеграции вы можете использовать бесплатное приложение Docker Engine Community или Docker Desktop в зависимости от g на вашем типе машины. Короче:

Hello World Test

Независимо от того, какую версию вы устанавливаете, вы можете проверить свою установку, выполнив следующую команду в команде строка (ваш терминал в Linux или PowerShell в Windows):

  docker run hello-world  

Он должен вытащить изображение и отображать выходной текст, который начинается с:

  Привет из Docker! Это сообщение показывает, что ваша установка работает правильно.  

Установка Docker — Windows, Linux, Mac

Настройка Docker в Windows 10

Для Docker Desktop требуется 64-разрядная версия Windows 10 Professional или Enterprise, поскольку она основана на Hyper-V. Если у вас настольная версия Windows, которая не соответствует требованиям, вы можете использовать старую Docker Toolbox на основе VirtualBox.

Перед установкой Docker Desktop важно, чтобы вы:

  • включить Hyper-V

  • включить аппаратную виртуализацию в BIOS

  • Затем перейдите по этой ссылке и следуйте инструкциям, найденным там.

Во время установки вам будет предложено использовать Контейнеры Windows или Linux. Я бы предложил контейнеры Linux, потому что:

  • В любой момент вы можете передумать, просто щелкните правой кнопкой мыши значок Docker на панели инструментов и выберите «Переключиться на контейнеры Windows…»

  • На данный момент большинство образов контейнеров основано на Linux

Настройка Docker в Linux

Доступны и другие пакеты Docker, и вы можете просто выполнить шаги в зависимости от вашей версии:

  • CentOS 7

  • Debian или Raspbian

  • Fedora 26+ 64-бит

  • Ubuntu Bionic, Xenial или Trusty 64-бит

Каким бы ни был ваш вариант Linux, здесь есть общие шаги после установки. Убедитесь, что вы внимательно их прочитали. Дважды проверьте их, если вы не можете успешно запустить тест hello-world.

Для настройки Docker на Mac

Docker Desktop требует Mac OS Sierra 10.12 или выше. Если у вас более старая версия macOS, вы можете использовать старую Docker Toolbox на основе VirtualBox.

Создание вашего первого образа Docker

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

Создание простого образа Docker

Dockerfile

Образ Docker создается с помощью команды docker build и файла Dockerfile. Файл Dockerfile содержит инструкции по созданию образа.

Файл Dockerfile может иметь любое имя. Назвав его Dockerfile, другим будет легче понять его назначение, когда они увидят этот файл в вашем проекте. Это также означает, что вам не нужно указывать имя файла при использовании команды docker build.

Теперь давайте создадим базовый образ для контейнера, который отображает сообщение «hello world» при его запуске.

Для этого создайте файл с именем Dockerfile, который описывает, как должно быть создано ваше изображение. Файл Dockerfile всегда начинается с инструкции FROM , потому что каждое изображение основано на другом базовом образе. Это мощная функция, поскольку она позволяет расширять изображения, которые и без того могут быть сложными.

Поскольку мне нужен только простой текстовый вывод, я могу использовать образ Debian Linux. Вот мой файл Dockerfile:

  FROM debian: 8  

Этого недостаточно. Хотя у меня есть основа Debian Linux, я не выполняю никаких команд, которые могли бы отображать «привет, мир». Этого можно добиться с помощью инструкции CMD . Инструкция CMD указывает, какой исполняемый файл запускается при создании контейнера с использованием вашего образа, и предоставляет необязательные аргументы.

Вот улучшенный файл Dockerfile, который создает Debian Linux- на основе изображения и инструктирует его приветствовать наших пользователей при появлении контейнера:

  FROM debian: 8CMD ["echo", 'Hello world']  

Обратите внимание, что и программа для запуска, и ее аргументы представлены в виде массива строк JSON. Чтобы создать изображение из моего файла Dockerfile, мне нужно запустить команду docker build. Для этого я набираю следующую команду в своем терминале в папке, где находится файл Dockerfile:

  docker build -t hello.  

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

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

Команда сборки docker только что создала файл изображение с именем hello. Этот образ хранится локально на компьютере, и вы можете запустить его, как и любой другой образ:

  docker run --rm hello  

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

Чтобы прояснить ситуацию, вот что было сделано:

  • Создал изображение

  • Создал файл с именем Dockerfile

  • Запуск команды сборки докера

  • Запуск контейнера из созданного образа

Давайте расширим, что это означает; запуск контейнера — это виртуальный эквивалент запуска совершенно новой машины и ее уничтожения. Чтобы напечатать сообщение «Hello world», мы, по сути, получили новый компьютер, заставили его выполнить команду echo , а затем выбросили его. Docker делает дешёвые вычисления по принципу « запустил и забыл ». Конечно, это избыточно для такой простой цели, но это остается верным, даже когда мы устанавливаем фреймворки или перемещаем файлы внутри наших контейнеров; это фантастическая особенность. Большая часть ваших возможностей Docker придет, когда вы поймете, насколько легко вы можете создавать и удалять изолированные виртуальные компьютеры.

Публикация образа Docker

Docker Реестр — это в основном хранилище изображений, которое предлагает следующие функции:

  • Возможность хранить различные изображения.

  • Возможность хранить различные теги для одного и того же изображения.

  • HTTP API , который позволяет отправлять изображения из машина, которая их производит, или загружает изображения на машину, которая запускает контейнеры из этих изображений.

  • TLS-защищенное соединение к API, чтобы избежать атак типа «злоумышленник посередине».

Доступно множество реестров. Вы можете использовать общедоступный Docker Hub или собственный частный реестр. В любом случае процесс пометки и публикации изображений остается одинаковым для каждого реестра.

Какой бы реестр вы ни выбрали, публикация изображения представляет собой трехэтапный процесс:

  1. Создайте свой образ (сборка докера) с соответствующим именем префикса или тегом (тег докера) существующим соответствующим образом.

  2. Войдите в реестр (вход в докер).

  3. Вставьте изображение в реестр (docker push).

Начало работы с Kubernetes

Pods

Pod — это самая нижняя единица приложения в Kubernetes. Теперь, прежде чем мы продолжим, нам нужно уточнить одну вещь — и это то, что pod не равен контейнеру в мире Docker. Стручок может состоять из нескольких контейнеров. Если вы пришли из чистого фона Docker, это может быть сложно осмыслить. Если в пакете может быть более одного контейнера, как он работает? Нам нужно знать о некоторых ограничениях. Модуль имеет следующее:

  • Один IP-адрес

  • Общий доступ к localhost

  • Общее пространство IPC

  • Общий диапазон сетевых портов

  • Общие тома

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

ReplicaSets

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

Введите контроллер репликации.

Основная ответственность контроллера репликации — предотвращение сбоев, он находится над типом ресурса модуля и управляет им. Давайте посмотрим на пример. Я хочу развернуть 4 своих модуля x, на этот раз я бы создал набор реплик. В наборе реплик есть определенное количество модулей, которые должны быть запущены, в данном случае 4. Если один из модулей выходит из строя или умирает, контроллер репликации запускает для меня новый модуль, и снова у меня будут работать 4 модуля x. . Таким образом, эта функция решает проблему, о которой мы упоминали ранее, о том, что модули являются смертельными.

Services

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

Развертывания

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

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

Для получения дополнительной информации о работе с модулями, службами и развертываниями посетите страницу Когда использовать развертывания, модули и службы Kubernetes

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

Начало работы с Kubernetes и локальное развертывание кластера

Установка kubectl

Инструмент командной строки Kubernetes, kubectl , используется для управления кластером и приложениями, работающими внутри него. Вот как установить его в Windows, Linux и Mac:

Windows

  curl -LO https  ://storage.googleapis.com/kubernetes-release/release/$ (curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe  

  curl -LO https://хранилище  .googleapis.com/kubernetes-release/release/$ (curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectlchmod + x ./kubectlsudo mv  ./kubectl/usr/local/bin/kubectl  

Mac

  curl -LO https://storage.googleapis. com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectlchmod + x ./kubectlsudo mv ./kubectl/ usr/local/bin/kubectl  

Проверка настроек

  версия kubectl --output = yaml  

Установка Minikube

Minikube поддерживает несколько технологий виртуализации. Мы будем использовать VirtualBox, поскольку это единственная виртуализация, поддерживаемая во всех операционных системах. Имейте в виду, что для работы VirtualBox или HyperV виртуализация должна быть включена в BIOS. На большинстве ноутбуков она должна быть включена по умолчанию.

Windows

Наконец, вы не получите команду, если вы пользователь Windows. Вместо этого загрузите последнюю версию из файла minikube-windows-amd64.exe, переименуйте его в minikube.exe и добавьте в свой путь.

Linux

  curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod + x minikube &&  sudo mv minikube/usr/local/bin/ 

Mac

  brew cask install minikube  

Создание локального кластера на Minikube

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

  minikube start --vm-driver = virtualbox  

Когда мы выполнили команду Minikube start , она создала новую виртуальную машину на основе изображения Minikube. Это изображение содержит несколько двоичных файлов. Он имеет как Docker, так и контейнерные движки rkt, а также библиотеку localkube.

rkt — это контейнерный движок приложений, разработанный для современных производственных облачных сред.

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

Помните, что это одноузловой кластер, работающий локально только на нашей машине. С учетом сказанного, это по-прежнему самый простой способ «поиграть» с Kubernetes локально и познакомиться с инструментом..

Создание модуля с помощью декларативного синтаксиса

Сначала создайте локальный кластер с помощью Minikube, как показано здесь:

  minikube start --vm-driver = virtualboxkubectl получить узлы  

Давайте взглянем на простой Pod, обратившись к файлу db.yml из этого репозитория git. Теперь давайте создадим Pod, определенный в файле db.yml.

  kubectl create -f pod/db.yml  

Давайте взгляните на модули в кластере.

  kubectl get pods  

Результат выглядит следующим образом, и вы можете видеть что наш модуль запущен и работает.

  НАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ПЕРЕЗАПУСКАЕТСЯ AGEdb 1/1 Выполняется 0 11 с  

Создание служб с помощью декларативного синтаксиса

Создание службы:

  kubectl create -f svc/go-demo-2-svc.ymlkubectl get -  f svc/go-demo-2-svc.yml  

Мы создали Сервис и получили информацию о нем с сервера API. Результат последней команды выглядит следующим образом.

  ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ (И) AGEgo-demo-2 NodePort 10.0.0.129  28017:  30001/TCP 10 м  

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

  open "http://$ IP: 30001"  

Развертывание новой версии

Снова начать с созданием кластера:

  cd k8s-specsgit pullminikube start --vm-driver = virtualboxkubectl config current-context  

Давайте создать развертывание.

  kubectl create  -f deploy/go-demo-2-db.yml  --recordkubectl get -f deploy/go-demo-2-db  .yml  

Результат последней команды выглядит следующим образом.

  ИМЯ ГОТОВА АКТУАЛЬНО ДОСТУПНО AGEgo-demo  -2-db 0/1 1 0 4s  

Заключение

На этом наше введение в DevOps, Docker и Kubernetes.

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

Хотя этот материал должен помочь вам начать работу, есть еще много чего для изучения, например, использование в Kubernetes, что действительно нужно для запуска кластера производственного уровня и как использовать Docker с общими профилями разработки (например, Python, .NET Core, Java и т. д.).

Чтобы помочь вы, Educative, создали Практическое руководство по Kubernetes . Этот курс написан докером капитаном и членом группы экспертов Google Developer, Виктором Фарчичем. Вы узнаете об Ingress, сопутствующих технологиях, таких как Docker, и многом другом.

К концу у вас будет все необходимое, чтобы стать профессионалом Kubernetes..

Читать о Kubernetes

  • Chaos Engineering 101: принципы, процессы и примеры
  • Учебник Kubernetes: начало работы с оркестровкой контейнеров
  • Учебник по архитектуре микросервисов: все, что вам нужно для начала
Оцените статью
nanomode.ru
Добавить комментарий