Вы можете смонтировать системные сокеты в контейнер модуля. Оттуда вам либо нужны разрешения polkit для запуска команд от имени непривилегированного пользователя, либо вам нужно запустить привилегированный контейнер. Спецификация Pod для этого выглядит следующим образом:
kind: Pod
metadata:
name: dbus-pod
labels:
app: dbus
spec:
containers:
- name: dbus-container
image: centos:7
command: ['systemctl','status','sshd']
securityContext:
privileged: true
volumeMounts:
- name: run-dbus
mountPath: /var/run/dbus
- name: run-systemd
mountPath: /run/systemd
- name: bin-systemctl
mountPath: /usr/bin/systemctl
readOnly: true
- name: etc-systemd
mountPath: /etc/systemd/system
readOnly: true
restartPolicy: Never
volumes:
- name: run-dbus
hostPath:
path: /var/run/dbus
- name: run-systemd
hostPath:
path: /run/systemd
- name: bin-systemctl
hostPath:
path: /usr/bin/systemctl
- name: etc-systemd
hostPath:
path: /etc/systemd/system
Затем вы должны выяснить, как вы хотите запланировать Pod в вашем кластере. Если вы хотите запустить что-то на каждом узле один раз, вы можете создать DaemonSet и удалить его. A Job может быть более подходящим, если у вас есть селекторы, чтобы определить, где вы хотите запустить Pod.
Существуют также проекты, такие как go-systemd , которые управляют dbus через сокет /var/run/dbus
и заменяют все настройки systemd / systemctl.