Развертываем Kubernetes в облаке Infoboх

Kubernetes – это оркестратор контейнеризированных приложений с открытым исходным кодом. В него вложены десятилетия опыта компании Google по развертыванию масштабируемых и надежных систем в контейнерах с ориентированным на приложения API.
Сегодня Kubernetes – это продукт для современных разработчиков облачных приложений любого масштаба: от исследовательских кластеров Raspberry Pi до тысяч промышленных серверов.

В этой статье мы рассмотрим, как поднять работоспособный Kubernetes–кластер в облаке Infobox.



Подготовка

Для начала работы вам потребуется доступ в облако, который можно получить тут. После заказа услуги вы получите доступ в панель управления облаком.

Создайте минимум 3 сервера с Ubuntu не ниже 16.04, (при создании сервера установите галочку «Разрешить управление ядром ОС», что позволит вам использовать гипервизорную виртуализацию, требуемую для запуска docker на текущей платформе) и не забудьте выделить хотя бы по одному внешнему IP–адресу. Один из них будет управляющим сервером (master) и 2 другие — серверы для рабочих нагрузок.


Подключитесь к каждому из серверов по SSH.

Установка Kubernetes

На всех серверах
Установите все обновления на ОС командой:
apt update && apt -y upgrade && apt autoremove

Если вы используете Ubuntu 16.04, следует установить и более свежее ядро из Hardware Enablement Stack:
apt-get install --install-recommends linux-generic-hwe-16.04

, после этого перезагрузите виртуальные машины.

Установите Docker
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

apt update && apt -y install docker-ce


Kubeadm
Теперь установите kubeadm – стандартный инструмент развертывания Kubernetes-кластера.
apt-get update && apt-get install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt update && apt install -y kubelet kubeadm kubectl

apt-mark hold kubelet kubeadm kubectl


Настройка Master–сервера

Master – управляющая машина, на которой запущен etcd (база данных кластера) и api–сервер (с которым взаимодействует инструмент командной строки kubectl).

Для работы мастера требуется не менее 2 ГБ оперативной памяти и 2 vCPU.

При инициализации мастер-сервера нужно иметь ввиду какую сетевую подсистему будем использовать в дальнейшем при передаче параметра --pod-network-cidr. В данном случае воспользуемся Calico.

Инициализируем мастер-ноду:
kubeadm init --apiserver-advertise-address=109.120.148.79 --pod-network-cidr=192.168.0.0/16

, где в качестве 109.120.148.79 указываем ip–адрес нашего мастер-сервера на котором и производим настройку, а в параметре --pod-network-cidr все оставляем как есть — это виртуальная сеть, которая будет использоваться kubernetes.



Сохраните вывод команды kubeadm join… — она потребуется вам для подключения нод к мастеру.

Для запуска кластера осталось совсем немного:
mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config


Теперь развернем сеть Calico:
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml


Можно подождать минутку, затем проверьте, что все сервисы, особенно CoreDNS в состоянии Running командой:
kubectl get pods --all-namespaces



Подключение нод к мастеру

Теперь можно подключить ноды к мастеру, используя сохраненную (выше) команду kubeadm join..., которая была сообщена при инициализации мастера.

Введите ее на каждой ноде для подключения к мастеру.
Спустя минуту можете проверить успешность подключения, введя на мастере:
kubectl get nodes



Основные моменты

При работе с Kubernetes вы используете Kubernetes API обьекты для описания состояния вашего кластера: какие приложения вы хотите запускать, сколько реплик, какие сетевые и дисковые ресурсы использовать и т.д. Для работы с API обычно используется команда kubectl, либо возможно взаимодействовать с api напрямую.

Имея описание состояния, kubernetes приведет состояние кластера в соответствие вашим потребностям. Для этого он будет автоматически выполнять задачи: запускать и останавливать контейнеры, масштабировать достигая нужного количества реплик и т.д.

Мастер-сервер обычно состоит из 3х процессов: kube-apiserver, kube-controller-manager и kube-scheduler.
На обычных нодах исполняются 2 процесса: kubelet и kube-proxy.

Объекты Kubernetes

Состояние вашей системы предстваляется объектами Kubernetes: развернутыми контейнеризованными приложениями, ассоциированными сетями и дисками и другой информацией.

Основные объекты:
  • Pods (поды) – группа из одного или нескольких контейнеров (например Docker–контейнеров) с разделенным хранилищем и сетью и единой спецификацией как запускать эти контейнеры.
  • Services (сервисы) — абстракции, которые определяют логические наборы подов и политики доступа к ним, что иногда называют Микросервисы.
  • Volume (тома) — возможность сохранять данные и расшаривать их между контейнерами.
  • Namespace (пространства имен) — предназначены для использования кластера разными пользователями и командами, независимо друг от друга.

Дополнительно у Kubernetes есть высокоуровневые абстракции — Контроллеры. Они построены поверх базовых объектов и представляют дополнительную функциональность:
  • ReplicaSet — контролируют, что определенное количество реплик подов запущено в один момент времени
  • Deployment — сущность, требуемая для декларативных описаний развертываний и обновлений подов и репликасетов.
  • StatefulSet — сущность похожая на Deployment, но каждый Pod здесь имеет постоянный и неизменный идентификатор.
  • DaemonSet — убеждается, что на всех нодах запущена копия пода.
  • Job — создает один или более подов и убеждается, что указанное из количество было успешно уничтожено (завершено).

Пример развертывания в Kubernetes

Для примера давайте запустим демо магазина носков.
1. Создадим пространство имен:
kubectl create namespace sock-shop

2. Выполним развертывание в это пространство имен:
kubectl apply -n sock-shop -f "https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml"

Посмотреть состояние подов можно командой:
kubectl get pods -n sock-shop

Работу самого магазина носков можно проверить, введя адрес нашего кластера (магазин запущен на порту 30001):
http://109.120.148.79:30001/

Заключение

Kubernetes – огромное пространство для исследований и продакшн-внедрений, позволяющее попробовать подход к развертыванию ИТ-инфраструктуры нового поколения. Эта статья не претендует на обучение вас Kubernetes. Используя эти знания вы можете быстро в Infobox развернуть свой первый кластер и дальше изучать эту инновационную платформу.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.