Spec-Zone.ru › Chef 18

Поиск и устранение неполадок

[править на GitHub]

В следующих разделах описано, как устранять неполадки с Chef Infra Server, Chef Infra Client и Chef Workstation.

401 Неавторизован

Существует несколько причин возникновения ошибки Chef 401 «Неавторизован», поэтому используйте разделы ниже, чтобы найти сообщение об ошибке, наиболее соответствующее вашему выводу. Если вы не сможете найти соответствующую ошибку или предложенные шаги не помогут, пожалуйста, отправьте запрос в службу поддержки.

Не удалось авторизоваться как ORGANIZATION-validator

Если вы получаете ошибку, подобную следующей, скорее всего, потребуется перегенерировать файл ORGANIZATION-validator.pem:

INFO: Client key /etc/chef/client.pem is not present - registering
INFO: HTTP Request Returned 401 Unauthorized: Failed to authenticate as ORGANIZATION-validator. Ensure that your node_name and client key are correct.
FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 401 "Unauthorized"

Шаги по устранению неполадок

  1. Проверьте, существует ли файл ORGANIZATION-validator.pem в одном из следующих расположений:

    ~/.chef
    ~/projects/current_project/.chef
    /etc/chef
    

    Если он есть, проверьте, что у него установлены правильные разрешения на чтение.

  2. Если файла ORGANIZATION-validator.pem нет, перегенерируйте его.

    Пересоздайте этот файл, перейдя в веб-интерфейс консоли управления Chef и выбрав Организации в правом верхнем углу экрана.

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

Не удалось авторизоваться в

Если значения некоторых настроек в файле client.rb — node_name и client_key — некорректны, авторизация в Chef Infra Server не будет успешной. Показывается ошибка, похожая на следующую:

ERROR: Failed to authenticate to https://api.opscode.com/organizations/ORGANIZATION as USERNAME with key /path/to/USERNAME.pem
Response:  Failed to authenticate as USERNAME. Ensure that your node_name and client key are correct.

Шаги по устранению неполадок

  • Убедитесь, что в вашем файле config.rb правильные значения, особенно для настроек node_name и client_key.

  • Проверьте, существует ли файл, на который ссылается настройка client_key (обычно USER.pem). Некоторые распространенные расположения:

    • ~/.chef

    • ~/projects/current_project/.chef

    • /etc/chef

      Если он есть, проверьте, что у него установлены правильные разрешения на чтение.

  • Если файла client.rb нет, перегенерируйте его и убедитесь, что значения настроек node_name и client_key корректны.

Организация не найдена

Если при попытке пересоздания ORGANIZATION-validator.pem вы видите эту ошибку, возможно, сам Chef Infra Client был удален. В этой ситуации ORGANIZATION-validator.pem нужно пересоздать. В этих инструкциях ORGANIZATION следует заменить именем вашей организации.

Для сброса ключа chef-validator:

  1. Откройте консоль управления Chef.

  2. Нажмите Политика.

  3. Нажмите Клиенты.

  4. Выберите ключ chef-validator.

  5. Перейдите на вкладку Детали.

  6. Нажмите Сбросить ключ.

  7. В диалоговом окне Сбросить ключ подтвердите, что ключ нужно перегенерировать, и нажмите кнопку Сбросить ключ:

    image

  8. Скопируйте закрытый ключ:

    image

    или загрузите и сохраните закрытый ключ локально:

    image

Синхронизируйте время на вашем хосте

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

INFO: Client key /etc/chef/client.pem is not present - registering
INFO: HTTP Request Returned 401 Unauthorized: Failed to authenticate as ORGANIZATION-validator. Synchronize the clock on your host.
FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 401 "Unauthorized"

Для решения этой ошибки синхронизируйте часы с сервером NTP.

Все остальные ошибки 401

Ошибка Net::HTTPClientException: 401 "Unauthorized" общего вида обычно возникает по одной из двух причин.

Шаги по устранению неполадок

  1. Убедитесь, что ваш client.pem действителен.

    Это можно исправить, удалив client.pem в /etc/chef и удалив клиента и узел с помощью knife.

    На станции управления:

    # Dump the current node to JSON
    knife node show NODE_NAME -fJ > NODE_NAME.json
    
    knife client delete FQDN -y
    knife node delete FQDN -y
    

    На узле, который подвергся воздействию (как root):

    rm /etc/chef/client.pem
    chef-client
    

    При запуске Chef Infra Client клиент API будет зарегистрирован и будет сгенерирован правильный ключ.

    После успешного запуска Chef Infra Client на узле перезагрузите атрибуты run_list и узла:

    knife node from file NODE_NAME.json
    
  2. Убедитесь, что вы используете тот же node_name , что и при первоначальном запуске Chef Infra Client.

    Это может произойти по ряду причин. Например, если в файле client.rb не указано правильное имя узла, и имя хоста системы изменилось.

    Запуск chef-client -l debug позволит определить имя узла, используемого Chef Infra Client для попыток аутентификации:

    DEBUG: Signing the request as SOME_NODE_NAME
    

    Это можно исправить, явно задав node_name в файле client.rb так, чтобы оно совпадало с именем, первоначально использовавшимся для регистрации.

    node_node 'mynode.mycompany.com'
    

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

