Начало работы с 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: