Первый раз, когда я столкнулся с инструментом оркестрации и планирования контейнеров, был собственный Docker Swarm, который в основном решал громоздкую проблему развертывания бизнес-проектов внутри компании в то время.Я помню, что после контейнеризации проекта время, затраченное на развертывание проекта, эксплуатация и обслуживание были значительно сокращены.Я думаю, что это довольно новая вещь.Оказывается, что автоматизированная эксплуатация и обслуживание могут быть воспроизведены так. Позже, по рабочим причинам, я долгое время не прикасался к знаниям о контейнерах. В последнее время в проекте синхронизации данных компании необходимо использовать блок выполнения синхронизации данных распределенного планирования. Текущее решение состоит в том, чтобы упаковать блок выполнения синхронизации данных в зеркальное отображение и использовать K8s для планирования. Я только что воспользовался этой возможностью, чтобы узнать о K8s Я поделюсь с вами тем, что я понимаю о K8s в виде диаграмм.
Три основные функции K8s
K8s — это легкая и расширяемая платформа с открытым исходным кодом для управления контейнерными приложениями и службами. Автоматическое развертывание и масштабирование приложений можно выполнять через K8s.
K8s представляет собой архитектуру более высокого уровня, чем контейнеры. Он может поддерживать различные контейнерные технологии, такие как знакомый нам Docker. K8s позиционируется как инструмент планирования контейнеров. В основном он имеет следующие три основные возможности:
1. Автоматическое планирование
k8s помещает контейнер, предоставленный пользовательским развертыванием, на любой узел кластера k8s, и k8s может решить, на каком узле разместить контейнер, в зависимости от размера ресурсов, требуемых контейнером, и загрузки узла.
2. Автоматический ремонт
Когда механизм проверки работоспособности k8s обнаруживает проблему с узлом, он автоматически передает ресурсы этого узла другим узлам для завершения автоматического восстановления.
3. Горизонтальное автоматическое расширение и сжатие
В версии k8s 1.1+ есть функция под названием «Горизонтальное автомасштабирование пода», называемая «HPA», что означает автоматическое расширение пода. Она может предварительно определить индекс нагрузки пода. Когда достигается ожидаемый индекс нагрузки, он будет основано на Индикатор автоматически запускает автоматическое динамическое расширение/сокращение.
1) Горизонтальное автоматическое расширение
2) Горизонтальное автоматическое масштабирование
узел
Как видно из приведенного выше рисунка, узлы кластера k8s имеют две роли, а именно Master node и узел Node.Взаимосвязь между узлами Master и Node всего кластера K8s показана на следующем рисунке:
1. Главный узел
Главный узел также называется управляющим узлом. В каждом кластере k8s есть главный узел, отвечающий за управление и контроль всего кластера. Три основные возможности k8s, которые мы представили выше, инициируются главным узлом. Главный узел включает в себя следующие компоненты:
- Сервер API: обеспечивает процесс обслуживания интерфейса HTTP Rest, единственную запись для добавления, удаления, изменения и запроса всех объектов ресурсов;
- Controller Manager: Автоматизированный центр управления всеми объектами ресурсов в кластере k8s;
- Планировщик: центр управления автоматическим планированием для всех ресурсных объектов кластера k8s;
- ETCD: центр обнаружения службы регистрации кластера k8s, который может сохранять данные всех объектов ресурсов в кластере k8s.
2. Узел
Роль узла Node заключается в том, чтобы взять на себя рабочую нагрузку, назначенную Мастером, и в основном состоит из следующих ключевых компонентов:
- kubelet: отвечает за создание, запуск и остановку контейнеров, соответствующих модулям, и тесно сотрудничает с мастер-узлом;
- kube-porxy: компонент, реализующий взаимодействие кластера k8s и балансировку нагрузки.
Как видно из рисунка, на узле Node также требуется среда запуска контейнера.Если используется стек технологий Docker, на узле Node необходимо установить Docker Engine, который отвечает за контейнерное управление узлом.
Pod
Pod — это самый важный и самый основной ресурсный объект k8s, структура которого выглядит следующим образом:
Как видно из приведенной выше схемы структуры Pod, это на самом деле структура упаковки контейнера верхнего уровня, поэтому K8s может поддерживать несколько типов контейнеров.Исходя из этого, я понимаю, что позиционирование k8s — это оркестрация и планирование Контейнер — это всего лишь объект ресурса, который он планирует.
Под может содержать несколько контейнеров. Каждый под имеет по крайней мере один контейнер паузы. Другие пользовательские контейнеры совместно используют контейнер паузы. Основная функция контейнера паузы — определить IP-адрес и объем пода.
Расположение Pod в кластере k8s показано на следующем рисунке:
Label
Метка — очень важная концепция в k8s.Мы можем назначать метку соответствующим объектам ресурсов, таким как узел, модуль, набор реплик, служба и т. д. Ресурс может быть привязан к любой метке, и k8s может реализовать многомерность с помощью метки. После этого вы можете запрашивать и фильтровать объекты ресурсов с определенными метками с помощью селектора меток, например, создавать под с заданной меткой, workerid=123, а затем удалять ресурсы пода с этой меткой через workerid=123.
Replica Set
Назначение набора реплик состоит в том, чтобы определить ожидаемый сценарий, например, определить количество реплик определенного пода, которое будет соответствовать ожидаемому значению набора реплик в любое время Предположим, что набор реплик определяет количество реплик Pod as: replicas=2, когда набор реплик отправляется после мастера, мастер будет регулярно проверять номер пода в кластере.Если обнаружит, что один под умер, мастер попытается создать под в соответствии с шаблоном пода, установленным набором реплик, чтобы поддерживать количество подов и подов, ожидаемых набором реплик.
С помощью Replica Set кластер K8S обеспечивает высокую доступность пользовательских приложений и значительно сокращает операционную работу. Таким образом, производственная среда обычно использует развертывание или набор реплик для управления жизненным циклом и ожиданиями POD вместо непосредственного создания POD.
Как и в Replica Set, есть Deployment. Его внутренняя реализация также реализована через Replica Set. Можно сказать, что Deployment — это обновленная версия Replica Set. Большинство конфигурационных файлов yaml между ними одинаковы.
Service
Служба является очень важной концепцией для k8s для реализации кластера микрослужб. Как следует из названия, служба k8s — это «микрослужба» в архитектуре микрослужб, на которую мы обычно ссылаемся. Pod, набор реплик и т. д., упомянутые в этой статье, предназначены для Ресурсы службы службы, как показано на следующем рисунке, представляют отношения между службой, подом и набором реплик:
Как видно из приведенного выше рисунка, служба определяет запись доступа к службе, через которую клиент может получить доступ к экземпляру кластера приложений за службой, в то время как служба связана и подключается через селектор меток, а набор реплик гарантирует, что ресурсы кластера служб всегда будут доступны. ожидаемое значение.
Это всего лишь микрослужба. Вообще говоря, проект приложения будет состоять из нескольких независимых микрослужб с различными бизнес-возможностями. Несколько микрослужб образуют мощный и высокодоступный кластер служб приложений.
Namespace
Пространство имен, как следует из названия, означает пространство имен. Оно в основном используется для изоляции ресурсов в k8s. Пользователи могут создавать разные пространства имен в соответствии с разными проектами и распределять ресурсы по разным пространствам имен через k8s для достижения изоляции ресурсов разных проектов:
об авторе
Автор, Чжан Чэнхуэй, хорошо разбирается в промежуточном программном обеспечении для сообщений и отвечает за обслуживание миллионов кластеров Kafka на уровне TPS.Официальная учетная запись «Backend Advanced», поддерживаемая автором, не регулярно делится фактической борьбой Kafka и Серия RocketMQ, не говоря о концепциях.. Резюме и подробный анализ исходного кода; в то же время автор также является участником Seata, инфраструктурой распределенных транзакций с открытым исходным кодом Alibaba, поэтому он также поделится соответствующими знаниями о Seata; конечно, общедоступная учетная запись также будет делиться знаниями, связанными с WEB, такими как Spring Family Bucket и т. д. Содержание не обязательно исчерпывающее, но оно должно заставить вас почувствовать серьезность стремления автора к технологиям!
Официальная учетная запись: Back-end Advanced
Технический блог:objcoding.com/
Гитхаб:github.com/objcoding/