gpt4 book ai didi

docker - 使 systemctl 在 debian 拉伸(stretch)图像中的容器内部工作

转载 作者:行者123 更新时间:2023-12-01 00:14:40 25 4
gpt4 key购买 nike

目的——我想达到什么目的?

我要访问systemctl从运行 kubernetes 节点的容器内部(ami:运行 debian 拉伸(stretch))

工作设置:

  • Node AMI : kope.io/k8s-1.10-debian-jessie-amd64-hvm-ebs-2018-08-17
  • 安装在容器中的节点目录以制作 systemctl工作:
  • /var/run/dbus
  • /运行/systemd
  • /bin/systemctl
  • /etc/systemd/系统

  • 不工作设置:
  • Node AMI : kope.io/k8s-1.11-debian-stretch-amd64-hvm-ebs-2018-08-17
  • 安装在容器中的节点目录以制作 systemctl工作:
  • /var/run/dbus
  • /运行/systemd
  • /bin/systemctl
  • /etc/systemd/系统

  • 调试以尝试解决问题

    使用 debian-stretch 调试此问题图片不支持 systemctl使用与 debian-jessie 相同的坐骑

    1)我首先通过在其中安装上述卷来启动 nginx 部署
    kubectl apply -f https://k8s.io/examples/application/deployment.yaml

    kubectl exec -it nginx-deployment /bin/bash

    root@nginx-deployment-788f65877d-pzzrn:/# systemctl
    systemctl: error while loading shared libraries: libsystemd-shared-
    232.so: cannot open shared object file: No such file or directory

    2) 由于上述问题显示文件 libsystemd-shared-232.so未找到。我通过查看节点找到了实际路径。
    admin@ip-10-0-20-11:~$ sudo find / -iname 'libsystemd-shared-232.so'
    /lib/systemd/libsystemd-shared-232.so

    3) 安装 /lib/systemd在 nginx pod 中并再次运行 systemctl
     kubectl exec -it nginx-deployment /bin/bash

    root@nginx-deployment-587d866f54-ghfll:/# systemctl
    systemctl: error while loading shared libraries: libcap.so.2:cannot
    open shared object file: No such file or directory

    4) 现在 systemctl因新的缺失错误而失败
    root@nginx-deployment-587d866f54-ghfll:/# systemctl
    systemctl: error while loading shared libraries: libcap.so.2: cannot
    open shared object file: No such file or directory

    5) 为了解决上述错误,我再次在节点中搜索 libcap.so.2在下面的路径中找到它。
    admin@ip-10-0-20-11:~$ sudo find / -iname 'libcap.so.2'
    /lib/x86_64-linux-gnu/libcap.so.2

    6)看到上面的目录没有安装在我的 pod 中。我在 nginx pod 中安装了以下路径。
    /lib/x86_64-linux-gnu mounted in the nginx pod(deployment)

    7)添加上述挂载后,nginx pod无法上来。收到以下错误:
    $ k logs nginx-deployment-f9c5ff956-b9wn5
    standard_init_linux.go:178: exec user process caused "no such file
    or directory"

    请建议如何进一步调试。以及使 systemctl 在 debian 拉伸(stretch)环境中的容器内部工作所需的所有安装。

    任何进一步进行调试的指针都可能会有所帮助。

    最佳答案

    您可以安装systemd,而不是从主机安装一些库文件。在容器中。

    $ apt-get -y install systemd

    现在,这不一定会使 systemctl跑。您将需要 systemd在由 /sbin/init 生成的容器中运行在您的系统上。 /sbin/init需要以 root 身份运行,所以基本上你必须使用 privileged 运行它pod 或容器中的标志 security context在 Kubernetes 上。现在,这是不安全的, there is a long history关于在容器中运行 systemd,Docker 人员主要反对它(安全性),而 Red Hat 人员表示需要它。

    尽管如此,Red Hat 的人还是想出了一条通往 make it work without the unprivileged flag 的方法。 .你需要:
  • /run作为容器中的 tmpfs 安装。
  • /sys/fs/cgroup以只读方式安装是可以的。
  • /sys/fs/cgroup/systemd/安装为读/写。
  • 用于 STOPSIGNAL SIGRTMIN+3

  • 在 Kubernetes 中,您需要一个 emptyDir 安装 tmpfs .其他的可以作为主机卷挂载。

    关于docker - 使 systemctl 在 debian 拉伸(stretch)图像中的容器内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54079586/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com