Spec-Zone.ru › Chef 16

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

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

В следующих разделах описывается, как устранять неполадки с сервером Chef Infra Server, клиентом Chef Infra Client и рабочей станцией Chef Workstation.

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

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

Не удалось аутентифицироваться как ORGANIZATION-валидатор

Если вы получаете ошибку, подобную следующей, скорее всего, потребуется перегенерировать файл 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 Server состоит из многих взаимодействующих служб, этот шаг может занять несколько минут.

Внешний PostgreSQL

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

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

Причина

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

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

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

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

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

Решение

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

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. Например, запись 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 должны разрешать только определённые имена приложений: $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