403 Запрещено

Если вы видите подобный вывод:

FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 403 "Forbidden"

это указывает на проблему с разрешениями на Chef Infra Server.

Шаги по устранению неполадок

В Chef существуют два типа проблем с разрешениями: специфичные для объекта и глобальные. Чтобы определить, с каким типом проблемы вы столкнулись, снова запустите Chef Infra Client с опциями -l debug , чтобы увидеть отладочную информацию.

Вы должны увидеть что-то вроде этого в стеке вызовов:

DEBUG: Sending HTTP Request to https://api.opscode.com/organizations/ORGNAME/nodes
ERROR: Running exception handlers

URL поможет определить тип проблемы с разрешениями. Если URL — это действие индекса (т. е. работа с коллекцией ресурсов, например, /nodes), то это глобальная проблема с разрешениями. Если URL относится к экземпляру коллекции (т. е. /nodes/NODENAME), то это проблема с разрешениями на объект.

Для решения проблем с глобальными разрешениями:

  1. Войдите в консоль управления Chef и перейдите к объекту, вызвавшему ошибку (вероятно, Узлы).

  2. Перейдите на вкладку Разрешения. Какие разрешения необходимы, зависит от того, какой запрос завершился ошибкой:

    GET - В разделе группы убедитесь, что разрешение LIST включено POST - В разделе группы убедитесь, что разрешение CREATE включено

  3. Установите необходимые флажки и сохраните изменения.

Для решения проблем с разрешениями на объекты:

  1. Войдите в консоль управления Chef и перейдите к объекту, вызвавшему ошибку (вероятно, Узлы).

  2. Выберите объект в списке, вызывающий ошибку.

  3. Перейдите на вкладку Разрешения. Какие разрешения необходимы, зависит от типа запроса, завершившегося ошибкой:

    GET - Убедитесь, что включено разрешение READ PUT - Убедитесь, что включено разрешение UPDATE DELETE - Убедитесь, что включено разрешение DELETE

  4. Установите необходимые флажки и сохраните изменения.

500 (Неожиданно)

HTTP 500 — это неопределенное сообщение об ошибке. Полное сообщение об ошибке, которое получает Chef Infra Client, можно найти в одном из следующих лог-файлов:

  • /var/log/opscode/opscode-account/current
  • /var/log/opscode/opscode-erchef/current

Ошибка, скорее всего, будет найдена в стеке вызовов приложения. В некоторых случаях сообщение об ошибке четко укажет проблему с другим сервисом, который можно дополнительно исследовать. Для неявных ошибок, пожалуйста, свяжитесь с Chef и приложите лог-файлы.

502 / 504 (Шлюз)

Определите, какой сервис API возвращает 504, используя журналы доступа Nginx. Запросы API, возвращающие 504, можно найти с помощью следующей команды на переднем конце:

grep 'HTTP/1.1" 504' /var/log/opscode/nginx/access.log

Следующее извлечет URL-адреса и отсортирует их по количеству uniq:

grep 'HTTP/1.1" 504' nginx-access.log | cut -d' ' -f8 | sort | uniq -c | sort

В крупной установке вам может потребоваться ограничить это подмножеством запросов:

tail -10000 nginx-access.log | grep 'HTTP/1.1" 504' | cut -d' ' -f8 | sort | uniq -c | sort

Вы также можете использовать утилиту ntail.

Если проблемный сервис основан на Ruby, а на машинах переднего плана есть свободный объем оперативной памяти или процессора, рассмотрите возможность увеличения числа рабочих процессов. Если проблемный сервис — opscode-erchef, используйте журнал запросов, чтобы определить, какой конкретный компонент запросов работает медленно.

Проблемы с рабочим процессом

Работая с Chef, вы, скорее всего, столкнетесь с проблемами в обычном рабочем процессе. Эта страница содержит сборник распространенных ошибок, о которых сообщали наши пользователи при работе с Chef. Используйте раскрывающийся список ниже, чтобы выбрать сообщение об ошибке, наиболее соответствующее вашему выводу. Если вы не сможете найти соответствующую ошибку или предложенные шаги не помогут, пожалуйста, отправьте запрос в службу поддержки.

Файл или директория не найдены

Если вы видите ошибку, подобную:

Client key /etc/chef/client.pem is notresent - registering
WARN: Failed to read the private key /etc/che/validation.pem: #<Errno::ENOENT: No such file or directory - /etc/chef/validation.pem>
FATAL: Stacktrace dumped to /etc/chef/cache/chef-stacktrace.out
FATAL: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests

Это означает, что Chef Infra Client не смог найти ваш файл validation.pem.

Шаги по устранению неполадок

  1. Убедитесь, что ваши validation.pem или ORGANIZATION-validator.pem загружены и доступны для текущего пользователя.
  2. Убедитесь, что ваш client.rb указывает на расположение файла validator pem.

Сохраните или заархивируйте изменения

Это не совсем ошибка, но может сбивать с толку новых пользователей. Когда вы пытаетесь установить кулинарную книгу с изменениями, которые не были сохранены в git, вы получите эту ошибку:

Installing getting-started to /home/jes/chef-repo/.chef/../cookbooks
ERROR: You have uncommitted changes to your cookbook repo:
 M cookbooks/getting-started/recipes/default.rb
 ?? .chef/
 ?? log
Commit or stash your changes before importing cookbooks

Шаги по устранению неполадок

Решите эту проблему, сохранив изменения кулинарной книги. Например, следующая команда сохранит все новые изменения с сообщением «обновления».

git commit -am "Updating so I can install a site cookbook"

Повторите подкоманду knife supermarket install снова, чтобы установить кулинарную книгу сообщества.

Файл конфигурации не найден

Если вы видите ошибку, подобную:

WARN: ***************************************
WARN: Can not find config file: /etc/chef/client.rb, using defaults.
WARN: No such file or directory - /etc/chef/client.rb
# ... output truncated ... #
FATAL: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests!

Шаги по устранению неполадок

Обойдите эту проблему, указав полный путь к файлу client.rb:

chef-client -c /etc/chef/client.rb

Pivotal.rb не существует

Если вы видите ошибку, подобную:

ERROR: CONFIGURATION ERROR:Specified config file /etc/opscode/pivotal.rb does not exist

Шаги по устранению неполадок

Запустите следующее, чтобы перезапустить все службы:

chef-server-ctl reconfigure

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

Внешний PostgreSQL

При настройке сервера Chef Infra для использования удаленного сервера PostgreSQL могут отображаться следующие сообщения об ошибках.

CSPG001 (изменённое значение)

Причина

Было изменено значение postgresql['external'].

Возможные причины

  • Это значение должно быть установлено перед выполнением chef-server-ctl reconfigure, и после этого его нельзя изменять.

Предупреждение

На данный момент обновление не поддерживается.

Решение

  • Создайте резервную копию данных с помощью knife ec backup, создайте новый экземпляр бэкенда и затем восстановите данные.
  • Перенаправьте машины фронта на новый экземпляр бэкенда или назначьте новому экземпляру бэкенда имя/виртуальный IP-адрес старого экземпляра бэкенда (включая сертификаты, ключи и так далее).

CSPG010 (невозможно подключиться)

Причина

Невозможно подключиться к PostgreSQL на удаленном сервере.

Возможные причины

  • PostgreSQL не запущен на удаленном сервере.
  • Порт, используемый PostgreSQL, заблокирован брандмауэром на удаленном сервере.
  • Настройка маршрутизации сети препятствует доступу к хосту.
  • При использовании Amazon Web Services (AWS) правила для групп безопасности препятствуют общению сервера Chef Infra с PostgreSQL.

CSPG011 (невозможно авторизоваться)

Причина

Невозможно авторизоваться в PostgreSQL на удаленном сервере.

Возможные причины

  • Указан неверный пароль для db_superuser_password.
  • Указано неверное имя пользователя для db_superuser.

CSPG012 (неправильные правила)

Причина

Невозможно подключиться к PostgreSQL на удаленном сервере, потому что правила в pg_hba неверны.

Возможные причины

  • Нет правила pg_hba.conf для db_superuser в PostgreSQL.
  • Правило для db_superuser в pg_hba.conf, но оно не определяет доступ md5.
  • Правило в pg_hba.conf указывает неверный адрес источника.

Решение

Записи в файле pg_hba.conf должны разрешать:

  • Все имена пользователей, которые исходят от любого экземпляра сервера Chef Infra, использующего аутентификацию md5.
  • Конкретные имена приложений: $db_superuser (настроенное имя суперпользователя в файле chef-server.rb), oc_id, oc_id_ro, opscode_chef, opscode_chef_ro, bifrost, и bifrost_ro
Имена пользователей в pg_hba.conf

Например, запись pg_hba.conf для действительного имени пользователя и пароля из подсети 192.0.2.0:

host     postgres     all     192.0.2.0/24     md5

