【问题标题】:Run a K3S server in a docker container, and connect a K3S agent in another docker container在 docker 容器中运行 K3S 服务器,并在另一个 docker 容器中连接 K3S 代理
【发布时间】:2021-07-19 14:40:11
【问题描述】:

我知道k3d 可以通过k3d cluster create myname --token MYTOKEN --agents 1 神奇地做到这一点,但我正试图弄清楚如何“手动”完成最简单的版本。我想创建一个类似的服务器:

 docker run -e K3S_TOKEN=MYTOKEN rancher/k3s:latest server

然后像这样连接一个代理:

 docker run -e K3S_TOKEN=MYTOKEN -e K3S_URL=https://localhost:6443 rancher/k3s:latest agent

有谁知道这里需要转发哪些端口?我该如何设置?几乎我尝试的所有操作,代理都会抱怨端口 6444 已在使用中,即使我使用 --no-deploy servicelb --disable-agent --no-deploy traefik 的任意组合尽可能禁用服务器也是如此。

请随意禁用除服务器和代理之外的所有内容,我正在努力让这个超级简单,但现在只是把头撞到墙上。谢谢!

【问题讨论】:

    标签: kubernetes k3s k3d


    【解决方案1】:

    容器必须“看到”彼此。 Docker 默认隔离网络,因此代理容器中的“localhost”就是代理容器本身。

    可能的解决方案: 使用--net=host 在不进行网络隔离的情况下运行两个容器,使用--port 将服务器的API 端口映射到主机,并使用代理容器中的主机IP 或使用docker-compose。

    这里描述了一个 docker-compose 的工作示例:https://www.trion.de/news/2019/08/28/kubernetes-in-docker-mit-k3s.html

    【讨论】:

    • 感谢您的回答!使用示例 .yaml,我可以启动集群。但我正在尝试通过docker run 复制 docker-compose 对单个容器所做的操作。例如,我可以使用 docker-compose 启动服务器,但是如果我想添加一个代理(通过与 .yaml 中的工作人员配置匹配的docker run --tmpfs /run --tmpfs /var/run --privileged -e K3S_CLUSTER_SECRET=somethingtotallyrandom -e K3S_URL=https://server:6443 rancher/k3s:latest),由于“获取 CA 失败”而无法连接证书:获取 \"127.0.0.1:6444/cacerts`。有什么想法吗?
    • 哦,我想我明白了! docker-compose 隐含地为其中定义的容器启动网络。如果我执行docker network create NAME,然后在我的docker run 命令中包含--network NAME 参数,他们现在可以根据主机名找到彼此。所以我可以在这个网络中启动任意数量的代理!所以我想我已经解决了。感谢您的链接,docker-compose.yaml 至关重要
    • 很高兴,它有帮助,请接受这种情况下的答案。
    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多