VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Кластеры Kubernetes

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

  • Отказоустойчивость.
  • Автоматическое масштабирование.
  • Эффективное распределение трафика с помощью выделенных балансировщиков нагрузки.

Также в контейнерах Kubernetes можно быстро запускать и управлять тестовыми средами и, таким образом, автоматизировать и упростить процессы разработки и тестирования. Преимущества:

  • Быстрое создание большого количества тестовых сред Kubernetes.
  • Снижение затрат на хостинг тестовых сред до 3 раз.
  • Автоматизация процессов CI/CD.
  • Стандартизация разработки в распределенных командах и при работе с аутсорсерами.

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

Создание и запуск кластера осуществляется при помощи Портала самообслуживания. Подробная пошаговая инструкция приведена в Руководстве пользователя Платформы.

Подключение постоянного хранилища

Объекты Persistent Volume и Persistent Volume Claim

Для обеспечения постоянного хранения данных, в Kubernetes существуют следующие виды ресурсов:

  • PersistentVolume (PV) — раздел на жёстком диске, доступном из кластера. Взаимодействие кластера с PV осуществляется так же, как с узлами.
  • PersistentVolumeClaim (PVC) — пользовательский запрос на использование данного диска. Взаимодействие PV с PVC осуществляется так же, как рабочий узел взаимодействует с подами, то есть PVC запрашивает у PV необходимый размер диска и тип доступа — ReadWriteOnce, ReadOnlyMany или ReadWriteMany.

Подключение PV и PVC выполняется автоматически из кластера на основании Storage class, интегрированного с Cinder.

Пример содержания файла конфигурации PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: portal-info-data-pvcspec:  volumeMode: Filesystem  accessModes:    - ReadWriteMany  resources:    requests:      storage: 100Gi  volumeName: "portal-info-data-pv"  storageClassName: ""
Команды создания и просмотра PV и PVC на основании файла конфигурации
kubectl create -f new-pvc.yamlkubectl get pvckubectl get pv | grep new-pvc

Подключение к NFS с помощью Persistent Volume и Persistent Volume Claim

Подробная инструкция по подключению к NFS с помощью Persistent Volume и Persistent Volume Claim приведена в данной инструкции.

Доступ к Kubernetes Dashboard

Kubernetes Dashboard представляет собой графический интерфейс для управления контейнерами Kubernetes.

Установка Kubectl (для контейнеров / Kubernetes)

Локальный клиент для Kubernetes kubectl позволяет использовать команды для кластеров Kubernetes. Можно использовать kubectl для развертывания приложений, проверки ресурсов кластера и управления ими, а также для просмотра журналов.

Чтобы проверить актуальность установленной версии kubectl:

  1. Узнайте номер последней стабильной версии клиента kubectl: например, по ссылке запроса стабильной версии.

  2. Проверьте текущую версию kubectl, чтобы убедиться, что она совместима с версией API сервера кластера:

    kubectl version

Установка выполняется штатными средствами используемой операционной системы (см. официальную документацию).

Подключение kubectl к кластеру Kubernetes

Инструкция по подключению kubectl к кластеру Kubernetes приведена в п. «Подключение к кластеру через Kubectl» Руководства пользователя Платформы.

Настройка доступа к Kubernetes Dashboard

Инструкция по настройке доступа к Kubernetes Dashboard приведена в п. «Подключение к Kubernetes Dashboard» Руководства пользователя Платформы.

Система мониторинга

Система мониторинга Prometheus — опциональное дополнение, которое можно выбрать при установке кластера. Prometheus предоставляет возможности по сбору метрик производительности кластера, формированию запросов и экспорту показателей мониторинга.

