Salt Bundle

1. Salt Bundle이란 무엇입니까?

Salt Bundle은 Salt Minion, Python 3, 필수 Python 모듈 및 라이브러리가 포함된 단일 바이너리 패키지입니다.

Salt Bundle은 Python 3 및 Salt이 실행되는 데 필요한 모든 요구 사항과 함께 제공됩니다. 따라서 Salt Bundle은 클라이언트에 설치된 시스템 소프트웨어의 Python 버전을 사용하지 않습니다. Salt Bundle은 특정 Salt 버전의 요구 사항을 충족하지 않는 클라이언트에 설치할 수 있습니다.

SUSE Multi-Linux Manager Salt Master가 아닌 Salt Master에 연결된 Salt Minion을 실행하는 시스템에서도 Salt Bundle을 사용할 수 있습니다.

2. Salt Bundle을 Minion으로 클라이언트 등록

Salt Bundle을 통한 등록 방법은 권장되는 등록 방법입니다. 이 섹션에서는 현재 구현의 장점과 한계를 설명합니다.

Salt Bundle은 venv-salt-minion 패키지로 제공되며, Salt, Python 3과 Salt이 필요로 하는 Python 모듈로 구성됩니다.

Web UI로 부팅하는 것은 Salt Bundle을 사용하는 것이므로, Web UI로 부팅하는 것은 Python에 의존하지 않습니다. Salt Bundle을 사용하면 클라이언트가 Python 인터프리터나 모듈을 제공할 필요가 없습니다.

새 클라이언트를 부팅하는 경우 Salt Bundle을 통한 등록이 기본 방법입니다. 기존 클라이언트를 Salt Bundle 방법으로 전환할 수 있습니다. 전환하는 경우 salt-minion 패키지와 그 의존성은 설치된 상태로 유지됩니다.

2.1. Salt Minion과 함께 Salt Bundle 사용하기

Salt Bundle은 SUSE Multi-Linux Manager Server가 아닌 Salt Master에 의해 관리되는 Salt Minion과 동시에 사용할 수 있습니다. 클라이언트에 Salt Bundle이 설치된 경우 SUSE Multi-Linux Manager Server는 Salt Bundle의 구성 파일을 관리하며, 이 경우 `salt-minion`의 구성 파일은 관리되지 않습니다. 자세한 내용은 Salt Bundle 구성을 참조하십시오.

  • SUSE Multi-Linux Manager 서버가 아닌 Salt Master가 관리하는 Salt Minion으로 클라이언트를 부팅하려면 부팅 스크립트를 생성할 때 mgr-bootstrap --force-bundle`을(를) 사용하는 것이 좋습니다. 또는 부팅 스크립트에서 `FORCE_VENV_SALT_MINION`을(를) `1(으)로 설정하십시오.

  • 부팅 시 Web UI을(를) 사용하고, `mgr_force_venv_salt_minion`이(가) `true`으로 설정된 경우에는 pillar를 전역적으로 지정할 수 있습니다. 자세한 내용은 Salt States and Pillars을 참조하십시오.

2.2. Salt 미니언에서 Salt 번들로 전환

Salt 상태 util.mgr_switch_to_venv_minion`은(는) `salt-minion`에서 `venv-salt-minion(으)로 전환하는 데 사용할 수 있습니다. 문제 발생을 피하기 위해 `venv-salt-minion`으로 전환하는 것이 두 단계로 권장됩니다:

절차 util.mgr_switch_to_venv_minion 상태를 사용하여 venv-salt-minion(으)로 전환
  1. 필러를 지정하지 않고 util.mgr_switch_to_venv_minion`을(를) 먼저 적용하십시오. 이로 인해 구성 파일 등을 복사하여 `venv-salt-minion`으로 전환됩니다. 원래 `salt-minion 구성 및 패키지는 정리되지 않습니다.

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion
  2. util.mgr_switch_to_venv_minion`을(를) `mgr_purge_non_venv_salt`이(가) `True(으)로 설정하여 적용하여 salt-minion`을(를) 제거하고, `mgr_purge_non_venv_salt_files`을(를) `True(으)로 설정하여 salt-minion`과(와) 관련된 모든 파일을 제거하십시오. 이 두 번째 단계에서는 첫 번째 단계가 처리되었는지 확인한 후 이전 구성 파일과 현재 사용되지 않는 `salt-minion 패키지를 제거합니다.

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion pillar='{"mgr_purge_non_venv_salt_files": True, "mgr_purge_non_venv_salt": True}'

