如何在 k8s Pod 中启用 systemd

问题描述 投票:0回答:2

我正在 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

我可以做什么来解决这个问题?

kubernetes systemd kata-containers
2个回答
0
投票

找到答案:

我没有启动 bash,而是启动 systemd:

command:
      - /usr/lib/systemd/systemd

0
投票

在我需要将脚本作为命令/参数运行的情况下,在命令中使用

systemd
对我来说不起作用。如果您手动执行到容器中,它可以正常工作,但如果您有类似
bash my-script.sh
作为命令/参数,它就会挂起。

Gitlab CI 的 systemd 容器的入口点在这种情况下更相关。

© www.soinside.com 2019 - 2024. All rights reserved.