или, конкретные именованные пользователи с действительным паролем, исходящие из подсети 192.0.2.0. Необходимо создать файл с именем $PGDATA/chef_users со следующим содержимым:

opscode_chef
opscode_chef_ro
bifrost
bifrost_ro
oc_id
oc_id_ro

где CHEF-SUPERUSER-NAME заменяется тем же именем пользователя, указанным в postgresql['db_superuser']. Соответствующая запись pg_hba.conf аналогична:

host     postgres     @chef_users     192.168.93.0/24     md5

или, используя тот же файл $PGDATA/chef_users (из предыдущего примера), следующий пример показывает способ ограничения подключений к конкретным узлам, на которых запущены компоненты сервера Chef Infra. Этот подход требует большего обслуживания, так как файл pg_hba.conf необходимо обновлять при добавлении или удалении машин из конфигурации сервера Chef Infra. Например, конфигурация с высокой доступностью с четырьмя узлами: backend-1 (192.0.2.100), backend-2 (192.0.2.101), frontend-1 (192.0.2.110) и frontend-2 (192.0.2.111).

Соответствующая запись pg_hba.conf аналогична:

host     postgres     @chef_users     192.0.2.100     md5
host     postgres     @chef_users     192.0.2.101     md5
host     postgres     @chef_users     192.0.2.110     md5
host     postgres     @chef_users     192.0.2.111     md5

Эти изменения также требуют перезагрузки конфигурации для PostgreSQL:

pg_ctl reload

или:

SELECT pg_reload_conf();
Имена приложений в pg_hba.conf

Правила в файле pg_hba.conf должны разрешать только определенные имена приложений:

  • $db_superuser (настроенное имя суперпользователя в файле chef-server.rb)
  • oc_id
  • oc_id_ro
  • opscode_chef
  • opscode_chef_ro
  • bifrost
  • bifrost_ro

CSPG013 (неправильные разрешения)

Причина

Учетная запись db_superuser имеет неправильные разрешения.

Возможные причины

  • Учетной записи db_superuser не предоставлен доступ SUPERUSER

  • Учетной записи db_superuser не предоставлены привилегии CREATE DATABASE и CREATE ROLE.

    ALTER ROLE "$your_db_superuser_name" WITH SUPERUSER
    

    или:

    ALTER ROLE "$your_db_superuser_name"  WITH CREATEDB CREATEROLE
    

CSPG014 (неправильная версия)

Причина

Неправильная версия PostgreSQL.

Возможные причины

  • На удаленном сервере не запущена версия PostgreSQL 9.2.x

CSPG015 (база данных отсутствует)

Причина

Шаблон базы данных template1 не существует.

Возможные причины

  • Шаблон базы данных template1 был удален с удаленного сервера.

Решение

  • Выполните следующую команду (как суперпользователь):

    CREATE DATABASE template1 TEMPLATE template0
    

    или:

    createdb -T template0 template1
    

CSPG016 (база данных существует)

Причина

Одна или несколько баз данных PostgreSQL уже существуют.

Возможные причины

  • Базы данных opscode_chef, oc_id, и/или bifrost уже существуют на удаленном компьютере.
  • База данных PostgreSQL существует для другого приложения.

Решение

  • Убедитесь, что базы данных opscode_chef, oc_id, и/или bifrost существуют, а затем проверьте, что они не используются другим внутренним приложением.
  • Создайте резервную копию данных PostgreSQL, удалите существующие базы данных и перенастройте сервер Chef.

CSPG017 (пользователь существует)

Причина

Один или несколько предопределенных пользователей PostgreSQL уже существуют.

Возможные причины

  • Пользователи opscode_chef, ospcode_chef_ro, bifrost, bifrost_ro, oc_id, или oc_id_ro уже существуют на удаленном компьютере.
  • Настройка параметра postgresql['vip'] на удаленный хост, но postgresql['external'] не установлено в true, что приводит к созданию пользователей opscode_chef и ospcode_chef_ro перед перенастройкой машины, что приведет к ошибке разрешений.
  • Существуют конфликты именования, где пользователи были созданы независимо от сервера Chef.

Решение

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

    DROP ROLE "name-of-user";
    

    или измените имя пользователя, обновив следующие настройки в файле конфигурации chef-server.rb:

    oc_id['sql_user'] = 'alternative_username'
    oc_id['sql_ro_user'] = alternative_username_for_ro_access'
    opscode_erchef['sql_user'] = 'alternative_username'
    opscode_erchef['sql_ro_user'] = 'alternative_username_for_ro_access'
    oc_bifrost['sql_ro_user'] = 'alternative_username'
    oc_bifrost['sql_ro_user'] = 'alternative_username_for_ro_access'
    

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/errors/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API