Рубрики
Uncategorized

Kubernetes для чайников

Получив много положительных отзывов о моем посте «Docker for Dummies», я хотел создать пост … Помечено с Kubernetes, новичками, DevOps, Linux.

Получив много положительных отзывов о моем посте «Docker for Dummies», я хотел создать пост о часто парных технологиях Docker. Если вы еще не читали Docker для чайников, пожалуйста, прочитайте его здесь, и если вы уже знакомы с Kubernetes, подумайте о прочтении моего поста о OpenShift. Понимание контейнерного обслуживания, такого как Docker, имеет основополагающее значение для хорошего понимания Kubernetes. На самом деле, Kubernetes способен управлять другими контейнерами, которые не будут рассмотрены в этом посте. В этом посте я объясню, что такое Kubernetes, какие проблемы он решает контейнерами, и как вы можете начать использовать его сегодня.

Введение в Kubernetes

Kubernetes получен из греческого слова κυβερνήτης (kubernḗtēs), что означает пилот или рулевой. Логотип Kubernetes рулевого колеса корабля еще больше обеспечивает идею пилотирования или управления, что именно то, что делает Kubernetes с контейнерами Docker. Kubernetes управляет контейнерами Docker различными способами, поэтому их не нужно делать вручную. Kubernetes часто называют K8s для простоты из -за 8 букв между «k» и «s». Я буду ссылаться на Kubernetes как K8s с этого момента.

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

Какие услуги предоставляют K8s?

  • Обнаружение услуг и баланс нагрузки: K8s может найти контейнер, используя имя DNS или IP -адрес и может распространять сетевой трафик в другие контейнеры для стабилизации развертывания.
  • Оркестрование хранения: Вы можете автоматически установить систему хранения по вашему выбору, будь то локально, с облачным провайдером, таким как AWS или GCP, или системой сетевого хранения, такой как NFS ISCSI, Gluster, CEPH, шлака или Flocker.
  • Автоматизированные развертывания и отката: Вы можете определить желаемое состояние развернутых контейнеров и изменить состояние с контролируемой скоростью. Например, вы можете автоматизировать Kubernetes для создания новых контейнеров для вашего развертывания, удаления существующих контейнеров и принять все свои ресурсы в новый контейнер.
  • Автоматическая корзина корзина: Вы можете предоставить K8s кластер узлов для выполнения задач в области контейнер и указать, сколько процессора и памяти нужно каждый контейнер. Kubernetes может автоматически поместить контейнеры к узлам, чтобы наилучшим образом использовать ресурсы.
  • Самовосстановление: K8S перезапускает контейнеры, которые выходят из строя, заменяют контейнеры, убивают контейнеры, которые не реагируют на ваш пользовательский контроль за здоровьем, и не рекламируют их для клиентов, пока они не будут готовы к обслуживанию.
  • Секретное управление и управление конфигурацией: K8S позволяет хранить конфиденциальную информацию, такую как клавиши SSH, токены OAuth и пароли. Вы можете обновить эти секреты и конфигурацию приложения без восстановления изображений ваших контейнеров и без разоблачения секретов в конфигурации вашей стека.

Мы только поцарапаем поверхность этих функций в этом посте.

Некоторые определения

Важно понимать эти основные концепции K8S. Опять же, вы также должны быть знакомы с контейнерными службами, такими как Docker, прежде чем продолжить.

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

Узлы являются физическими или виртуальными машинами, которые не создаются K8s. Как правило, у вас будет несколько узлов в кластере, но у вас может быть только один узел в среде обучения или ограниченных ресурсов. Узлы создаются вручную или с общедоступными облачными сервисами, такими как AWS EC2 или OpenStack, поэтому вам необходимо установить базовую инфраструктуру, прежде чем использовать K8s для развертывания приложений. С этого момента вы можете определить виртуальные сети, хранение и т. Д. Один узел может запускать несколько стручков.

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

Чтобы запустить K8s локально, я буду использовать Minikube и Kubectl. Вы можете установить последнюю версию Minikube на https://minikube.sigs.k8s.io/docs/start/ и kubectl в https://kubernetes.io/docs/tasks/tools/

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

