Инструкция по использованию Kubernetes на платформе PS Cloud

Инструкция по использованию Kubernetes на платформе PS Cloud


1.1 Используемые термины


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

Node — нода, узел — виртуальная или физическая машина, содержащая службы, необходимые для оркестрации контейнеров. Обычно в кластере есть несколько узлов. На мастер-узле (master-node, также известном как Control Plane) выполняются основные задачи по управлению и администрированию кластера. Рабочие узлы (worker-node) отвечают за выполнение пользовательской нагрузки.

Кластер — совокупность master-node и worker-node. Кластер создается на основе шаблона кластера.

Шаблон кластера — набор параметров, с которыми будет создаваться кластер.

Механизм оркестровки контейнеров (COE) — оркестратор контейнеров. В нашем случае это kubernetes (еще есть docker swarm, apache mesos, hashicorp nomad). 

Метки — общий метод указания дополнительных параметров, специфичных для определенных COE или связанных с определенными опциями. Формат меток представляет собой пару ключ/значение, и их значение интерпретируется драйверами кластера.

Драйвер кластера — это набор инструкций на python, шаблонов heat, скриптов, снимков и документов для конкретного COE в конкретном дистрибутиве.


1.2 Создание кластера Kubernetes в Консоли.

Шаг 0


  1. Зайдите в свой аккаунт: https://console.ps.kz/account
  2. Выберите услугу «Облачная платформа PS»
  3. Нажмите на название вашего проекта
  4. В главном меню слева выберите раздел «Кластеры Kubernetes»
  5. Нажмите на кнопку «Создать кластер»

Шаг 1

  1. Укажите в поле ввода название кластера (допустимы латинские буквы, цифры, дефис, нижнее подчеркивание и точка) и выберите из выпадающего списка регион размещения.
  2. Если вы предварительно создали необходимый шаблон, нажмите на переключатель «Использовать шаблон»
  3. Выберите версию Kubernetes (на данный момент доступна v1.23.8)
  4. Выберите тип системного диска — быстрый, универсальный или NVME.
  5. Обратите внимание, что при выборе диска NVME кластер будет создаваться на несколько минут дольше из-за копирования образов в NVME-хранилище.
  6. Выберите размер системного диска. Если вам необходимо расширить диск, нажмите на кнопку «Другой». Откроется боковое меню. В поле ввода укажите значение и нажмите на кнопку «Применить»
  7. Нажмите на кнопку «Продолжить»

Шаг 2

  1. Подберите необходимую конфигурацию master-node
  2. Если вы хотите создать несколько master-node, нажмите на переключатель «Включить балансировщик» и выберите ниже количество master-node.
  3. Обратите внимание, что для отказоустойчивости оптимально выбирать нечетное (1, 3, 5, 7) количество master-node. На практике принято конфигурировать 3 master-node для мелких кластеров, 5 — для больших (от 1000 worker-nodes). Чем больше количество master-nodes, тем выше задержки.
  4. Если вам необходимо увеличить количество master-nodes, нажмите на кнопку «Другое количество». Откроется боковое меню. В поле ввода укажите значение и нажмите на кнопку «Применить»
  5. По умолчанию мы рекомендуем нажать на переключатель «Включить плавающий IP для Kubernetes API», иначе ваш кластер будет доступен только во внутренней сети вашего облачного проекта.
  6. Нажмите на кнопку «Продолжить»

Шаг 3

  1. Подберите необходимую конфигурацию worker-node
  2. Выберите количество worker-node. Если вам необходимо увеличить количество worker-nodes, нажмите на кнопку «Другое количество». Откроется боковое меню. В поле ввода укажите значение и нажмите на кнопку «Применить»
  3. Выберите тип диска для раздела Docker — быстрый или NVME-диск.
  4. Выберите размер диска для Docker. Если вам необходимо расширить диск, нажмите на кнопку «Другой размер». Откроется боковое меню. В поле ввода укажите значение и нажмите на кнопку «Применить»
  5. Нажмите на кнопку «Продолжить»

