База знаний

Список статей
Наверх

Kubernetes в VPC

Kubernetes в VPC помогает управлять кластерами серверов сервиса Виртуальное приватное облако. Использование Kubernetes в VPC в проектах с большим количеством приложений, запускаемых в виде контейнеров, упрощает процесс развертывания, масштабирования и обслуживания контейнерной инфраструктуры.

Сервис Виртуальное приватное облако построен на базе OpenStack. Приватные кластеры Kubernetes требуемой конфигурации создаются при помощи компонента OpenStack Magnum.

В качестве нод кластера используются виртуальные машины. Конфигурация кластера может быть выполнена как через интерфейс панели управления, так и через API.

image

Глоссарий

Термин

Определение

Диск ETCD

Диск, содержащий все данные кластера

Диск Docker

Диск для временных данных контейнеров Docker

Драйвер сети Kubernetes

Механизм, обеспечивающий сетевую связность подов кластера

Драйвер диска Docker

Механизм, обеспечивающий хранение данных контейнеров Docker

Ingress-controller

Ingress - это механизм, обеспечивающий маршрутизацию трафика на уровне приложения (L7), предоставляемый через Ingress-controller
(в Selectel используется
traefik)

Kubectl

Консольный клиент Kubernetes

Создание кластера Kubernetes

Тип всех дисков выбирается при создании кластера. Подробнее об используемых типах дисков читайте в разделе Ресурсы.

В существующем проекте VPC можно создать два независимых друг от друга кластера Kubernetes.

Примечание: конфигурацию нод после создания кластера нельзя менять, можно изменять их количество.

Для создания кластера Kubernetes в существующем проекте VPC:

  1. В панели управления перейдите в карточку проекта на вкладку Kubernetes.

  2. Нажмите кнопку Создать кластер.

  3. Выберите локацию, указав Регион и Зону.

  4. При необходимости можно изменить сгенерированное по умолчанию Имя кластера.

  5. Задайте количество ресурсов для Мастер-ноды и для Ноды.

  6. Введите SSH-ключ.

  7. При необходимости можно добавить дополнительные диски и указать дополнительные параметры, развернув блок Диски и дополнительные параметры:

    1. для добавления дополнительного диска укажите его тип и размер;

    2. также можно добавить функцию создания плавающего IP для каждой ноды.

  8. Нажмите кнопку Создать.

Будет создан готовый к работе кластер Kubernetes в статусе CREATE_COMPLETE.

В списке кластеров на вкладке Kubernetes можно:

  • удалить весь кластер;

  • масштабировать его, увеличив или уменьшив количество нод.

Балансировщик нагрузки

При создании двух и более мастер-нод для доступа к Kubernetes API будет подключен внешний балансировщик нагрузки.

image

Вы также можете создавать сервис с типом LoadBalancer внутри кластера Kubernetes. В этом случае в проекте будет создан балансировщик нагрузки, который автоматически подключится к кластеру.

Диски и дополнительные параметры

Для добавления дополнительного диска необходимо указать его тип и размер. Подробнее о дисках docker читайте в официальной документации.

При необходимости можно добавить плавающий IP для каждой ноды на этапе создания кластера. После создания кластера отказаться от плавающего IP будет нельзя.

Начало работы с Kubernetes CLI

Для получения доступа к кластеру Kubernetes скачайте конфигурационный файл config.yaml, нажав кнопку Скачать config.yaml на вкладке Доступ в карточке созданного кластера.

Экспортируйте переменную окружения KUBECONFIG, которая будет содержать путь к этому файлу:

export KUBECONFIG=~/config.yaml

Скачайте и установите консольный клиент kubectlИнструкцию по установке можно найти в официальной документации.

После запуска kubectl для просмотра статус объектов кластера Kubernetes введите:

kubectl get nodes                                                                                                                                                      366ms Tue Sep 11 11:27:18 2018
NAME                                STATUS ROLES AGE VERSION
k8s-cluster-y7x4r3ga2u3b-minion-0   Ready <none> 24d v1.11.1
k8s-cluster-y7x4r3ga2u3b-minion-1   Ready <none> 24d v1.11.1

Управлять созданным кластером можно через все доступные опции kubectl, описанные в официальной документации.

Работа с Kubernetes Dashboard и Grafana

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

Найдите соответствующий объект типа “Secret”, введя команду:

kubectl get secret --namespace=kube-system | grep "admin-token"
admin-user-token-*****  kubernetes.io/service-account-token 3    8sD"

Для того чтобы просмотреть значение токена у найденного объекта “Secret” с именем admin-user-token-***** введите:

kubectl describe secret admin-token-***** --namespace=kube-system | grep "token:"
token:      XXXXXX...

В ответ будет выведено значение токена.

Для того чтобы открыть веб-интерфейс управления кластером Kubernetes откройте консольный клиент kubectl. Для запуска локального proxy введите:

kubectl proxy

Для перехода в интерфейс управления кластером откройте в браузере следующую ссылку:

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:https/proxy/ 

