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

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

Подключитесь к каждому из серверов по SSH.
Если вы используете Ubuntu 16.04, следует установить и более свежее ядро из Hardware Enablement Stack:
, после этого перезагрузите виртуальные машины.
Для работы мастера требуется не менее 2 ГБ оперативной памяти и 2 vCPU.
При инициализации мастер-сервера нужно иметь ввиду какую сетевую подсистему будем использовать в дальнейшем при передаче параметра --pod-network-cidr. В данном случае воспользуемся Calico.
Инициализируем мастер-ноду:
, где в качестве 109.120.148.79 указываем ip–адрес нашего мастер-сервера на котором и производим настройку, а в параметре --pod-network-cidr все оставляем как есть — это виртуальная сеть, которая будет использоваться kubernetes.


Сохраните вывод команды kubeadm join… — она потребуется вам для подключения нод к мастеру.
Для запуска кластера осталось совсем немного:
Теперь развернем сеть Calico:
Можно подождать минутку, затем проверьте, что все сервисы, особенно CoreDNS в состоянии Running командой:

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

Имея описание состояния, kubernetes приведет состояние кластера в соответствие вашим потребностям. Для этого он будет автоматически выполнять задачи: запускать и останавливать контейнеры, масштабировать достигая нужного количества реплик и т.д.
Мастер-сервер обычно состоит из 3х процессов: kube-apiserver, kube-controller-manager и kube-scheduler.
На обычных нодах исполняются 2 процесса: kubelet и kube-proxy.
Основные объекты:
Дополнительно у Kubernetes есть высокоуровневые абстракции — Контроллеры. Они построены поверх базовых объектов и представляют дополнительную функциональность:
1. Создадим пространство имен:
2. Выполним развертывание в это пространство имен:
Посмотреть состояние подов можно командой:
Работу самого магазина носков можно проверить, введя адрес нашего кластера (магазин запущен на порту 30001):
http://109.120.148.79:30001/
Сегодня 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/
4 комментария