Spec-Zone.ru › Chef 16

Запуск узла

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

Узел — это любое физическое, виртуальное или облачное устройство, которое настраивается и обслуживается экземпляром Chef Infra Client. Запуск узла устанавливает Chef Infra Client на целевую систему, чтобы она могла работать как клиент, и настраивает узел для взаимодействия с сервером Chef Infra Server. Существует два способа сделать это:

  • Запустите команду knife bootstrap со станцией разработки.
  • Выполните установку без участия пользователя для запуска с самого узла, без необходимости подключения SSH или WinRM.

На следующей схеме показаны этапы операции запуска узла, а в списке ниже схемы подробно описаны каждый из этих этапов.

image

Во время операции запуска knife bootstrap происходит следующее:

Этапы Описание
knife bootstrap Введите подкоманду knife bootstrap со станции разработки. Включите имя хоста, IP-адрес или полное доменное имя целевого узла в качестве части этой команды. Knife установит соединение SSH или WinRM с целевой системой и запустит скрипт запуска.

Получение скрипта установки от Chef

Скрипт оболочки запросит на веб-сайте Chef последнюю версию скрипта установки Chef Infra Client (install.sh или install.ps1).

Получение пакета Chef Infra Client от Chef Скрипт установки собирает системную информацию и определяет соответствующий пакет для Chef Infra Client, а затем загружает соответствующий пакет с omnitruck-direct.chef.io.
Установка Chef Infra Client Chef Infra Client устанавливается на целевой узел с помощью системного пакета (.rpm, .msi и т. д.).

Запуск выполнения Chef Infra Client

На машинах на базе UNIX и Linux: второй скрипт оболочки выполняет двоичный файл chef-client с набором начальных параметров, хранящихся в first-boot.json на узле. first-boot.json генерируется со станции разработки как часть начальной подкоманды knife bootstrap.

На машинах Microsoft Windows: пакетный файл, полученный из шаблона windows-chef-client-msi.erb, выполняет двоичный файл chef-client с набором начальных параметров, хранящихся в first-boot.json на узле. first-boot.json генерируется со станции разработки как часть начальной подкоманды knife bootstrap.

Завершение выполнения Chef Infra Client

Выполнение Chef Infra Client продолжается с использованием HTTPS (порт 443) и регистрирует узел с сервером Chef Infra Server.

Первое выполнение Chef Infra Client по умолчанию содержит пустой список задач. Список задач можно указать в рамках начальной операции запуска узла, используя параметр --run-list в рамках подкоманды knife bootstrap.

Минимальный рекомендуемый список задач рецепта на узле

Вам не нужно выбирать полный список задач рецепта run-list, если вы не уверены, с какими рецептами вы хотите запустить узел. При запуске Chef Infra Client 15.x, как минимум, рекомендуется добавить ресурс cron в книга рецептов chef-client в ваш список задач. Это поможет вам контролировать, как и когда будет выполняться команда chef-client и поддерживать текущую конфигурацию. Используйте параметр -r или --run-list с подкомандой knife bootstrap, чтобы задать список задач на узле, например -r recipe[myrecipe::cron].

Windows

По умолчанию системы Windows будут запускать книгу рецептов chef-client как запланированную задачу, если ваш список задач будет выглядеть так: recipe[chef-client::default].

Клиенты, похожие на Unix

Хотя это не по умолчанию, вы должны настроить клиенты, похожие на Unix, для запуска книги рецептов chef-client как запланированной задачи с помощью cronjob или systemd.

cronjob

Для простоты или если вы используете Chef Infra Client 15.x, вы должны запустить cronjob. Вызовите ресурс chef_client_cron и установите действие :add в своем собственном рецепте для вашего начального списка задач. В Chef Infra Client 16.x делайте то же самое, но вам не понадобится книга рецептов chef-client, так как ресурс доступен напрямую.

systemd

Используйте systemd, если вы уже знакомы с ним и оно доступно и активно в вашей системе. Для Chef Infra Client 15.x выберите рецепт recipe[chef-client::default] для вашего начального списка задач и убедитесь, что атрибут node['chef_client']['systemd']['timer'] = true установлен. Для Chef Infra Client 16.x используйте встроенный ресурс chef_client_systemd_timer с действием :add в своем рецепте и установите этот рецепт в качестве вашего начального списка задач.

См. репозиторий книги рецептов chef-client для получения дополнительной информации о конфигурации.

knife bootstrap

Команда knife bootstrap — это распространенный способ установки Chef Infra Client на узел. По умолчанию для этого подхода предполагается, что узел может получить доступ к веб-сайту Chef, чтобы загрузить пакет Chef Infra Client с этого места.

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

Установщик Chef Infra Client помещает все в уникальный каталог (/opt/chef/), чтобы Chef Infra Client не вмешивался в работу других приложений, которые могут выполняться на целевой машине. После установки Chef Infra Client требуется несколько дополнительных шагов настройки, прежде чем он сможет выполнить первое выполнение Chef Infra Client на узле.

Запуск команды запуска узла

Подкоманда knife bootstrap используется для запуска операции запуска узла, которая устанавливает Chef Infra Client на целевой узел. Следующие шаги описывают, как запустить узел с помощью knife.

  1. Определите полное доменное имя (FQDN) или IP-адрес целевого узла. Команда knife bootstrap требует FQDN или IP-адрес узла для завершения операции запуска узла.

  2. После настройки машины со станции разработки ее можно использовать для установки Chef Infra Client на один (или несколько) узлов в организации с помощью операции запуска узла с помощью knife. Команда knife bootstrap используется для подключения SSH к целевой машине и выполнения необходимых действий для запуска Chef Infra Client на узле. Он установит исполняемый файл Chef Infra Client (если необходимо), сгенерирует ключи и зарегистрирует узел с сервером Chef Infra Server. Для операции запуска узла требуется IP-адрес или FQDN целевой системы, учетные данные SSH (имя пользователя, пароль или идентификационный файл) для учетной записи с правами root на узле и (если операционная система не Ubuntu, которая является стандартной дистрибуцией, используемой knife bootstrap) операционная система, работающая на целевой системе.

    В окне командной строки введите следующее:

    knife bootstrap 172.16.1.233 -U USERNAME --sudo
    

    где 172.16.1.233 — IP-адрес или FQDN узла, USERNAME — имя пользователя, которое вы хотите использовать для подключения, а --sudo указывает на повышение привилегий с помощью команды sudo в системах на базе UNIX.

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

    Enter password for ubuntu@172.16.1.233:
    
    Connecting to 172.16.1.233
    Performing legacy client registration with the validation key at /Users/USERNAME/.chef/validator.pem...
    Delete your validation key in order to use your user credentials for client registration instead.
    Bootstrapping 172.16.1.233
    [172.16.1.233] -----> Installing Chef Omnibus (stable/16)
    downloading https://omnitruck.chef.io/chef/install.sh
    [172.16.1.233]   to file /tmp/install.sh.1624/install.sh
    [172.16.1.233] trying wget...
    [172.16.1.233] ubuntu 20.04 aarch64
    [172.16.1.233] Getting information for chef stable 16 for ubuntu...
    [172.16.1.233] downloading https://omnitruck.chef.io/stable/chef/metadata?v=16&p=ubuntu&pv=20.04&m=aarch64
      to file /tmp/install.sh.1628/metadata.txt
    [172.16.1.233] trying wget...
    [172.16.1.233] sha1  8d89f8ac2e7f52d170be8ec1c2a028a6449d7e3a
    sha256  85cc73bed06e8d6699fc5c0b26c20d2837bf03831873444febccfc8bfa561f00
    url  https://packages.chef.io/files/stable/chef/16.1.16/ubuntu/20.04/chef_16.1.16-1_arm64.deb
    version  16.1.16
    [172.16.1.233]
    [172.16.1.233] downloaded metadata file looks valid...
    [172.16.1.233] downloading https://packages.chef.io/files/stable/chef/16.1.16/ubuntu/20.04/chef_16.1.16-1_arm64.deb
      to file /tmp/install.sh.1628/chef_16.1.16-1_arm64.deb
    [172.16.1.233] trying wget...
    [172.16.1.233] Comparing checksum with sha256sum...
    [172.16.1.233] Installing chef 16
    installing with dpkg...
    [172.16.1.233] Selecting previously unselected package chef.
    [172.16.1.233] (Reading database ... 99114 files and directories currently installed.)
    [172.16.1.233] Preparing to unpack .../chef_16.1.16-1_arm64.deb ...
    [172.16.1.233] Unpacking chef (16.1.16-1) ...
    [172.16.1.233] Setting up chef (16.1.16-1) ...
    [172.16.1.233] Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io
    [172.16.1.233] Starting the first Chef Infra Client Client run...
    [172.16.1.233] +---------------------------------------------+
    ✓ 2 product licenses accepted.
    +---------------------------------------------+
    [172.16.1.233] Starting Chef Infra Client, version 16.1.16
    [172.16.1.233] [2020-06-08T23:49:10+00:00] ERROR: shard_seed: Failed to get dmi property serial_number: is dmidecode installed?
    [172.16.1.233] Creating a new client identity for name_of_node using the validator key.
    [172.16.1.233] resolving cookbooks for run list: []
    [172.16.1.233] Synchronizing Cookbooks:
    [172.16.1.233] Installing Cookbook Gems:
    [172.16.1.233] Compiling Cookbooks...
    [172.16.1.233] [2020-06-08T23:49:17+00:00] WARN: Node name_of_node has an empty run list.
    [172.16.1.233] Converging 0 resources
    [172.16.1.233]
    [172.16.1.233] Running handlers:
    [172.16.1.233] Running handlers complete
    [172.16.1.233] Chef Infra Client finished, 0/0 resources updated in 11 seconds
    
  3. После завершения операции запуска узла проверьте, распознает ли сервер Chef Infra Server узел. Чтобы отобразить только что запущенный узел, выполните следующую команду:

    knife client show NAME_OF_NODE
    

    где NODE_NAME — имя узла, который только что был запущен. Сервер Chef Infra Server вернет что-то подобное:

    admin:     false
    chef_type: client
    name:      NODE_NAME
    validator: false
    

    и чтобы отобразить полный список узлов (и станций разработки), зарегистрированных на сервере Chef Infra Server, выполните следующую команду:

    knife client list
    

    Сервер Chef Infra Server вернет что-то подобное:

    workstation1
    workstation2
    ...
    client1
    client2
    