Откроется окно аутентификации в панели управления.

image

Укажите токен, полученный ранее. После аутентификации панель управления Kubernetes Dashboard готова к работе.

image

Получить доступ к Grafana с того устройства, на котором установлен Kubelet, можно при помощи механизма port-forward. Для этого потребуется имя Pod с Grafana, которое можно узнать следующим образом (имя будет уникальным в каждом кластере Kubernetes):

kubectl get pods -n monitoring -l app=grafana

NAME                                           READY   STATUS    RESTARTS   AGE
prometheus-operator-grafana-xxx   2/2     Running   0          14h

Для локального доступа к Grafana введите команду:

kubectl port-forward -n monitoring prometheus-operator-grafana-xxx 3000

После этого Grafana станет доступна по адресу:

http://127.0.0.1:3000

Можно использовать логин/пароль admin/admin, Grafana предложит изменить стандартный пароль на новый при первом входе.

После аутентификации откроется интерфейс Grafana.

image

Запуск приложения в кластере Kubernetes

Для запуска простого приложения создайте его описание в формате YAML:

# nginx-basic.yaml
apiVersion: v1
kind: Pod
metadata:
 name: nginx
spec:
 containers:
 - name: nginx
   image: library/nginx:1.14-alpine
   ports:
   - containerPort: 80

Запустите консольный клиент kubectl:

kubectl create \
 -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/pods/nginx-basic.yaml

Для проверки состояния запущенного пода с nginx введите:

kubectl get pod nginx                                                                                                                                              148ms Tue Sep 11 11:41:40 2018
NAME      READY  STATUS    RESTARTS AGE
nginx     1/1    Running   0        14s

Подробнее об управлении объектами в minion-подах и как создать кластер без веб-интерфейса читайте в нашей статье.

Часто задаваемые вопросы

Какие версии Kuberentes доступны?

В настоящее время мы предоставляем последние версии релизов v1.10, v1.11, v1.12, v1.13.

Список актуальных версий можно получить и через API. В качестве значения REGION необходимо подставить регион, в котором планируется создать кластер (ru-1, ru-2 или ru-3):

curl -XGET https://api.REGION.selvpc.ru/container-infra-extra/v1/capabilities

Доступна ли конфигурация с несколькими мастер-нодами?

Да, вы можете указать количество мастер-нод при создании кластера. При такой конфигурации будет автоматически создан балансировщик нагрузки. Базы данных ETCD будут развернуты на каждой из мастер-нод.

Можно ли изменять количество нод после создания кластера?

Вы можете увеличивать и уменьшать количество нод через панель управления и API.

Количество мастер-нод в настоящее время можно указать только при создании кластера и нельзя изменить после.

Какие описания StorageClass можно использовать?

Можно использовать StorageClass для OpenStack Cinder (документация).

Сейчас при создании кластера у вас уже будет автоматически создан StorageClass, соответствующий выбранной зоне и типу диска кластера.

Поддерживаются ли Service с Kind=LoadBalancer?

Да, вы можете использовать Service с типом LoadBalancer.

В качестве сервиса балансировки нагрузки мы предоставляем OpenStack Octavia.

Поддерживаются ли Service с Kind=Ingress?

Вы можете использовать любой Ingress Controller для создания сервисов Ingress.

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

Обратите внимание, что в случае автоматического создания Traefik Ingress Controller, для него в кластере будет дополнительно запущен балансировщик нагрузки.

Какая сетевая модель используется в кластерах?

В настоящее время мы предоставляем кластеры с Flannel. В качестве типа конфигурации Flannel используется host-gw.

В будущем мы планируем добавить Calico и сделать возможным выбор между Calico и Flannel при создании кластеров.

Обновляются ли доступные версии Kubernetes и как часто?

Мы стараемся предоставлять последние стабильные релизы Kubernetes.

В настоящее время у нас нет точного расписания доступности версий.

Можно ли через VPC OpenStack API обновить версию запущенного кластера?

Нет, эту операцию нужно выполнять утилитами внутри кластера. После перехода на новую версию некоторые операции с кластером через OpenStack API могут выполняться нестабильно.

Поддерживается ли Metrics-server и HorizontalPodAutoscalers?

Да, в кластере автоматически устанавливается Metrics-Server и для автоматического скейлинга количества экземпляров своих приложений можно использовать механизм Horizontal Pod Autoscaler.

Можно ли использовать Istio service mesh?

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

Для установки вам потребуется воспользоваться официальной документацией.

При настройке Istio требуется учесть, что в качестве сервиса балансировки нагрузки мы предоставляем OpenStack Octavia (документация пользователя Octavia).

Можно ли повлиять на выбор внешнего IP-адреса для сервисов LoadBalancer?

В настоящее время сервисы LoadBalancer работают через OpenStack Octavia. 

Взаимодействие с данным сервисом происходит через открытый компонент https://github.com/kubernetes/cloud-provider-openstack

К сожалению, в настоящее время через него нельзя указать публичную подсеть, из которой будет назначен внешний IP.