2.3. 추가 유의 사항

  • 첫 번째 단계를 건너뛰고 두 번째 단계만 실행하는 경우, 클라이언트 측에서 명령을 실행하는 데 사용되는 `salt-minion`을(를) 중지해야 하므로 상태 적용 프로세스가 실패할 수 있습니다.

  • Salt Bundle을 설치하지 않고 `salt-minion`을(를) 계속 사용할 수도 있습니다. 이 경우 다음 옵션 중 하나를 지정하십시오:

    • --no-bundle 옵션과 함께 `mgr-bootstrap`을(를) 실행하십시오.

    • 생성된 부팅 스크립트에서 AVOID_VENV_SALT_MINION`을(를) `1(으)로 설정하십시오.

    • 부팅 상태의 경우 /srv/pillar/salt_bundle_config.sls`에서 `mgr_avoid_venv_salt_minion 필러를 True(으)로 설정하십시오.

3. Salt 번들을 사용한 SSH Push

Salt 번들은 클라이언트로 SSH Push 작업을 수행할 때도 사용됩니다.

셸 스크립트는 `venv-salt-minion`을(를) 설치하기 전에, 그리고 어떤 Salt 명령이 실행되기 전에 Salt Bundle을 대상 시스템에 배포합니다. Salt Bundle에는 전체 Salt 코드베이스가 포함되어 있으므로 `salt-thin`은(는) 배포되지 않습니다. SSH Push(부트스트랩에 Web UI를 사용하는 경우 포함)는 번들 내의 Python 3 인터프리터를 사용합니다. 대상 시스템에는 다른 Python 인터프리터가 설치될 필요가 없습니다.

Bundle과 함께 배포된 Python 3는 클라이언트에서 SSH Push 세션을 처리하는 데 사용되므로, SSH Push(Web UI을 사용한 부트스트랩 포함)는 시스템에 설치된 Python에 종속되지 않습니다.

salt-thin`을 대체 방법으로 활성화할 수 있지만, 클라이언트에 Python 3가 설치되어 있어야 합니다. 이 방법은 권장되지도 않고 지원되지도 않으며, 개발 목적으로만 존재합니다. `/etc/rhn/rhn.conf 구성 파일에서 web.ssh_use_salt_thin`을(를) `true(으)로 설정합니다.

  • 클라이언트를 Web UI로 부트스트랩하기 전에 부트스트랩 리포지토리를 생성해야 합니다. SSH Push는 감지된 대상 운영 체제를 기반으로 부트스트랩 리포지토리에서 가져온 Salt Bundle을 사용합니다. 자세한 내용은 client-configuration:bootstrap-repository.adoc#_prepare_to_create_a_bootstrap_repository을 참조하십시오.

  • SSH Push는 /var/tmp`를 사용하여 Salt Bundle을 배포하고, 번들된 Python으로 클라이언트에서 Salt 명령을 실행합니다. 따라서 `/var/tmp`를 `noexec 옵션으로 마운트해서는 안 됩니다. noexec 옵션으로 `/var/tmp`이(가) 마운트된 클라이언트는 SSH Push를 사용하여 클라이언트에 접근하는 부팅 프로세스 때문에 Web UI(으)로 부팅할 수 없습니다.

4. `pip`를 사용하여 Python 패키지로 Salt Bundle을 확장하기

Salt Bundle에는 번들된 Salt 미니언의 기능을 추가 Python 패키지로 확장할 수 있도록 `pip`이(가) 포함되어 있습니다.

기본적으로 `salt <minion_id> pip.install <package-name>`은(는) `<package_name>`에 지정된 Python 패키지를 `/var/lib/venv-salt-minion/local`에 설치합니다.

필요한 경우 /var/lib/venv-salt-minion/local`에 대한 `VENV_PIP_TARGET 환경 변수를 설정하여 venv-salt-minion.service 경로를 재정의할 수 있습니다. 서비스에 대해 systemd 드롭인 구성 파일을 사용하는 것이 권장됩니다. /etc/systemd/system/venv-salt-minion.service.d/10-pip-destination.conf 구성 파일로 수행할 수 있습니다:

[Service]
Environment=VENV_PIP_TARGET=/new/path/local/venv-salt-minion/pip

`pip`를 통해 설치된 Python 패키지는 Salt Bundle을 업데이트해도 변경되지 않습니다. 이러한 패키지가 업데이트 후에도 사용할 수 있고 정상적으로 작동하도록 하려면, Salt Bundle 업데이트 후에 적용되는 Salt 상태로 설치하는 것이 권장됩니다.