Kubernetes (k8s)

  • OpenShift – сервисы поверх kubernates (напр. интеграция jenkins и другие плюшки для удобного управления/devops), платный от redhat, использует крупный enterprise, напр. сбер
  • minikube – самый простой способ экспериментов с k8s, позволяет на своей компе поднять k8s и поиграться с ним (поднять мастер/воркеры/протестировать балансировку)
minikube implements a local Kubernetes cluster on macOS, Linux, and Windows. minikube's primary goals are to be the best tool for local Kubernetes application development and to support all Kubernetes features that fit.
Основное

Kubernates (k8s) – самый популярный инструмент/фреймворк управления/оркестрации контейнерами (docker, containerd; но так же может управлять и vm/baretal – значительно реже). Изначально разработан Google. В github находится как код k8s, так и в h4cker.org/github есть ресурсы для изучения и старта работы с k8s.

    • K8s многокопонентная система, грубо говоря представляет из себя 5-6 ключевых бинарников и централизованной базы (etcd, не обязан находится на control plane и может быть в кластере): 2 бинарника запускаются на рабочей ноде, 3 на контроллере. Контроллер получает все команды от администратора. Полезная нагрузка запускается на рабочих нодах. Информация сохраняется в базу.
    • 3-4 бинарника контроллера
    •        Kube-scheduler – планировщик заданий (scheduler)
    •        Kube-api-server – API сервер, через него реализуется взаимодействие всех компонентов
    •        Kube-controller/cloud-controller managers Controller manager следит за ресурсами
    • 2 бинарника на worker нодах
    •        Kubilet – отвечает за запуск контейнеров
    •        Kube-proxy – отвечает за сеть

    • k8s позволяет автоматически скейлить pod’ы/контейнеры и ноды (хосты)
    • k8s позволяет мониторить контейнеры и осуществлять действия с упавшими – рестарт/редеплой, в том числе поднятие мощностей упавшей воркер-ноды на другой ноде; подробнее про пробы (кратко readiness – проверяем готовность, liveness – живость) и почему передача нагрузки сразу после запуска контейнеров может быть не очень хорошей идеей
    • k8s позволяет легко реализовать service discovery и доступ на все объекты через DNS имена, а не IP
    • k8s позволяет через назначенные админом лейблы создать условия запуска pod/контейнеров только на определенных хостах/нодах (в терминологии k8s): напр. с определенными ресурсами или на нодах определенных availability zone равномерно/неравномерно (affinity/anti affinity) распределить pod’ы (для создания отказоустойвости и равномерной нагрузки)
    • k8s включает container management automation с extensive API
    • k8s может быть развернут как через terraform, так и через UI
    • k8s гибкий – легко дорабатывается дополнительными возможностями, с использованием различных возможностей расширения k8s API (custom pod scheduling logic, on-demand provisioning).
    • Эта гибкость делает k8s отличной платформой для реализации SaaS сервисов.

Kubernetes – это популярная и мощная платформа для оркестрации контейнеров, которая предоставляет ряд значительных преимуществ:

  1. Автоматизация развертывания и управления контейнерами: Kubernetes предоставляет средства для автоматизации развертывания, масштабирования и управления контейнерами. Он позволяет управлять сотнями и даже тысячами контейнеров на кластере с минимальными усилиями.
  2. Масштабируемость: Kubernetes обеспечивает легкость масштабирования приложений. Вы можете легко увеличивать или уменьшать количество экземпляров вашего приложения в зависимости от нагрузки.
  3. Высокая доступность и отказоустойчивость: Kubernetes поддерживает высокую доступность приложений. Он автоматически переносит работу с узла на узел в случае сбоев и обеспечивает отказоустойчивость.
  4. Самоисцеляющиеся системы: Kubernetes умеет самостоятельно восстанавливать работоспособность приложений. Если узел выходит из строя, Kubernetes перезапускает приложения на других доступных узлах.
  5. Декларативная модель конфигурации: Kubernetes использует декларативную модель, что означает, что вы описываете желаемое состояние приложения, а Kubernetes автоматически приводит его в соответствие с этим состоянием. Это упрощает управление конфигурацией и обеспечивает консистентность.
  6. Распределенное хранилище конфигурации: Kubernetes имеет встроенное распределенное хранилище конфигурации (etcd), которое обеспечивает централизованное управление конфигурацией и служит источником правды для состояния кластера.
  7. Сетевая изоляция: Kubernetes предоставляет средства для изоляции сетевого трафика между приложениями и микросервисами, обеспечивая безопасность и устойчивость сети.
  8. Плагины и расширяемость: Kubernetes можно расширить с помощью плагинов и настраиваемых ресурсов. Это позволяет адаптировать платформу под различные потребности и интегрировать ее с различными инструментами и сервисами.
  9. Комьюнити и экосистема: Kubernetes имеет активное комьюнити и богатую экосистему, что означает наличие множества ресурсов, инструментов и поддержки для разработчиков и администраторов.
  10. Поддержка множества облачных платформ: Kubernetes поддерживает различные облачные платформы (AWS, Azure, Google Cloud и др.) и также может быть развернут на собственном оборудовании.
  11. Открытый исходный код: Kubernetes является проектом с открытым исходным кодом, что позволяет организациям свободно использовать, модифицировать и распространять его.

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

 

 

pod management
  • Базовые абстракции k7”8s: pod, deployment, repica-set, stateless sryllet, diomond set
  • Можно запустить pod “напрямую”, но на практике используют инструкцию deployment, чтобы он запускал pod. Это позволяет отслеживать состояние/количества pod instance и в случае расхождения его с реальным переподнимались instance, увеличивалось/уменьшалось количество контейнеров и проч management
https://stackoverflow.com/questions/41325087/what-is-the-difference-between-a-pod-and-a-deployment

type:deployment
type:pod
I would like to pitch in from my experience, you will almost never use an object with the kind pod, because that doesn't make any sense in practice.
You need to have the service object because the pods from the deployment object can be killed, scaled up and down, and you can't rely on their IP addresses because they will not be persistent.
  • В своем ядре k8s управляет размещением pods, которые могут состоять из одного или нескольких контейнеров на k8s cluster node.
  • В случае падения pod k8s может создать новый его инстанс. При удалении ноды кластера k8s может перенести affected workload на другую ноду кластера.
  • k8s pod может быть масштабирован для обеспечения большего или меньшего количества вычислительной мощности для задачи масштабирования. Причем масштабирование может произойти как автоматически, так и вручную (k8s horizontal pod auto-scaling).
  • В случае необходимости обновления приложения k8s может stagger the update deployment to minimize downtime. А в случае если апдейт является проблемным k8s может roll back to a previous version.
storage management
  • k8s persistent volumes могут быть использованы как хранилища данных для одного или множества контейнеров. Такая конфигурация позволяет контейнерам читать и писать данные приложений по многим pod instances.
  • Так же приложения, работающие в k8s могут использовать cloud-based storage, такие как Azure Storage, Azure Cosmos DB.
network management

k8s network plugins обеспечивают разные сетевые функции, например:

    • доступ pods в интернет
    • load balancing трафика по множествам репликам pod
    • network isolation
    • policy driven network security
    • management and name resolution между разными pods в k8s кластере

 

Leave a Reply