Шаг 4

  1. Подключите кластер к сети.
  2. Вы можете не создавать сеть и не выбирать ни одну из сетей, и тогда при создании кластера появится новая сеть, подключенная к новому маршрутизатору.
  3. Нажмите на кнопку «Добавить сеть». Откроется боковое меню. Если вы предварительно создали сеть, выберите ее по названию из списка.
  4. Обратите внимание, что при создании новой сети вам понадобится также создать новый маршрутизатор.
  5. Для создания новой сети нажмите на кнопку «Создать сеть». Откроется боковое меню
  6. Введите в соответствующее поле название сети
  7. Введите в поле «Подсеть» адрес подсети в формате CIDR
  8. Введите через запятую в поле «Пул адресов» диапазон IP-адресов для пользователей
  9. Введите через запятую в поле «Серверы DNS» адреса серверов DNS
  10. Введите через запятую в поле «Маршруты» правила маршрутизации адресов из одной подсети в другую
  11. По необходимости нажмите на переключатель «Включить DHCP» для автоматического получения IP-адресов и других параметров, необходимых для работы в сети TCP/IP
  12. Нажмите на кнопку «Создать»
  13. Для расширенной настройки сети нажмите на кнопку «DNS». Вы можете использовать DNS-серверы по умолчанию, для этого нажмите на соответствующую кнопку.
  14. Вы можете не создавать новый DNS-сервер и не выбирать значение по умолчанию, тогда вашей сети будет присвоен DNS-сервер от Google: 8.8.8.8.
  15. По необходимости нажмите на кнопку «Добавить новый DNS-сервер» и в поле ввода укажите через запятую IP-адреса DNS-сервера
  16. Нажмите на кнопку «Добавить сервер»
  17. Выберите сетевой драйвер — Calico или Flannel.
  18. Flannel обеспечивает полную сетевую связность между всеми nodes кластера с помощью поднятия мостов на каждом node, но не умеет конфигурировать сетевые политики. Calico позволяет настраивать и применять политики к отдельным pods, контейнерам, nodes, портам, протоколам, подсетям и т.д.
  19. Если вы предварительно создали SSH-ключ выберите его по названию из списка. По необходимости вы можете создать новый SSH-ключ. Нажмите на кнопку «Добавить SSH-ключ». Откроется боковое меню.
  20. Вы можете загрузить свой SSH-ключ. Нажмите на кнопку «Импортировать»
  21. Введите в соответствующее поле имя SSH-ключа
  22. Введите в поле «Публичный ключ» значение публичной части SSH-ключа
  23. Нажмите на кнопку «Импортировать»
  24. Также вы можете сгенерировать новый SSH-ключ. Нажмите на кнопку «Сгенерировать»
  25. Введите в соответствующее поле имя SSH-ключа
  26. Нажмите на кнопку «Сгенерировать». Приватная часть SSH-ключа загрузится автоматически на ваш компьютер.
  27. Нажмите на кнопку «Продолжить»