Запуск узлов без валидаторов и устаревшего валидатора

Мы рекомендуем использовать «запуск узла без валидаторов», чтобы аутентифицировать новые узлы на сервере Chef Infra Server.

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

Недостатки устаревшего процесса валидатора:

  • Все пользователи используют один и тот же ключ для запуска новых систем
  • Обмен ключами затрудняет его смену, если он скомпрометирован или если сотрудник увольняется из организации.

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

Процесс запуска Chef Infra по умолчанию не использует валидатор. Если при запуске узла появляется предупреждение о том, что используется ключ валидатора, удалите конфигурацию для этого устаревшего режима запуска. Измените файл config.rb (knife.rb) и удалите все записи validation_key или validation_client_name.

Запуск узла с помощью chef-vault

Используйте следующие параметры с запуском узла без валидатора, чтобы указать элементы, хранящиеся в chef-vault:

--bootstrap-vault-file VAULT_FILE

Путь к файлу JSON, содержащему список хранилищ и элементов, которые необходимо обновить.

--bootstrap-vault-item VAULT_ITEM

Одно хранилище и элемент для обновления как vault:item.

--bootstrap-vault-json VAULT_JSON

Строка JSON, содержащая список хранилищ и элементов, которые необходимо обновить. —bootstrap-vault-json ‘{ “vault1”: [“item1”, “item2”], “vault2”: “item2” }’

