Kubernetes (кубернетес, сокращенно K8s) – это расширяемая платформа с открытым исходным кодом, с помощью которой происходит управление кластерами контейнерных сервисов и приложений, она облегчает настройку и автоматизацию.
Kubernetes имеет быстрорастущую экосистему, микросервисную архитектуру, он достаточно популярен среди пользователей, а его сервисы, различные инструменты и поддержка широко доступны.
Kubernetes это, простыми словами, система, которая позволяет эффективно управлять приложениями, размещенными на сервере и оптимизировать утилизацию ресурсов на оборудовании.
Слово кубернетис в переводе с греческого означает штурман или рулевой. Данная система использовалась для внутренних нужд компании Google, а в 2014 году компания решила поделиться своими разработками и открыла исходный код kubernetes. Работа kubernetes основана на огромном опыте работы Google с масштабными нагрузками на рабочие серверы.
В настоящее время система находится под управление Cloud Native Computing Foundation (Специальный фонд, созданный совместно компанией Google и The Linux Foundation для поддержки и продвижения технологий контейнеров).
С чего все начиналось? 30 лет назад компании запускали приложения на серверах и не имели возможностей определить границы ресурсов для разных приложений. Из-за этого работа одного сервиса тормозила работу другого. Тогда под каждое приложение использовали отдельный физический сервер, что приводило к высоким издержкам: серверы используются не на полную мощность,их нужно много, а поддерживать большое количество оборудования сложно и дорого.
Первым вариантом решения этой проблемы стала виртуализация. С ее помощью на одном физическом сервере запускается несколько виртуальных машин, изолированных друг от друга: это обеспечивает безопасность и гарантию ресурсов для каждой виртуальной машины, лучшую масштабируемость, снижение затрат на оборудование.
Затем наступило время контейнеров. Они схожи с виртуальными машинами, их отличие заключается в возможности совместного использования операционной системы между приложениями благодаря свойству изоляции. По этой причине архитектура контейнеров считается легкой: они имеют собственные ресурсы (память, процессор, размер диска и т.д.) и собственную файловую систему. Так как они не привязаны к к базовой инфраструктуре, то могут быть легко перемещены между облачными сервисами и дистрибутивами ОС.
С помощью kubernetes возможно:
Система kubernetes высоко востребована в ИТ-сфере, где требуется эффективная и непрерывная работа. С помощью kubernetes возможен выпуск приложения в заданный срок, обновление и исправление ошибок максимально незаметно для пользователя.
Kubernetes используют разработчики ПО и IT-сервисов. Ежедневно они разворачивают множество контейнеров, управлять которыми желательно через единый интерфейс. С помощью kubernetes гораздо легче создавать распределенные отказоустойчивые архитектуры, перемещать контейнеры между средами разработки или тестирования.
Указанные компоненты могут быть установлены автоматически с помощью дополнительных инструментов или вручную, по отдельности. Используя API они связываются с контейнерами, получают их показатели, затем дают команду: выполнить запуск, остановку или сделать принудительное закрытие.
Kubernetes приводит в порядок работу контейнеров и управляет ими автоматически. Этот процесс называют «оркестрация контейнеров». С помощью одной кнопки можно вернуть приложение к первоначальной версии, нарастить мощность или выполнить обновление определенной части приложения.
Чтобы Kubernetes мог запустить приложения в контейнерах, они должны быть оснащены средой выполнения. Ею могут быть такое ПО, как Сontainerd, Docker, rkt или runc.
Главное, что требуется от Kubernetes — динамическое распределение ресурсов узла между подами (модулями для управления приложения), выполняемыми на нем. Для реализации этого процесса, с помощью Kubernetes cAdviso (агента внутреннего мониторинга) на каждом узле ведется сбор информации о производительности и использовании ресурсов (продолжительности работы центрального процессора и оперативной памяти, нагрузок на файловую и сетевую системы).
Важная деталь Kubernetes – компонент Kubelet, который автоматически обеспечивает запуск, остановку и управление контейнерами приложений, собранных в поды. Если у какого-то пода обнаруживается проблема, Kubelet пытается повторно осуществить развертывание и перезапуск пода на узле.
На каких платформах можно развернуть kubernetes? Для установки программы можно использовать любую операции операционную систему: Linux, Windows, MacOS.
Существует несколько способов установки Kubernetes. Это можно сделать вручную, с нуля, или с помощью готового сервиса.
Например, можно использовать:
Minikube — полностью готовый кластер, который можно развернуть на локальном устройстве. Этот вариант отлично подойдет для первого знакомства с Kubernetes, так как он позволяет изучать устройство системы и делать локальные тесты. Kubespray — это набор Ansible ролей, с помощью которых происходит установка и конфигурация системы оркестрации контейнерами. Он поможет в короткие сроки развернуть контейнер на облачной платформе или ваших собственных серверах. Готовый кластер в облаке. Это масштабируемая инфраструктура виртуальных машин, которая совместима с Kubernetes. Она позволяет развертывать и управлять кластерами с помощью готового решения.
Главное, о чем не стоит забывать – требуется большой объем ресурсов для бесперебойной работы сервиса. Минимальный объем при малом количестве контейнеров и простом взаимодействии требует не менее двух виртуальных машин с 1-2 CPU и 2-4 Гб RAM.
Для установки docker на Ubuntu выполните команду:
apt-get update
apt-get install -y docker.io
Если вы хотите установить последнюю версию docker, используйте следующие команды:
apt-get update
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
"deb https://download.docker.com/linux/
$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \
stable"
apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')
Найти руководство по установке Docker вы можете на официальном сайте разработчика.
Чтобы установить платформу Docker в CentOS выполните:
yum install -y docker
systemctl enable docker && systemctl start docker
Kubelet — необходим для контроля работоспособности подов.
Kubeadm — компонента, которая управляет кластером.
Kubectl — компонента, необходимая для отправки команд кластеру.
Для Ubuntu введите команду:
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat </etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
Для установки компонентов в CentOS:
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl= https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey= https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
Перейдем к настройке платформы.
Определите сервер, которому будет присвоен статус мастер-сервера, и начните кластер командой:
kubeadm init --pod-network-cidr=10.244.0.0/16
Если вы выполнили все верно, то на экране появится команда для присоединения остальных нод кластера к мастеру. Сохраните эту команду. Она будет иметь примерно такой вид:
Работа с кластером будет производиться под обычным (непривилегированным) пользователем. От лица отдельного пользователя (не под рутом) введем команду:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
В самом начале работы контейнеры на мастер-ноде не запускаются, а мастер отслеживает только состояние кластера и размещает ресурсы. Для того, чтобы разрешить запуск контейнеров на мастере, осуществите команду:
kubectl taint nodes --all node-role.kubernetes.io/master-
Перед запуском приложения, требуется настроить сеть с поддержкой CNI. Рекомендуем использовать плагин, например, Flannel (можете выбрать другой: Weave Net, Calico). Обращаем ваше внимание: в кластере должна быть только одна сеть для подов.
Для установки плагина выполните команду:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Для проверки корректности работы программы выполните команду:
kubectl -n kube-system get pods
Далее добавляем ноды в существующий кластер. Для этого необходимо SSH подключение и модули Docker, Kubelet, Kubeadm.
Выполняем команду:
kubeadm join --token : --discovery-token-ca-cert-hash sha256:
Чтобы получить токен авторизации кластера, необходимо ввести команду:
(Если подключении по SSH сохранилось, то не нужно снова заходить на сервер)
kubeadm token list
После выполнения этой команды, вам придет токен, который действует 24 часа по умолчанию. Для добавления нового узла по завершении периода, необходимо создать новый токен с помощью команды:
kubeadm token create
Для просмотра списка всех запущенных подов, введите:
# kubectl get pod –A
Все поды должны быть в состоянии Running.
Теперь система готова к эксплуатации.
Когда система готова к работе, можно выполнить запуск тестового пода. Сделаем это на примере веб-сервера nginx. Укажите кластеру, что необходимо скачать образ nginx и запустить pod с этим образом, с помощью команды:
# kubectl run nginx --image=nginx
Для проверки работы пода, введите:
# kubectl get pods -w
(Ключ -w дает возможность ожидать смену статуса).
Чтобы посмотреть логи пода:
# kubectl logs nginx -f
Для подключения к виртуальной консоли пода выполните команду:
# kubectl exec -it nginx -- /bin/bash
Чтобы удалить под:
# kubectl delete pods nginx
Kubernetes – это решения для контейнеризации, которое опережает всех своих конкурентов. Все поставщики облачных сервисов поддерживают K8s и предоставляют решения для его использования.
Kubernetes предназначен для работы с большими структурами данных, поэтому отлично подойдет для масштабных проектов. Платформа постоянно развивается и дополняется самыми современными технологиями.