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

Ручной запуск инсталлятора

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

  1. Base
  2. Ceph
  3. Main
  4. IAM
  5. Core
  6. IaaS
  7. PaaS
  8. Postdeploy

Base

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s base \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Подключитесь к любому узлу, кроме деплой-ноды, например, к управляющему: ssh cpn003.

  2. Проверьте синхронизацию времени: chronyc sources.

    Пример ожидаемого результата
    MS Name/IP address         Stratum Poll Reach LastRx Last sample===============================================================================^* 10.235.100.1                  3  10   377   962    +95us[ +132us] +/-   25ms
  3. Проверьте установку сервиса Consul:

    $ consul catalog services
    Пример ожидаемого результата
    barbicanconsuldashboard-metrics-scraper-kubernetes-dashboardelkhaproxykafka-elkkube-dns-kube-systemkube-dns-upstream-kube-systemkube-state-metrics-kube-systemkubelet-cadvisor-metricskubernetes-dashboard-headless-kubernetes-dashboardkubernetes-dashboard-kubernetes-dashboardkubernetes-defaulttrove-rabbit-persistent
  4. Подключитесь к любому управляющему узлу: ssh cpn003.

  5. Проверьте статус Public HAProxy:

    $ systemctl status public_haproxy.service
    Пример ожидаемого результата
    public_haproxy.service - HAProxy Load Balancer     Loaded: loaded (/etc/systemd/system/public_haproxy.service; enabled; vendor preset: disa>    Drop-In: /etc/systemd/system/public_haproxy.service.d             └─limits.conf     Active: active (running) since Fri 2023-10-27 18:24:20 MSK; 5h 3min ago    ...
  6. Проверьте статус Private HAProxy:

    $ systemctl status private_haproxy.service
    Пример ожидаемого результата
    private_haproxy.service - HAProxy Load Balancer     Loaded: loaded (/etc/systemd/system/private_haproxy.service; enabled; vendor preset: dis>    Drop-In: /etc/systemd/system/private_haproxy.service.d             └─limits.conf     Active: active (running) since Fri 2023-10-27 18:34:48 MSK; 4h 53min ago    ...
  7. Подключитесь к RS-серверу: ssh rs1.

  8. Проверьте статус сервиса gobgpd:

    $ systemctl status gobgpd
    Пример ожидаемого результата
    gobgpd.service - GoBGP Routing Daemon     Loaded: loaded (/usr/lib/systemd/system/gobgpd.service; enabled; vendor preset: disabled)     Active: active (running) since Fri 2023-10-27 18:35:27 MSK; 4h 52min ago    ...
  9. Проверьте работу сервиса gobgp:

    $ gobgp neighbor
    Пример ожидаемого результата
    Peer           AS  Up/Down State       |#Received  Accepted10.30.3.12  65433 04:45:00 Establ      |        3         310.30.3.11  65433 04:44:37 Establ      |        3         310.30.3.13  65433 04:42:05 Establ      |        3         310.30.3.112 65433 04:53:49 Establ      |        6         610.30.3.111 65433 04:53:41 Establ      |        6         610.30.3.113 65433 04:53:28 Establ      |        6         610.30.3.22  65431 04:54:13 Establ      |       19        19
  10. Подключитесь к управляющему узлу: ssh cpn003.

  11. Проверьте конфигурационный файл Kubernetes:

    $ sudo kubectl config view
    Пример ожидаемого результата
    apiVersion: v1clusters:- cluster:    certificate-authority: /etc/kubernetes/pki/ca.crt    server: https://internal.private.infra.devmail.ru:6443  name: kubecontexts:- context:    cluster: kube    user: admin  name: defaultcurrent-context: defaultkind: Configpreferences: {}users:- name: admin  user:    client-certificate: /etc/kubernetes/pki/admin.crt    client-key: /etc/kubernetes/pki/admin.key
  12. Выведите все поды Kubernetes:

    $ sudo kubectl get pods -A
    Пример ожидаемого результата (все сервисы в статусе Running и в Ready "1/1")
    NAMESPACE     NAME                                    READY  STATUS   RESTARTS  AGEdefault       consul-sync-catalog-7c996b7f65-kkz2l    1/1    Running  0         4h46mkube-system   calico-kube-controllers-dbdc4b86-drczd  1/1    Running  0         4h47mkube-system   calico-node-2xpqt                       1/1    Running  0         4h47mkube-system   calico-node-ffzn4                       1/1    Running  0         4h47m...
  13. Подключитесь к Logging или Monitoring-серверу: ssh lm001.

  14. Проверьте контейнеры OpenSearch:

    $ sudo docker ps --format {{.Names}}
    Пример ожидаемого результата
    opensearch_dashboardsopensearch
  15. Проверьте статус сервиса Apache Kafka на подключенном сервере:

    $ systemctl status kafka-<ИМЯ_СЕРВЕРА>
    Пример ожидаемого результата
    kafka-lm001.service - Apache Kafka server kafka-lm001     Loaded: loaded (/usr/lib/systemd/system/kafka-lm001.service; enabled; vendor preset: disabled)     Active: active (running) since Fri 2023-10-27 18:54:43 MSK; 4h 39min ago   ...
  16. Выведете список групп читателей в Apache Kafka:

    $ /srv/kafka/kafka-<ИМЯ_СЕРВЕРА>/kafka_2.13-2.6.0/bin/kafka-consumer-groups.sh --bootstrap-server <АДРЕС_СЕРВЕРА_В_MANAGEMENT_СЕТИ>:9092 --list
    Пример ожидаемого результата
    logstash_kube_mainlogstash_proxysqllogstash_haproxylogstash_postgreslogstash_linux_systemlogstash_libvirtdlogstash_auditlogstash_dmesglogstash_iamlogstash_clickhouselogstash_openstack_main
  17. Проверьте статус сервиса Logstash:

    $ systemctl status logstash-<ИМЯ_СЕРВЕРА>
    Пример ожидаемого результата
    logstash-lm001.service - Logstash node logstash-lm001     Loaded: loaded (/usr/lib/systemd/system/logstash-lm001.service; enabled; vendor preset: disabled)     Active: active (running) since Fri 2023-10-27 19:02:50 MSK; 4h 38min ago    ...
  18. Проверьте статус сервиса Logstash:

    $ curl localhost:9600/?pretty
    Пример ожидаемого результата
    {  "host" : "lm001",  "version" : "7.10.2",  "http_address" : "127.0.0.1:9600",  "id" : "236b31eb-23d2-4c12-892e-fa7f2a1d1548",  "name" : "lm001",  "ephemeral_id" : "4f9a6bc6-e20c-4ff2-88da-6763ae0aa985",  "status" : "green",  "snapshot" : false,  "pipeline" : {    "workers" : 8,    "batch_size" : 125,    "batch_delay" : 50  },  "build_date" : "2021-01-13T02:43:06Z",  "build_sha" : "7cebafee7a073fa9d58c97de074064a540d6c317",  "build_snapshot" : false}
  19. Подключитесь к любому управляющему узлу: ssh cpn003.

  20. Проверьте сервис Apache ZooKeeper:

    $ sudo yum install netcat -y$ echo ruok | nc localhost 2181
    Пример ожидаемого результата
    imok

Ceph

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s ceph \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Подключитесь к узлу хранилищ: ssh csn001

  2. Проверьте статусы сервисов Ceph:

    $ systemctl list-dependencies ceph.target
    Пример ожидаемого результата
    ceph.target● ├─ceph-crash.service● ├─ceph-mds.target● │ ├─ceph-mds@csn001.service● │ ├─ceph-mon.target● │ │ ├─ceph-mon@csn001.service  │ │   └─...  │   └─...● ├─ceph-mgr.target● │ ├─ceph-mgr@csn001.service● │ ├─ceph-mon.target● │ │ ├─ceph-mon@csn001.service  │ │   └─...  │   └─...● ├─ceph-mon.target● │ ├─ceph-mon@csn001.service  │   └─...● └─ceph-osd.target●   ├─ceph-osd@0.service●   ├─ceph-osd@1.service●   ├─ceph-mon.target●   │ ├─ceph-mon@csn001.service    │   └─...      └─...
  3. Проверьте состояние Ceph:

    $ ceph -s
    Пример ожидаемого результата
    cluster:    id:     d1ba1176-f6e1-4af7-8101-b4f51b8af55e    health: HEALTH_WARN            mon is allowing insecure global_id reclaim            6 pool(s) have no replicas configured  services:    mon: 1 daemons, quorum csn001 (age 3m)    mgr: csn001(active, since 67s)    mds: cephfs:1 {0=csn001=up:active}    osd: 2 osds: 2 up (since 2m), 2 in (since 2m)  data:    pools:   6 pools, 320 pgs    objects: 22 objects, 4.1 KiB    usage:   2.0 GiB used, 698 GiB / 700 GiB avail    pgs:     320 active+clean  progress:    PG autoscaler decreasing pool 2 PGs from 128 to 32 (0s)      [............................]
  4. Проверьте наличие пула glance-images.

    1. Подключитесь к Storage-сервер: ssh csn001.

    2. Выполните команду: ceph osd pool ls.

    Пример ожидаемого результата
    glance-imagescinder-volumesvms...

Main

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s main \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Зайдите на управляющий узел: ssh cpn003.

  2. Проверьте сервис Memcached.

    1. Получите список подов сервиса Memcached:

      $ sudo kubectl -n memcached-vkcloud get pods -o wide
    2. Из полученного списка выберите IP-адрес любого пода и получите по нему статистику сервиса Memcached:

      $ echo stats | nc <ВЫБРАННЫЙ_IP_АДРЕС> 11211
      Пример ожидаемого результата
      STAT pid 1STAT uptime 11786STAT time 1698451709STAT version 1.5.17STAT libevent 2.1.8-stableSTAT pointer_size 64STAT rusage_user 0.880521STAT rusage_system 0.339415...
  3. Проверьте БД.

    1. Получите список всех БД:

      $ systemctl | grep mariadb
    2. Подключитесь к любой БД из списка, используя его как путь к сокету:

      $ sudo mysql -S /srv/mysql/nova/socket/nova.sock -u root
      Пример ожидаемого результата
      Welcome to the MariaDB monitor.  Commands end with ; or \g.  Your MariaDB connection id is 12896  Server version: 10.2.43-MariaDB-log MariaDB Server  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  MariaDB [(none)]>
    3. Выведите состав кластера MariaDB:

      MariaDB [(none)]> show databases;

      В ответ должен вернуться список БД.

      Пример ожидаемого результата
      +--------------------+| Database           |+--------------------+| information_schema || license_billing    || mysql              || nova               || nova_api           || nova_billing       || nova_cell0         || performance_schema || placement          || sys                || test               |+--------------------+11 rows in set (0.002 sec)

      Вернитесь в Bash с помощью комбинации Ctrl+D.

    4. Проверьте статус прокси-сервера БД:

      $ systemctl status proxysql
      Пример ожидаемого результата
      proxysql.service - High Performance Advanced Proxy for MySQL     Loaded: loaded (/etc/systemd/system/proxysql.service; enabled; vendor preset: disabled)     Active: active (running) since Sat 2023-10-28 00:58:16 MSK; 2h 15min ago
  4. Проверьте сервис очередей RabbitMQ.

    1. Проверьте количество готовых подов (столбец READY):

      $ sudo kubectl -n rabbitmq get statefulset
      Пример ожидаемого результата
      NAME                               READY   AGErabbitmq-barbican                  3/3     132mrabbitmq-billing-account-service   3/3     132mrabbitmq-ceilometer                3/3     132mrabbitmq-celery                    3/3     132mrabbitmq-cinder                    3/3     132mrabbitmq-gb                        3/3     132mrabbitmq-katana                    3/3     132mrabbitmq-magnum                    3/3     132mrabbitmq-magnum-rapid              3/3     132mrabbitmq-neutron                   3/3     132mrabbitmq-nova                      3/3     132m
    2. Получите полный список подов RabbitMQ:

      $ sudo kubectl -n rabbitmq get pods
      Пример ожидаемого результата
      NAME                                 READY   STATUS    RESTARTS   AGErabbitmq-barbican-0                  1/1     Running   0          132mrabbitmq-barbican-1                  1/1     Running   0          132mrabbitmq-barbican-2                  1/1     Running   0          131mrabbitmq-billing-account-service-0   1/1     Running   0          132mrabbitmq-billing-account-service-1   1/1     Running   0          132mrabbitmq-billing-account-service-2   1/1     Running   0          131mrabbitmq-ceilometer-0                1/1     Running   0          132mrabbitmq-ceilometer-1                1/1     Running   0          132mrabbitmq-ceilometer-2                1/1     Running   0          131m  ...
    3. Из полученного списка выберите один из подов и получите по нему статистику:

      $ sudo kubectl -n rabbitmq exec <ИМЯ ПОДА> -it -- rabbitmqctl cluster_status
      Пример ожидаемого результата
      warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.Cluster status of node rabbit@rabbitmq-barbican-2.rabbitmq-barbican.rabbitmq.svc.kube ...BasicsCluster name: rabbit@rabbitmq-barbican-2.rabbitmq-barbican.rabbitmq.svc.kubeDisk Nodesrabbit@rabbitmq-barbican-0.rabbitmq-barbican.rabbitmq.svc.kuberabbit@rabbitmq-barbican-1.rabbitmq-barbican.rabbitmq.svc.kuberabbit@rabbitmq-barbican-2.rabbitmq-barbican.rabbitmq.svc.kubeRunning Nodesrabbit@rabbitmq-barbican-0.rabbitmq-barbican.rabbitmq.svc.kuberabbit@rabbitmq-barbican-1.rabbitmq-barbican.rabbitmq.svc.kuberabbit@rabbitmq-barbican-2.rabbitmq-barbican.rabbitmq.svc.kubeVersionsrabbit@rabbitmq-barbican-0.rabbitmq-barbican.rabbitmq.svc.kube: RabbitMQ 3.10.6 on Erlang 23.3.4.8rabbit@rabbitmq-barbican-1.rabbitmq-barbican.rabbitmq.svc.kube: RabbitMQ 3.10.6 on Erlang 23.3.4.8rabbit@rabbitmq-barbican-2.rabbitmq-barbican.rabbitmq.svc.kube: RabbitMQ 3.10.6 on Erlang 23.3.4.8...
  5. Проверьте сервис RABBIT_PERSISTENT (в случае установки компонента Trove):

    $ sudo docker exec rabbit_persistent rabbitmqctl cluster_status
    Пример ожидаемого результата
    Cluster status of node rabbit@cpn003 ...  Basics  Cluster name: trove_rabbit_persistent  Disk Nodes  rabbit@cpn001  rabbit@cpn002  rabbit@cpn003  Running Nodes  rabbit@cpn001  rabbit@cpn002  rabbit@cpn003
  6. Проверьте статус хранилища ETCD:

    $ etcdctl --endpoints=localhost:22379 --write-out=table endpoint status
    Пример ожидаемого результата
    +-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+|    ENDPOINT     |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |+-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+| localhost:22379 | 4c4ac234a21a8a2b |   3.5.0 |   20 kB |     false |      false |         2 |       4973 |               4973 |        |+-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
  7. Проверьте сервис мониторинга Zabbix.

    1. Подключитесь к узлу мониторинга: ssh lm001.

    2. Проверьте состояние сервера Zabbix:

      $ systemctl status zabbix-server
      Пример ожидаемого результата
      zabbix-server.service - Zabbix Server     Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; vendor preset: disabled)     Active: active (running) since Sat 2023-10-28 01:09:37 MSK; 2h 12min ago
  8. Проверьте службы Stolon-cluster:

    1. Найдите управляющий узел, указанный в группе vkcloud_stolon_cluster в файле inventory/vkcloud/vkcloud.yml:

      $ less inventory/vkcloud/vkcloud.yml
      Пример ожидаемого результата
      vkcloud_stolon_cluster:  children:    vkcloud_servicesmanager_stolon_cluster:      hosts:        postgres-servicesmanager-f1:          ansible_host: cpn001        postgres-servicesmanager-f2:          ansible_host: cpn002        postgres-servicesmanager-f3:          ansible_host: cpn003          postgresql_backup: true
    2. Подключитесь к узлу: ssh cpn003.

    3. Получите список сервисов Stolon. Должен отобразиться сервис stolon-consul-discovery, а также для всех баз должно быть по сервису stolon-keeper и stolon-sentinel:

      $ systemctl | grep stolon
      Пример ожидаемого результата
      stolon-consul-discovery.service                        loaded active running   Stolon Consul discoverystolon-keeper-postgres-billingcore-f3.service          loaded active running   Stolon billingcore-stolon-cluster keeperstolon-keeper-postgres-magnum-addons-f3.service        loaded active running   Stolon magnum-addons-stolon-cluster keeperstolon-keeper-postgres-magnum-rapid-f3.service         loaded active running   Stolon magnum-rapid-stolon-cluster keeperstolon-keeper-postgres-projectsservice-f3.service      loaded active running   Stolon projectsservice-stolon-cluster keeperstolon-keeper-postgres-servicesmanager-f3.service      loaded active running   Stolon servicesmanager-stolon-cluster keeperstolon-keeper-postgres-syncservice-f3.service          loaded active running   Stolon syncservice-stolon-cluster keeperstolon-keeper-postgres-xaas-f3.service                 loaded active running   Stolon xaas-stolon-cluster keeperstolon-sentinel-postgres-billingcore-f3.service        loaded active running   Stolon billingcore-stolon-cluster sentinelstolon-sentinel-postgres-magnum-addons-f3.service      loaded active running   Stolon magnum-addons-stolon-cluster sentinelstolon-sentinel-postgres-magnum-rapid-f3.service       loaded active running   Stolon magnum-rapid-stolon-cluster sentinelstolon-sentinel-postgres-projectsservice-f3.service    loaded active running   Stolon projectsservice-stolon-cluster sentinelstolon-sentinel-postgres-servicesmanager-f3.service    loaded active running   Stolon servicesmanager-stolon-cluster sentinelstolon-sentinel-postgres-syncservice-f3.service        loaded active running   Stolon syncservice-stolon-cluster sentinelstolon-sentinel-postgres-xaas-f3.service               loaded active running   Stolon xaas-stolon-cluster sentinel
  9. Проверьте состояние баз данных:

    1. Подключитесь к управляющему узлу, указанному в группе vkcloud_stolon_cluster: ssh cpn003.

    2. Получите список запущенных баз Postgres и их сокетов:

      $ sudo netstat -tlpn | grep "postgres"
      Пример ожидаемого результата
      tcp   0   0 10.30.3.13:5445    0.0.0.0:*     LISTEN     1259286/postgrestcp   0   0 10.30.3.13:5446    0.0.0.0:*     LISTEN     1573904/postgrestcp   0   0 10.30.3.13:5441    0.0.0.0:*     LISTEN     1120222/postgrestcp   0   0 10.30.3.13:5440    0.0.0.0:*     LISTEN     692470/postgrestcp   0   0 10.30.3.13:5442    0.0.0.0:*     LISTEN     1411085/postgrestcp   0   0 10.30.3.13:5439    0.0.0.0:*     LISTEN     976805/postgrestcp   0   0 10.30.3.13:5438    0.0.0.0:*     LISTEN     825053/postgres
    3. Получите пароль vault_postgresql_login_password из файла inventory/vkcloud/group_vars/vkcloud/vault(vault.yml).

    4. Подключитесь к любой из полученных баз:

      $ psql -h 10.30.3.13 -p 5438 -U postgres
      Пример ожидаемого результата
      Password for user postgres:psql (12.12)Type "help" for help.postgres=#
    5. Выведите список баз:

      Пример ожидаемого результата
      postgres-# \l                                          List of databases        Name       |      Owner       | Encoding |   Collate   |    Ctype    |   Access privileges ------------------+------------------+----------+-------------+-------------+-----------------------  bank_integration | bank_integration | UTF8     | en_US.UTF-8 | en_US.UTF-8 |  billingcore      | billingcore      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |  postgres         | postgres         | UTF8     | en_US.UTF-8 | en_US.UTF-8 |  template0        | postgres         | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +                   |                  |          |             |             | postgres=CTc/postgres  template1        | postgres         | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +                   |                  |          |             |             | postgres=CTc/postgres (5 rows)
  10. Проверьте состояние stolon-кластеров:

    1. Найдите управляющий узел, указанный в группе vkcloud_stolon_cluster в файле inventory/vkcloud/vkcloud.yml:

      $ less inventory/vkcloud/vkcloud.yml
      Пример ожидаемого результата
      vkcloud_stolon_cluster:  children:    vkcloud_servicesmanager_stolon_cluster:      hosts:        postgres-servicesmanager-f1:          ansible_host: cpn001        postgres-servicesmanager-f2:          ansible_host: cpn002        postgres-servicesmanager-f3:          ansible_host: cpn003        postgresql_backup: true
    2. Подключитесь к узлу:

      $ less ssh cpn003
    3. Получите список кластеров:

      # ls /etc/stolon
      Пример ожидаемого результата
      billingcore-stolon-cluster    magnum-rapid-stolon-cluster     servicesmanager-stolon-cluster  xaas-stolon-clustermagnum-addons-stolon-cluster  projectsservice-stolon-cluster  syncservice-stolon-cluster
    4. Получите состояние кластера:

      # stolonctl status --cluster-name magnum-rapid-stolon-cluster --store-backend consul --store-endpoints http://127.0.0.1:8500
      Пример ожидаемого результата
      === Active sentinels ===  ID              LEADER 149b447f        true 8a286db6        false cb16f008        false  === Active proxies ===  No active proxies  === Keepers ===  UID                         HEALTHY PG LISTENADDRESS        PG HEALTHY      PG WANTEDGENERATION     PG CURRENTGENERATION postgres_magnum_rapid_f1    true    10.30.3.11:5442         true            3                       3 postgres_magnum_rapid_f2    true    10.30.3.12:5442 true    3               3 postgres_magnum_rapid_f3    true    10.30.3.13:5442 true    9               9  === Cluster Info ===  Master Keeper: postgres_magnum_rapid_f3  ===== Keepers/DB tree =====  postgres_magnum_rapid_f3 (master) ├─postgres_magnum_rapid_f2 └─postgres_magnum_rapid_f1
  11. После установки Redis:

    1. Подключитесь к управляющему узлу из группы vkcloud_redis и получите список доступных CLI:

      # ls /bin/redis/bin/redis-cli_maas-redis.sh  /bin/redis-cli_magnumrapid-redis.sh
    2. Выберите любую доступную CLI и выполните команду:

      # /bin/redis-cli_maas-redis.sh info replication
      Пример ожидаемого результата
      Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.# Replicationrole:slavemaster_host:10.30.3.11master_port:6391master_link_status:upmaster_last_io_seconds_ago:0master_sync_in_progress:0slave_read_repl_offset:14010228slave_repl_offset:14010228slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:90737554898a7391dcc4b7c6a1c15168ea06414fmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:14010228second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:12961653repl_backlog_histlen:1048576

IAM

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s iam \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Получите пароль из переменной vault_keycloak_password, которая задана в файле ~inventory/vkcloud/group_vars/vkcloud/vault.yml.

    $ ansible -m debug -i vkcloud.yml -a "msg=\"\n\n{{ vault_keycloak_password }}\n\n\"" all[0] | sed 's/\\n/\n/g'
  2. Подключитесь к управляющему узлу: ssh cpn003.

  3. Подключитесь к поду Keycloak:

    $ sudo kubectl -n keycloak-vkcloud exec vk-keycloak-0 -it -- bash$ /opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
  4. Введите пароль из переменной vault_keycloak_password.

  5. Получите данные о состоянии сервера:

    $ /opt/keycloak/bin/kcadm.sh get serverinfo
    Пример ожидаемого результата
    {  "systemInfo" : {    "version" : "20.0.3-SNAPSHOT",    "serverTime" : "Sat Oct 28 14:56:36 MSK 2023",    "uptime" : "0 days, 11 hours, 20 minutes, 49 seconds",    "uptimeMillis" : 40849151,    "javaVersion" : "11.0.17",    "javaVendor" : "RED SOFT",    "javaVm" : "OpenJDK 64-Bit Server VM",    "javaVmVersion" : "11.0.17+8-LTS",    "javaRuntime" : "OpenJDK Runtime Environment",    "javaHome" : "/usr/lib/jvm/java-11-openjdk-11.0.17.0.8-2.el7.x86_64",    "osName" : "Linux",    "osArchitecture" : "amd64",    "osVersion" : "6.1.38-2.el7.3.x86_64",    "fileEncoding" : "UTF-8",    "userName" : "keycloak",    "userDir" : "/opt/keycloak",    "userTimezone" : "Europe/Moscow",    "userLocale" : "us_EN"  },  "memoryInfo" : {    "total" : 402653184,    "totalFormated" : "384 MB",    "used" : 106012432,    "usedFormated" : "101 MB",    "free" : 296640752,    "freePercentage" : 73,    "freeFormated" : "282 MB"  },...    "resourceType" : [ "AUTHENTICATOR_CONFIG", "AUTHORIZATION_POLICY", "AUTHORIZATION_RESOURCE", "AUTHORIZATION_RESOURCE_SERVER", "AUTHORIZATION_SCOPE", "AUTH_EXECUTION", "AUTH_EXECUTION_FLOW", "AUTH_FLOW", "CLIENT", "CLIENT_INITIAL_ACCESS_MODEL", "CLIENT_ROLE", "CLIENT_ROLE_MAPPING", "CLIENT_SCOPE", "CLIENT_SCOPE_CLIENT_MAPPING", "CLIENT_SCOPE_MAPPING", "CLUSTER_NODE", "COMPONENT", "CUSTOM", "GROUP", "GROUP_MEMBERSHIP", "IDENTITY_PROVIDER", "IDENTITY_PROVIDER_MAPPER", "PROTOCOL_MAPPER", "REALM", "REALM_ROLE", "REALM_ROLE_MAPPING", "REALM_SCOPE_MAPPING", "REQUIRED_ACTION", "USER", "USER_FEDERATION_MAPPER", "USER_FEDERATION_PROVIDER", "USER_LOGIN_FAILURE", "USER_SESSION" ]  }{
  6. Подключитесь к управляющему узлу: ssh cpn003.

  7. Проверьте статусы сервисов IAM:

    1. Breeze:

      $ echo 'box.info.status' | sudo tarantoolctl eval breeze_03
      Пример ожидаемого результата
      connected to unix/:/var/run/tarantool/breeze_03.control---- running...
    2. Dusk:

      echo 'box.info.status' | sudo tarantoolctl eval dusk_03
      Пример ожидаемого результата
      connected to unix/:/var/run/tarantool/dusk_03.control  ---  - running  ...
  8. Просмотрите пользователей:

    $ echo 'box.space.users:select()' | sudo tarantoolctl eval breeze_03
    Пример ожидаемого результата
    connected to unix/:/var/run/tarantool/breeze_03.control---- - ['0bc99438b20746f9b562240aae96cc11', 2367983472, 'user01@vk.team', 'users', 1698455064.1979,    1698455064.2732, true, '', 0, {'phone': true, 'email': true}, {'broker': 'vk',      'keycloack_sync': true, 'region': 'RegionOne', 'mfa': {'email': {'time_enabled': 1698455064.2732,          'id': 'd5ed7509-1988-412e-90d3-628df7588636'}}}, true]  - ['3ec52ab514884ec7bb4337364b8c8581', 2529402120, 'iam', 'users', 1698453851.4324,    1698453851.4324, true, '', 0, {'phone': true, 'email': true}, {'broker': 'vk',      'region': 'RegionOne', 'mfa': {}}, null]  - ['56c1f6ae5ce842d28e05678d8b2ac5d4', 3906841504, 'keycloak@vk.team', 'users',    1698455063.9826, 1698455064.0444, true, '', 0, {'phone': true, 'email': true},    {'broker': 'vk', 'keycloack_sync': true, 'region': 'RegionOne', 'mfa': {'email': {          'time_enabled': 1698455064.0444, 'id': '56b6f10d-501c-40e7-8f9e-56b4b0e060e1'}}},    true]  ...
  9. Подключитесь к управляющему узлу и проверьте службы overlord:

    # systemctl | grep overlord
    Пример ожидаемого результата
    overlord@breeze_03.service      loaded active running   breeze_03-overlordoverlord@dusk_03.service        loaded active running   dusk_03-overlordsystem-overlord.slice           loaded active active    system-overlord.slice

Core

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s core \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Подключитесь к управляющему узлу, на котором находится Bash-скрипт openrc.sh (на одном из Controlplane-серверов по пути /root/openrc.sh): ssh cpn002.

  2. Переключитесь на пользователя root и выполните Bash-скрипт для загрузки в переменные окружения параметров подключения к кластеру:

    $ sudo -i# yum install python3-openstackclient -y# . ~/openrc.sh
  3. Проверьте наличие пользователей:

    # openstack user list
    Пример ожидаемого результата
    +----------------------------------+-----------+| ID                               | Name      |+----------------------------------+-----------+| 3dca662a822549e3afd18f7292476e7b | nova      || 49c49d96070841c6880b0cd687dbdbfe | neutron   || 68ebfe516cdf4302a05d5b2a6105a308 | glance    || 6d103a712e7e4fd1a7b173c286473e58 | barbican  || 7894971e94e64c32b1c5640de0fae9bd | cinder    || cd691f146044472f8e5bb9b4535668e0 | admin     || f2ec21c66f3242d29fca8086d41b9843 | placement || f60e5775e18f4b0596db2817a6b85ae8 | katana    |+----------------------------------+-----------+
  4. Проверьте создание токена для пользователя admin:

    # openstack token issue
    Пример ожидаемого результата
    +------------+-----------------------------------+| Field      | Value                             |+------------+-----------------------------------+| expires    | 2023-10-28T16:00:26+0000          || id         | gAAAAABl...79Vl-e84RoI6-L4o       || project_id | 2a38820cebc1438c8544787374ec3f7d  || user_id    | cd691f146044472f8e5bb9b4535668e0  |+------------+-----------------------------------+
  5. Создайте тестовый секрет:

    # openstack secret store
    Пример ожидаемого результата
    +---------------+------------------------------------------------------------------------------------------+| Field         | Value                                                                                    |+---------------+------------------------------------------------------------------------------------------+| Secret href   | https://lk.private.infra.devmail.ru:9311/v1/secrets/56c24d7d-353e-4bc1-9c03-88bc6eb5c5c5 || Name          | None                                                                                     || Created       | 2023-10-28T15:02:08+00:00                                                                || Status        | ACTIVE                                                                                   || Content types | None                                                                                     || Algorithm     | aes                                                                                      || Bit length    | 256                                                                                      || Secret type   | opaque                                                                                   || Mode          | cbc                                                                                      || Expiration    | None                                                                                     |+---------------+------------------------------------------------------------------------------------------+
  6. Проверьте, что список типов диска не пустой:

    # openstack volume type list
    Пример ожидаемого результата
    +--------------------------------------+-----------+-----------+| ID                                   | Name      | Is Public |+--------------------------------------+-----------+-----------+| 5a4cb7e4-09d1-4719-a61c-99a32db75a51 | high-iops | True      || 945dd2a4-de2e-407b-a2bc-4d0a415df7d4 | ceph      | True      |+--------------------------------------+-----------+-----------+
  7. Проверьте, что список правил QoS для сети не пустой:

    # openstack volume qos list
    Пример ожидаемого результата
    +--------------------------------------+-----------+----------+--------------+--------------------------------------------------------------------------------------+| ID                                   | Name      | Consumer | Associations | Properties                                                                           |+--------------------------------------+-----------+----------+--------------+--------------------------------------------------------------------------------------+| 4c746341-ab5a-4509-a3e6-20d33c5fbd09 | high-iops | both     | high-iops    | cache_mode='none', read_iops_sec_per_gb='100', ..., write_iops_sec_per_gb_min='1000' || 10df5d11-9536-45e0-a6eb-7a86d44691fb | ceph      | both     | ceph         | cache_mode='none', read_iops_sec_per_gb='30', ..., write_iops_sec_per_gb_min='500'   |+--------------------------------------+-----------+----------+--------------+--------------------------------------------------------------------------------------+
  8. Подключитесь к деплой-ноде: ssh deploy.

  9. Получите пароль для Katana:

    $ cd ~/inventory/vkcloud/$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\n{{ vault_katana.openstack.password }}\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "30f9yL70mVeG79u0UJ12"}
  10. Подключитесь к управляющему узлу: ssh cpn003.

  11. Получите IP-адрес Katana:

    $ sudo kubectl -n sre-vkcloud get endpoints | grep nginx
    Пример ожидаемого результата
    katana-nginx-headless 10.220.0.113:80,10.220.0.47:80 161m
  12. Запросите у сервиса Katana статус, подставив первый IP и пароль из вывода выше:

    $ curl -u katana:30f9yL70mVeG79u0UJ12 10.220.0.113/status
    Пример ожидаемого результата
    {"status": true}
  13. Подключитесь к управляющему узлу, на котором находится Bash-скрипт openrc.sh: ssh cpn002.

  14. Переключитесь на пользователя root и выполните Bash-скрипт для загрузки в переменные окружения параметров подключения к кластеру:

    $ sudo -i# . ~/openrc.sh
  15. Проверьте наличие гипервизоров:

    # openstack hypervisor list
    Пример ожидаемого результата
    +----+---------------------+-----------------+------------+-------+| ID | Hypervisor Hostname | Hypervisor Type | Host IP    | State |+----+---------------------+-----------------+------------+-------+|  3 | kcn002              | QEMU            | 10.30.3.15 | down  ||  6 | kcn001              | QEMU            | 10.30.3.14 | down  |+----+---------------------+-----------------+------------+-------+
  16. Проверьте, что список агрегаторов сети не пустой:

    # openstack aggregate list
    Пример ожидаемого результата
    +----+------+-------------------+| ID | Name | Availability Zone |+----+------+-------------------+|  3 | AZ1  | AZ1               |+----+------+-------------------+
  17. Подключитесь к управляющему узлу, на котором находится Bash-скрипт openrc.sh: ssh cpn002.

  18. Переключитесь на пользователя root и выполните Bash-скрипт для загрузки в переменные окружения параметров подключения к кластеру:

    $ sudo -i# . ~/openrc.sh
  19. Выведете список всех сетей:

    # openstack network list

    Вывод должен быть пустым.

  20. Создайте сеть:

    # openstack network create net-test
    Пример ожидаемого результата
    +---------------------------+--------------------------------------+| Field                     | Value                                |+---------------------------+--------------------------------------+| admin_state_up            | UP                                   || availability_zone_hints   |                                      || availability_zones        |                                      || created_at                | 2023-10-28T15:11:20Z                 || description               |                                      || dns_domain                | None                                 || id                        | 102e5536-3dc6-410f-b510-8bd053fe34cb || ipv4_address_scope        | None                                 || ipv6_address_scope        | None                                 || is_default                | None                                 || is_vlan_transparent       | None                                 || mtu                       | 1400                                 || name                      | net-test                             || port_security_enabled     | True                                 || project_id                | 2a38820cebc1438c8544787374ec3f7d     || provider:network_type     | vxlan                                || provider:physical_network | None                                 || provider:segmentation_id  | 68                                   || qos_policy_id             | None                                 || revision_number           | 4                                    || router:external           | Internal                             || segments                  | None                                 || shared                    | False                                || status                    | ACTIVE                               || subnets                   |                                      || tags                      |                                      || updated_at                | 2023-10-28T15:11:20Z                 |+---------------------------+--------------------------------------+
  21. Выведете список всех сетей. Команда должна вывести список, где будет присутствовать ранее созданная сеть:

    # openstack network list
    Пример ожидаемого результата
    +--------------------------------------+----------+---------+| ID                                   | Name     | Subnets |+--------------------------------------+----------+---------+| 102e5536-3dc6-410f-b510-8bd053fe34cb | net-test |         |+--------------------------------------+----------+---------+
  22. Удалите ранее созданную сеть. Команда должна отработать без ошибок:

    # openstack network delete net-test
  23. Снова выведете список всех сетей:

    # openstack network list

    Вывод должен быть пустым.

  24. Проверьте, что оба SDN включены для администратора:

    1. Получите токен:

      # export TOKEN=$(openstack token issue -c id -f value)
    2. Получите адрес sdn-proxy, выполнив следующие команды на деплой-ноде:

      $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://{{ openstack_private_endpoint_ip }}:9696/v2.0/available-sdn/\n\n\"" all[0] | sed 's/\\n/\n/g'
      Пример ожидаемого результата
      cpn001 | SUCCESS => {    "msg": "http://internal.private.corp.devmail.ru:9696/v2.0/available-sdn/"}
    3. Получите список SDN, доступных данному проекту, из sdn-proxy, выполнив команду на управляющем узле:

      # curl -H "X-Auth-Token: $TOKEN" <SDN_PROXY_ADDRESS>

      Здесь <SDN_PROXY_ADDRESS> — адрес sdn-proxy, полученный ранее.

      Пример ожидаемого результата
      ["NEUTRON", "SPRUT"]
  25. Создайте EVPN-сеть:

    # openstack network create  --provider-network-type evpn sprut_network
    Пример ожидаемого результата
    +---------------------------+--------------------------------------+| Field                     | Value                                |+---------------------------+--------------------------------------+| admin_state_up            | UP                                   || availability_zone_hints   | None                                 || availability_zones        | None                                 || created_at                | 2024-05-26T18:05:56                  || description               |                                      || dns_domain                | mcs.local.                           || id                        | cb9c23c2-fc73-4107-bfad-ffbdc8ba31fa || ipv4_address_scope        | None                                 || ipv6_address_scope        | None                                 || is_default                | None                                 || is_vlan_transparent       | None                                 || mtu                       | 1500                                 || name                      | sprut_network                        || port_security_enabled     | True                                 || project_id                | 968613d4ee4e4e12bdaf49243b6a63e3     || provider:network_type     | evpn                                 || provider:physical_network |                                      || provider:segmentation_id  | 0                                    || qos_policy_id             | None                                 || revision_number           | None                                 || router:external           | Internal                             || segments                  | None                                 || shared                    | False                                || status                    | ACTIVE                               || subnets                   |                                      || tags                      |                                      || updated_at                | 2024-05-26T18:05:56                  |+---------------------------+--------------------------------------+
  26. Получите список всех Sprut-сетей через API:

    # curl cpn002:2111/v2.0/networks/ | jq
    Пример ожидаемого результата
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100  1564  100  1564    0     0  38467      0 --:--:-- --:--:-- --:--:-- 38146[  {    "id": "00fdc86e-de15-4e09-8112-aaa82fb60d3b",    "created_at": "2024-05-26T16:05:00",    "updated_at": "2024-05-26T16:05:00",    "project_id": "bb1fb187662d427da320bc3b876692ac",    "tenant_id": "bb1fb187662d427da320bc3b876692ac",    "name": "dc_router_service_eph_net",    "description": "",    "mac_pool": "/v2.0/pools/mac/bdd6b0a1-dfb8-41fe-a46d-b2174832df08",    "router:external": false,    "shared": false,    "admin_state_up": true,    "port_security_enabled": true,    "is_default": false,    "mtu": 1500,    "network_type": "EPHNetwork",    "network_meta_uuid": "e9744d0d-a382-47b8-a76d-2dd1b758f9bb",    "provider:physical_network": "",    "provider:network_type": "ephn",    "provider:segmentation_id": 0,    "status": "ACTIVE",    "subnets": [      "852e52f0-a386-48a4-8452-06f3ee856bcb"    ],    "tags": [],    "dns_domain": "",    "endpoint_tags": [      "dc_vm_api"    ]  },  {    "id": "cb9c23c2-fc73-4107-bfad-ffbdc8ba31fa",    "created_at": "2024-05-26T18:05:56",    "updated_at": "2024-05-26T18:05:56",    "project_id": "968613d4ee4e4e12bdaf49243b6a63e3",    "tenant_id": "968613d4ee4e4e12bdaf49243b6a63e3",    "name": "sprut_network",    "description": "",    "mac_pool": "/v2.0/pools/mac/4765c701-7987-4306-9687-2cdd74cec8d8",    "router:external": false,    "shared": false,    "admin_state_up": true,    "port_security_enabled": true,    "is_default": false,    "mtu": 1500,    "network_type": "EVPNetwork",    "network_meta_uuid": "fed955d4-a398-4803-9762-38e563e23653",    "provider:physical_network": "",    "provider:network_type": "evpn",    "provider:segmentation_id": 0,    "status": "ACTIVE",    "subnets": [],    "tags": [],    "private_dns_domain": "mcs.local.",    "dns_domain": "mcs.local."  }]
  27. Выведете список всех образов:

    # openstack image list

    Если включён компонент Sprut, должен отображаться образ sprut-dc-router-image, иначе вывод должен быть пустым:

    Пример ожидаемого результата
    +--------------------------------------+-----------------------------+--------+| ID                                   | Name                        | Status |+--------------------------------------+-----------------------------+--------+| 0b4aa0a3-c563-452b-b48b-566fe02d3215 | sprut-dc-router-image.0.1.5 | active |+--------------------------------------+-----------------------------+--------+
  28. Создайте тестовый образ:

    # openstack image create image-test
    Пример ожидаемого результата
    +------------------+---------------------------------------------------------------------------------------------------------------------------------------------+| Field            | Value                                                                                                                                       |+------------------+---------------------------------------------------------------------------------------------------------------------------------------------+| container_format | bare                                                                                                                                        || created_at       | 2023-10-28T15:13:02Z                                                                                                                        || disk_format      | raw                                                                                                                                         || file             | /v2/images/780c0f09-59aa-4415-82bd-764449a02bbf/file                                                                                        || id               | 780c0f09-59aa-4415-82bd-764449a02bbf                                                                                                        || min_disk         | 0                                                                                                                                           || min_ram          | 0                                                                                                                                           || name             | image-test                                                                                                                                  || owner            | 2a38820cebc1438c8544787374ec3f7d                                                                                                            || properties       | locations='[]', owner_specified.openstack.md5='', owner_specified.openstack.object='images/image-test', owner_specified.openstack.sha256='' || protected        | False                                                                                                                                       || schema           | /v2/schemas/image                                                                                                                           || status           | queued                                                                                                                                      || tags             |                                                                                                                                             || updated_at       | 2023-10-28T15:13:02Z                                                                                                                        || visibility       | shared                                                                                                                                      |+------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
  29. Выведете список всех образов. В списке должен присутствовать ранее созданный образ:

    # openstack image list
    Пример ожидаемого результата
    +--------------------------------------+-------------+--------+| ID                                   | Name        | Status |+--------------------------------------+-------------+--------+| 780c0f09-59aa-4415-82bd-764449a02bbf | image-test  | queued |+--------------------------------------+-------------+--------+
  30. Удалите ранее созданный образ. Команда должна отработать без ошибок:

    # openstack image delete image-test
  31. Выведите список всех образов. В списке не должно быть ранее созданного образа (список должен быть пустым):

    # openstack image list

IaaS

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s iaas \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

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

  1. Подключитесь к управляющему узлу, на котором находится Bash-скрипт openrc.sh: ssh cpn002.

  2. Переключитесь на пользователя root и выполните Bash-скрипт для загрузки в переменные окружения параметров подключения к кластеру:

    $ sudo -i# . ~/openrc.sh
  3. Проверьте список сервисов Manila:

    # manila service-list
    Пример ожидаемого результата
    +----+------------------+-------------+------+---------+-------+----------------------------+  | Id | Binary           | Host        | Zone | Status  | State | Updated_at                 |  +----+------------------+-------------+------+---------+-------+----------------------------+  | 3  | manila-scheduler | cpn001      | AZ1  | enabled | up    | 2022-10-29T10:31:03.000000 |  | 6  | manila-scheduler | cpn003      | AZ1  | enabled | up    | 2022-10-29T10:31:12.000000 |  | 9  | manila-scheduler | cpn002      | AZ1  | enabled | up    | 2022-10-29T10:31:03.000000 |  | 12 | manila-share     | cpn001@ceph | AZ1  | enabled | up    | 2022-10-29T10:31:08.000000 |  | 15 | manila-share     | cpn003@ceph | AZ1  | enabled | up    | 2022-10-29T10:31:06.000000 |  | 18 | manila-share     | cpn002@ceph | AZ1  | enabled | up    | 2022-10-29T10:31:04.000000 |  +----+------------------+-------------+------+---------+-------+----------------------------+
  4. Проверьте доступные пулы для выделения ресурсов на создание хранилища:

    # manila pool-list
    Пример ожидаемого результата
    +------------------+--------+---------+------+  | Name             | Host   | Backend | Pool |  +------------------+--------+---------+------+  | cpn001@ceph#ceph | cpn001 | ceph    | ceph |  | cpn002@ceph#ceph | cpn002 | ceph    | ceph |  | cpn003@ceph#ceph | cpn003 | ceph    | ceph |  +------------------+--------+---------+------+
  5. Проверьте все дополнительные конфигурации:

    # manila extra-specs-list
    Пример ожидаемого результата
    +--------------------------------------+--------------------+-------------------------------------------+  | ID                                   | Name               | all_extra_specs                           |  +--------------------------------------+--------------------+-------------------------------------------+  | b1aa5e73-ff63-4d07-8c02-1d4d0d3ad74f | default_share_type | create_share_from_snapshot_support : True |  |                                      |                    | snapshot_support : True                   |  |                                      |                    | driver_handles_share_servers : True       |  +--------------------------------------+--------------------+-------------------------------------------+
  6. Проверьте все доступные зоны:

    # openstack loadbalancer availabilityzone list
    Пример ожидаемого результата
    +------+--------------------------------------+---------+  | name | availability_zone_profile_id         | enabled |  +------+--------------------------------------+---------+  | AZ1  | 7fe03e65-ccec-4211-b387-339cd0d018d6 | True    |  +------+--------------------------------------+---------+
  7. Проверьте список балансировщиков нагрузки:

    # openstack loadbalancer provider list
    Пример ожидаемого результата
    +---------+-------------------------------------------------+  | name    | description                                     |  +---------+-------------------------------------------------+  | amphora | The Octavia Amphora driver.                     |  | octavia | Deprecated alias of the Octavia Amphora driver. |  +---------+-------------------------------------------------+
  8. Подключитесь к управляющему узлу: ssh cpn003.

  9. Получите адрес Front:

    $ frontIP=$(sudo kubectl get -n mcs-front-vkcloud pods -l=app.kubernetes.io/instance=mcs -o=custom-columns='IP:.status.podIP' --no-headers | head -n 1)$ echo $frontIP
    Пример ожидаемого результата
    10.220.0.134
  10. Выполните запрос на Front, чтобы убедиться, что он отвечает на запросы:

    $ curl $frontIP/app
    Пример ожидаемого результата
    <!doctype html><html lang="ru"><head><title>Личный кабинет VK Cloud</title><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="robots" content="noindex,nofollow"/><meta name="viewport" content="width=1280,initial-scale=1"/><meta name="format-detection" content="email=no"/><meta name="theme-color" content="#ffffff"/><meta name="msapplication-TileColor" content="#060540"/><meta name="description" content="Полный доступ ко всем облачным сервисам: Виртуальные серверы, S3 - совместимое хранилище, базы данных, кластеры Kubernetes, большие данные, ML."/><meta name="keywords" content="s3,hotbox,icebox,backup,архив,infra,openstack,cloud,storge,облако,b2b"/><link rel="shortcut icon" type="image/x-icon" href="/private/static/50f958eb/favicon.ico" data-react-helmet="true"/><link rel="icon" type="image/png" sizes="32x32" href="/private/static/50f958eb/favicon-32x32.png" data-react-helmet="true"/><link rel="icon" type="image/png" sizes="16x16" href="/private/static/50f958eb/favicon-16x16.png" data-react-helmet="true"/><link rel="dns-prefetch" href="marketplace-prod.mcs.st"/>...
  11. Получите через деплой-ноду пароль от администратора Keystone:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\n{{ vault_keystone_bootstrap_password }}\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "9v05j1f6qJq6VlB94a77"}
  12. Подключитесь к управляющему узлу: ssh cpn003.

  13. Получите токен, используя ранее полученный пароль в параметре password:

    $ curl -s -i -H "Content-Type: application/json" -d '{ "auth": {"identity": {"methods": ["password"], "password": {"user": {"name": "admin", "domain": { "id": "default" }, "password": "9v05j1f6qJq6VlB94a77"}}}, "scope": {"project": {"name": "admin",  "domain": { "id": "default" }}}}}' "http://internal.private.infra.devmail.ru:35357/v3/auth/tokens" | grep x-subject-token:
    Пример ожидаемого результата
    x-subject-token: gAAAAABlP6sorAxPfFHeexmC0kI63KF4e8CexM-hFae3oT11IxUoHLOALeUj11P82HZpfDPlWKywRlXTZN66Opu3wkkDhnTCmP9kQWx_QuZuYx22Mdjj7BftVpPOeW6KkXVDejWf4FUFdj-sRKrYceWIIbiZnWpIg_OHywIieK8P5IUrkxBYzMY
  14. Получите адрес PRICE_API и выведите его:

    $ PRICE_API=$(sudo netstat -tln | grep -m1 3112 | awk '{print $4}')$ echo $PRICE_API
    Пример ожидаемого результата
    10.30.4.4:3112
  15. Получите ответ с доступными API-эндпоинтами, чтобы убедиться, что биллинг отвечает на запросы. Ранее полученный токен подставьте в заголовок X-Auth-Token:

    $ curl -g -i -X GET http://${PRICE_API}/v1/ -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: gAAAAABlP6sorAxPfFHeexmC0kI63KF4e8CexM-hFae3oT11IxUoHLOALeUj11P82HZpfDPlWKywRlXTZN66Opu3wkkDhnTCmP9kQWx_QuZuYx22Mdjj7BftVpPOeW6KkXVDejWf4FUFdj-sRKrYceWIIbiZnWpIg_OHywIieK8P5IUrkxBYzMY" -H "Content-Type: application/json"
    Пример ожидаемого результата — ошибка аутентификации
    HTTP/1.1 200 OKcontent-type: application/jsoncontent-length: 51["resource_types", "units", "calculators", "plans"]
  16. Получите список шаблонов квот:

    1. Получите адрес сервиса Quota-Manager, выполнив команду на деплой-ноде:

      # cd ~/inventory/vkcloud/# ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://quota-manager-public-superadmin.ep.{{ stand_domain_name }}/v2/templates/\n\n\"" all[0] | sed 's/\\n/\n/g'
      Пример ожидаемого результата — ошибка аутентификации
      cpn001 | SUCCESS => {    "msg": "http://quota-manager-public-superadmin.ep.private.infra.devmail.ru/v2/templates/"}
    2. Подключитесь к управляющему узлу с openrc.sh:

      # . openrc.sh
    3. Получите токен:

      # export TOKEN=$(openstack token issue -f value -c id)
    4. Подставьте полученные данные и выполните запрос:

      # curl -L -H "X-Auth-Token: $TOKEN" <QUOTA_MANAGER_ADDRESS>

      Здесь <QUOTA_MANAGER_ADDRESS> — адрес сервиса Quota-Manager, полученный ранее.

      Пример ответ с шаблонами квот для проектов
      [{"id":"213fbfdf-0e36-451c-b6b5-1dd2b3b363fd","name":"infra+paas","quotas":{"neutron":{"security_group_rule":200,"security_group":12,"floatingip":6,"subnet":10,"network":10,"router":12,"port":120},"cinder":{"volumes_ceph":10,"gigabytes_ceph":200,"volumes_high-iops":10,"gigabytes_high-iops":200,"gigabytes":200,"volumes":10},"nova":{"cores":9,"ram":28672,"instances":6},"manila":{"shares":10,"snapshot_gigabytes":200,"gigabytes":200,"snapshots":5,"share_networks":5},"octavia":{"load_balancer":12},"sprut":{"security_group_rule":200,"security_group":12,"floatingip":50,"subnet":10,"network":10,"router":12,"port":120}}},{"id":"78d1a5bb-3f11-4989-922c-c897bfab3569","name":"infra","quotas":{"neutron":{"security_group_rule":200,"security_group":12,"floatingip":6,"subnet":10,"network":10,"router":12,"port":120},"cinder":{"volumes_ceph":10,"gigabytes_ceph":200,"volumes_high-iops":3,"gigabytes_high-iops":100,"gigabytes":200,"volumes":10},"nova":{"cores":9,"ram":28672,"instances":6},"manila":{"shares":5,"snapshot_gigabytes":100,"gigabytes":100,"snapshots":5,"share_networks":5},"octavia":{"load_balancer":3},"sprut":{"security_group_rule":200,"security_group":3,"floatingip":20,"subnet":5,"network":5,"router":3,"port":30}}}]
  17. Выполните команду для проверки сервиса Karboii на Kube-мастере:

    $ sudo kubectl -n paas-vkcloud get pods -o wide | grep karboii
    Пример ожидаемого результата
    karboii-karti-api-779bc46456-2ctpb                           1/1     Running   0          3h8m   10.220.0.139   cpn003   <none>           <none>karboii-karti-api-779bc46456-87zfc                           1/1     Running   0          3h8m   10.220.1.238   cpn001   <none>           <none>karboii-karti-checkpoints-trigger-job-7c85fc97c7-j2frn       1/1     Running   0          3h8m   10.220.0.136   cpn003   <none>           <none>karboii-karti-healer-job-9966b64bd-6pnwc                     1/1     Running   0          3h8m   10.220.0.51    cpn002   <none>           <none>karboii-karti-metrics-job-5547c8cc74-bvr64                   1/1     Running   0          3h8m   10.220.0.31    cpn002   <none>           <none>karboii-karti-nova-backup-job-55f6c6ff68-8npz9               1/1     Running   0          3h8m   10.220.0.137   cpn003   <none>           <none>karboii-karti-nova-backups-deleter-v2-job-6d575776f5-v59fn   1/1     Running   0          3h8m   10.220.1.239   cpn001   <none>           <none>karboii-karti-nova-check-restore-job-54b5c88695-4pr2r        1/1     Running   0          3h8m   10.220.1.254   cpn001   <none>           <none>karboii-karti-nova-check-status-job-b557978c9-drxff          1/1     Running   0          3h8m   10.220.0.140   cpn003   <none>           <none>karboii-karti-nova-create-restore-job-5ff446bbd9-hvbrx       1/1     Running   0          3h8m   10.220.0.141   cpn003   <none>           <none>karboii-karti-nova-janitor-job-794b865d65-xj94z              1/1     Running   0          3h8m   10.220.1.248   cpn001   <none>           <none>karboii-karti-task-scheduler-job-b8c57b4cb-zfl5v             1/1     Running   0          3h8m   10.220.0.138   cpn003   <none>           <none>...
  18. Получите адрес сервиса Karboii, выполнив следующие команды на деплой-ноде:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://{{ openstack_public_endpoint_ip }}/infra/karboii/v1\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "http://lk.private.infra.devmail.ru/infra/karboii/v1"}
  19. Получите токен и ID проекта, выполнив на управляющем узле следующие команды:

    $ . openrc.sh
    $ TOKEN=$(openstack token issue -f value -c id)
    $ PROJECT_ID=$(openstack project show $OS_PROJECT_NAME -f value -c id)
  20. Подставьте полученные данные и выполните запрос:

    $ curl -L -H "X-Auth-Token: $TOKEN" <KARBOI_ADDRESS>/$PROJECT_ID/plans

    Здесь <KARBOI_ADDRESS> — адрес сервиса Karboii, полученный ранее.

    Пример ожидаемого результата
    {"plans":[]}

    В результате запроса отсутствуют планы резервного копирования.

PaaS

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s paas \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

После запуска cloud_audit_logs:

  1. Получите адрес сервиса Cloud Audit Logs, выполнив следующие команды на деплой-ноде:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://{{ openstack_public_endpoint_ip }}/auditlogs/v1\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "http://lk.private.infra.devmail.ru/auditlogs/v1"}
  2. Получите токен и ID проекта:

    # . openrc.sh
    # TOKEN=$(openstack token issue -f value -c id)
    # PROJECT_ID=$(openstack project show $OS_PROJECT_NAME -f value -c id)
  3. Выполните запрос в сервис:

    # curl -L -H "X-Auth-Token: $TOKEN" <AUDIT_LOGS_ADDRESS>/$PROJECT_ID/logs

    Здесь <AUDIT_LOGS_ADDRESS> — адрес сервиса Cloud Audit Logs, полученный ранее.

    Пример ожидаемого результата
    {"logs":[{"action":"unknown","event_id":"416e9692-417c-4f0c-985b-cd05aaf4c746","method":"POST","request_body":"{\"name\": \"noupdateserviceaccount\", \"version\": \"1.0.0\"}","request_id":"req-fea962fa-8b85-43df-abae-38fe332d210a","response_body":"{\"uuid\": \"624178dc-87c2-41c7-ad44-636c9dbe2f09\", \"name\": \"noupdateserviceaccount\" ... "}]}

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

  1. Проверьте сервис nexus-proxy:

    $ sudo kubectl -n nexus-vkcloud get pods
    Пример ожидаемого результата
    NAME                                       READY   STATUS    RESTARTS    AGEnexus-proxy-nexus-proxy-846b67bd5f-hqczw   1/1     Running   0           55m

Чтобы проверить Trove:

  1. Установите trove-клиент:

    $ yum install -y python3-troveclient
  2. Получите список типов БД:

    # trove-3 datastore-list
    Пример ожидаемого результата
    +-----------------------------------------+---------------------------+| ID                                      | Name                      |+-----------------------------------------+---------------------------+| b'3364addd-dfb0-43bf-af61-dbce1284b9f6' | b'clickhouse'             || b'3b180365-a33a-4d7f-a448-22376a846841' | b'postgresql'             || b'59d7b281-07b2-40a9-b54c-0ae2008bb01c' | b'postgrespro'            || b'61eb7361-c2f7-432a-ab51-a3ad45630286' | b'mysql'                  || b'a9abe463-f5bc-4984-9171-2255483fa5f2' | b'galera_mysql'           || b'be0abd87-e114-46d2-a1cf-1599a4166536' | b'mongodb'                || b'd2854806-97f3-4547-824c-677f7c6e6afe' | b'postgrespro_enterprise' || b'f422fc10-5ab4-4eec-a6ee-4f7ff5108342' | b'redis'                  |+-----------------------------------------+---------------------------+
  3. Убедитесь что список кластеров Magnum не пустой:

    # yum install python3-magnumclient -y# magnum cluster-template-list
    Пример ожидаемого результата
    +--------------------------------------+-------------------------------------------+| uuid                                 | name                                      |+--------------------------------------+-------------------------------------------+| 0e4c2f5b-3caa-4e21-a188-b1d1df1f783d | Kubernetes-almalinux-v1.26.5-mcs.external |+--------------------------------------+-------------------------------------------+
  4. Проверьте статистику Magnum:

    # magnum stats-list
    Пример ожидаемого результата
    +----------+-------+| Property | Value |+----------+-------+| clusters | 0     || nodes    | 0     |+----------+-------+

Если включён компонент XaaS, проверьте его готовность:

  1. Получите адрес сервиса, выполнив следующие команды на деплой-ноде:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://xaas.ep.{{ stand_domain_name }}/status\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "http://xaas.ep.private.infra.devmail.ru/status"}
  2. Запросите статус сервиса, выполнив следующую команду на управляющем узле:

    $ curl <XAAS_ADDRESS>/status

    Здесь <XAAS_ADDRESS> — адрес сервиса компонента XaaS, полученный ранее.

    Пример ожидаемого результата
    {"status": "ok"}

Если включён компонент MaaS, проверьте его готовность:

  1. Получите адрес сервиса, выполнив следующие команды на деплой-ноде:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://{{ openstack_public_endpoint_ip }}/infra/monitoring_dashboards/v1/\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "http://lk.private.infra.devmail.ru/infra/monitoring_dashboards/v1/"}
  2. Запросите статус сервиса, выполнив следующую команду на управляющем узле:

    $ curl -L <MAAS_ADDRESS>

    Здесь <MAAS_ADDRESS> — адрес сервиса компонента MaaS, полученный ранее.

    Пример ожидаемого результата
    {"status":"Ok","version":"1.1.2-44-g13a16d7"}

Если включён компонент LaaS, проверьте его готовность:

  1. Получите адрес сервиса, выполнив следующие команды на деплой-ноде:

    $ cd ~/inventory/vkcloud$ ansible -m debug -i vkcloud.yml -a "msg=\"\n\nhttp://{{ openstack_public_endpoint_ip }}/cloudlogs/admin/v1/services\n\n\"" all[0] | sed 's/\\n/\n/g'
    Пример ожидаемого результата
    cpn001 | SUCCESS => {    "msg": "http://lk.private.infra.devmail.ru/cloudlogs/admin/v1/services"}
  2. Выполните запрос к сервису:

    $ curl -L -H "X-Auth-Token: $TOKEN" <LAAS_ADDRESS>

    Здесь <LAAS_ADDRESS> — адрес сервиса компонента LaaS, полученный ранее.

    Пример ожидаемого результата
    {"items":[{"description":"Default logs","id":"default","name":"default","s3_export":false,"title":"Default","ttl":3},{"description":"Container logs","id":"containers","name":"containers","s3_export":false,"title":"Containers","ttl":3},{"description":"Database logs","id":"databases","name":"databases","s3_export":false,"title":"Databases","ttl":3}]}

Если включён glance_type_store:

  1. Проверьте вид хранения образов, после того как плейбук imageloader.yml загрузит образы в сервис Glance.

    В зависимости от значения параметра glance_type_store, будет использоваться RBD или S3.

  2. Проверьте вид хранения образов в сервисе Glance:

    1. Подключитесь к управляющему узлу:

      # . openrc.sh
    2. Получите список образов:

      # openstack image list
      Пример ожидаемого результата
      +--------------------------------------+--------------------------------------------------+--------+| ID                                   | Name                                             | Status |+--------------------------------------+--------------------------------------------------+--------+| 9c635fbb-906b-4b3b-a7fa-d57656bbeba0 | Clickhouse-22-2023-10-27_09-46-26                | active || f103f56f-513e-4876-a106-b12335b0c770 | GaleraMySQL-v8dot0-1.13.27-2023-10-25_08-01-00   | active || 0d246bd8-55e8-4a89-afb0-e4259eac04f9 | MongoDB-v4dot0--1.13.22-alma-2023-08-17_08-31-19 | active || 01b0f04a-2b71-40c6-bb30-a74a951d2777 | MySQL-v8dot0--1.13.22-alma-2023-08-17_08-31-19   | active || 47824b08-8f81-4b81-a9c0-a07baa1ee052 | PostgreSQL-14-2024-04-11_14-02-00                | active || d56fdc9f-9b11-44b1-aa91-9dd3c6719dfb | PostgresPro-14-2024-04-12_10-45-03               | active || ee2cec2a-bf77-4423-a9b4-46c633505d36 | PostgresProEnterprise-14-2024-04-12_10-45-03     | active || bf8e4c56-a1e2-4baf-9faa-198fe45539e1 | Redis-5-2023-10-26_12-05-13                      | active || 13fa622a-4814-4fd2-8728-0450888408bb | almalinux-9-v1.27.6.202404250842.gitb21e5933     | active || a41e7f38-06af-41e1-b5c1-02883a0493d3 | amphora-x64-haproxy-202110110805.gitf2ca0ca2     | active || c870ffa6-262e-4e43-b898-c7f633f1db29 | manila-service-image-20220426                    | active || 0b4aa0a3-c563-452b-b48b-566fe02d3215 | sprut-dc-router-image.0.1.5                      | active |+--------------------------------------+--------------------------------------------------+--------+
    3. Получите адрес хранения для любого из перечисленных образов:

      # openstack image show Clickhouse-22-2023-10-27_09-46-26 -c properties -f json | jq .properties.direct_url
      Пример адреса, если параметр glance_type_store содержит значение rbd
      rbd://590c3474-daa1-40db-844d-f8e8d3ad2ad9/glance-images/9c635fbb-906b-4b3b-a7fa-d57656bbeba0/snap
      Пример адреса, если параметр glance_type_store содержит значение s3
      s3://U4gEEbeBvQhedNBztLtH:UvM4WmBqF8jnaUGI9x0X@10.30.3.21:9000/glance/286a3431-0b5b-42bf-96ee-0f43969d642a

Postdeploy

Установка

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

$ ../ansible-openstack/tools/box.sh deploy \   -s postdeploy \   -b ../ansible-openstack \   -i vkcloud.yml

Проверка

Чтобы проверить результат работы Potsdeploy:

  1. Подключитесь к управляющему узлу, на котором находится Bash-скрипт openrc.sh (на текущий момент он будет скопирован на все Controlplane-ноды): ssh cpn003

  2. Переключитесь на пользователя root и выполните Bash-скрипт для загрузки в переменные окружения параметров подключения к кластеру:

    $ sudo -i# . ~/openrc.sh
  3. Получите список образов виртуальных машин:

    # openstack image list
    Пример ожидаемого результата
    +--------------------------------------+----------------------------------------------+--------+| ID                                   | Name                                         | Status |+--------------------------------------+----------------------------------------------+--------+| bc051721-4666-4b02-8463-8220fec10fb6 | Almalinux-9.2                                | active || 2f059b3d-efef-4d05-a519-fec8576a8bcf | Astra_Linux_SE_1.7.2_Orel_GUI                | active || c365aa77-9f78-4ff6-8eb8-b0ba8849060c | CentOS-7.9-22082022                          | active || 5da2979b-5a56-4811-86de-69ea56c8077b | RO732_MIN-STD                                | active || 2c4f7d9a-38ee-4257-80a1-1b96b8551b02 | Ubuntu-22.04-202208                          | active || b12e8012-f31d-4abd-9692-05ec27513775 | almalinux-9-v1.26.5.202310172030.git3ca8b01a | active || 914d7fdd-9a22-4e5e-94ce-bc275d6299dd | alt-server-10-rev20230208-x86_64             | active || 9515a531-e5ce-4a03-bd8a-400ac9075b3a | amphora-x64-haproxy-202110110805.gitf2ca0ca2 | active || 88e3e8cb-12cf-433a-8c74-e20650c9b40f | cirros-0.5.1-x86_64                          | active |+--------------------------------------+----------------------------------------------+--------+

    В ответ передаётся список образов ВМ. Статусы образов должны быть active.

  4. Получите список образов виртуальных сетей:

    1. Если параметр vars.network_address_cloudexternal задан, необходимо проверить создание единой внешней сети:

      # openstack network list
      Пример ожидаемого результата
      +--------------------------------------+---------------------------+--------------------------------------+| ID                                   | Name                      | Subnets                              |+--------------------------------------+---------------------------+--------------------------------------+| 0388e4dd-b50f-4deb-80d3-094f95656541 | manila_service_network    |                                      || 4098e5b4-f648-465a-b031-f843d4e53e7f | lb-mgmt-net-AZ1           | 695630bb-3d5e-4200-93fb-c46ccd958ca2 || 77b3516f-4a59-4740-bf35-e9a303cec6f1 | external                  | 34979516-a0c6-4429-8591-87b583eace11 || 00fdc86e-de15-4e09-8112-aaa82fb60d3b | dc_router_service_eph_net | 852e52f0-a386-48a4-8452-06f3ee856bcb |+--------------------------------------+---------------------------+--------------------------------------+

      В списке должна присутствовать сеть, заданная в переменных vars.external_network_name, vars.external_networks_extend.

    2. Если параметр vars.network_address_cloudexternal не задан или отсутствует, необходимо проверить создание сетей провайдера, описанных в vars.postdeploy_provider_network:

      # openstack network list
      Пример ожидаемого результата
      +--------------------------------------+------------------------+--------------------------------------+| ID                                   | Name                   | Subnets                              |+--------------------------------------+------------------------+--------------------------------------+| 54427686-9a4e-4cb7-a806-ac376ea0a058 | provider_net1          | dbbbb0cf-064b-4621-acaf-6e1845f036d4 || bc6ba9f2-b79d-4ed9-b1f9-317dc8f06225 | provider_net2          | 39220fa4-f8b9-4d82-9bed-7e41d4932f07 |...+--------------------------------------+------------------------+--------------------------------------+