Шаг 5

  1. Настройте дополнительные параметры кластера.
  2. Нажмите на кнопку настроек справа от надписи «Включить автохилер». Выберите из списка необходимый вариант.
  3. Это решение выполняет периодические проверки работоспособности nodes Kubernetes, поиск неработоспособных экземпляров и запуск замен при необходимости.
  4. Нажмите на кнопку «Сохранить»
  5. Нажмите на кнопку настроек справа от надписи «Тип автохилера». Выберите из списка необходимый вариант.
  6. Magnum-auto-healer — это служба самовосстановления кластеров, которая автоматически восстанавливает неисправный главный или worker-node в кластере Magnum. Draino автоматически опустошает worker-node Kubernetes на основе меток и условий nodes. Draino предназначен для использования вместе с детектором проблем nodes Kubernetes и автоскейлером кластера. Детектор обнаруживает проблемы, Draino перемещает все pods из node, автоскейлер уничтожает пустой node.
  7. Нажмите на кнопку «Сохранить»
  8. Нажмите на кнопку настроек справа от надписи «Тип системного диска». Выберите из списка необходимый вариант. Нажмите на кнопку «Сохранить»
  9. Нажмите на кнопку настроек справа от надписи «Тип ингресс-контроллера». Выберите из списка необходимый вариант.
  10. Ingress — объект API, управляющий внешним доступом к службам в кластере — обычно HTTP. Ingress может обеспечить балансировку нагрузки и маршрутизацию на основе имен. Результат работы Ingress-контроллера — сборка файла конфигурации. Если вы выбрали тип «traefik», то после создания кластера необходимо добавить метку role=ingress на nodes, где должен работать контроллер.
  11. Нажмите на кнопку «Сохранить»
  12. Нажмите на кнопку настроек справа от надписи «Включить auto-scale». Выберите из списка необходимый вариант.
  13. Autoscale автоматически масштабирует рабочую нагрузку, увеличивая и уменьшая количество worker-nodes.
  14. Нажмите на кнопку «Сохранить»
  15. Нажмите на кнопку настроек справа от надписи «Минимальное количество worker-nodes».  Выберите из списка необходимый вариант.
  16. Если создать кластер на несколько worker-nodes со включенным автоскейлером, то при отсутствии нагрузки автоскейлер сократит количество worker-nodes до минимума.
  17. Нажмите на кнопку «Сохранить»
  18. Нажмите на кнопку настроек справа от надписи «Максимальное количество worker-nodes». Выберите из списка необходимый вариант. Нажмите на кнопку «Сохранить»
  19. Для добавления прочих параметров, не предусмотренных в интерфейсе, нажмите на кнопку «Добавить расширенные параметры» и введите через запятую параметры в форме: ключ=значение,ключ2=значение2. Нажмите на кнопку «Добавить»
  20. Нажмите на кнопку «Продолжить»
  21. Проверьте настройки кластера — по необходимости вернитесь для редактирования, нажав на кнопку «Назад».
  22. Нажмите на кнопку «Создать кластер». Вместе с кластером автоматически создается одноименный шаблон.


Шаблоны кластеров создаются аналогичным образом во вкладке «Шаблоны кластера».


Действия с шаблоном кластера:


  1. Перейдите во вкладку «Шаблоны кластера» и нажмите на название шаблона. На этой странице вы можете просмотреть параметры шаблона — по умолчанию и расширенные. Во вкладке «Подключенные кластеры» вы можете просмотреть список всех кластеров, созданных по выбранному шаблону
  2. Нажмите на три точки справа от названия шаблона кластера. Откроется боковое меню.
  3. Для создания кластера по шаблону нажмите на кнопку «Создать кластер на основе шаблона». При создании введите название нового кластера. Вы можете изменить количество master-nodes и worker-nodes, все остальные параметры будут соответствовать созданному шаблону.
  4. Вы можете создать копию шаблона. При создании копии можно изменить все параметры, перечисленные выше, в разделе «Создание кластера»


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


Для создания кластера необходимо создать в Terraform два ресурса: шаблон и кластер по этому шаблону. Параметры, которые можно применить к шаблону, перечислены здесь, и аналогичны возможностям openstack-cli и разделу «Добавить расширенные параметры» в Консоли PS.

Инструкция по созданию или импортированию шаблона кластера, список допустимых аргументов и атрибутов описаны тут.

Инструкция по созданию или импортированию кластера список допустимых аргументов и атрибутов описаны тут.

Инструкция по созданию или импортированию группы nodes, список допустимых аргументов и атрибутов описаны тут.

Ознакомьтесь со списком версий компонентов, поддерживаемых нашим облаком. Обратите внимание, что не все версии совместимы друг с другом. Матрицу совместимостей версий вы можете посмотреть в документации каждого конкретного компонента.