Примеры

Параметры --bootstrap-vault-* добавляют идентификатор клиента узла запуска в список разрешений указанного элемента хранилища. Это позволяет недавно запущенному Chef Infra Client читать элементы из хранилища. Одновременно для доступа к хранилищу разрешен только один клиент. (Параметр поиска -S с подкомандой knife vault create делает то же самое.)

Воссоздание элемента пакета данных

Следующий пример демонстрирует, как воссоздать элемент пакета данных:

knife vault delete sea power
Do you really want to delete sea/power? (Y/N) Y
Deleted chef_vault_item[sea/power]

echo "{\"some\":\"content for them\"}" > sea-power-content.json

cat sea-power-content.json
{"some":"content for them"}

knife vault create sea power -M client -A sean_horn,angle -J sea-power-content.json

Нет клиентов, потому что опция -S не была указана при создании хранилища.

В настоящее время только пользователи sean_horn и angle имеют право читать и управлять хранилищем.

knife vault show sea power  --mode client -p all
admins:
  sean_horn
  angle
clients:
id:           power
search_query:
some:         content for them

Это определенно зашифрованный набор данных, видите?

knife data_bag show sea power
WARNING: Encrypted data bag detected, but no secret provided for decoding.  Displaying encrypted data.
id:   power
some:
cipher:         aes-256-cbc
encrypted_data: c7Axnyg+1KDxBPOZdYN9QuIYx6dmSmK70unAQbn12Lygvsv2g9DPJJbueXVh
+yxL
iv:             ONoVR7OjPZiAzaqOZ30bjg==
version:        1

Использование –bootstrap-vault-file

Сначала используйте шаг регенерации sea:power выше, чтобы отследить разницу в разрешениях хранилища.

echo "{\"sea\":\"power\"}" > sea-power-bootstrap-vault-file.json

knife bootstrap localhost -p 2200 -N ubuntu-20.04 -r 'role[group1]' --connection-user vagrant --sudo --bootstrap-vault-file sea-power-bootstrap-vault-file.json
Node ubuntu-20.04 exists, overwrite it? (Y/N) Y
Client ubuntu-20.04 exists, overwrite it? (Y/N) Y
Creating new client for ubuntu-20.04
Creating new node for ubuntu-20.04
Connecting to localhost
localhost -----> Existing Chef installation detected
localhost Starting first Chef Client run...
localhost Starting Chef Client, version 12.2.1
localhost resolving cookbooks for run list: ["delay-test-reporting"]
localhost Synchronizing Cookbooks:
localhost   - delay-test-reporting
localhost Compiling Cookbooks...
localhost Converging 1 resources
localhost Recipe: delay-test-reporting::default
localhost   * execute[sleep 30] action run
localhost     - execute sleep 30
localhost
localhost Running handlers:
localhost Running handlers complete
localhost Chef Client finished, 1/1 resources updated in 34.307257232 seconds

Клиент ubuntu-20.04 был добавлен к chef-vault во время запуска bootstrap.

knife vault show sea power  --mode client -p all
admins:
  sean_horn
  angle
clients:      ubuntu-20.04
id:           power
search_query:
some:         content for them

Использование –bootstrap-vault-item

Сначала используйте шаг регенерации sea:power выше, чтобы отследить разницу в разрешениях хранилища.

