Kubernetes — это решение для автоматического развёртывания, масштабирования и координации контейнеров приложений в условиях кластера на большинстве популярных Linux-based операционных систем. Кубернетис поддерживает основные технологии контейнеризации, отлично сочетается с Docker. С помощью этой платформы удобно системно группировать контейнеры, балансировать нагрузку и активировать задачи одновременно из большого количества приложений.
Создание и использование Kubernetes-кластера может понадобиться крупным компаниям, которые работают с Big Data, и разработчикам, которым для полноценной работы требуется крупная, хорошо управляемая производственная среда. Инфраструктурная платформа на основе Kubernetes подходит масштабным проектам, в которых поддерживается версионность, проводится тестирование новых приложений, а для создания продукта используются разные компоненты. Kubernetes требователен к приложениям, с которыми работает — они должны функционировать строго по принципу микросервисов. Так как Кубернетис расходует много ресурсов, запускать его в небольших проектах нерационально.
Системные требования и подготовка к установке Kubernetes
Kubernetes можно установить с помощью готового инструмента или самостоятельно, добавляя каждый компонент архитектуры вручную. Выделим три основных способа установки Kubernetes:
- Minikube — готовый кластер, который разворачивается на локальном устройстве (например, компьютере разработчика). Если вы хотите познакомиться с Kubernetes, стоит начать с этого варианта, поскольку он позволяет изучать всю экосистему и ставить локальные эксперименты.
- Kubespray — набор Ansible ролей для установки и конфигурации системы оркестрации контейнерами Kubernetes. С его помощью можно быстро развернуть высокодоступный кластер Kubernetes на облачной платформе провайдеров, OpenStack, vSphere, Packet (bare metal) или голом железе.
- Готовый кластер в облаке. Например Кубернетис от Cloud4Y.
Важно помнить, что при автоматической установке от вас понадобится минимум внимания, зато нужно будет позаботиться о достаточном объёме ресурсов, что обеспечивает бесперебойную работу платформы. Минимальный набор при небольшом количестве контейнеров и простой взаимосвязи предполагает наличие пары виртуальных машин с 1-2 CPU и 2-4 Гб RAM, которые будут выполнять функции мастер-ноды и рабочей ноды. А если есть планы позднее создать рабочий кластер, то можно добавить и ingress ноду с 1 CPU и 2 Гб RAM.
Установка кластера
Итак, предположим, что у нас есть что есть несколько серверов под управлением Ubuntu или CentOS. Прежде всего устанавливаем docker на каждом из серверов. Для установки рекомендуемой версии для Ubuntu выполните команду:
apt-get update
apt-get install -y docker.io
Для установки свежей версии докера используйте следующие команды:
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
Docker установлен. Следующим этапом будет установка всех компонент, необходимых для создания и управления кластером Kubernetes.
-
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 <
deb
http://apt.kubernetes.io/
kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
Если вы хотите запретить обновление установленных компонентов в целях безопасности, используйте команду:
apt-mark hold kubelet kubeadm kubectl
Для CentOS:
cat <
[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
Команда setenforce 0
рекомендуется для обеспечения корректного доступа контейнеров к файловой системе хоста. Благодаря отключению SELinux начинает нормально работать сеть у подов.
Если после выполнения команд нет ошибок, приступайте к настройке платформы. Вам нужно инициализировать кластер, создать Container Network Interface (CNI), добавить узлы нод и получить токен для авторизации. Организовать сеть в кластере нам поможет программно-определяемая сеть (SDN) Flannel.
Выберите один из серверов, который будет мастером и инициализируйте кластер командой:
kubeadm init --pod-network-cidr=10.244.0.0/16
Ключ --pod-network-cidr=10.244.0.0/16
позволяет выбрать нужный сетевой плагин. Значение параметра может меняться в зависимости от выбранного провайдера.
Если при выполнении команды в консоли появились ошибки, их нужно обязательно устранить. Предупреждения (warning) можно игнорировать, если это не production-окружение. Если всё сделано правильно, на экране вы увидите команду для присоединения остальных нод кластера к мастеру. Сохраните её куда-нибудь.
В случае успеха на экран будет выведена команда для присоединения остальных нод кластера к мастеру - скопируйте и сохраните ее. Результат команды будет примерно следующим:
...
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run (as a regular user):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token
Работать с кластером мы будем под обычным непривилегированным пользователем. От лица отдельного пользователя (не под рутом) выполните команду:
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). Обратите внимание, что в кластере может быть только одна сеть для подов.
Установка Flannel выполняется командой:
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
Остаётся получить токен авторизации кластера. При сохранившемся подключении по SSH повторно заходить на сервер не требуется. После ввода команды:
kubeadm token list
Вы получите токен, который по умолчанию действует 24 часа. Чтобы добавить новый узел по завершении периода, нужно создать новый токен командой:
kubeadm token create
Посмотрите список всех запущенных подов.
# kubectl get pod –A
Все должны быть в состоянии Running. Если нет — ищите ошибку. На этом систему можно признать готовой к эксплуатации.
Kubernetes в облаке (KaaS)
Чтобы упростить себе задачу и получить надёжную масштабируемую инфраструктуру виртуальных машин на базе VMware, совместимую с Kubernetes, можно обратиться к провайдеру Cloud4Y. Облачный подход к оркестрации контейнеров позволяет легко и быстро развернуть платформу автоматизации, создавать и работать в Kubernetes кластерах, вести разработку в производительной и стабильной среде.
Для развёртывания и управления кластерами провайдер использует Container Service Extension (CSE), который поддерживает основные технологии контейнеризации, включая Docker. CSE позволяет работать с Kubernetes в VMware Cloud Director через создание шаблонов виртуальных машин и позволяет организациям развернуть полноценные кластеры для контейнированных приложений.
Cloud4Y делает работу c Kubernetes в облаке проще и доступнее. Решение не требует глубоких знаний VMware Cloud Director, вы без труда можете автоматизировать управление жизненным циклом приложений (от развёртывания до остановки). Решение сокращает время установки Kubernetes с нескольких дней до 15 минут.