1. Введение
С быстрым развитием технологии контейнеров появились технологии оркестрации контейнеров, такие как Kubernetes (далее именуемые k8s).Когда люди постепенно осознают, что контейнеры — это будущее облачных вычислений, все больше и больше людей инвестируют в использование технологии контейнеров. Всего за несколько коротких лет k8s выиграла эту войну, фактически влияние k8s намного превзошло само управление контейнерами.
Концепция сервисной сетки привлекла всеобщее внимание, и это просто заставляет людей понять, что k8s — это просто решение для реализации микросервисов, что еще больше выдвигает k8s на передний план.
2. Основная концепция k8s
Эта статья основана на определенном понимании технологии докеров, поэтому я не буду вдаваться в подробности концепций, связанных с докером, я кратко представлю основные понятия и идеи k8s, цель которых состоит в том, чтобы все быстро и лучше ознакомились с ней. понятьследующий контент.
1. POD
Это наименьшая единица, определенная в k8s, потому что k8s является производным от google, а цель проекта не только в поддержкеdocker
Эта контейнерная технология абстрагируетpod
Концепция, собственно, самому k8s пофигpod
Какой тип контейнера находится внутри, может быть несколько контейнеров вpod
Внутренний запуск (официально рекомендуется один контейнер с одним контейнером),pod
Общая сеть контейнера контента, общее хранилище,pod
Он может быть запущен контроллером.Контроллер является одним из компонентов, за организацию которого отвечает k8s.Общими являются
-
Deployment
, указав такие атрибуты, как количество копий, и развернув службы без сохранения состояния в соответствии с настроенным шаблоном модуля, он может обеспечить мощные возможности отката, непрерывного обновления и другие возможности.Это также наиболее часто используемый вариант; -
Statefulset
, набор реплик с отслеживанием состояния, общее развертываниеetcd
,elasticsearch
Такие сервисы с отслеживанием состояния обычно монтируют тома хранения (также объект, определенный в k8s) одновременно; -
DeamonSet
, набор процессов демона, обычно назначенные узлы для развертывания некоторых служб, таких как мониторинг процессора и т. д .;
2. Service
pod
После того, как он запущен, доступ к нему извне в k8s невозможен, в это время необходимоservice
разоблачить это,service
эквивалентноpod
Балансировщик нагрузки, как правило, следующим образом:
-
CluserIP
(по умолчанию), пройтиiptables
Сделайте преобразование правила nat и перенаправьте трафик на соответствующийpod
Таким образом, доступ между службами внутри кластера осуществляется таким образом; -
NodePort
, открыть случайный порт хоста,kube-proxy
Компонент пишет соответствующие правилаiptables
Таблица, доступ к хост-порту будет перенаправлен на соответствующий модуль, этот метод может предоставлять услуги за пределами кластера; -
LoadBalancer
,NodePort
Вариант , который обычно реализуется конкретным поставщиком облачных услуг, таким как Alibaba Cloud, после создания службы балансировщик нагрузки будет создан автоматически, и сопоставление портов 80:3xxxx будет выполнено автоматически, а трафик будет передаваться на соответствующий хост-порт через балансировщик нагрузки.iptables
Правила перенаправляют трафик в поды; -
ingress
, как 7-уровневая загрузка http, роль эквивалентна обратному проксиnginx
трафик поступает через балансировщик нагрузки, который может бытьingress
Настройте доменное имя или путь и перенаправьте его на соответствующийservice
;
Это просто краткое введение в основные понятия, если вы хотите узнать больше, перейдите к официальной документации.
3. Техническое сравнение
Существует несколько конкурирующих технологий для управления большими развертываниями Docker и службами на основе контейнеров. Возможно, вы слышали о некоторых из этих выведенных из эксплуатации решений: Docker Swarm, Apache Mesos, OpenStack Magnum и т. д. Однако теперь Kubernetes устранил большую часть этих конкурентов.
Буду сравнивать с k8s, так и должно бытьDocker Swarm
Это можно оспорить, swarm — это родной кластерный инструмент докера, его легко развернуть, а для тех, кто знаком с докером, стоимость обучения низкая, а самая большая головная боль для разработчиков k8s — это очень высокая сложность и стоимость обучения. , но в настоящее время, будь то Ali Cloud или другие поставщики облачных услуг, предоставляют оба решения одновременно, и есть случаи масштабного использования в производственных средах.Вот сравнение этих двух решений от более зрелого Alibaba Cloud :
- Планирование ресурсов
На данный момент оба они могут быть выделены в соответствии с планированием ресурсов кластера, но степень детализации планирования различна, swarm — это контейнер, а k8s — это pod; - автоматическое масштабирование
Сам Swarm не поддерживает эту функцию, но для реализации этой функции он полагается на Alibaba Cloud, а k8s может автоматически расширять HPA по горизонтали и может автоматически масштабироваться в соответствии с данными мониторинга; - балансировки нагрузки
сам k8s предоставляет множество решений, внутренняя служба реализована через iptables, внешняя 7-уровневая балансировка нагрузки имеет входной уровень, а Alibaba Cloud также предоставляет LoadBalancer для поддержки балансировки нагрузки;
Сам Swarm не имеет уровня балансировки нагрузки, но Alibaba Cloud также проходит - скользящее обновление
В настоящее время Swarm также поддерживает последовательные обновления и внедрил сине-зеленое развертывание в облаке Alibaba, а само развертывание k8s поддерживает последовательные обновления. - аварийное восстановление
Swarm этого не делал, и в случае сбоя ноды сервис не может быть быстро восстановлен;
k8s умеет это делать, контроллер реплик может поддерживать количество реплик, а в случае зависания ноды быстро запустит определенное количество реплик с других нод, также относительно полный мониторинг может вовремя обнаружить проблемы;
С точки зрения самого swarm, поскольку он интегрирован в докер, swarm-кластер будет иметь только два уровня взаимодействия.Запуск контейнера составляет миллисекунды, что намного быстрее, чем у k8s, но совместимый API докера также делает невозможным это должно быть более утонченным.управление,
Напротив, k8s имеет контроллер реплики, который может отслеживать и поддерживать жизненный цикл контейнера, а также модуль для более точного управления.
Подводя итог, по сути, сам swarm фокусируется на организации контейнера докера, а k8s думает о том, как им управлять.На самом деле, все больше и больше людей сейчас склоняются к использованию k8s, именно в этом они видят его многочисленные преимущества. .
4. Практика
В процессе использования самодельного кластера из-за высокой стоимости обучения официальной панели управления yaml мы использовали проект управления k8s с открытым исходным кодом Wayne, функции которого включают, но не ограничиваются функциями панели управления, правами управление, отдел кадров, отдел отдела и т. д. относятся к фону управления кластером k8s для крупномасштабных проектных групп. Ниже приведены некоторые примеры.
В процессе использования изменение фона действительно приносит много удобства, что позволяет избежать затрат на обучение конфигурации k8s yaml и завершить создание сервисов через визуальный интерфейс.Некоторые из наших ранних экспериментальных сервисов развернуты через это;
Однако есть и некоторые недостатки.На базе k8s абстрагируется большее количество понятий, в том числе разделение проекта, управление правами и т. д. Целью этих модулей является контроль проектного персонала и выделение ресурсов для больших команд, но в то же время , Эти дополнительные концепции не знакомы пользователям, особенно разработчикам, которые не знакомы с k8s, а заботятся только о том, как развернуть сервисы, что запутает саму концепцию k8s, что приведет к дальнейшему увеличению затрат на обучение.Для небольших команд, какое-то сложное разделение ресурсов, проектов Функция разделения кажется избыточной.
Конечно, как упоминалось выше, мы по-прежнему склонны использовать решение k8s, реализованное существующими облачными провайдерами, практика Alibaba Cloud также доказала, что оно предоставляет много удобств, что действительно значительно сократит количество специалистов по обслуживанию кластера. также может удовлетворить потребности разработчиков в большинстве ситуаций, и его преимущества в основном отражаются в следующих аспектах:
- Кластер высокой доступности, поддерживаемый Alibaba Cloud, устраняет многие проблемы в компьютерном зале и сети, с которыми сталкивается самообслуживание;
- Поддержка балансировки нагрузки, вам не нужно самостоятельно создавать и настраивать входной компонент, создание сервиса автоматически сгенерирует балансировку нагрузки
- При поддержке Alibaba Cloud Image Warehouse модули можно создавать непосредственно из изображений, а также имеются шаблоны для простого создания сервисов;
- Поддерживаются файловые системы, такие как облачные диски, и очень удобно объявлять и монтировать тома хранения;
- Превосходная система мониторинга и аварийной сигнализации, которая может подробно отслеживать услуги в нескольких измерениях и гибко настраивать аварийные сигналы;
6. Меры предосторожности при строительстве
Если вы хотите глубже понять и использовать k8s, это хороший способ построить кластер k8s самостоятельно, и вы можете обратиться к официальному веб-сайту за методом построения;
Вот некоторые примечательные детали процесса сборки:
- Рекомендуется использовать источник Али
1 cat <<EOF > /etc/yum.repos.d/kubernetes.repo
2 [kubernetes]
3 name=Kubernetes
4 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
5 enabled=1
6 gpgcheck=0
7 EOF
- Если вы столкнетесь
kubelet
а такжеdocker
Драйвер файла несовместим, вы можете изменить драйвер докера
1 //;/etc/docker/daemon.json
2 {
3 "exec-opts": ["native.cgroupdriver=systemd"]
4 }
-
kube-proxy
По умолчанию используется iptables, с учетом производительности можно поменять на ipvs.
yum install -y ipvsadm
- Проверьте, загружен ли модуль ядра
lsmod|grep ip_vs
- загрузить модуль ядра
1 modprobe -- ip_vs
2 modprobe -- ip_vs_rr
3 modprobe -- ip_vs_wrr
4 modprobe -- ip_vs_sh
5 modprobe -- nf_conntrack_ipv4
Изменить конфигурацию kube-proxykubectl edit configmap kube-proxy -n kube-system
,Пучокmode
изменить наipvs
,scheduler
По умолчанию пусто, балансировка нагрузки используется в циклическом режиме.
7. Анализ данных измерения давления
Самостоятельно построенный кластер провел некоторые тесты производительности.Ниже приведен анализ некоторых данных стресс-тестов только для справки.
Среда стресс-тестирования
параллелизм кластера k8s 60
Task63 | ReqTPS: 4522 | RespTPS: 4522 | RT: 12 | TotalSend: 3144614 | TotalPass: 3144558 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:55
Task63 | ReqTPS: 4538 | RespTPS: 4536 | RT: 12 | TotalSend: 3140137 | TotalPass: 3140081 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:54
Task63 | ReqTPS: 4583 | RespTPS: 4584 | RT: 12 | TotalSend: 3135644 | TotalPass: 3135590 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:53
Task63 | ReqTPS: 4615 | RespTPS: 4616 | RT: 12 | TotalSend: 3131107 | TotalPass: 3131052 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:52
Task63 | ReqTPS: 4525 | RespTPS: 4527 | RT: 12 | TotalSend: 3126538 | TotalPass: 3126482 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:51
Task63 | ReqTPS: 4480 | RespTPS: 4480 | RT: 12 | TotalSend: 3122058 | TotalPass: 3122000 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:50
Task63 | ReqTPS: 4537 | RespTPS: 4531 | RT: 12 | TotalSend: 3117623 | TotalPass: 3117565 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:49
Task63 | ReqTPS: 4529 | RespTPS: 4530 | RT: 12 | TotalSend: 3113131 | TotalPass: 3113079 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:48
Task63 | ReqTPS: 4521 | RespTPS: 4522 | RT: 12 | TotalSend: 3108647 | TotalPass: 3108594 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:47
Task63 | ReqTPS: 4495 | RespTPS: 4496 | RT: 12 | TotalSend: 3104171 | TotalPass: 3104117 | TotalFail: 0 | Thread: 60 | 2019-08-01 18:14:46
В отличие от голого металла java
Task63 | ReqTPS: 7391 | RespTPS: 7392 | RT: 7 | TotalSend: 3970815 | TotalPass: 3970763 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:24
Task63 | ReqTPS: 7363 | RespTPS: 7366 | RT: 7 | TotalSend: 3963498 | TotalPass: 3963445 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:23
Task63 | ReqTPS: 7231 | RespTPS: 7229 | RT: 7 | TotalSend: 3956209 | TotalPass: 3956153 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:22
Task63 | ReqTPS: 7394 | RespTPS: 7392 | RT: 7 | TotalSend: 3949050 | TotalPass: 3948996 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:21
Task63 | ReqTPS: 7227 | RespTPS: 7228 | RT: 7 | TotalSend: 3941730 | TotalPass: 3941678 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:20
Task63 | ReqTPS: 7078 | RespTPS: 7080 | RT: 8 | TotalSend: 3934575 | TotalPass: 3934522 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:19
Task63 | ReqTPS: 6932 | RespTPS: 6933 | RT: 8 | TotalSend: 3927568 | TotalPass: 3927513 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:18
Task63 | ReqTPS: 6887 | RespTPS: 6882 | RT: 8 | TotalSend: 3920698 | TotalPass: 3920642 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:17
Task63 | ReqTPS: 6837 | RespTPS: 6840 | RT: 8 | TotalSend: 3913880 | TotalPass: 3913829 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:16
Task63 | ReqTPS: 6866 | RespTPS: 6864 | RT: 8 | TotalSend: 3907111 | TotalPass: 3907057 | TotalFail: 0 | Thread: 60 | 2019-08-01 17:42:15
кластер k8s одновременный 40
Task63 | ReqTPS: 4569 | RespTPS: 4571 | RT: 8 | TotalSend: 1716607 | TotalPass: 1716573 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:59
Task63 | ReqTPS: 4571 | RespTPS: 4568 | RT: 8 | TotalSend: 1712084 | TotalPass: 1712048 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:58
Task63 | ReqTPS: 4517 | RespTPS: 4520 | RT: 8 | TotalSend: 1707559 | TotalPass: 1707526 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:57
Task63 | ReqTPS: 4542 | RespTPS: 4541 | RT: 8 | TotalSend: 1703087 | TotalPass: 1703051 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:56
Task63 | ReqTPS: 4473 | RespTPS: 4473 | RT: 8 | TotalSend: 1698590 | TotalPass: 1698555 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:55
Task63 | ReqTPS: 4510 | RespTPS: 4514 | RT: 8 | TotalSend: 1694162 | TotalPass: 1694127 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:54
Task63 | ReqTPS: 4539 | RespTPS: 4536 | RT: 8 | TotalSend: 1689697 | TotalPass: 1689658 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:53
Task63 | ReqTPS: 4563 | RespTPS: 4561 | RT: 8 | TotalSend: 1685203 | TotalPass: 1685167 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:52
Task63 | ReqTPS: 4573 | RespTPS: 4575 | RT: 8 | TotalSend: 1680686 | TotalPass: 1680652 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:51
Task63 | ReqTPS: 4555 | RespTPS: 4555 | RT: 8 | TotalSend: 1676159 | TotalPass: 1676123 | TotalFail: 0 | Thread: 40 | 2019-08-01 18:58:50
В целом преимуществами использования k8s кластера является использование зеркалирования, удобное и быстрое развертывание и контроль ресурсов кластера.Будут некоторые потери в производительности по сравнению с barebone, но эти потери никак не скажутся на большинстве сервисов.