Начало работы с Kubernetes
В предыдущем мануале вы научились управлять приложением на основе нескольких контейнеров с помощью Docker Compose. Командная строка Docker и Docker Compose позволяют разворачивать и масштабировать контейнеры в рамках одной машины, а Kubernetes может обрабатывать мультиконтейнерные приложения, развернутые на нескольких машинах или хостах.
Kubernetes – это открытый инструмент для оркестровки контейнеров и управления контейнеризованными приложениями. Кластер Kubernetes состоит из двух ключевых компонентов: мастер-нод и рабочих нод. Набор мастер-нод управляет рабочими нодами и развернутыми приложениями. Рабочие ноды отвечают за запуск контейнеризованных приложений.
Читайте также: Краткий обзор Kubernetes
StackPointCloud позволяет развернуть кластер Kubernetes в три шага с помощью веб-интерфейса. Он упрощает установку и настройку Kubernetes. На данный момент StackPointCloud поддерживает 5 облачных платформ. Разработчики, которые не знакомы с администрированием и конфигурацией системы, могут обратиться к StackPoint, чтобы быстро установить Kubernetes на свой облачный хостинг. Больше подробностей о проекте можно найти на его сайте.
Требования
- Локальная машина с командой curl (которая загрузит кластер Kubernetes). Эта команда предварительно установлена в macOS и Ubuntu 16.04.
- Аккаунт Amazon Web Services, Compute Engine, Container Engine, DigitalOcean или Microsoft Azure.
1: Установка Kubernetes
Откройте сайт Stackpoint.io и нажмите Login.
На появившейся странице нужно выбрать способ аутентификации (Github, Google, Twitter или DigitalOcean).
На следующей странице нужно указать своего облачного провайдера.
После этого можно настроить кластер. Кликните EDIT, чтобы откорректировать параметры. Вы попадете на экран Configure Provider.
В списке Region выберите свой регион. Остальные параметры можно оставить по умолчанию и нажать Submit.
На следующем экране введите название кластера и нажмите Submit.
Теперь начнется установка кластера, и вы попадете на страницу, где вы сможете отслеживать прогресс установки. Это займет около 15 минут.
Теперь можно настроить инструмент командной строки.
2: Настройка Kubernetes CLI
Чтобы взаимодействовать с кластером Kubernetes, на машине разработки вам понадобится инструмент командной строки типа kubectl.
Запустите следующую команду, чтобы установить kubectl:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 63.7M 100 63.7M 0 0 5441k 0 0:00:12 0:00:12 --:--:-- 4644k
Бинарный файл kubectl загрузится в текущий каталог. Измените права на загруженный файл и переместите его в каталог /usr/local/bin, чтобы иметь возможность запускать его из любого места:
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
Теперь направьте приложение kubectl на кластер Kubernetes. Для этого нужно загрузить файл конфигурации из Stackpoint. Вернитесь на страницу состояния кластера в браузере. После проверки готовности кластера кликните по имени кластера.
Нажмите ссылку kubeconfig в левом меню, чтобы загрузить конфигурационный файл на локальный компьютер.
Вернитесь в терминал, в переменной среды KUBECONFIG укажите путь к загруженному файлу. Например, если файл загружен в папку Downloads в домашнем каталоге, вы должны ввести эту команду в свой терминал:
export KUBECONFIG=~/Downloads/kubeconfig
После настройки kubectl нужно проверить взаимодействие с кластером.
3: Проверка установки Kubernetes
Теперь у вас есть полностью настроенный кластер с клиентом, попробуйте запустить несколько команд для проверки среды.
Чтобы получить информацию о кластере, выполните следующую команду.
kubectl cluster-info
Kubernetes master is running at https://139.59.17.180:6443
Heapster is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Результат команды подтверждает, что кластер и мастер-ноды Kubernetes запущены и работают.
Теперь давайте проверим работоспособность всех компонентов, запущенных на мастер-нодах. На свежем кластере может пройти некоторое время, прежде чем все компоненты будут запущены. Эти компоненты являются частью мастер-нод Kubernetes, которые управляют рабочими нодами.
Выполните команду:
kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
Запросите список нод кластера Kubernetes:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
spc52y2mk3-master-1 Ready master 29m v1.8.5
spc52y2mk3-worker-1 Ready <none> 22m v1.8.5
spc52y2mk3-worker-2 Ready <none> 22m v1.8.5
Этот вывод говорит, что кластер состоит из одного мастера и одной рабочей ноды и готов к развертыванию приложения.
4: Развертывание приложения
Давайте запустим простой веб-сервер Nginx и попробуем открыть его веб-страницу по умолчанию на локальной машине. Выполните эту команду, чтобы загрузить образ Nginx с Docker Hub и развернуть его под именем myweb:
kubectl run --image=nginx:latest myweb
Эта команда похожа на команду docker run, за исключением того, что она упаковывает и развертывает контейнер в артефакте Kubernetes под названием Pod.
Примечание: Больше о Pods в следующей части этой серии.
Когда вы выполните команду, вы увидите такой вывод:
deployment "myweb" created
Теперь убедитесь, что Pod создается с контейнером nginx:
kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-59d7488cb9-jvnwn 1/1 Running 0 3m
Чтобы получить доступ к веб-серверу внутри Pod, нужно предоставить ему доступ к сети. Для этого введите:
kubectl expose pod myweb-59d7488cb9-jvnwn --port=80 --target-port=80 --type=NodePort
service "myweb-59d7488cb9-jvnwn" exposed
Теперь Pod отображается на каждой ноде кластера по произвольному порту. Флаги –port и –target-port указывают порты, через которые доступен веб-сервер. Флаг –NodePort позволяет использовать для доступа к приложению любую ноду в кластере.
Чтобы узнать NodePort для развертывания myweb, выполните следующую команду.
kubectl get svc myweb-59d7488cb9-jvnwn
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myweb-59d7488cb9-jvnwn NodePort 10.3.0.119 <none> 80:31930/TCP 6m
В данном случае NodePort – 31930. Каждая рабочая нода использует этот порт для обслуживания HTTP-запросов.
Попробуйте с помощью консоли хостинга получить IP-адрес рабочей ноды.
С помощью команды curl отправьте HTTP-запрос одной из нод на порт 31930.
curl http://your_worker_1_ip_address:31930/
В результате команда вернет домашнюю страницу Nginx:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Вы успешно развернули контейнеризованное приложение в кластере Kubernetes.
Tags: Kubernetes