Полезные команды

В этом уроке вы найдете команды, которые пригодятся при администрировании DataLens On-premises.

Получение всех логов со всех контейнеров приложения

./init.sh --stern .

Сбор логов только с одного сервиса

./init.sh --stern --tail 100 --no-follow deployment/datalens-enterprise-auth

Получение всех событий K8s-кластера в текущем пространстве имен

./init.sh --kubectl get events

Развертывание на урезанной конфигурации

Минимальная конфигурация, которую мы рекомендуем для комфортной работы:

- vCPU  8;
- RAM  16 ГБ;

При необходимости можно развернуть и при такой конфигурации:

- vCPU  4;
- RAM  8 ГБ;

И даже при такой (при условии деградации производительности):

- vCPU  2;
- RAM  4 ГБ;

Для переопределения значений выделенных ресурсов для сервисов укажите необходимые значения в файле values.yaml.

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

application:
    control_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    data_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    ui:
    replicas: 1
    version: '0.95.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 256Mi
        limits:
        memory: 512Mi
    us:
    replicas: 1
    version: '0.79.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 512Mi
        limits:
        memory: 1024Mi
    auth:
    replicas: 1
    version: '0.34.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi

Для еще более сжатой конфигурации можно указать так:

application:
    control_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 256Mi
        limits:
        memory: 512Mi
    data_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    ui:
    replicas: 1
    version: '0.95.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.25
        memory: 256Mi
        limits:
        memory: 512Mi
    us:
    replicas: 1
    version: '0.79.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 256Mi
        limits:
        memory: 512Mi
    auth:
    replicas: 1
    version: '0.34.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 256Mi
        limits:
        memory: 512Mi

После указания настроек можно применить значения через команду ./init.sh --values ./values.yaml.

Откат на предыдущий релиз

export KUBECONFIG="/etc/rancher/k3s/k3s.yaml"

./bin/helm-amd64 rollback datalens-enterprise -n datalens-enterprise

Отладка LDAP-интеграции

ldapsearch \
-H ldap://localhost:8389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=users,dc=example,dc=org \
"(uid=bob)"
ldapsearch \
-H ldap://localhost:8389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=groups,dc=example,dc=org \
"(&(objectClass=groupOfNames)(member=uid=bob,ou=users,dc=example,dc=org))"

Генерация нового пароля администратора

echo ""
echo "Generate DataLens password hash..."

PASSWORD_LENGTH=32

PASSWORD_VALUE=$(openssl rand -base64 "${PASSWORD_LENGTH}" | tr -dc a-zA-Z0-9 | head -c "${PASSWORD_LENGTH}")

SALT=$(openssl rand 16)
SALT_HEX=$(echo -n "${SALT}" | od -A n -t x1 -v | tr -d ' \n')
SALT_BASE64URL=$(echo -n "${SALT}" | base64 | tr '+/' '-_' | tr -d '=')

echo "  new admin password: ${PASSWORD_VALUE}"

KEY_LENGTH=64
COST_ITERATIONS=16384
BLOCK_SIZE=8
PARALLELIZATION=1
MAX_MEMORY_BYTES=33554432

KEY_BASE64URL=$(
  openssl kdf -keylen "${KEY_LENGTH}" \
    -kdfopt "pass:${PASSWORD_VALUE}" -kdfopt "hexsalt:${SALT_HEX}" \
    -kdfopt "n:${COST_ITERATIONS}" -kdfopt "r:${BLOCK_SIZE}" -kdfopt "p:${PARALLELIZATION}" \
    -kdfopt "maxmem_bytes:${MAX_MEMORY_BYTES}" \
    -binary scrypt | base64 | tr '+/' '-_' | tr -d '='
)

PASSWORD_HASH="${SALT_BASE64URL}:${KEY_BASE64URL}"
            
echo "  new hash: ${PASSWORD_HASH}"

Обновление пароля администратора в базе

psql \
    --host "${POSTGRES_HOST}" \
    --port "${POSTGRES_PORT}" \
    --username "${POSTGRES_USER_AUTH}" \
    --dbname "${POSTGRES_DB_AUTH}" <<-EOSQL
  UPDATE auth_users SET password = '${PASSWORD_HASH}' WHERE login = 'admin';
EOSQL

Ошибка авторизации Access denied

image

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

    secrets.AUTH_TOKEN_PRIVATE_KEY 
    secrets.AUTH_TOKEN_PUBLIC_KEY
    
  2. Если использовался режим развертывания через файл values.yaml, то эти секреты нужно сгенерировать самостоятельно.

    Пример файла values.yaml:

    KUBECONFIG=~/.kube/config ./init.sh --values ./values.deploy.yaml --ingress-domain <domain> --disable-postgres
    

    Команда для генерации ключа:

    openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096
    

Авторизация проходит успешно, но страница авторизации появляется по кругу

  • В Auth-сервисе можно проверить значение переменной UI_APP_ENDPOINT — именно на это значение выписывается Cookie авторизации.
  • Если пользователь заходит в сервис по другому эндпоинту, то авторизация будет выполняться с некорректным значением Cookie.

Получение ключа шифрования CONTROL_API_CRYPTO_KEYиз секретов K8s

./init.sh --kubectl get secret datalens-enterprise-secrets -o jsonpath='{.data.CONTROL_API_CRYPTO_KEY}' | base64 -d; echo

Вывод все равно будет в формате base64. Это не ошибка, это значение ключа в base64, которое и нужно сохранить.

Восстановление воркбука по его ID

 ./init.sh --kubectl exec -it deploy/datalens-enterprise-us -- node -e "fetch('http://localhost:8080/private/v2/workbooks/<WORKBOOK_ID>/restore',{method:'POST',headers:{'content-type':'application/json','x-us-master-token':process.env.MASTER_TOKEN}}).then(r=>r.json()).then(console.log)"

Где <WORKBOOK_ID> — ID воркбука.

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

./init.sh --pg sh -c 'psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB_US}" -c "SELECT encode_id(workbook_id) AS workbook_id,deleted_at FROM workbooks WHERE deleted_at IS NOT NULL"'

Заполнять ничего не нужно, скопируйте и вставьте команду как есть.

Итоги

Вы узнали о полезных командах, которые пригодятся для решения задач администрирования DataLens On-premises.