ѕодписывайтесь на наш YouTube - канал :)

ћерион Ќетворкс

7 минут чтени€

Ќа данный момент Kubernetes €вл€етс€ одной из самых интересных технологий в мире DevOps. ¬ последнее врем€ вокруг него образовалось очень много хайпа, по одной простой причине, и причина эта Ц всемогущие контейнеры.

 омпани€ Docker Inc. привлекла народное внимание к контейнерам с помощью маркетинговых компаний о своем прекрасном продукте (у нас есть стать€ о первоначальной настройке Docker). Ќо что интересно, Docker Ц не первопроходец в мире контейнеров, но они положили начало их победоносному походу по миру. „то же было в начале? ј в начале были Linux контейнеры, внимание к которым также возросло после такого ажиотажа вокруг Docker контейнеров, при этом и повысив потребность к контейнерным оркестраторам.

ƒавайте поближе познакомимс€ с  ормчим Ц он же Kubernetes. ѕервоначально это €вл€лось разработкой Google, дл€ управлени€ их гигантской инфраструктурой, состо€щей из миллионов контейнеров. ¬ какой-то момент Google отдал  ормчего в люди, а именно - Cloud Native Computing Foundation. Ќа данный момент, Docker добавил Kubernetes в свои сборки как один из вариантов оркестраторов наравне с Docker Swarm.

“еперь Kubernetes также будет частью сборок Docker Community и Docker Enterprise Edition.


ќбщий обзор  ормчего

ѕожалуй, тут нужно разъ€снить: Kubernetes €вл€етс€ греческим именем кормчего или управл€ющего кораблЄм

¬ зарубежных коммьюнити  ормчий носит несколько названий Ц Kubernetes, k8s или kube и €вл€етс€ платформой с открытым кодом. ƒанна€ платформа позвол€ет автоматизировать операции с контейнерами Ц запуск, масштабирование, управление контейнизированными приложени€ми и так далее. Kubernetes может помочь вам сохранить дес€тки часов жизни и бесценного времени.

Kubernetes позвол€ет вам помещать в кластер группы хостов с контейнерами и управл€ть этими кластерами. Ёти кластеры могут работать в публичных, частных и гибридных облаках Ц может, однажды, даже в ’огвартсе откажутс€ от сложных заклинаний в пользу Kubernetesа.

 ак € уже упом€нул, Kubernetes изначально €вл€етс€ разработкой Google, но будет также нелишним знать, что Kubernetes включен во многие облачные коммерческие предложени€  орпорации ƒобра.

—ам Google запускает более чем 2 миллиарда контейнеров в неделю. Ёто почти 300 миллионов контейнеров в день с помощью своей внутренней платформы Borg. Ёта платформа Ц предшественник Kubernetes. ¬се ошибки Borg были учтены и исправлены в  ормчем./

»спользование Kubernetes позвол€ет получать радость от управлени€ и запуска контейнизированных приложений Ц он автоматизирует запуск и откаты сборок, мониторит запущенные сервисы Ц т.е вы можете узнать о том, что что-то пойдет не так еще до непосредственной инициации процесса.

 роме того, Kubernetes управл€ет ресурсами и может масштабировать необходимые ресурсы дл€ приложений в зависимости от того, сколько им требуетс€, дл€ того, чтобы избежать лишней траты ресурсов.


 ак работает Kubernetes?

ѕосмотрите на схему с официального сайта (ссылка ниже): —труктурна€ схема Kubernetes

 ак вы видите, Kubernetes это очень сложна€ система (особенно если сравнивать с нативным оркестратором Docker Swarm). „тобы пон€ть, как он работает, необходимо сначала пон€ть его базовые принципы.


∆елаемое состо€ние

∆елаемое состо€тие (Desired state) Ц это один из базовых концептов Kubernetes. ¬ы можете указать необходимое состо€ние дл€ запуска контейнеров в т.н ѕодах. “о есть, к примеру, если контейнер почему-то перестал работать, Kubernetes заново создаст ѕод основыва€сь на указанном желаемом состо€нии.

Kubernetes всегда провер€ет состо€ние контейнеров в кластере, и этим занимаетс€ т.н Kubernetes ћастер, который €вл€етс€ частью плоскости управлени€. ћожно использовать объект kubectl Ц он напр€мую взаимодействует с кластером дл€ установки или изменени€ Desired State через Kubernetes API.


ќбъекты Kubernetes

ќбратимс€ к официальной документации Kubernetes: объект в Kubernetes это Ђзапись о намерени€хї (record of intent) Ц после создани€ объекта, Kubernetes будет посто€нно провер€ть наличие этого объекта. ѕри создании объекта, вы сообщаете  ормчему как должна выгл€деть загрузка вашего кластера, иначе говор€ Ц каково его желаемое состо€ние.