knife bootstrap localhost -p 2200 -N ubuntu-20.04 -r 'role[group1]' --connection-user vagrant --sudo --bootstrap-vault-item sea:power
Node ubuntu-20.04 exists, overwrite it? (Y/N) Y
Client ubuntu-20.04 exists, overwrite it? (Y/N) Y
Creating new client for ubuntu-20.04
Creating new node for ubuntu-20.04
Connecting to localhost
localhost -----> Existing Chef installation detected
localhost Starting first Chef Client run...
localhost Starting Chef Client, version 12.2.1
localhost resolving cookbooks for run list: ["delay-test-reporting"]
localhost Synchronizing Cookbooks:
localhost   - delay-test-reporting
localhost Compiling Cookbooks...
localhost Converging 1 resources
localhost Recipe: delay-test-reporting::default
localhost   * execute[sleep 30] action run
localhost     - execute sleep 30
localhost
localhost Running handlers:
localhost Running handlers complete
localhost Chef Client finished, 1/1 resources updated in 34.322229474
seconds

Во время выполнения вышеуказанной команды элемент хранилища sea:power был обновлен клиентом ubuntu-20.04 во время запуска bootstrap без валидатора. Ранее только два администратора имели право просматривать содержимое.

knife vault show sea power -p all
admins:
  sean_horn
  angle
clients:      ubuntu-20.04
id:           power
search_query: role:stuff
some:         secret stuff for them

Затем давайте проверим клиента ubuntu-20.04. Сам клиент может расшифровать и прочитать содержимое зашифрованного набора данных, используя встроенный интерфейс командной строки knife в пакете Chef Infra Client.

sudo /opt/chef/bin/knife vault show sea power -c /etc/chef/client.rb -M client -p all
admins:
  sean_horn
  angle
clients:      ubuntu-20.04
id:           power
search_query: role:group1
some:         secret stuff for them

Успешно! Клиент имеет право просматривать содержимое элемента набора данных sea:power

Использование –bootstrap-vault-json

Сначала используйте шаг регенерации sea:power выше, чтобы отследить разницу в разрешениях хранилища.

knife bootstrap localhost -p 2200 -N ubuntu-20.04 -r 'role[group1]' --connection-user vagrant --sudo --bootstrap-vault-json '{"sea": "power"}'
Node ubuntu-20.04 exists, overwrite it? (Y/N) Y
Client ubuntu-20.04 exists, overwrite it? (Y/N) Y
Creating new client for ubuntu-.04
Creating new node for ubuntu-20.04
Connecting to localhost
localhost -----> Existing Chef installation detected
localhost Starting first Chef Client run...
localhost Starting Chef Client, version 12.2.1
localhost resolving cookbooks for run list: ["delay-test-reporting"]
localhost Synchronizing Cookbooks:
localhost   - delay-test-reporting
localhost Compiling Cookbooks...
localhost Converging 1 resources
localhost Recipe: delay-test-reporting::default

localhost   * execute[sleep 30] action run
localhost     - execute sleep 30
localhost
localhost Running handlers:
localhost Running handlers complete
localhost Chef Client finished, 1/1 resources updated in 33.732784033 seconds
knife vault show sea power -M client -p all
admins:
  sean_horn
  angle
clients:      ubuntu-20.04
id:           power
search_query:
some:         content for them

Установка без участия пользователя

Chef Infra Client можно установить с помощью автоматизированного запуска. Это позволяет установить Chef Infra Client из самого себя без необходимости SSH. Например, машины часто создаются с использованием сред, таких как AWS Auto Scaling, AWS CloudFormation, Rackspace Auto Scale и PXE. В этом случае использование инструментов для установки на отдельной машине, таких как knife bootstrap или knife CLOUD_PLUGIN create, непрактично, потому что машины создаются автоматически, и не всегда есть возможность инициировать процесс запуска.

При установке Chef Infra Client с помощью автоматизированного запуска помните, что Chef Infra Client:

  • Должен иметь возможность аутентификации на сервере Chef Infra
  • Должен уметь настроить список запуска
  • Возможно, потребуются пользовательские атрибуты, в зависимости от используемых кулинарных книг
  • Должен иметь доступ к chef-validator.pem, чтобы создать новую учетную запись на сервере Chef Infra
  • Должен иметь уникальное имя узла; Chef Infra Client по умолчанию будет использовать FQDN для системы хоста

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

Автоматизированный запуск с данными пользователя

Метод вставки скрипта данных пользователя в сервер будет зависеть от используемой платформы инфраструктуры. Например, в AWS вы можете передать эти данные как текстовый файл с помощью командной строки.

Следующие примеры данных пользователя демонстрируют процесс автоматизированного запуска узлов Windows и Linux.

Данные пользователя PowerShell

## Set host file so the instance knows where to find chef-server
$hosts = "1.2.3.4 hello.example.com"
$file = "C:\Windows\System32\drivers\etc\hosts"
$hosts | Add-Content $file

## Download the Chef Client
$clientURL = "https://packages.chef.io/files/stable/chef/12.19.36/windows/2012/chef-client-<version-here>.msi"
$clientDestination = "C:\chef-client.msi"
Invoke-WebRequest $clientURL -OutFile $clientDestination

## Install the Chef Client
Start-Process msiexec.exe -ArgumentList @('/qn', '/lv C:\Windows\Temp\chef-log.txt', '/i C:\chef-client.msi', 'ADDLOCAL="ChefClientFeature,ChefSchTaskFeature,ChefPSModuleFeature"') -Wait

## Create first-boot.json
$firstboot = @{
   "run_list" = @("role[base]")
}
Set-Content -Path c:\chef\first-boot.json -Value ($firstboot | ConvertTo-Json -Depth 10)

## Create client.rb
$nodeName = "lab-win-{0}" -f (-join ((65..90) + (97..122) | Get-Random -Count 4 | % {[char]$_}))

$clientrb = @"
chef_server_url        'https://chef-server/organizations/my-org'
validation_client_name 'validator'
validation_key         'C:\chef\validator.pem'
node_name              '{0}'
"@ -f $nodeName

Set-Content -Path c:\chef\client.rb -Value $clientrb

## Run Chef
C:\opscode\chef\bin\chef-client.bat -j C:\chef\first-boot.json

Данные пользователя Bash

#!/bin/bash -xev

# Do some chef pre-work
/bin/mkdir -p /etc/chef
/bin/mkdir -p /var/lib/chef
/bin/mkdir -p /var/log/chef

# Setup hosts file correctly
cat >> "/etc/hosts" << EOF
10.0.0.5    compliance-server compliance-server.automate.com
10.0.0.6    infra-server infra-server.automate.com
10.0.0.7    automate-server automate-server.automate.com
EOF

cd /etc/chef/

# Install chef
curl -L https://omnitruck.chef.io/install.sh | bash || error_exit 'could not install chef'

# Create first-boot.json
cat > "/etc/chef/first-boot.json" << EOF
{
   "run_list" :[
   "role[base]"
   ]
}
EOF

NODE_NAME=node-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 4 | head -n 1)

# Create client.rb
cat > '/etc/chef/client.rb' << EOF
log_location            STDOUT
chef_server_url         'https://aut-chef-server/organizations/my-org'
validation_client_name  'my-org-validator'
validation_key          '/etc/chef/my_org_validator.pem'
node_name               "${NODE_NAME}"
EOF

chef-client -j /etc/chef/first-boot.json

Важно, чтобы настройки в файле client.rb — chef_server_url, http_proxy и так далее — использовались для того, чтобы обеспечить включение данных конфигурации в процесс автоматизированного запуска.

Установление начального списка запуска

Начальный список запуска узла определяется с помощью JSON-файла на системе хоста. При запуске Chef Infra Client как исполняемого файла используйте параметр -j, чтобы указать Chef Infra Client, какой JSON-файл использовать. Например:

chef-client -j /etc/chef/file.json --environment _default

где file.json аналогичен:

{
  "resolver": {
    "nameservers": [ "10.0.0.1" ],
    "search":"int.example.com"
  },
  "run_list": [ "recipe[resolver]" ]
}

и где _default — это имя среды, назначенной узлу.

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

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

© 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/install_bootstrap/

Spec-Zone.ru

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