Чтобы установить систему мониторинга в кластер в Портале самообслуживания:

  1. В меню слева перейдите в раздел «Контейнеры» на страницу «Кластеры Kubernetes».

  2. При создании кластера в разделе «Предустановленные сервисы» выберите пункт «Мониторинг» (см. рисунок 1).

    Установка сервиса «Мониторинг» в создаваемый кластер Kubernetes

    Рисунок 1 — Установка сервиса «Мониторинг» в создаваемый кластер Kubernetes

    Дождитесь завершения операции.

  3. Скачайте файл конфигурации, чтобы просмотреть созданные ресурсы в пространстве имён prometheus-monitoring:

    1. Выберите кластер.
    2. Нажмите на кнопку «•••» справа от названия кластера и выберите пункт «Получить Kubeconfig для доступа к кластеру».
  4. Выполните со скачанным файлом следующую операцию в kubectl:

    Команда вывода подов мониторинга
    kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml get po,svc,ingress -n prometheus-monitoring
    Пример вывода команды
    NAME                                                          READY   STATUS    RESTARTS   AGEpod/alertmanager-prometheus-alertmanager-0                    2/2     Running   0          8dpod/prometheus-operator-ff9d98748-bgssd                       2/2     Running   0          8dpod/prometheus-operator-grafana-567c7bc9c6-spq4s              2/2     Running   0          8dpod/prometheus-operator-kube-state-metrics-5c7847f9bc-m855b   1/1     Running   0          8dpod/prometheus-operator-prometheus-node-exporter-chlw7        1/1     Running   0          8dpod/prometheus-operator-prometheus-node-exporter-fn9pw        1/1     Running   0          8dpod/prometheus-prometheus-prometheus-0                        3/3     Running   1          8dNAME                                                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGEservice/alertmanager-operated                          ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   8dservice/prometheus-alertmanager                        ClusterIP   10.254.109.80    <none>        9093/TCP                     8dservice/prometheus-operated                            ClusterIP   None             <none>        9090/TCP                     8dservice/prometheus-operator                            ClusterIP   10.254.54.102    <none>        8080/TCP,443/TCP             8dservice/prometheus-operator-grafana                    ClusterIP   10.254.227.161   <none>        80/TCP                       8dservice/prometheus-operator-kube-state-metrics         ClusterIP   10.254.44.179    <none>        8080/TCP                     8dservice/prometheus-operator-prometheus-node-exporter   ClusterIP   10.254.162.159   <none>        9100/TCP                     8dservice/prometheus-prometheus                          ClusterIP   10.254.200.61    <none>        9090/TCP                     8dNAME                                             HOSTS                           ADDRESS        PORTS     AGEingress.extensions/prometheus-alertmanager       alertmanager.rk12.mcs.mail.ru   10.31.129.13   80, 443   8dingress.extensions/prometheus-operator-grafana   grafana.rk12.mcs.mail.ru        10.31.129.13   80, 443   8dingress.extensions/prometheus-prometheus         prometheus.rk12.mcs.mail.ru     10.31.129.13   80, 443   8d

Получение доступа в графический интерфейс Prometheus/Grafana/Alertmanager UI

Чтобы получить доступ к графическому интерфейсу Prometheus/Grafana/Alertmanager UI кластера:

  1. Настройте локальное проксирование запросов:

    kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml proxy
  2. Откройте веб-браузер и перейдите по соответствующему адресу размещения визуального интерфейса:

    • http://localhost:8001/api/v1/namespaces/prometheus-monitoring/services/prometheus-prometheus:9090/proxy
    • http://localhost:8001/api/v1/namespaces/prometheus-monitoring/services/prometheus-operator-grafana:80/proxy
    • http://localhost:8001/api/v1/namespaces/prometheus-monitoring/services/prometheus-alertmanager:9093/proxy

Балансировка нагрузки в кластере Kubernetes

Сервис Ingress Controller — опциональное дополнение, которое можно выбрать при установке кластера. Ingress Controller интегрируется с облачным балансировщиком нагрузки на базе OpenStack Octavia и поддерживает Proxy Protocol.

Чтобы получать запросы из внешних сетей, требуется сопоставить балансировщик нагрузки и Ingress Controller в Портале самообслуживания:

  1. В меню слева перейдите в раздел «Контейнеры» на страницу «Кластеры Kubernetes».

  2. При создании кластера в разделе «Предустановленные сервисы» выберите пункт «Ingress Controller» (см. рисунок 2).

    Установка сервиса «Ingress Controller» в создаваемый кластер Kubernetes

    Рисунок 2 — Установка сервиса «Ingress Controller» в создаваемый кластер Kubernetes

    Дождитесь завершения операции.

  3. В меню слева перейдите в раздел «Виртуальные сети» на страницу «Балансировщики нагрузки». Появится список созданных балансировщиков с именами вида kube_service_<UUID>.

  4. Сопоставьте выбранный балансировщик нагрузки с Ingress Controller внутри кластера по внешнему IP адресу:

    1. Выберите балансировщик.

    2. Нажмите на кнопку «•••» справа от названия кластера и выберите пункт «Назначить внешний IP» (см. рисунок 3).

      Меню назначения внешнего IP балансировщика

      Рисунок 3 — Меню назначения внешнего IP балансировщика
    3. В открывшемся окне выберите требуемый IP-адрес и нажмите на кнопку «Подтвердить» (см. рисунок 4).

    Выбор внешнего IP для балансировщика

    Рисунок 4 — Выбор внешнего IP для балансировщика
  5. Настройте правила балансировки:

    1. Выберите балансировщик, нажав на его имя в списке.

    2. Нажмите на кнопку «Добавить правило».

    3. В открывшемся окне укажите параметры балансировки и сохраните изменения (см. рисунок 5).

      Просмотр информации о балансировщике

      Рисунок 5 — Просмотр информации о балансировщике

Масштабирование кластера Kubernetes

Доступно вертикальное и горизонтальное масштабирование кластера Kubernetes (с настройками автомасштабирования), см. Руководство пользователя Платформы.

Типовые операции с контейнерами

Работа с конфигурациями

Конфигурация позволяет понять, с каким Kubernetes-кластером взаимодействует kubectl. Подробную информацию о структуре конфигурационного файла см. в статье Configure Access to Multiple Clusters.

Чтобы получить объединённые настройки kubeconfig, используйте следующую команду:

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config

Чтобы использовать несколько файлов kubeconfig одновременно и посмотреть объединённую конфигурацию из этих файлов, используйте следующие команды:

KUBECONFIG=~/.kube/kubconfig1:~/.kube/kubconfig2kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config view

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config view -o jsonpath='{.users[?(@.name == "<ЛОГИН_ИНТЕРЕСУЮЩЕГО_ПОЛЬЗОВАТЕЛЯ>")].user.password}'

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config get-contexts

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config current-context

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml config use-context <НАИМЕНОВАНИЕ_КЛАСТЕРА>;

Работа с конфигурациями развёртывания (Deployment)

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

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml create deployment <НАЗВАНИЕ> --image=<НАИМЕНОВАНИЕ_ОБРАЗА_КОНТЕЙНЕРА>

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml describe deployment <НАИМЕНОВАНИЕ_DEPLOYMENT>
Пример описания Deployment в формате YAML
apiVersion: apps/v1kind: Deploymentmetadata:  name: nginxspec:  replicas: 3  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:1.7.9        ports:        - containerPort: 80

В данном примере создаётся три идентичных контейнера с именем nginx на базе образа Nginx версии 1.7.9. Доступ к контейнерам осуществляется по 80-му порту.

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

Чтобы выполнить обновление Deployment, выполните следующую команду:

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml apply -f <НАИМЕНОВАНИЕ_DEPLOYMENT>

Просмотр журналов контейнеров

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml get po -n <НАИМЕНОВАНИЕ_ПРОСТРАНСТВА_ИМЁН>

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

kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml -n <НАИМЕНОВАНИЕ_ПРОСТРАНСТВА_ИМЁН> logs <ИМЯ_КОНТЕЙНЕРА>

Системные контейнеры расположены в пространстве имён kube-system. Наиболее востребованные контейнеры:

  • cluster-autoscaler-* — журнал событий масштабирования контейнеров.
  • openstack-cloud-controller-* — журнал взаимодействия всех компонентов платформы виртуализации (например, с Cinder для создания дисков, с Nova для создания ВМ, Octavia для балансировщиков и так далее).
Пример просмотра журнала cluster-autoscaler-*
kubectl --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml -n kube-system logs cluster-autoscaler-7f754489f8-qxsqf...I1230 08:33:58.952822       1 filter_out_schedulable.go:90] No schedulable podsI1230 08:33:58.952850       1 static_autoscaler.go:334] No unschedulable podsI1230 08:33:58.952877       1 static_autoscaler.go:381] Calculating unneeded nodes....84c14039e967,Unschedulable:false,Taints:[]Taint{Taint{Key:CriticalAddonsOnly,Value:True,Effect:NoSchedule,TimeAdded:<nil>,},Taint{Key:dedicated,Value:master,Effect:NoSchedule,TimeAdded:<nil>,},},ConfigSource:nil,PodCIDRs:[],}...
Пример просмотра журнала openstack-cloud-controller-*
kubectl  --insecure-skip-tls-verify=true --kubeconfig rk12_kubeconfig.yaml -n kube-system logs openstack-cloud-controller-manager-nnrlx...Ensuring load balancer for service ingress-nginx/nginx-ingress-controllerE1222 08:23:53.451038       1 service_controller.go:255] error processing service ingress-nginx/nginx-ingress-controller (will retry): failed to ensure load balancer: there are no available nodes for LoadBalancer service ingress-nginx/nginx-ingress-controllerI1222 08:23:53.451162       1 event.go:255] Event(v1.ObjectReference{Kind:"Service", Namespace:"ingress-nginx", Name:"nginx-ingress-controller", UID:"68bb8ac5-b7f4-4404-94b2-943e7e55ddc9", APIVersion:"v1", ResourceVersion:"953", FieldPath:""}): type: 'Normal' reason: 'EnsuringLoadBalancer' Ensuring load balancer...

Подключение Helm

Helm — менеджер пакетов для Kubernetes, который используется для быстрой установки сложных приложений, таких как CRM, e-commerce, БД и прочие.

Helm доступен в созданных кластерах по умолчанию.

Persistent volumes и StatefulSet

StatefulSet — это удобный способ работы со Stateful-приложениями, которым требуется обрабатывать события об остановке работы Pod и осуществления Graceful Shutdown. Обычно, такие приложения — это базы данных и очереди сообщений, которые работают в нескольких экземплярах, синхронизируемых друг с другом посредством репликации или кластеризации.

Существует несколько способов организации таких схем: с использованием общих Persistent Volumes (RWX) и с помощью индивидуальных Persistent Volumes (RWO). Подробности см. в данной инструкции.