我正在 k8s 集群上运行 kata 容器,并且想在 pod 中使用 systemd。
使用以下 dockerfile 构建我的映像:
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y systemd systemd-sysv && apt-get clean && rm -rf /var/lib/apt/lists/*
# Disable some services that we do not need and which can cause issues
CMD ["/sbin/init"]
这是我的 pod 的 yaml 文件:
apiVersion: v1
kind: Pod
metadata:
name: pod6
spec:
runtimeClassName: kata-qemu
containers:
- name: c1
image: my-ubuntu-systemd:latest
imagePullPolicy: Always
command:
- bash
securityContext:
privileged: true
capabilities:
add: ["SYS_ADMIN"]
volumeMounts:
- name: cgroup
mountPath: /sys/fs/cgroup
readOnly: true
- name: tmp
mountPath: /tmp
subPath: tmp
- name: tmp
mountPath: /run
subPath: run
- name: tmp
mountPath: /run/lock
subPath: run-lock
volumes:
- name: cgroup
hostPath:
path: /sys/fs/cgroup
type: Directory
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 128Mi
一旦我进入 Pod,就会得到以下信息:
root@pod6:/# systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
我可以做什么来解决这个问题?
找到答案:
我没有启动 bash,而是启动 systemd:
command:
- /usr/lib/systemd/systemd
在我需要将脚本作为命令/参数运行的情况下,在命令中使用
systemd
对我来说不起作用。如果您手动执行到容器中,它可以正常工作,但如果您有类似 bash my-script.sh
作为命令/参数,它就会挂起。
Gitlab CI 的 systemd 容器的入口点在这种情况下更相关。