在 Docker 个容器中安装 Kubernetes

Installing Kubernetes in Docker container

我想用 Kubeflow 来检查它是否适合我的项目。我想将它部署在本地作为开发服务器,以便我可以检查它,但我的计算机上有 Windows,而 Kubeflow 仅适用于 Linux。我不允许双启动这台计算机,我可以安装虚拟机,但我认为使用起来会更容易 docker,天哪,我错了。所以,问题是,我想在 docker 容器中安装 Kubernetes,现在这是我写的 Docker 文件:

# Docker file with local deployment of Kubeflow
FROM ubuntu:18.04

ENV USER=Joao
ENV PASSWORD=Password
ENV WK_DIR=/home/${USER} 

# Setup Ubuntu
RUN apt-get update -y
RUN apt-get install -y conntrack sudo wget

RUN useradd -rm -d /home/${USER} -s /bin/bash -g root -G sudo -u 1001 -p ${PASSWORD} ${USER}
WORKDIR ${WK_DIR}

# Installing Docker CE
RUN apt-get install -y apt-transport-https ca-certificates curl software-properties-common
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
RUN apt-get update -y
RUN apt-get install -y docker-ce docker-ce-cli containerd.io

# Installing Kubectl
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN mv ./kubectl /usr/local/bin/kubectl

# Installing Minikube
RUN curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
RUN install minikube-linux-amd64 /usr/local/bin/minikube


ENV PATH="${PATH}:${WK_DIR}"
COPY start.sh start.sh
CMD sh start.sh

为了便于部署,我还有一个 docker-compose.yaml,如下所示:

services:
  kf-local:
    build: .
    volumes:
      - path/to/folder:/usr/kubeflow
    privileged: true

而 start.sh 看起来像这样:

service docker start

minikube start \
     --extra-config=apiserver.service-account-issuer=api \
     --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/apiserver.key \
     --extra-config=apiserver.service-account-api-audiences=api \
     --driver=docker

问题是,每当我尝试 运行 时,我都会收到错误消息:

X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.

我已经尝试创建一个用户并从那里 运行 连接它,但后来我无法 运行 sudo,不知道如何在 Docker容器?

正如您认为在使用 VM 的情况下是正确的,并且很容易对其进行测试。

您可以使用 Linux 基础容器进行开发测试,而不是在 docker 上设置 Kubernetes。

有 linux 个容器可用名称作为 LXC 容器。 Docker 是一种应用程序容器,简单来说,LXC 就像是用于本地开发测试的 VM。您可以将这些东西安装到而不是 docker 在图像中设置应用程序。

阅读有关 lxc 的一些详细信息:https://medium.com/@harsh.manvar111/lxc-vs-docker-lxc-101-bd49db95933a

您也可以在 windows 上 运行 并在以下网址试用:https://linuxcontainers.org/

如果您阅读了 Kubeflow 的文档,还有一个选项 multipass

Multipass creates a Linux virtual machine on Windows, Mac or Linux systems. The VM contains a complete Ubuntu operating system which can then be used to deploy Kubernetes and Kubeflow.

了解有关多通道的更多信息:https://multipass.run/#install

docker 组和 minikube 目录的用户权限不足导致此错误(“X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges .").

您可以通过将您的用户添加到 docker 组并设置对 minikube 配置文件目录的权限来修复该错误(在以下两个命令中将 $USER 更改为您的用户名):

sudo usermod -aG docker $USER && newgrp docker

sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube