kubernetes 为什么在WSL中禁用systemd?[已关闭]

xv8emn3q  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(7)|浏览(233)

**已关闭。**此问题为not about programming or software development。目前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site相关,您可以留下评论,说明在何处可以找到此问题的答案。
24天前关闭。
机构群体在24天前审核了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
没有一个systemd命令在WSL(Ubuntu Bash 18.04)中工作。当我运行sudo systemctl is-active kubelet时,错误是output: System has not been booted with systemd as init system (PID 1). Can't operate. : running command: sudo systemctl is-active kubelet
如何在WSL中启用systemd功能?如何摆脱System has not been booted with systemd

mcdcgff0

mcdcgff01#

使用WSL2时,您可以用途:

sudo service docker start

此命令基本上执行脚本/etc/init.d/docker
某些自定义,如指定HTTP代理,可以通过脚本/etc/default/docker进行。

7z5jn7bk

7z5jn7bk2#

此时WSL中不支持Systemd。可以在with this GitHub issue中找到详细信息。
此外,Docker并不能在WSL上运行,这意味着Kubelet并没有太大的用处。为了在本地运行Kubernetes,你可以使用包含Kubernetes支持的Docker for Windows,或者你可以使用Minikube来运行带有Hyper-V或Virtualbox的VM。

66bbxpm5

66bbxpm53#

Windows Subsystem for Linux(WSL)2引入了一个重大的体系结构更改,因为它是由Microsoft构建的完整Linux内核,允许Linux容器在不进行仿真的情况下本地运行。
在安装Docker Desktop WSL 2后端之前,必须完成以下步骤:
安装Windows 10版本1903或更高版本。在Windows上启用WSL 2功能。
源代码-Docker Desktop WSL 2 backend
要了解设备运行的Windows版本,请按Windows徽标键+ R,在“打开”框中键入winver,然后选择“确定”。
WSL中不支持Systemd,但有一个解决方法-Script to enable systemd support on current Ubuntu WSL2 images from the Windows store

u0sqgete

u0sqgete4#

在WSL 2中破解Systemd

Systemd在WSL 2中不是原生的,但Shayne找到了一种破解它的方法:https://github.com/shayne/wsl2-hacks
这种体验在第一种方法上是相当不稳定的,但它对我的大部分使用都有效:码头、迷你库(--driver=none)、系统管理服务。

  • PS:记住在使用前总是连接到你的用户(bash $USER)。否则你将无法访问你的配置文件配置 *(~/.profile~/.bash_profile)。
    使用Systemd精灵

Arkane发布了一种在WSL 2的systemd中编排名称空间(或bottle)的方法:https://github.com/arkane-systems/genie
安装后,通过精灵连接到您的配置文件:

genie -c bash

目前只有Ubuntu 18.04和19.10可以正常工作,Ubuntu 20.04暂时还没有软件包(这一刻我很兴奋)。
Docker和Minikube也在此配置中作为原生(--driver=none)工作。

kxe2p93d

kxe2p93d5#

在WSL2中,可以使用气泡 Package 相当容易地 Boot systemd:


# pacman -S bubblewrap  # or apt, etc.

# bwrap --dev-bind / / --unshare-pid --as-pid-1 /usr/lib/systemd/systemd

如果成功启动,它将不会向当前TTY打印任何内容,但如果在另一个TTY中运行htop等,您将看到它引导并启动了已配置的服务。
然后,您可以通过将/usr/lib/systemd/system/sshd.service符号链接到/etc/systemd/system/multi-user.target.wants/来手动启用OpenSSHd。在/root/.ssh中配置您的密钥,启动systemd,您应该能够在中使用SSH。

oknwwptz

oknwwptz6#

你似乎问了两个问题:

  • 从问题标题:* 为什么 * 在WSL中禁用Systemd
  • 从问题正文中:* 如何 * 在WSL中启用Systemd

“为什么”的答案是,从历史上看,WSL体系结构要求其init进程为PID 1。Systemd还要求其几乎 * 所有 * 功能都以PID 1运行(除了一些小的子集,如tmpfiles)。
至于 * 如何 *,显然这里已经有了一些答案,还有一些新的答案(见下文)。为了避免在Stack Overflow上的35个以上与Systemd相关的问题中详细重复这些答案,已经在问题Enable systemd in WSL 2上发布了一个Community Wiki答案。
总结一下:

    • 选项1:* 将WSL升级到最新版本(如果您的系统支持)并选择加入Systemd功能
    • 选项2:* 运行为WSL 2设计的Systemd-helper脚本
    • 选项3:* 在Systemd自己的命名空间中手动运行Systemd
    • 备选方案1:* SysVInit脚本(例如sudo service <service_name> start)(如果可用)
    • 备选方法2:* 手动配置和运行服务
    • 备选方案3:* Docker

请参阅Community Wiki了解更多详细信息。
我们欢迎您提供新的、个别的额外答案,但希望不要重复上述任何选项。我们还鼓励您在提供新信息时,将其编辑到社区Wiki中。

wlp8pajw

wlp8pajw7#

WSL 2现在支持Systemd。需要v0.67.6以上版本才能启用它。如果您运行的是旧版本,请使用PowerShell中的wsl --update(要检查wsl --version)。要启用systemd,请使用sudo在文本编辑器中打开wsl.conf文件,并将其添加到/etc/wsl.conf:[boot]systemd=true然后您需要从PowerShell执行wsl.exe --shutdown以重新启动WSL执行严修。出版版本重新启动后,systemd将会执行。请确认使用:systemctl list-unit-files --type=service以显示服务状态。
以下是文档:https://learn.microsoft.com/windows/wsl/wsl-config#systemd-support

相关问题