Контейнера
В то время как технологии контейнеров существовали в течение многих лет, Docker действительно принял его мейнстрим. Многие компании и разработчики теперь используют контейнеры для отправки их приложений. Docker предоставляет простой в использовании интерфейс для работы с контейнерами.
Однако для любого нетривиального применения вы не будете развертываться «один контейнер», а скорее группа контейнеров на нескольких хостах. В этой статье Мы посмотрим на Кубернаны , система открытого исходности Для автоматизации развертывания, масштабирования и управления контейнерными Приложения.
Какая проблема решает Кубернаны?
С докером у вас есть простые команды, такие как Docker Run
или Докер Стоп
начать/остановить контейнер соответственно. В отличие от этих простых команд, которые позволяют вам делать операции на одном контейнере, нет Docker Развертывает
Команда для толкания новых изображений в группу хозяев.
В последнее время многие инструменты появились, чтобы решить эту проблему «контейнерного оркестрации»; популярные из них Мезос , Докер Рой (теперь часть докера двигателя), Кочевник и Кубебени. Все они приходят со своими плюсами и минусами, но недавно мы видели, Кубернаны возьмите значительную лидерство в использовании и особенностях.
Kubernetes (также называемые как «K8S») предоставляет мощные абстракции, которые полностью отделяют операции приложений, такие как развертывание и масштабирование из основных операций инфраструктуры. Итак, с Kubernetes вы не работаете с отдельными хозяевами или виртуальными машинами, на которые можно запустить код, а скорее Кубераты видит базовую инфраструктуру как Море вычисляет на котором поставить контейнеры.
Концепции Кубератеса
Kubernetes имеет архитектуру клиента/серверов. Server Kubernetes работает на вашем кластер (Группа хозяев), на которой вы будете развернуть ваше приложение. И вы обычно взаимодействуете с кластером с помощью клиента, например kubectl
CLI.
Подвигание
POD — это базовый блок, который Kubernetes имеет дело с группой контейнеров. Если есть два или более контейнеров, которые всегда должны работать вместе, и должны быть на одной машине, сделать их стручок
Отказ
Узел
Узел — это физическая или виртуальная машина, бегающая Kubernets, на которые могут быть запланированы стручки.
Этикетка
Этикетка — это пара ключа/значения, которая используется для идентификации ресурса. Вы можете пометить все ваши стручки
Обслуживание производственного трафика с «, например.
Селектор
Выбор позволяет поискать/фильтровать ресурсы на этикетках. Следуя по предыдущему примеру, чтобы получить все производственные стручки ваши селектор «.
Услуга
Сервис определяет набор стручков (обычно выделенных на «селектор») и средство, с помощью которого для доступа к ним доступ, таких как один стабильный IP-адрес и соответствующее имя DNS.
Разверните приложение Express Node.js на Oke с помощью Kubernetes
Теперь, что мы знаем о основных концепциях Kubernetes, давайте увидимся в действии, развернув приложение Node.js на первый из всех, если у вас нет доступа к OCI, пожалуйста, перейдите в Попробуй это | Oci.
1. Установите клиент Kubernetes
kubectl
Это интерфейс командной строки для запущенных команд против кластеров Kubernetes. kubectl
:
Для проверки установки Run kubectl версия
Отказ
2. Создайте документ докера вашего приложения
Вот приложение, с которым мы будем работать: Express.js-Hello-World . Вы можете увидеть в Dockerfile что мы используем существующее изображение Node.js из Dockerhub Отказ
Теперь мы создадим изображение нашего приложения, запустив:
docker build -t hello-world-image .
Запустите приложение локально, запустив:
docker run --name hello-world -p 3000:3000 hello-world-image
Если вы посетите localhost: 3000
Вы должны получить ответ.
3. Создать кластер
Теперь мы создадим кластер с тремя узлами (виртуальными машинами), на которых мы разверним наше приложение. Вы можете сделать это легко, используя контейнер Контейнерная страница двигателя В вашей бесплатной учетной записи OCI.
Первое, что вам нужно сделать для создания кластера Oke, слишком дайте вам доступу Kubernetes для управления ресурсами в вашу аренду.
Вы можете сделать это, добавив следующее ** Политика для вашего отсека : **
Allow service OKE to manage all-resources in tenancy
Затем вы сможете получить доступ к консольной консоли Oke и начните создавать свой кластер, как показано ниже:
У вас есть 2 Варианты при создании вашего кластера » Быстрый «или» Пользовательский » Создайте:
Быстрое создание:
Позволяет вам слишком быстро создавать кластер с настройками по умолчанию, также создает выделенную сеть.
Пользовательское создание:
Создайте кластер с пользовательскими настройками, предполагает существующую сеть.
** Для этого вы можете выбрать, что более применимо для ваших потребностей, для моего кластера я выбрал «быстрое создание».
В этом руководстве мы создадим кластер с 3 узлами, главным и 2 рабочим узлами. Мы используем тип машины VM.Standard 2.1, потому что для этого приложения нам не нужна большая вычислительная мощность.
Как только ваш кластер работает и работает, мы можем подключить его к kubectl
Так что у нас есть доступ к кластеру из нашей командной строки Kubernetes. Вы можете сделать это, доступа к «KubeConfig: это можно загрузить из меню« Начало работы », как показано ниже:
4. Загрузить Docker Image в Oracle Container Registry Registry
Итак, теперь у нас есть докерный образ и кластер. Мы хотим развернуть это изображение на нашему кластеру и начать контейнеры, которые будут служить запросам.
Реестр изображения Oracle Container — это облачный реестр, в котором вы можете нажать на ваши изображения, и эти изображения автоматически становятся доступными для кластера вашего контейнера. Чтобы нажать изображение, вы должны построить его с правильным именем.
Чтобы создать контейнерное изображение этого приложения и пометить его для загрузки, запустите следующую команду:
docker tag bmwhopper/helloworld:latest.ocir.io/ / / :
V1
это Тег изображения.
Следующий шаг — загрузить изображение, которое мы просто построен в OCIR:
docker push.ocir.io/ / / :
Для более подробных шагов на теме изображения и здании см. Подробное руководство по Как это сделать здесь Отказ
5. Первое развертывание
Теперь у нас есть кластер и изображение в облаке. Давайте развернум это изображение на нашем кластере с Куберовщиком. Мы сделаем это, создавая Развертывание
SPEC файл. Развертывание — это ресурс Kubernetes, и все ресурсы Kubernetes могут быть определены SPEC-файлом. Этот SPEC файл устанавливает желаемое состояние этого ресурса, а затем Kubernetes определяет, как перейти от текущего состояния в желаемое состояние.
Итак, давайте создадим один для нашего первого развертывания:
Развертывание.ЯМЛ
Apiversion: приложения/v1beta1 своего рода: Развертывание Метаданные: Имя: Привет-мировое развертывание Спецификация: Реплики: 2. шаблон: Метаданные: Ярлыки: # Этикетки для выбора/идентификации развертывания Приложение: Hello-World Спецификация: # POD Spec Контейнеры: — Имя: Hello-World Изображение: Hello-World-Image: V1 # Image мы толкнули Порты: — Контейнеровоз: 3000
Этот файл SPEC говорит: начать два стручка, где каждый POD определяется заданным POD SPEC. Каждый POD должен иметь один контейнер, содержащий Здравствуйте, миру - изображение: v1
Мы нажали.
Теперь запустите: $ kubectl create -f deployment.yml —save-config
Вы можете увидеть статус вашего развертывания, запустив Kubectl Получить развертывание
. Для просмотра POD, создаваемого развертыванием, запустите эту команду: Kubectl Получить стручки
Отказ
Вы должны увидеть бегущие стручки:
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-world-deployment-629197995-ndmrf 1/1 Running 0 27s hello-world-deployment-629197995-tlx41 1/1 Running 0 27s
Обратите внимание, что у нас есть два подвода, потому что мы устанавливаем реплики на 2 в Развертывание .yml файл.
Чтобы убедиться, что сервер запустился, проверьте журналы бегом: $ kubectl logs {Pod-name} # kubectl logs Hello-World-Deployment-629197995-NDMRF
6. Раскрыть сервис в интернет
Теперь, когда у нас есть приложение, запущенное на нашем кластере, мы хотим разоблачить сервис в Интернет, вы должны поставить VMS за балансировщик нагрузки. Чтобы сделать это, мы создаем кубератусы Сервис
Отказ
Для этого запустите следующую команду:
$ kubectl expose deployment hello-world-deployment --type="LoadBalancer"
За кулисами это создает Сервис
Объект (сервис — это ресурс Kubernetes, как развертывание).
Беги Kubectl Получить услуги
Чтобы увидеть публичный IP вашей услуги. Вывод консоли должен выглядеть так:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world-deployment 10.244.0.16 *.*.*.* 3000:30877/TCP 27m kubernetes 10.244.240.1443/TCP 1d
Посетить http://
Чтобы получить доступ к службе. Вы также можете купить пользовательское доменное имя и сделать его указывать на этот IP.
7. Расширение вашего обслуживания
Допустим, ваша услуга начинает получать больше трафика, и вам нужно раскрутить больше экземпляров вашего приложения. Чтобы масштабировать в таком случае, просто отредактируйте свой Развертывание .yml Файл и изменить количество реплики
чтобы сказать, 3 а потом беги Kubectl Apply Printe -F Deployment.yml
И у вас будет три стручка, работающие в последнее время.
Упаковка
Мы охватывались многое начать материал в этом руководстве, но насколько касается Кубератеса, это только верхушка айсберга. Вы можете сделать гораздо больше, например, масштабирование ваших услуг для большего количества стручков с одной командой или монтажом секрет
на стручках для вещей, таких как полномочия и т. Д. Однако этого должно быть достаточно, чтобы вы начали. Для получения дополнительной информации, пожалуйста, не стесняйтесь обращаться на Linkedin. или Твиттер
Брайан Мэтьюс
Технический консультант и евангелист с сосредоточенным на неверном и дежоне. Почему бы не дать Oracle Cloud A попробуйте с $ 300 бесплатные кредиты! https://bit.ly/2KQWy6k
Оригинал: «https://dev.to/bmwhopper/how-to-deploy-a-express-nodejs-app-on-kubernetes-and-an-intro-to-containerisation-2fin»