Кластеры Kubernetes#

Общая информация#

Kubernetes был задуман корпорацией Google, как платформа контейнерной оркестрации с открытым исходным кодом для развёртывания, масштабирования и управления контейнерными приложениями. Платформа стала общепринятым стандартом контейнерной оркестрации и флагманским проектом Фонда развития облачных вычислений, который поддержали Google, AWS, Microsoft, IBM, Intel, Cisco и Red Hat.

Создавая уровень абстракции поверх группы экземпляров в К2 Облаке, Kubernetes позволяет легко внедрять и использовать приложения, построенные с использованием микросервисной архитектуры. Более подробно познакомиться с Kubernetes можно в нашем блоге и на официальном сайте.

Глоссарий#

Кластер — основной элемент Kubernetes. В К2 Облаке поддерживаются две версии кластеров Kubernetes с различной архитектурой: EKS-кластеры с новой архитектурой включают мастер-узлы и Ingress-контроллеры, группы рабочих узлов создаются отдельно; в случае же предыдущей версии кластеров Kubernetes рабочие узлы являются частью кластера.

Мастер-узел — управляющий (control-plane) узел кластера, на котором размещаются служебные приложения, необходимые для работы кластера.

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

Группа рабочих узлов — группа вычислительных узлов, которыми управляет EKS-кластер. Число узлов в группе может динамически меняться в зависимости от нагрузки. Для создания групп рабочих узлов используется сервис Auto Scaling.

Под (Pod) — совокупность контейнеров с общей сетью, одним IP-адресом и другими общими характеристиками (общие хранилища данных, метки).

Метки рабочих узлов — пары ключ-значение, которые присваиваются рабочим узлам. Они аналогичны тегам, но определяются в парадигме Kubernetes API. С помощью меток, например, можно указать, как используются узлы (среда, релиз и т.п.).

Taint-политики — политики ограничений (taints) применяются ко всем рабочим узлам в группе и запрещают планировщику размещать на этих узлах поды, если у них нет соответствующих разрешений.

Кластеры Kubernetes в К2 Облаке#

Эффективно распределяя трафик и масштабируя кластеры в безопасной и устойчивой инфраструктуре облака, вы можете быстро запускать контейнеризованные приложения, интегрированные с сервисами К2 Облака, а также управлять группами безопасности, связывать кластеры Kubernetes с существующими экземплярами, использовать объектное хранилище и настраивать VPN-соединения между вашей инфраструктурой и кластерами Kubernetes.

Вы можете управлять сервисом через веб-интерфейс или с помощью API.

Примечание

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

В К2 Облаке поддерживаются следующие версии Kubernetes:

  • 1.30.2;

  • 1.29.4;

  • 1.28.9;

  • 1.27.3;

  • 1.26.6;

  • 1.25.11.

Сервис Кластеры Kubernetes предоставляет возможность установки в кластере дополнительных сервисов:

  • Ingress-контроллер можно использовать для маршрутизации запросов, поступающих извне к сервисам, развёрнутым в Kubernetes.

  • EBS-провайдер позволяет Kubernetes управлять дисками в К2 Облаке и использовать их в качестве Persistent Volumes.

  • Docker Registry настроен для использования в кластере Kubernetes. В Docker Registry можно хранить образы контейнеров для последующего развёртывания в Kubernetes.

Для чего подойдет сервис Кластеры Kubernetes?

  • Для быстро развёртываемых и масштабируемых стендов для разработчиков.

  • Для сред с большим количеством изменений и релизов.

  • При плавающей нагрузке в зависимости от количества пользователей.

  • Если важен Time to market.

  • Для приложений с микросервисной архитектурой.

Перед началом работы#

Для работы с сервисом Кластеры Kubernetes пользователь должен иметь проектные привилегии EKSFullAccess. Такие привилегии есть, например, у администраторов в группе CloudAdministrators. При необходимости вы можете создать отдельного пользователя, добавить его в проект и назначить ему политику EKSFullAccess или включить в группу администраторов облака в этом проекте.

Кроме того, в проекте должны иметься следующие ресурсы:

Если вам нужен EBS-провайдер, в разделе IAM создайте пользователя, добавьте его в проект и назначьте ему политику EKSCSIPolicy.

Управление кластером Kubernetes#

Для работы с кластером Kubernetes вы можете использовать любые привычные инструменты: командную строку kubectl или Draft, Helm, Terraform и т.д. В официальной документации Kubernetes вы можете ознакомиться со всеми возможностями, доступными для управления кластерами.

Чтобы начать работу с кластером напрямую из мастер-узла, вручную подключитесь к нему через SSH и выполните следующие действия:

  1. Установите переменную окружения KUBECONFIG:

    export KUBECONFIG=/root/.kube/config
    
  2. Запустите прокси-сервер:

    kubectl proxy &
    

Управление кластером Kubernetes с помощью kubectl#

Важно

Для предоставления доступа к API-серверу кластера необходимо открыть доступ через порт 6443.

Для управления кластером установите kubectl на свой локальный компьютер, выполнив следующие команды:

  1. Скачайте и установите клиент kubectl:

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.25.0/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    kubectl version --client #команда для проверки установки
    
    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.25.0/bin/windows/amd64/kubectl.exe
    
    Переместите исполняемый файл в директорию из переменной окружения PATH и проверьте результат установки kubectl:
    
    kubectl version --client
    
    Docker Desktop for Windows добавляет собственную версию kubectl в переменную окружения PATH.
    Проверьте наличие Docker Desktop на локальном компьютере.
    Если он установлен, вам необходимо поместить путь к установленному двоичному файлу перед записью, добавленной установщиком Docker Desktop, или удалить kubectl, который устанавливается вместе с Docker Desktop.
    
  2. Загрузите его конфигурацию из облачной консоли на локальный компьютер.

  3. Установите переменную локального окружения:

    export KUBECONFIG=<config-file>
    
    set KUBECONFIG=<config-file>
    
  4. Запустите прокси-сервер:

    kubectl proxy &
    

Режим «Отказоустойчивый кластер»#

В данном режиме кластер запускается в конфигурации с тремя мастер-узлами. Мастер-узлы кластера Kubernetes могут быть развёрнуты в трёх зонах доступности или группе размещения в рамках одной зоны доступности. Распределение между несколькими физическими вычислительными узлами позволяет сохранить работоспособность кластера при отказе одного мастер-узла.

Если к отказавшему узлу был привязан Elastic IP, он будет переназначен на работоспособный мастер-узел.

Ограничения на использование#

По умолчанию для кластеров Kubernetes выделяются следующие квоты:

  • 5 кластеров Kubernetes суммарно в одном проекте независимо от типа;

  • 5 групп рабочих узлов для EKS-кластеров в одном проекте (квота на группы рабочих узлов выделяется в рамках квоты на Auto Scaling).

Квоты на остальные ресурсы выделяются в рамках общих квот на облачные ресурсы (экземпляры, диски и т.п.). При необходимости вы можете расширить квоты — для этого обратитесь в службу поддержки.