Обратите внимание на метки container_infra_prefix и hyperkube_prefix — они позволяют вам использовать пользовательские префиксы для скачивания и установки компонентов кластера из пользовательских источников (например, из вашего собственного реестра контейнеров). Если вы хотите использовать версии 1.19.x и выше, используйте неофициальные источники, такие как https://www.docker.io/rancher/, https://www.ghcr.io/openstackmagnum/ или наш registry. Если метка container_infra_prefix определена, то она имеет приоритет над меткой hyperkube_prefix.

Обратите внимание, что действующая версия Magnum Xena поддерживает версии kube_tag не выше v1.23.3. в связи с устареванием dockershim и удалением его из версии 1.24, а также изменением политик управления ресурсами. При необходимости вы можете заменить какой-либо компонент в уже существующем кластере, или же полагайтесь на протестированные нами версии, указанные в Консоли.


Рабочий пример представлен ниже:


resource "openstack_containerinfra_clustertemplate_v1" "simple_k8s" {
  name                  = "simple_k8s"
  image                 = "Fedora-Coreos-31-20200323"
  coe                   = "kubernetes"
  flavor                = "d1.ram8cpu4"
  master_flavor         = "d1.ram8cpu4"
  dns_nameserver        = "195.210.46.195"
  docker_storage_driver = "overlay2"
  docker_volume_size    = 100
  volume_driver         = "cinder"
  network_driver        = "calico"
  server_type           = "vm"
  master_lb_enabled     = true
  floating_ip_enabled   = false
  apiserver_port        = 6443
  cluster_distro        = "fedora-coreos"
  external_network_id   = "83554642-6df5-4c7a-bf55-21bc74496109"
  keypair_id            = ""
  labels = {
    boot_volume_size                       = 30
    boot_volume_type                       = "ceph-ssd"
    docker_volume_type                   = "ceph-ssd"
    container_infra_prefix                  = "registry.pscloud.io/pscloudmagnum/"
    hyperkube_prefix                         = "registry.pscloud.io/pscloudmagnum/"
    kube_version                               = "v1.23.8"
    kube_tag                                      = "v1.23.8"
    kube_dashboard_enabled           = "true"
    coredns_tag                                 = "1.9.3"
    etcd_tag                                       = "v3.5.4"
    cinder_csi_plugin_tag                  = "v1.23.4"
    csi_attacher_tag                          = "v3.1.0"
    csi_provisioner_tag                      = "v2.1.2"
    csi_snapshotter_tag                     = "v4.0.0"
    csi_resizer_tag                             = "v1.1.0"
    csi_node_driver_registrar_tag    = "v2.1.0"
    k8s_keystone_auth_tag            = "v1.23.0"
    autoscaler_tag                   = "v1.22.0"
    ingress_controller               = "nginx"
    helm_client_url                  = "https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz"
    helm_client_sha256               = "ff4ac230b73a15d66770a65a037b07e08ccbce6833fbd03a5b84f06464efea45"
    helm_client_tag                  = "v3.3.0"
    container_runtime                = "containerd"
    containerd_version               = "1.5.3"
    containerd_tarball_sha256        = "32a9bf1b7ab2adbd9d2a16b17bf1aa6e61592938655adfb5114c40d527aa9be7"
    auto_healing_enabled             = "true"
    auto_healing_controller          = "draino"
    npd_enabled                      = "true"
    auto_scaling_enabled             = "true"
    cgroup_driver                    = "systemd"
    master_lb_enabled                = "true"
    master_lb_floating_ip_enabled    = "true"
  }
}

resource "openstack_containerinfra_cluster_v1" "terraform_cluster_1" {
  name                        = "terraform_cluster_1"
  cluster_template_id  = openstack_containerinfra_clustertemplate_v1.simple_k8s.id
  master_count           = 3
  node_count              = 5
  keypair                      = ""

}


Помогла ли вам эта информация?
Не можете найти ответ на свой вопрос?
Напишите запрос в службу поддержки
Написать сейчас