【问题标题】:Cannot run Kubernetes inside Ubuntu Docker image无法在 Ubuntu Docker 映像中运行 Kubernetes
【发布时间】:2022-08-23 03:00:22
【问题描述】:

我想创建一个集群来在本地尝试 Kubernetes。

我可以在上面创建带有 Ubuntu 的虚拟机,或者购买一些 Raspberry Pi,但我想知道我是否可以使用 Docker 容器来模拟它)。

我的想法是创建一个基于 Ubuntu 的 Docker 镜像,并在那里安装 Kubernetes 和 Docker。

然后我可以启动 4 个运行这个镜像的容器并配置 Kubernetes,其中一个是 Mater,另一个是工人(这应该模拟 4 台运行 Ubuntu 的计算机,上面有 Docker 和 Kubernetes)

我正在关注本教程:https://phoenixnap.com/kb/install-kubernetes-on-ubuntu

到目前为止,我已经下载了 Ubuntu 镜像,并在上面安装了 docker 和 Kubernetes。

但是我无法使用教程中的命令启动 Docker,因为 Ubuntu 容器似乎没有使用 systemd 启动

systemctl status docker

System has not been booted with systemd as init system (PID 1). Can\'t operate.
Failed to connect to bus: Host is down

如果我尝试将其中一个容器分配为 Kubernetes 主服务器,则在不启动 Docker 的情况下,它会失败

kubeadm init --pod-network-cidr=10.244.0.0/16

[init] Using Kubernetes version: v1.24.3
[preflight] Running pre-flight checks
        [WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet
        [WARNING SystemVerification]: missing optional cgroups: blkio
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: time=\"2022-08-16T12:27:18Z\" level=fatal msg=\"unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \\\"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\\\"\"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

有没有办法获取 Docker 映像(例如:ubuntu)并使其在其上运行 Kubernetes?

这是我用来创建镜像和安装 Kubernetes 和 docker 的 dockerfile

FROM ubuntu:22.04
RUN apt-get update -y 
RUN apt install -y gnupg2 curl software-properties-common docker.io
RUN curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
RUN apt-add-repository \"deb http://apt.kubernetes.io/ kubernetes-xenial main\"
RUN apt-get install -y kubeadm kubelet kubectl
  • 对于运行本地 k8s 集群来“尝试”,我强烈建议运行 minikube。您唯一需要的是 WSL2(用于 Windows)或本机 linux。
  • @pavol 说了什么。您实际上是在尝试在 docker 中运行 docker,并附加一层使用 docker 套接字作为 kubernetes 的容器运行时。如果您可以使用 minikube 快速启动单节点 kubernetes 集群,那么完成这项工作所需的设置绝对不值得
  • 是的。我已经将 minicube 用于单节点 kubernetes。现在我想模拟一个真实的系统。我可以在我的计算机上运行多个虚拟机来模拟它。但是由于 Docker 的想法是拥有一个独立的自给自足的系统,我认为可以像使用独立的计算机一样使用容器。
  • 您还可以将kind 视为一种更明确地支持多个 Kubernetes 节点但仍在本地容器中运行的设置。

标签: docker kubernetes


【解决方案1】:

这确实是一个不好的做法,因为 docker/containerd 必须是 kubernetes 的容器运行时,我建议您使用真实主机进行 kubernetes 集群部署,否则只需使用 minikube,它是 kubernetes 的更轻量级版本。

【讨论】:

  • 发布答案非常好,但是,您应该尝试提供更多信息。例如,一个指向 minikube 的链接会很方便。
【解决方案2】:

即使您可以使其工作,您尝试做的事情也不会很好地工作。我不知道如何让容器托管 Kubernetes。

启动一个或多个 VM 是一种更好的方法。如果您没有内存或 CPU 来运行一堆虚拟机,@qwejson 会给出最佳答案

下面这两个系统我都用过,很喜欢Microk8s

MiniKube

Microk8s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多