Настройка Ключ-АСТРОМ ЕдиныйАгент как контейнер Docker

Материал из Документация Ключ-АСТРОМ
Версия от 22:54, 10 декабря 2025; IKuznetsov (обсуждение | вклад) (Новая страница: «В этой теме объясняется, как запустить ЕдиныйАгент в виде контейнера '''Docker''' для внедрен...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

В этой теме объясняется, как запустить ЕдиныйАгент в виде контейнера Docker для внедрения полного стека. Следуйте этому подходу, если вы используете среду выполнения Docker без платформы оркестрации.

Поддерживаемые версии

Развертывание ЕдиногоАгента через контейнер Docker поддерживается для версий Docker Engine 1.10–1.13.1, 17.03+ CE и EE и доступно только для хостов на базе Linux. Установка внутри контейнера не поддерживается. Для получения дополнительной информации см. ограничения данной модели развертывания (ниже).

Требования

  • Создайте токен PaaS.
  • Ваша среда Docker должна позволять контейнеру ЕдиныйАгент работать в привилегированном режиме.
  • Директория /opt должна существовать на хосте, где вы развертываете контейнер ЕдиныйАгент.
Начиная с версии образа 1.11.1000, образ Docker ЕдиныйАгент больше не поставляется с встроенным установщиком ЕдиногоАгента. Вместо этого установщик загружается из вашей среды во время процесса запуска образа. Образ обратно совместим с новыми версиями ЕдиногоАгента, и нет никакой конкретной связи между версией ЕдиногоАгента и версией образа. Единственная существующая зависимость — это требование минимальной поддерживаемой версии ЕдиногоАгента для данной версии образа. Подробности см. в таблице ниже:
Версия образа Минимально необходимая версия ЕдиногоАгента
1.11.1000 - 1.12.1000 1.119
1.13.1000 - 1.21.1000 1.139
>= 1.22.1000 1.157

Найдите URL-адрес установщика ЕдиногоАгента

Первый шаг — получить информацию о местоположении файла ONEAGENT_INSTALLER_SCRIPT_URL. Эта информация будет предоставлена ​​вам во время установки ЕдиногоАгента.

Чтобы получить свой ONEAGENT_INSTALLER_SCRIPT_URL

  1. В разделе Расширения выберите ЕдиныйАгент.
  2. Выберите Настройка > Linux.
  3. Определите URL-адрес и токен скрипта установки с помощью команды, предоставленной пользовательским интерфейсом wget:
Версия образа контейнера ЕдиныйАгент: 1.39.1000+ Образ контейнера ЕдиныйАгент версии 1.38.1000 и более ранних
Замените значение параметра arch на <arch>. Игнорируйте параметр flavor=default.

Ваш URL-адрес должен выглядеть примерно так: https://host.domain.com/api/v1/deployment/installer/agent/unix/default/latest?arch=<arch>

Это ваш ONEAGENT_INSTALLER_SCRIPT_URL.

Добавьте токен API к URL-адресу, используя параметр API-Token. Ваш URL-адрес должен выглядеть примерно так:

https://host.domain.com/api/v1/deployment/installer/agent/unix/default/latest?arch=x86&flavor=default&Api-Token=<token>

Это ваш ONEAGENT_INSTALLER_SCRIPT_URL.

Запустите ЕдиныйАгент в виде контейнера Docker

Для запуска ЕдиногоАгента в качестве контейнера Docker у вас есть два варианта.

Без AppArmor

Выполните следующую команду docker run на всех ваших Docker-хостах, убедившись, что вы передаете URL-адрес и токен, определенные ранее, в качестве значений переменных ONEAGENT_INSTALLER_SCRIPT_URL окружения ONEAGENT_INSTALLER_DOWNLOAD_TOKEN.

Версия образа контейнера ЕдиныйАгент: 1.39.1000+ Образ контейнера ЕдиныйАгент версии 1.38.1000 и более ранних
docker run -d

--restart=on-failure:5

--read-only=true

--pid=host

--net=host

--cap-drop ALL

--cap-add CHOWN

--cap-add DAC_OVERRIDE

--cap-add DAC_READ_SEARCH

--cap-add FOWNER

--cap-add FSETID

--cap-add KILL

--cap-add NET_ADMIN

--cap-add NET_RAW

--cap-add SETFCAP

--cap-add SETGID

--cap-add SETUID

--cap-add SYS_ADMIN

--cap-add SYS_CHROOT

--cap-add SYS_PTRACE

--cap-add SYS_RESOURCE

--security-opt apparmor:unconfined

-v /:/mnt/root

-v <volume name>:/mnt/volume_storage_mount

-e ONEAGENT_ENABLE_VOLUME_STORAGE=true

-e ONEAGENT_INSTALLER_SCRIPT_URL=<REPLACE_WITH_YOUR_URL>

-e ONEAGENT_INSTALLER_DOWNLOAD_TOKEN=<Api-Token>

astromkey/oneagent <INSTALLER_PARAMETERS>

docker run -d

--restart=on-failure:5

--pid=host

--net=host

--cap-drop ALL

--cap-add CHOWN

--cap-add DAC_OVERRIDE

--cap-add DAC_READ_SEARCH

--cap-add FOWNER

--cap-add FSETID

--cap-add KILL

--cap-add NET_ADMIN

--cap-add NET_RAW

--cap-add SETFCAP

--cap-add SETGID

--cap-add SETUID

--cap-add SYS_ADMIN

--cap-add SYS_CHROOT

--cap-add SYS_PTRACE

--cap-add SYS_RESOURCE

--security-opt apparmor:unconfined

-v /:/mnt/root

-e ONEAGENT_INSTALLER_SCRIPT_URL=<REPLACE_WITH_YOUR_URL>

-e ONEAGENT_INSTALLER_DOWNLOAD_TOKEN=<Api-Token>

astromkey/oneagent <INSTALLER_PARAMETERS>

С AppArmor

1. Перейдите в указанную директорию /etc/apparmor.d и создайте файл oneagent со следующим содержимым:

Образ контейнера ЕдиныйАгент версии 1.88.1000 (1.289) и выше Версия образа контейнера ЕдиныйАгент ниже 1.88.1000 (1.289)
#include <tunables/global>

@{INITIAL_HOST_ROOT}=/mnt/root

@{VOLUME_MOUNT}=/mnt/volume_storage_mount

@{DOCKER_VOLUME_PATH}=/mnt/root/var/lib/docker/volumes/astromkey_oneagent_storage/_data

@{HOST_ROOT}={/mnt/host_root,@{VOLUME_MOUNT}/host_root,@{DOCKER_VOLUME_PATH}/host_root}

@{INSTALL_PATH}=/opt/astromkey/oneagent

@{CONFIG_PATH}=/var/lib/astromkey/oneagent

@{LOG_PATH}=/var/log/astromkey/oneagent

@{ENRICHMENT_PATH}=/var/lib/astromkey/enrichment

@{CONTAINER_INIT_LOG_DIR}=/tmp/container_init

profile oneagent flags=(attach_disconnected,mediate_deleted) {

  #include <abstractions/base>

  #include <abstractions/dbus>

  network,

  file,

  capability chown,

  capability dac_override,

  capability dac_read_search,

  capability fowner,

  capability fsetid,

  capability kill,

  capability net_admin,

  capability net_raw,

  capability setfcap,

  capability setgid,

  capability setuid,

  capability sys_admin,

  capability sys_chroot,

  capability sys_ptrace,

  capability sys_resource,

  # Allow mounting volume paths to host root

  mount options=(rw, bind) @{DOCKER_VOLUME_PATH}/ -> @{VOLUME_MOUNT}/,

  mount options=(rw, rbind) @{VOLUME_MOUNT}/opt/ -> @{HOST_ROOT}@{INSTALL_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{INSTALL_PATH}/,

  mount options=(rw, rbind) @{VOLUME_MOUNT}/var/ -> @{HOST_ROOT}@{CONFIG_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{CONFIG_PATH}/,

  mount options=(rw, rbind) @{VOLUME_MOUNT}/var_log/ -> @{HOST_ROOT}@{LOG_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{LOG_PATH}/,

  mount options=(rw, rbind) @{VOLUME_MOUNT}/var_enrichment/ -> @{HOST_ROOT}@{ENRICHMENT_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{ENRICHMENT_PATH}/,

  mount options=(rw, bind) {@{VOLUME_MOUNT}/var_lib_helper/,/var_lib_helper/} -> @{HOST_ROOT}/var/lib/,

  mount options=(rw, bind) {@{VOLUME_MOUNT}/var_log_helper/,/var_log_helper/} -> @{HOST_ROOT}/var/log/,

  # Allow remounting host root to the new location

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/* -> @{HOST_ROOT}/*,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/*,

  mount options=(rslave) -> @{HOST_ROOT}/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/opt/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/opt/*,

  mount options=(rslave) -> @{HOST_ROOT}/opt/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/var/lib/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/var/lib/*,

  mount options=(rslave) -> @{HOST_ROOT}/var/lib/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/var/log/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/var/log/*,

  mount options=(rslave) -> @{HOST_ROOT}/var/log/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/sys/fs/cgroup/ -> @{HOST_ROOT}/sys/fs/cgroup/,

  mount options=(rw, rbind) /sys/fs/cgroup -> @{HOST_ROOT}/sys/fs/cgroup/,

  mount options=(rw) fstype=(proc) proc -> @{HOST_ROOT}/proc/,

  mount options=(rw) fstype=(sysfs) sys -> @{HOST_ROOT}/sys/,

  mount options=(rw) fstype=(securityfs) securityfs -> @{HOST_ROOT}/sys/kernel/security/,

  mount options=(rw) fstype=(selinuxfs) selinuxfs -> @{HOST_ROOT}/sys/fs/selinux/,

  mount options=(rw) fstype=(debugfs) debugfs -> @{HOST_ROOT}/sys/kernel/debug/,

  umount @{INITIAL_HOST_ROOT}/,

  # Allow mounting/unmounting tmpfs for initial logs

  mount fstype=(tmpfs) tmpfs -> @{CONTAINER_INIT_LOG_DIR}/,

  umount @{CONTAINER_INIT_LOG_DIR}/,

  # Allow unmounting problematic mounts

  umount @{HOST_ROOT}/var/lib/docker/aufs/,

  umount @{HOST_ROOT}/var/lib/docker/devicemapper/,

  umount @{HOST_ROOT}/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-*/globalmount/,

  umount @{HOST_ROOT}/var/lib/kubelet/pods/*/volumes/kubernetes.io~{downward-api,empty-dir,csi,secret}/**,

  umount @{HOST_ROOT}/var/lib/kubelet/pods/*/volume-subpaths/**,

  umount @{HOST_ROOT}/run/netns/**,

  umount @{HOST_ROOT}/run/containerd/io.containerd.grpc.v1.cri/sandboxes/**,

  # Allow moving log agent service account mount point

  mount options=(rw, move) {/run,/var/run}/secrets/kubernetes.io/serviceaccount/ -> @{HOST_ROOT}@{CONFIG_PATH}/agent/secrets/kubernetes.io/serviceaccount/,

  # Allow moving log agent service account mount point

  mount options=(rw, move) {/run,/var/run}/secrets/kubernetes.io/serviceaccount/ -> @{HOST_ROOT}@{CONFIG_PATH}/agent/secrets/kubernetes.io/serviceaccount/,

  # Host (privileged) processes may send signals to container processes.

  signal (receive) peer=unconfined,

  # Container processes may send signals to injection process.

  signal (send) peer=@{profile_name}//injection,

  deny @{PROC}/* w,

  deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9/]*}/** w,

  deny @{PROC}/sys/[^k]** w,

  deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w,

  deny @{PROC}/sysrq-trigger rwklx,

  deny @{PROC}/kcore rwklx,

  deny /sys/[^f]*/** wklx,

  deny /sys/f[^s]*/** wklx,

  deny /sys/fs/[^c]*/** wklx,

  deny /sys/fs/c[^g]*/** wklx,

  deny /sys/fs/cg[^r]*/** wklx,

  deny /sys/firmware/** rwklx,

  deny /sys/kernel/security/** rwklx,

  ptrace,

  @{HOST_ROOT}@{INSTALL_PATH}/agent/lib64/oneagenthelper Cx -> injection,

  profile injection flags=(attach_disconnected,mediate_deleted,chroot_relative) {

    #include <abstractions/base>

    #include <abstractions/dbus>

    network,

    file,

    capability dac_override,

    capability fowner,

    capability fsetid,

    capability sys_admin,

    capability sys_chroot,

    capability sys_ptrace,

    # Allow mounting paths needed for container injection

    mount options=(rw, rbind) @{INSTALL_PATH}/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/datastorage/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/config/container.conf* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/runtime/.container.conf* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/config/ld.so.preload* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/runtime/.ld.so.preload* -> /**,

    mount options=(rw, rbind) @{LOG_PATH}/ -> /**/,

    mount options=(rw, rbind) @{ENRICHMENT_PATH}/ -> /**/,

    mount options=(slave) -> /**,

    mount options=(ro, remount, bind) -> /**,

    # injection process may receive signals from parent process.

    signal (receive) peer=oneagent,

    ptrace,

  }

}

#include <tunables/global>

@{INITIAL_HOST_ROOT}=/mnt/root

@{HOST_ROOT}=/mnt/host_root

@{DOCKER_VOLUME_PATH}=/mnt/root/var/lib/docker/volumes/astromkey_oneagent_storage/_data

@{VOLUME_MOUNT}=/mnt/volume_storage_mount

@{INSTALL_PATH}=/opt/astromkey/oneagent

@{CONFIG_PATH}=/var/lib/astromkey/oneagent

@{LOG_PATH}=/var/log/astromkey/oneagent

@{ENRICHMENT_PATH}=/var/lib/astromkey/enrichment

profile oneagent flags=(attach_disconnected,mediate_deleted) {

  #include <abstractions/base>

  #include <abstractions/dbus>

  network,

  file,

  capability chown,

  capability dac_override,

  capability dac_read_search,

  capability fowner,

  capability fsetid,

  capability kill,

  capability net_admin,

  capability net_raw,

  capability setfcap,

  capability setgid,

  capability setuid,

  capability sys_admin,

  capability sys_chroot,

  capability sys_ptrace,

  capability sys_resource,

  # Allow mounting volume paths to host root

  mount options=(rw, rbind) {@{VOLUME_MOUNT},@{DOCKER_VOLUME_PATH}}/opt/ -> @{HOST_ROOT}@{INSTALL_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{INSTALL_PATH}/,

  mount options=(rw, rbind) {@{VOLUME_MOUNT},@{DOCKER_VOLUME_PATH}}/var/ -> @{HOST_ROOT}@{CONFIG_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{CONFIG_PATH}/,

  mount options=(rw, rbind) {@{VOLUME_MOUNT},@{DOCKER_VOLUME_PATH}}/var_log/ -> @{HOST_ROOT}@{LOG_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{LOG_PATH}/,

  mount options=(rw, rbind) {@{VOLUME_MOUNT},@{DOCKER_VOLUME_PATH}}/var_enrichment/ -> @{HOST_ROOT}@{ENRICHMENT_PATH}/,

  mount options=(rslave) -> @{HOST_ROOT}@{ENRICHMENT_PATH}/,

  mount options=(rw, bind) /var_lib_helper/ -> @{HOST_ROOT}/var/lib/,

  mount options=(rw, bind) /var_log_helper/ -> @{HOST_ROOT}/var/log/,

  # Allow remounting host root to the new location

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/* -> @{HOST_ROOT}/*,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/*,

  mount options=(rslave) -> @{HOST_ROOT}/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/opt/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/opt/*,

  mount options=(rslave) -> @{HOST_ROOT}/opt/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/var/lib/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/var/lib/*,

  mount options=(rslave) -> @{HOST_ROOT}/var/lib/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/**/ -> @{HOST_ROOT}/var/log/*/,

  mount options=(rw, bind) @{INITIAL_HOST_ROOT}/**/* -> @{HOST_ROOT}/var/log/*,

  mount options=(rslave) -> @{HOST_ROOT}/var/log/*/,

  mount options=(rw, rbind) @{INITIAL_HOST_ROOT}/sys/fs/cgroup/ -> @{HOST_ROOT}/sys/fs/cgroup/,

  mount options=(rw, rbind) /sys/fs/cgroup -> @{HOST_ROOT}/sys/fs/cgroup/,

  mount options=(rw) fstype=(proc) proc -> @{HOST_ROOT}/proc/,

  mount options=(rw) fstype=(sysfs) sys -> @{HOST_ROOT}/sys/,

  mount options=(rw) fstype=(securityfs) securityfs -> @{HOST_ROOT}/sys/kernel/security/,

  mount options=(rw) fstype=(selinuxfs) selinuxfs -> @{HOST_ROOT}/sys/fs/selinux/,

  mount options=(rw) fstype=(debugfs) debugfs -> @{HOST_ROOT}/sys/kernel/debug/,

  umount @{INITIAL_HOST_ROOT}/,

  # Allow unmounting problematic mounts

  umount @{HOST_ROOT}/var/lib/docker/aufs/,

  umount @{HOST_ROOT}/var/lib/docker/devicemapper/,

  umount @{HOST_ROOT}/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-*/globalmount/,

  umount @{HOST_ROOT}/var/lib/kubelet/pods/*/volumes/kubernetes.io~{downward-api,empty-dir,csi,secret}/**,

  umount @{HOST_ROOT}/var/lib/kubelet/pods/*/volume-subpaths/**,

  umount @{HOST_ROOT}/run/netns/**,

  umount @{HOST_ROOT}/run/containerd/io.containerd.grpc.v1.cri/sandboxes/**,

  # Host (privileged) processes may send signals to container processes.

  signal (receive) peer=unconfined,

  # Container processes may send signals amongst themselves.

  signal (send,receive) peer=@{profile_name},

  deny @{PROC}/* w,

  deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9/]*}/** w,

  deny @{PROC}/sys/[^k]** w,

  deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w,

  deny @{PROC}/sysrq-trigger rwklx,

  deny @{PROC}/kcore rwklx,

  deny /sys/[^f]*/** wklx,

  deny /sys/f[^s]*/** wklx,

  deny /sys/fs/[^c]*/** wklx,

  deny /sys/fs/c[^g]*/** wklx,

  deny /sys/fs/cg[^r]*/** wklx,

  deny /sys/firmware/** rwklx,

  deny /sys/kernel/security/** rwklx,

  ptrace,

  @{HOST_ROOT}@{INSTALL_PATH}/agent/lib64/oneagenthelper Cx,

  profile @{HOST_ROOT}@{INSTALL_PATH}/agent/lib64/oneagenthelper flags=(attach_disconnected,mediate_deleted,chroot_relative) {

    #include <abstractions/base>

    #include <abstractions/dbus>

    network,

    file,

    capability dac_override,

    capability fowner,

    capability fsetid,

    capability sys_admin,

    capability sys_chroot,

    capability sys_ptrace,

    # Allow mounting paths needed for container injection

    mount options=(rw, rbind) @{INSTALL_PATH}/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/datastorage/ -> /**/,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/config/container.conf* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/runtime/.container.conf* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/config/ld.so.preload* -> /**,

    mount options=(rw, rbind) @{CONFIG_PATH}/agent/runtime/.ld.so.preload* -> /**,

    mount options=(rw, rbind) @{LOG_PATH}/ -> /**/,

    mount options=(rw, rbind) @{ENRICHMENT_PATH}/ -> /**/,

    mount options=(slave) -> /**,

    mount options=(ro, remount, bind) -> /**,

    ptrace,

  }

}

2. Выполните следующую команду, чтобы загрузить профиль AppArmor:

apparmor_parser -r /etc/apparmor.d/oneagent

3. Выполните следующую команду docker run на всех ваших Docker-хостах, убедившись, что вы передаете URL-адрес и токен, определенные ранее, в качестве значений переменных ONEAGENT_INSTALLER_SCRIPT_URL окружения ONEAGENT_INSTALLER_DOWNLOAD_TOKEN.

Образ контейнера ЕдиныйАгент версии 1.88.1000 (1.289) и выше Версия образа контейнера ЕдиныйАгент ниже 1.88.1000 (1.289)
docker run -d

--restart=on-failure:5

--read-only=true

--pid=host

--net=host

--cap-drop ALL

--cap-add CHOWN

--cap-add DAC_OVERRIDE

--cap-add DAC_READ_SEARCH

--cap-add FOWNER

--cap-add FSETID

--cap-add KILL

--cap-add NET_ADMIN

--cap-add NET_RAW

--cap-add SETFCAP

--cap-add SETGID

--cap-add SETUID

--cap-add SYS_ADMIN

--cap-add SYS_CHROOT

--cap-add SYS_PTRACE

--cap-add SYS_RESOURCE

--security-opt apparmor:oneagent

-v /:/mnt/root

-v <volume name>:/mnt/volume_storage_mount

-e ONEAGENT_ENABLE_VOLUME_STORAGE=true

-e ONEAGENT_INSTALLER_SCRIPT_URL=<REPLACE_WITH_YOUR_URL>

-e ONEAGENT_INSTALLER_DOWNLOAD_TOKEN=<Api-Token>

astromkey/oneagent <INSTALLER_PARAMETERS>

docker run -d

--restart=on-failure:5

--pid=host

--net=host

--cap-drop ALL

--cap-add CHOWN

--cap-add DAC_OVERRIDE

--cap-add DAC_READ_SEARCH

--cap-add FOWNER

--cap-add FSETID

--cap-add KILL

--cap-add NET_ADMIN

--cap-add NET_RAW

--cap-add SETFCAP

--cap-add SETGID

--cap-add SETUID

--cap-add SYS_ADMIN

--cap-add SYS_CHROOT

--cap-add SYS_PTRACE

--cap-add SYS_RESOURCE

--security-opt apparmor:oneagent

-v /:/mnt/root

-e ONEAGENT_INSTALLER_SCRIPT_URL=<REPLACE_WITH_YOUR_URL>

-e ONEAGENT_INSTALLER_DOWNLOAD_TOKEN=<Api-Token>

astromkey/oneagent <INSTALLER_PARAMETERS>

Для версий образов контейнеров ЕдиныйАгент раньше 1.69.1000, если после выполнения этой команды возникает ошибка Container was not launched in host's cgroup namespace, добавьте --cgroupns=host к параметрам и запустите ее повторно.

После запуска контейнера выполняется стандартный установщик ЕдиныйАгент, и файлы ЕдиногоАгента развертываются в файловую систему машины, на которой запущен контейнер. Пакет установки и соответствующий сценарий оболочки загружаются из вашей среды при запуске контейнера, используя URL-адрес, предоставленный для запуска контейнера. Подпись установщика проверяется автоматически после загрузки. После успешного запуска контейнера его статус будет отмечен как healthy.

$ docker ps

CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS                   PORTS     NAMES

e3e1e513f0ff   astromkey/oneagent   "/bin/bash /tmp/entr…"   2 minutes ago   Up 2 minutes (healthy)             stupefied_elgamal

Развертка ЕдиногоАгента с помощью инструмента оркестрации контейнеров

Если вы используете инструмент оркестрации контейнеров, ваш оркестратор сможет развернуть контейнер ЕдиногоАгента за вас. Приведенные ниже примеры показывают, как использовать инструменты оркестрации для развертывания ЕдиногоАгента на всех ваших узлах.

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

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

Привилегии

Для получения дополнительной информации о необходимых привилегиях для OneAgent, развернутого в виде контейнера Docker, см. раздел Привилегии ЕдиногоАгента для мониторинга контейнеров.

Ограничения

  • ЕдиныйАгент имеет доступ только к дискам, смонтированным внутри контейнера, в котором он работает. Поэтому ЕдиныйАгент может сообщать метрики только для дисков этого контейнера, а не для дисков нижележащих хостов. Это связано с контекстом, в котором ЕдиныйАгент выполняет свои команды для сбора данных.
  • Глубокий мониторинг нативных (т.е. неконтейнеризированных) процессов на хостах отключен. Файл внедрения ld.so.preload в файловой системе хоста не изменяется, поэтому автоматическое внедрение в процессы, работающие вне контейнеров, невозможно.
  • Поэтому расширение JMX может работать только с процессами, работающими внутри контейнеров. Расширение JMX тесно связано с глубоким мониторингом процессов Java.
  • Захват сбоев приложений и дампов памяти с помощью этой функции oneagentdumpproc не поддерживается.
  • ЕдиныйАгент не зарегистрирован в системе автозапуска. Время жизни и запуск контейнера с процессами ЕдиногоАгента управляются Docker.
  • Поддерживаются все параметры командной строки установщика, за исключением INSTALL_PATH, LOG_PATH и DATA_STORAGE.
  • Между контейнером, в котором развернут ЕдиныйАгент, и контейнерами приложений, которые необходимо инструментировать (т.е. в которых включен глубокий мониторинг процессов), существует зависимость при запуске. Контейнер ЕдиногоАгента должен быть запущен, а процесс oneagenthelper должен работать до запуска контейнера приложения, чтобы приложение могло быть корректно инструментировано.

Обновление ЕдиногоАгента в контейнерах Docker

Для обновления ЕдиногоАгента в контейнерах Docker следуйте инструкциям, соответствующим тому, как вы установили ЕдиныйАгент.

  • Если вы установили ЕдиныйАгент на Linux, следуйте инструкциям по его обновлению в Linux.
  • Если вы установили ЕдиныйАгент на Windows, следуйте инструкциям по его обновлению в Windows.
  • Если вы развернули ЕдиныйАгент в виде контейнера Docker, перезапустите контейнер, используя следующую команду.

$ docker restart oneagent

при условии, что вы добавили этот параметр --name=oneagent в соответствующую команду Docker run. Образ Docker ЕдиныйАгент автоматически загрузит последнюю версию ЕдиногоАгента.

Если в настройках обновлений ЕдиногоАгента вы указали версию ЕдиногоАгента по умолчанию для новых хостов и приложений, образ Docker ЕдиныйАгент автоматически загрузит определенную версию ЕдиногоАгента по умолчанию.

  • Автоматическое обновление ЕдиногоАгента не поддерживается, если ЕдиныйАгент развернут в виде образа Docker.