—осто€ние сущностей в системе в любой вз€тый момент времени представлено Kubernetes объектами.  роме того, объекты также служат как дополнительный уровень абстракции над интерфейсом контейнеров. ¬ы можете напр€мую взаимодействовать с сущност€ми объектов вместо взаимодействи€ с контейнерами. Ќиже приведем список базовых объектов в Kubernetes.

  • ѕод (Pod) Ц наименьша€ запускаема€ единица в ноде. Ёто группа контейнеров, которые должны работать вместе. ƒовольно часто (но не всегда) в поде находитс€ только один контейнер;
  • —ервис(Service) Ц данный объект используетс€ дл€ обозначени€ логической суммы подов и политик, используемых дл€ доступа к подам;
  • –аздел (Volume) Ц директори€, котора€ доступна всем контейнерам внутри пода;
  • »менные пространства (Namespaces) Ц виртуальные кластеры, поддерживаемые физическим кластером;

“акже в Kubernetes есть несколько контроллеров, которые построены на базовых объектах и они предоставл€ют дополнительные фичи. Ќиже список данных контроллеров:

  • ReplicaSet - провер€ет что какое-то количество копий подов также все врем€ запущено;
  • Deployment - используетс€ дл€ смены текущего состо€ни€ на желаемое состо€ние;
  • StatefulSet - используетс€ дл€ контрол€ над развертыванием и доступов к разделам;
  • DaemonSet - используетс€ дл€ копировани€ пода на все ноды кластера или только на указанные ноды;
  • Job - используетс€ дл€ реализации какой-то задачи и прекращени€ существовани€ после завершени€ задачи или после указанного времени

ѕлоскость управлени€ в Kubernetes

ѕлоскость управлени€ в Kubernetes используетс€ дл€ установки кластера в желаемое состо€ние, и дл€ этого Kubernetes выполн€ет множество задач автоматически Ц старт и перезагрузка контейнеров, изменение количества реплик приложени€ и так далее.

–азличные части плоскости управлени€, такие как Kubernetes ћастер и процесс kubelet задают тон тому, как Kubernetes взаимодействует с вашим кластером. ѕлоскость управлени€ содержит записи о всех объектах Kubernetes в системе и запускает бесконечные петли управлени€ дл€ контрол€ состо€ни€ объектов. ¬ каждый момент времени эти петли будут реагировать на изменени€ в кластере и будет приводить состо€ние всех объектов в системе из текущего состо€ни€ в желаемое. ѕредставьте себе правительство страны, которое провер€ет все ли работают и существуют в соответствии с законом.

Kubernetes ћастер €вл€ютс€ частью плоскости управлени€, и выполн€ет такую же задачу по сохранению желаемого состо€ни€ во всем вашем кластере.  оманда kubectl €вл€етс€ интерфейсом дл€ взаимодействи€ с мастером в кластере через API.

¬ документации написано: Ђмастерї - это группа процессов, управл€ющих состо€нием кластера.  ак правило, все эти процессы запущены одной ноде в кластере и эта нода также называетс€ мастер-нодой. ћастер-нода также может быть реплицирована дл€ избыточности и отказоустойчивости.

 аждый мастер в кластере €вл€ет собой совокупность следующих процессов:

  • kube-apiserver - единственна€ точка управлени€ дл€ целого кластера.  оманда cubectl взаимодействует напр€мую через API;
  • kube-controller-manager - управл€ет состо€нием кластера, управл€€ различными контроллерами;
  • kube-scheduler - планирует задачи на всех доступных нодах в кластере;

Ќоды в Kubernetes

Ќоды в Kubernetes Ц это ваши Ђсервераї - виртуалки, физические и так далее, которые наход€тс€ в кластере и на которых запущены ваши приложени€. Ќоды также контролируютс€ мастером и посто€нно монитор€тс€ дл€ того, чтобы устанавливать желаемое состо€ние дл€ приложений. –аньше они назывались Ђминьонамиї - но не теми желтыми милахами из мультика.  ажда€ нода в кластере держит два процесса:

  • kubeletЦ интерфейс между нодой и мастером;
  • kube-proxy Ц сетева€ прокси, через которую проход€т сервисы, указанные в API на каждой ноде. “акже эта прокси может совершать простой TCP и UDP проброс портов;

”становка Kubernetes

“еперь давайте посмотрим как это работает. ƒл€ этого необходимо установить Kubernetes у вас на сервере. Ќужно скачать и установить Docker Community Edition версий 17.12.+ и затем дл€ локального запуска нужно установить Minikube.

—сылка дл€ скачивани€ Docker Community Edition - здесь;
—сылка дл€ скачивани€ Minikube - тут (MiniKube)

ѕри использовании Minikube надо помнить, что создаетс€ локальна€ виртуальна€ машина и запускает кластер, состо€щий из одной ноды. Ќо ни в коем случае не используйте его дл€ продакшена Ц Minikube служит исключительно дл€ тестировани€ и разработки.

ƒл€ запуска однонодного кластера достаточно лишь выполнить команду minikube start. Ѕадумс, вы одновременно запустили виртуальную машину, кластер и сам Kubernetes.

$minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

ƒл€ проверки установки надо ввести команду kubectl version

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T20:00:41Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

ѕолезна ли ¬ам эта стать€?


Ёти статьи могут быть вам интересны: