Установка#

Установка DropApp#

Все шаги, приведенные в этой инструкции, описывают последовательность действий для установки DropApp на операционные системы Platform V SberLinux OS Server и/или Platform V SberLinux OS Core, а так же «РЕД ОС» с помощью утилиты Dactl.

Подготовка машин для кластера#

Высокодоступная конфигурация#

Для высокодоступной конфигурации потребуется:

  • 3 control plane машины:

    Минимальная конфигурация Control plane node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    4 (с поддержкой VT*)

    ОЗУ [RAM]

    8192 Мб

    Размер диска [HDD/SSD]

    15 Гб

    Рекомендуемая конфигурация Control plane node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    8 (с поддержкой VT*)

    ОЗУ [RAM]

    16000 Мб

    Размер диска [HDD/SSD]

    50 Гб

  • 2 worker машины:

    Минимальная конфигурация worker node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    4 (с поддержкой VT*)

    ОЗУ [RAM]

    8192 Мб

    Размер диска [HDD/SSD]

    30 Гб

    Рекомендуемая конфигурация worker node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    8 (с поддержкой VT*)

    ОЗУ [RAM]

    16000 Мб

    Размер диска [HDD/SSD]

    100 Гб

Минимальная конфигурация#

Для минимальной конфигурации потребуется 1 control plane машина и 2 worker машины.

Дополнительные настройки для каждой машины#

На каждой машине:

  • создайте пользователя dapp;

  • поместите публичный ключ ~/.ssh/id_dapp.pub в домашний каталог;

  • предоставьте пользователю права на использование команды sudo без пароля;

  • обеспечьте доступ к необходимой сети и IP-адрес каждой машине, доступный с машины администратора.

Остальные настройки обеспечит Dactl.

Создание SSH-ключа#

Сгенерируйте пару SSH-ключей, используя команду ssh-keygen.

Пример с использованием типа RSA#

Для генерации SSH-ключей с использованием типа RSA и длиной не менее 4096 бит используйте команду:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_dapp
Пример с использованием типа Ed25519#

Для генерации SSH-ключей с использованием типа Ed25519 используйте команду:

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_dapp
Используемые в примерах опции#

Используемые в примерах опции:

-t - тип ключа, например rsa или ed25519; -b - длина ключа (для RSA рекомендуется 4096 бит); -C - комментарий, обычно email; -f - путь и имя файла для сохранения ключей.

Формирование конфигурационного файла DropAppConfiguration#

Перед формированием конфигурационного файла DropAppConfiguration для Dactl, убедитесь в наличии:

  • реестра с образами контейнеров K8S-2.2.3-fstec-58-distrib.zip, созданного в разделе «Подготовка окружения»;

  • сертификат для реестра, созданного в разделе «Подготовка окружения»;

  • репозиторий с RPM-пакетами K8S-2.2.3-fstec-58-distrib.zip, например http://my-rpm-repo.com/dapp/2.2.3-fstec;

  • репозиторий с RPM-пакетами Platform V SberLinux OS Server, например http://my-rpm-repo.com/SLO/9.1-fstec, в этом репозитории есть зависимости для K8S-2.2.3-fstec-58-distrib.zip;

  • машины с пользователем dapp.

Создайте конфигурационный файл da.yaml:

da.yaml
apiVersion: config.dropapp.ru/v1alpha1
kind: DropAppConfiguration
metadata:
  name: "fstec-cluster"
spec:
  network:
      publicDomain: domain.ru
      metallb:
        pools:
        - addresses: "00.00.00.32/32"
          name: "dapp"
          l2Advertisement: true
  artifacts:
    imageRegistry:
      host: harbor.registry.domain.ru
      path: dapp # 2.2.3-fstec используется автоматически
      credentials: ZEh...Q== # токен аутентификации в base64, в нашем примере это echo -n 'robot$dapp-guest:<robot-dapp-guest-name>' | base64 -w0 | base64 -w0
      certificate: <cert-part>... # это значение можно получить из regisrtry кластера командой: kubectl get secret ingress-tls -n dapp-security -o jsonpath="{.data['tls\.crt']}"
    rpmRepository:
      - name: "dapp-2.2.3-fstec"
        baseUrl: http://my-rpm-repo.com/dapp/2.2.3-fstec
        gpgCheck: 1
        enabled: 1
        gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
      - name: "slo-baseos-9.1-fstec"
        baseUrl: http://my-rpm-repo.com/SLO/9.1-fstec
        gpgCheck: 1
        enabled: 1
        gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
  compute:
    sshAccess:
      user: dapp
      privateKeyPath: "~/.ssh/id_dapp"
    userProvisioned:
      nodes:
        # Для высокодоступной конфигурации впишите еще 2 control-plane'а в список controlPlane
        controlPlane:
          - ip: "00.00.00.41"
            nodePool: "control-plane"
        worker:
          - ip: "00.00.00.51"
            nodePool: "worker"
          - ip: "00.00.00.52"
            nodePool: "worker"
  k8s:
    podSubnetCIDR: 00.000.0.0/16 # можно настроить сеть для подов
    serviceSubnetCIDR: 00.00.0.1/16 # можно настроить сеть для сервисов
  
    # если необходимо, настраиваем ingressTLS, если не указан, то будет сгенерирован автоматически
    ingressTLS:
      cert: <ingressTLS-cert>...
      key: <ingressTLS-key>...
  
    # настраиваем аудит для kube-apiserver
    apiServer:
      extraArgs:
        audit-policy-file: "/etc/kubernetes/policies/audit-policy.yaml"
        audit-log-path: "/var/log/kubernetes/audit.log"
        audit-log-format: "json"
        audit-log-maxbackup: "5"
        audit-log-maxsize: "128"
        audit-log-maxage: "7"
        audit-log-mode: "batch"
      extraVolumes:
      - name: policies
        hostPath: /etc/kubernetes/policies
        mountPath: /etc/kubernetes/policies
      - name: kube-audit
        hostPath: /var/log/kubernetes
        mountPath: /var/log/kubernetes
  
  # подключение LDAP каталога
  components:
  - name: auth
    tools:
    - name: dex
      values:
        config:
          connectors:
          - type: ldap
            name: Ipa Server
            id: ldap
            config:
              bindDN: uid=dapp-sync-svc,cn=users,cn=accounts,dc=dapp,dc=un,dc=sbt
              bindPW: qwerty12345
              groupSearch:
                baseDN: cn=groups,cn=accounts,dc=dapp,dc=un,dc=sbt
                filter: (objectClass=groupOfNames)
                nameAttr: cn
                userMatchers:
                - groupAttr: member
                  userAttr: DN
              host: freeipa.fstec.domain.ru:636
              insecureNoSSL: false
              insecureSkipVerify: true
              userSearch:
                baseDN: cn=users,cn=accounts,dc=dapp,dc=un,dc=sbt
                emailAttr: mail
                filter: (objectClass=person)
                idAttr: DN
                nameAttr: uid
                preferredUsernameAttr: uid
                username: uid
            usernamePrompt: 'Username:'

Запуск установки кластера#

Для установки кластера выполните команду:

./dactl create cluster --config ./da.yaml

В конце установки появится сообщение:

======================================

Done! DropApp cluster with name 'fstec-cluster' and version '2.2.3-fstec' is successfully installed!

Next steps are:
 - Cluster config is stored to this machine as /home/dapp/.dropapp/fstec-cluster/kubeconfig
   you may need to export this path to the KUBECONFIG environment variable
   or copy it as '~/.kube/config'
   otherwise use it as --kubeconfig parameter value for kubectl or dactl commands
 - Check pods and nodes by executing `kubectl get pods -A; kubectl get nodes`
 - Check installed Platform V DropApp components by executing `kubectl get components -o wide`
 - Check installed Platform V DropApp tools by executing `kubectl get tools -o wide`
 - Visit Platform V DropApp UI: https://console.fstec-cluster.domain.ru
   login: kubeadmin
   password is stored in: /home/dapp/.dropapp/fstec-cluster/kubeadmin-password

Описание установленного кластера#

Артефакты установки#

По выполнению установки артефактами являются:

  • конфигурационный файл кластера: /home/dapp/.dropapp/fstec-cluster/kubeconfig

  • суперадмин kubeadmin, пароль для учетной записи в файле /home/dapp/.dropapp/fstec-cluster/kubeadmin-password, этот пароль можно использовать для доступа в пользовательскую консоль по адресу из примера https://console.fstec-cluster.domain.ru

Установленные компоненты#

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

kubectl get components -o wide

Вывод команды покажет список установленных по умолчанию компонентов:

NAME                 STATUS    AGE     DAPP VERSION   TOOLS
auth                 success   2m21s   2.2.3-fstec    role-model, dex
cert-management      success   3m57s   2.2.3-fstec    cert-manager
cni                  success   5m      2.2.3-fstec    cilium
ingress-controller   success   3m2s    2.2.3-fstec    ingress-nginx
load-balancer        success   4m45s   2.2.3-fstec    metallb
ui    

Установленные инструменты#

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

kubectl get tools -o wide

Вывод команды покажет список установленных по умолчанию инструментов и их версии:

NAME            STATUS    RETRY   AGE     VERSION       DAPP VERSION   COMPONENT
cert-manager    success   1       4m18s   v1.14.7       2.2.3-fstec    cert-management
cilium          success   0       5m22s   1.14.12       2.2.3-fstec    cni
console         success   2       2m11s   4.12.0        2.2.3-fstec    ui
dex             success   0       2m33s   2.41.1        2.2.3-fstec    auth
ingress-nginx   success   0       3m23s   1.9.6         2.2.3-fstec    ingress-controller
metallb         success   0       5m7s    v0.14.5       2.2.3-fstec    load-balancer
role-model      success   0       2m43s   2.2.3-fstec   2.2.3-fstec    auth

Установка компонентов реализующих функции безопасности#

Установка Alerting#

Компонент Alerting устанавливает инструмент Alertmanager, который отвечает за отправку уведомлений настроенных событий кластера по адресатам настроенным для Alertmanager.

  1. Создайте файл component-alerting.yaml:

    component-alerting.yaml
    component-alerting.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: alerting
    
  2. Примените файл:

    kubectl apply -f component-alerting.yaml
    
  3. Дождитесь статуса success для инструмента Alertmanager:

    kubectl get tool alertmanager
    
    NAME           STATUS    AGE   COMPONENT
    alertmanager   success   9s    alerting
    
  4. Ресурсы Alertmanager созданы автоматически в namespace dapp-alerting, проверьте pods:

    kubectl get all -n dapp-alerting
    
    NAME                 READY   STATUS    RESTARTS   AGE
    pod/alertmanager-0   2/2     Running   0          66s
    
    NAME                            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/alertmanager            ClusterIP   00.00.00.000   <none>        9093/TCP   66s
    service/alertmanager-headless   ClusterIP   None           <none>        9093/TCP   66s
    
    NAME                            READY   AGE
    statefulset.apps/alertmanager   1/1     66s
    

Установка Logging#

Компонент Logging устанавливает инструменты Loki, Promtail и Grafana, которые реализуют функции безопасности и аудита в кластере. Grafana получает преднастроенные панели (dashboards) для анализа log-файлов и аудита кластера.

  1. Создайте файл component-logging.yaml:

    component-logging.yaml
    component-logging.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: logging
    
  2. Примените файл:

    kubectl apply -f component-logging.yaml
    
  3. Дождитесь статуса success для инструментов Loki, Promtail и Grafana:

    kubectl get tools -o wide | grep logging
    grafana         success   0       14s     10.4.5        2.2.3-fstec    logging
    loki            success   0       34s     2.8.10        2.2.3-fstec    logging
    promtail        success   0       24s     2.8.10        2.2.3-fstec    logging
    
  4. Ресурсы Logging созданы автоматически в namespace dapp-logging, проверьте pods:

    kubectl get pods -n dapp-logging
    NAME                       READY   STATUS    RESTARTS   AGE
    grafana-76c9948779-dj6br   1/1     Running   0          54s
    loki-0                     1/1     Running   0          75s
    promtail-cww9x             1/1     Running   0          66s
    promtail-k7gb4             1/1     Running   0          66s
    promtail-w9524             1/1     Running   0          66s
    

Доступ в Grafana#

Grafana доступна по адресу https://grafana.fstec-cluster.domain.ru. Он формируется из файла конфигурации DroppAppConfiguration: https://grafana.<cluster-name>.<domain-name>, где:

  • <cluster-name> - имя кластера, формируется из поля name раздела metadata;

  • <domain-name> - имя домена, формируется из поля publicDomain раздела spec.

Доступ в Grafana происходит через LDAP-каталог, который настраивается при установке кластера. По ролевой модели администратором Grafana должен быть LDAP-пользователь с ролью grafana-admin.

Панели аудита будут доступны по адресу https://grafana.fstec-cluster.domain.ru/dashboards.

Установка Security#

Компонент Security устанавливает инструменты Gatekeeper, Connaisseur и Trivy-operator, которые реализуют функции безопасности настроек в кластере.

  1. Создайте secret с именем dapp-registry для Trivy-operator для доступа к базе данных Trivy, укажите логин и пароль robot-аккаунта для harbor.registry.domain.ru, реестр из примера, настроенный в конфигурации DropApp:

    kubectl create secret docker-registry dapp-registry -n dapp-security --docker-server=harbor.registry.domain.ru --docker-username=robot\$dapp+dapp-guest --docker-password=<docker-password>
    
  2. Создайте файл component-security.yaml, укажите в нем логин и пароль для реестра, в котором лежит база данных Trivy:

    component-security.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: security
    spec:
      tools:
        - name: trivy-operator
          values:
            operator:
              privateRegistryScanSecretsNames:
                dapp-security: dapp-registry
            trivy:
              dbRepositoryPassword: <robot-dapp-guest-password>
              dbRepositoryUsername: <robot-dapp-guest-name> # dbRepositoryUsername это robot account которого создали в основном реестре Harbor
    
  3. Примените файл:

    kubectl apply -f component-security.yaml
    
  4. Дождитесь статуса success для инструментов Trivy-operator, Connaisseur, Gatekeeper:

    kubectl get tools -o wide | grep security
    connaisseur                  success   0       39m    3.4.0         2.2.3-fstec    security
    gatekeeper                   success   0       40m    v3.16.3       2.2.3-fstec    security
    trivy-operator               success   0       39m    0.18.5        2.2.3-fstec    security
    
  5. Ресурсы Security созданы автоматически в namespace dapp-security, проверьте pods:

    kubectl get pods -n dapp-security
    NAME                                             READY   STATUS      RESTARTS      AGE
    connaisseur-6fbd79789-9zfdv                      1/1     Running     0             42m
    connaisseur-6fbd79789-nxkhj                      1/1     Running     0             42m
    connaisseur-redis-74796c57c4-gkgxz               1/1     Running     0             42m
    gatekeeper-audit-7565f7dc86-f55nj                1/1     Running     0             43m
    gatekeeper-controller-manager-6566c97597-l99kn   1/1     Running     0             43m
    gatekeeper-controller-manager-6566c97597-xt6sh   1/1     Running     0             43m
    trivy-operator-5fb6f66df4-d7pv2                  1/1     Running     0             42m
    

Использование постоянного хранилища#

После установки кластера и компонентов Logging, Alerting, Security, инструменты Loki, Grafana, AlertManager разворачивается с использованием томов EmptyDir. Для промышленной эксплуатации необходимо переконфигурировать их на использование постоянных томов - Persistent Volumes. В результате создания кластера с утилитой Dactl по умолчанию создается StorageClass local-storage.

Для этого необходимо:

  1. Установить и настроить StorageProvider. В составе DropApp используется Trident, при необходимости можно использовать иной адаптер.

  2. Зарегистрировать StorageClass - в результате создания кластера с утилитой Dactl по умолчанию создается StorageClass local-storage.

  3. Настроить Persistent Volume Claims для использования StorageClass Persistent Volumes.

Настройка постоянного хранилища для Logging#

  1. Создайте файл logging-persistence.yaml и настройте persistence для Loki и Grafana:

    logging-persistence.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: logging
    spec:
      tools:
      - name: loki
        values:
          singleBinary:
            persistence:
              enabled: true
              size: 10Gi
              storageClass: openebs-hostpath # openebs тут как пример
            extraVolumes:
              - name: loki-alerting-rules
                configMap:
                  name: loki-alerting-rules
              - name: loki-rules-generated
                emptyDir: {}
            extraVolumeMounts:
            - name: loki-alerting-rules
              mountPath: /var/loki/rules/fake
          # Установка периода хранения log-файлов
          loki:
            limits_config:
              max_query_lookback: 168h   # 7 days
      - name: grafana
        values:
          persistence:
            enabled: true
            type: pvc
            storageClassName: openebs-hostpath # openebs тут как пример
            size: 1Gi
    

    Примечание

    Просто обновить конфигурацию не получится, так как Kubernetes не позволяет обновлять разделы volume для StatefulSet, поэтому нужно удалить компонент Logging.

  2. Удалите компонент Logging:

    kubectl delete component logging
    
  3. Пересоздайте ресурсы конфигурационного файла с персистентным хранилищем, применив манифест:

    kubectl apply -f ./logging-persistence.yaml
    

Ресурсы компонента Logging будут пересозданы.

При необходимости изменения конфигурации инструментов Logging, можно сделать манифест конкретного инструмента. Например, изменение периода хранения log-файлов для Loki.

Изменение периода хранения log-файлов#

  1. Для изменения периода хранения log-файлов, создайте файл loki-tool.yaml:

    kind: Tool
    metadata:
      name: loki
    spec:
      values:
        loki:
          limits_config:
            max_query_lookback: 48h   # 2 days
    
  2. Примените его:

    kubectl apply -f loki-tool.yaml
    

Настройка постоянного хранилища для Alerting#

  1. Создайте файл alerting-persistence.yaml и настройте persistence для Alertmanager:

    logging-persistence.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: alerting
    spec:
      tools:
      - name: alertmanager
        values:
          persistence:
            enabled: true
            storageClass: openebs-hostpath # openebs тут как пример
            accessModes:
            - ReadWriteOnce
            size: 100Mi
    

    Примечание

    Просто обновить конфигурацию не получится, так как Kubernetes не позволяет обновлять разделы volume для StatefulSet, поэтому нужно удалить компонент Alerting.

  2. Удалите компонент Alerting:

    kubectl delete component alerting
    
  3. Пересоздайте ресурсы конфигурационного файла с персистентным хранилищем, применив манифест:

    kubectl apply -f ./alerting-persistence.yaml
    

Ресурсы компонента Alerting будут пересозданы.

Добавление nodes в кластер#

Добавление node в кластер происходит через создание Custom Resource с типом DropAppNode.

Подготовка машины#

Подготовьте машину, как описано в разделе «Подготовка машин для кластера».

Подготовка DropAppNode манифеста#

Создайте манифест с именем, например, new-node.yaml:

new-node.yaml
apiVersion: nodes.dropapp.ru/v1alpha1
kind: DropAppNode
metadata:
  name: dapp-worker-03.fstec-cluster.domain.ru
spec:
  compute:
    hostname: dapp-worker-03.fstec-cluster.domain.ru
    ip: 00.00.00.00
    nodePool: worker # может быть произвольная строка. Это значение подставится как роль для node (kubectl get nodes)
    nodeType: worker # может быть только worker сейчас. В будущем можно будет добавлять nodes с типом control-plane
  sshAccessRef:
    kind: SSHAccess
    name: primary-nodes-access # ресурс SSHAccess с именем primary-nodes-access создан автоматически при создании кластера

Примечание

metadata.name должен совпадать с spec.compute.hostname, а также чтобы не было конфликтов с существующими dropappnodes, посмотреть существующие, которые создаются Dactl автоматически, можно через kubectl get dropappnodes -o wide.

Примечание

С помощью Dactl можно добавлять только nodes ОС Platform V SberLinux OS Server и «РЕД ОС».

Применение DropAppNode манифеста#

Примените манифест

kubectl apply -f ./new-node.yaml

Валидация добавления нового node в кластер#

Проверьте, что node добавлен:

kubectl get nodes

NAME                                             STATUS   ROLES           AGE   VERSION
dapp-cp-01.fstec-cluster.domain.ru               Ready    control-plane   83m   v1.26.15
dapp-worker-01.fstec-cluster.domain.ru           Ready    worker          83m   v1.26.15
dapp-worker-02.fstec-cluster.domain.ru           Ready    worker          83m   v1.26.15
dapp-worker-03.fstec-cluster.domain.ru           Ready    worker          83m   v1.26.15

Проверьте, что ресурс dropappnode создан, дождитесь пока он будет в статусе ready:

kubectl get dropappnodes

NAME                                     STATUS   AGE     TYPE            IP ADDRESS
dapp-cp-01.fstec-cluster.domain.ru       ready    5m28s   control-plane   000.000.000.136
dapp-worker-01.fstec-cluster.domain.ru   ready    5m28s   worker          000.000.000.158
dapp-worker-02.fstec-cluster.domain.ru   ready    5m28s   worker          000.000.000.241
dapp-worker-03.fstec-cluster.domain.ru   ready    74s     worker          000.000.000.137

Ручная установка компонентов, не установленных в предыдущих шагах#

Установка компонента Monitoring#

Компонент Monitoring устанавливает инструменты Victoria-metrics-operator, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack, которые реализуют функции мониторинга и наблюдаемости в кластере.

  1. Создайте файл component-monitoring.yaml:

    component-monitoring.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: monitoring
    
  2. Примените файл:

    kubectl apply -f component-monitoring.yaml
    
  3. Дождитесь статуса success для инструментов Victoria-metrics-operator, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack:

    kubectl get tools -o wide | grep monitoring
    
    NAME                         STATUS    RETRY     AGE   VERSION       DAPP VERSION   COMPONENT
    console-dashboards           success     0       56s   2.2.3-fstec   2.2.3-fstec    monitoring
    kube-state-metrics           success     0       46s   2.8.2         2.2.3-fstec    monitoring
    metrics-server               success     0       36s   0.7.1         2.2.3-fstec    monitoring
    prometheus-node-exporter     success     0       46s   1.7.0         2.2.3-fstec    monitoring
    victoria-metrics-k8s-stack   success     0       26s   v1.101.0      2.2.3-fstec    monitoring
    victoria-metrics-operator    success     0       66s   0.43.5        2.2.3-fstec    monitoring
    
  4. Ресурсы Logging созданы автоматически в namespace dapp-security, проверьте pods:

    kubectl get pods -n dapp-monitoring
    
    NAME                                                   READY   STATUS    RESTARTS   AGE
    kube-state-metrics-779cc7f75d-bmswf                    1/1     Running   0          109s
    metrics-server-d46d68bd-6vgjm                          1/1     Running   0          97s
    prometheus-node-exporter-9f84q                         1/1     Running   0          109s
    prometheus-node-exporter-bmv9q                         1/1     Running   0          109s
    prometheus-node-exporter-hvgz7                         1/1     Running   0          109s
    prometheus-node-exporter-jld9q                         1/1     Running   0          110s
    prometheus-node-exporter-nrp8t                         1/1     Running   0          110s
    prometheus-node-exporter-tj472                         1/1     Running   0          110s
    victoria-metrics-operator-5dc4c77bc7-28dzn             1/1     Running   0          2m6s
    vmagent-victoria-metrics-k8s-stack-567d9f8497-mz54b    2/2     Running   0          77s
    vmalert-victoria-metrics-k8s-stack-848d7655d8-r292r    2/2     Running   0          76s
    vminsert-victoria-metrics-k8s-stack-857469cd74-5f2f8   1/1     Running   0          22s
    vminsert-victoria-metrics-k8s-stack-857469cd74-nwfvr   1/1     Running   0          22s
    vmselect-victoria-metrics-k8s-stack-0                  1/1     Running   0          52s
    vmselect-victoria-metrics-k8s-stack-1                  1/1     Running   0          52s
    vmstorage-victoria-metrics-k8s-stack-0                 1/1     Running   0          78s
    vmstorage-victoria-metrics-k8s-stack-1                 1/1     Running   0          78s