1) Установите предпосылки

Используйте Docker --версия и Minikube версия и kubectl версия Не беспокойтесь о сообщении, в котором говорится, что соединение с Localhost: 8080 было отказано, мы рассмотрим это позже.

2) Создать узлы с Minikube

Чтобы создать узлы, запустите Minikube. Например, запуск minikube с 2 узлами: Minikube Start

Это займет некоторое время в первый раз, так что будьте терпеливы. В первый раз, когда я запустил это, для его завершения потребовалось 5-10 минут.

Мы можем проверить статус наших узлов, используя Статус Minikube

Первый узел — мастер -узел. Вы можете видеть, что у него настроены плоскость управления, хост -хост, Kubelet, API и KubeConfig. Второй узел — это рабочий узел.

Мы видим, что у нас есть 2 контейнера, если мы запустим: Docker PS Это изображение показывает мастер -узел как CE3359246578, а узел работы — 44697ff120E4 с соответствующей информацией для обоих узлов.

Мы можем просматривать наши узлы, используя: kubectl Получите узлы

Запустив kubectl Get Pods -a , мы можем получить все стручки во всех пространствах имен. Все эти стручки составляют плоскость управления. Например, Kube-Apiserver-Minikube-это API, который выставлен для внешней и внутренней связи. Поэтому, когда мы набираем Kubectl, это сервер API, который обрабатывает запрос на него.

3) Создание развертывания

Мы можем проверить стручки, набрав Kubectl Get Pod Анкет На этом этапе у вас не должно быть никаких стручков, и он будет читать «Ресурсы не найдены в пространстве имен по умолчанию»

Стручки — это самая маленькая единица кластера K8S, но на практике вы не создаете не капсулы, а скорее развертывания. Чтобы создать развертывание Kubernetes, использование kubectl Создать развертывание -image = Анкет Для этого конкретного развертывания мы будем создавать развертывание NGINX: kubectl создать развертывание nginx-depl

Для тех, кто не знает, Nginx-это веб-сервер с открытым исходным кодом, который используется для разработки приложений на стороне сервера.

Теперь, когда мы бежим Kubectl Получите развертывание и kubectl Получите Pod Мы получаем следующий выход.

Наше использование kubectl Создать развертывание -image = это самый минималистичный способ создания развертывания. Остальная часть развертывания использует конфигурацию по умолчанию. Между развертыванием и стручком есть еще один слой, который автоматически управляет развертыванием K8S, называемым Replicaset Анкет

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

Мы можем просмотреть репликас с Kubectl Получите Replicaset Мы можем увидеть идентификатор для Replicaset, добавленного к названию развертывания: 5C8BF76B5B. Вы можете заметить, что идентификатор Replicaset включен в идентификатор для POD; Как указано перед репликазой, является слоем, который находится между развертыванием и стручком.

Так что все вместе, так работают слои абстракции. Развертывание управляет Replicaset, репликат управляет всеми репликами POD, а POD является абстракцией контейнера.

4) Отредактируйте развертывание

Измените свое развертывание, используя: kubectl edit развертывание nginx-depl Это покажет файл автоматической конфигурации. Не волнуйтесь, вам не нужно понимать все в файле конфигурации в настоящее время. Ради этого урока мы отредактируем только версию изображения, которую можно найти где -то в середине файла. Когда вы закончите редактирование, введите: WQ для написания и ухода. Это завершит старое изображение и создаст новое. При вызове Kubectl Получите Replicaset Мы видим, что у старого нет стручков, и новый был создан и новый.

5) Отладка стручков

Еще одна полезная команда — kubectl logs <имя Pod> Анкет Если вы запустите это на Nginx, вы ничего не получите, потому что Nginx ничего не регистрировал. Чтобы продемонстрировать журналы, мы можем использовать MongoDB, которая является базой данных документов.

Kubectl Создать развертывание Mongo-Depl Выполнение kubectl logs mongo-depl-5fd6b7d4b4-vbf2t будет производить краткие журналы и Kubectl опишите Pod mongo-depl-5fd6b7d4b4-vbf2t будет производить более многословный выход.

Регистрация поможет в отладке, если что -то пойдет не так, и описать создает что -то более понятное.

Еще одна полезная команда, чтобы увидеть, что происходит внутри капсула kubectl Exec -it <имя Pod> -bin/bash Анкет (-Это означает интерактивный терминал)

Предположим, мы хотим использовать это, чтобы войти в наш Pod MongoDB: kubectl exec -it mongo-depl-5fd6b7d4b4-vbf2t-bin/bash И если мы напечатаем лауреат Мы можем увидеть наши каталоги. Чтобы выйти из этого, просто введите Выход Анкет

6) Удаление развертывания

Удаление развертывания удалит все стручки внутри развертывания. Например, чтобы удалить тип развертывания MongoDB: Kubectl Delete развертывание mongo-depl

Вы можете удалить все стручки в одном пространстве имен с помощью этой команды:

Kubectl Delete -все стручки Вы также можете удалить все развертывания в пространстве имен, что удалит все стручки, прикрепленные к развертываниям, соответствующим пространству имен

kubectl delete -все развертывания Вы можете удалить все пространства имен и каждый объект в каждом пространстве имен (но не намеченные объекты, такие как узлы и некоторые события) с этой командой:

kubectl delete -все пространства имен Тем не менее, последняя команда, вероятно, не то, чем вы хотите сделать, поскольку она удалит вещи в пространстве имен-имен Kube, что сделает ваш кластер не пригодным для использования.

Эта команда удалит все пространства имен, кроме Kube-System, что может быть полезно:

для каждого в $ (kubectl get ns -o | grep -v Kube -system); делать kubectl delete ns $ каждый Выполнено

7) Применить файлы конфигурации

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

Прикосновение nginx-leployment.yaml

Затем скопируйте и вставьте эту конфигурацию в файл:

Apiversion: приложения/v1 Добрый: Развертывание Метаданные: Имя: MyApp Ярлыки: Приложение: Nginx Спецификация: Реплики: 1 Селектор: Matchlabels: Приложение: Nginx шаблон: Метаданные: Ярлыки: Приложение: Nginx Спецификация: контейнеры: — Имя: nginx Изображение: Nginx: 1.16 Порты: — Контейнерпорт: 80

Все под «шаблоном» — это план для стручков. Первый тег Spec является спецификацией для развертываний, а второй тег Spec — это спецификация для стручков.

Этот файл конфигурации в основном утверждает, что мы хотим, чтобы один контейнер внутри стручка с изображением Nginx, и мы собираемся связать его на порту 80.

Когда мы используем kubectl Apply -f nginx -deployment.yaml , это создает развертывание с помощью конфигурации. Допустим, в файле конфигурации мы изменили развертывание, чтобы создать 4 реплики вместо 1.

После набора kubectl Получите Pod и Kubectl Получите развертывание Мы получаем следующий вывод:

Как вы можете видеть, K8S знает, когда создавать или обновить развертывание.

Следуя этой статье, вы должны получить хорошее представление о основах Kubernetes. Таким образом, мы узнали, что такое Kubernetes и что он может делать на высоком уровне. Мы узнали, какие услуги предоставляют K8S, а также некоторые важные определения. Затем мы использовали Docker, Minikube и Kubectl, чтобы исследовать команды CRUD для развертывания. Наконец, мы узнали, как отлаживать стручки и использовать файлы конфигурации для развертывания. Следует отметить, что вы также можете использовать Kubectl для услуг, объемов, любой другой компонент K8S.

Последние мысли

Надеюсь, вам понравилось следовать, и я надеюсь, что вы что -то узнали! Kubernetes — очень полезный инструмент для управления контейнерами, поэтому я рад, что вы сделали это так далеко. Вы всегда можете найти гораздо более тщательную документацию в https://kubernetes.io/docs/home/

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

П.с. В настоящее время я ищу работу в DevOps! Если вы знаете кого-то, кто нанимает инженеров DevOps начального уровня, пришлите им мое резюме, которое можно найти в https://smcgown.com и https://www.linkedin.com/in/steven-mcgown/

Благодарю вас!

Оригинал: «https://dev.to/stevenmcgown/kubernetes-for-dummies-5hmh»