iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Docker中运行K3s
  • 920
分享到

如何在Docker中运行K3s

2023-06-15 01:06:45 920人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关如何在Docker中运行K3s,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是k3D?k3d是一个小型程序,用于在Docker中运行K3s集群。

本篇文章给大家分享的是有关如何在Docker中运行K3s,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

什么是k3D

k3d是一个小型程序,用于在Docker中运行K3s集群。 K3s是经过CNCF认证的轻量级kubernetes发行和沙箱项目。它是为资源有限环境设计的,被打包为单个二进制文件,所需RAM小于512MB。 要了解有关K3s的更多信息,请查看我们之前的公众号文章及B站上的视频。

k3d借助从K3s仓库构建的Docker镜像在安装了Docker的任何机器上的Docker容器中启动多个K3s节点。 这样,一台物理(或虚拟)机(称为Docker Host)可以运行多个K3s集群,每个集群同时有多个server和agent节点。

k3d能做什么?

2021年1月,发布k3dv4.0.0,包含以下功能:

  • 创建/停止/启动/删除/扩大/缩小K3s集群(和单个节点)

  • 通过命令行标志

  • 通过配置文件

  • 管理可与集群一起使用的容器镜像仓库并与之交互

  • 管理集群的Kubeconfigs

  • 将本地Docker daemon中的镜像导入集群中运行的容器运行时中

显然,还有更多的方法,您可以用来对使用过程中的细节进行调整。

k3d的用途是什么?

k3d的主要应用场景是在Kubernetes上进行本地开发,因为k3d轻量、简单的特性,在这一场景下几乎不会遇到麻烦和资源使用问题。 开发k3d的初衷是为开发人员提供一个简单的工具,使他们能够在开发环境的机器上运行轻量级的Kubernetes集群,从而在类似于生产的环境中获得快速的迭代时间(相对于在本地运行docker-compose与生产中的Kubernetes要快得多)。

随着时间的推移,k3d还发展成为一种运维工具,用于在隔离的环境中测试某些Kubernetes(或特别是K3s)功能。 例如,使用k3d,您可以轻松地创建多节点集群,在其上部署一些应用程序,轻松停止一个节点并查看Kubernetes的反应,还能够将您的应用重新调度到其他节点上。

此外,您可以在持续集成系统中使用k3d来快速启动集群,在其上部署测试堆栈并运行集成测试。完成操作后,您就可以轻松地停用整个集群。无需担心适当的清理和可能的残留。

我们还提供了一个k3d-dind镜像(类似于电影《盗梦空间》中的梦中的梦,我们在容器内的容器中放置了容器。)通过此操作,您可以创建一个运行k3d的docker-in-docker环境,该环境会在Docker中生成一个K3s集群。这意味着您只有一个容器(k3d-dind)在您的Docker主机上运行,而该容器又在其中运行了整个K3s / Kubernetes集群。

如何使用k3d?

安装k3d(如需使用也可安装kubectl)

注意:本文介绍内容对版本有要求,请至少使用k3d v4.1.1以上版本

可以尝试以下其中一个示例,或使用文档或CLI帮助文本找到适合您自己的方式(k3d [command] --help)

“简单”的方式

k3d cluster create

该命令将创建一个带有两个容器的K3s集群:一个Kubernetes控制平面节点(server)和一个位于其前面的负载均衡器(serverlb)。 它将它们都放置在专用的Docker网络中,并在Docker主机上随机选择的免费端口上暴露Kubernetes api。 它还在后台创建了一个名为Docker的卷,作为镜像导入的准备。

默认情况下,如果不提供name参数,集群将被命名为k3s-default,并且容器将显示为k3d---<#>,因此在本例中,两个容器将显示为 k3d- k3s-default-serverlb和k3d-k3s-default-server-0

k3d等待一切准备就绪,从集群中拉取Kubeconfig并将其与默认的Kubeconfig合并(通常位于$ HOME / .kube / config或者KUBECONFIG环境变量指向的任何路径中)。
不用担心,您也可以调整该行为。

使用kubectl查看您刚创建的用于显示节点的内容:. kubectl get nodes
k3d还为您提供了一些命令来列出您所创建的东西:.k3d cluster | node | reGIStry list

“简单但精妙”的方式

k3d cluster create mycluster --api-port 127.0.0.1:6445 --servers 3 --agents 2 --volume '/home/me/mycode:/code@agent[*]' --port '8080:80@loadbalancer'

此命令生成带有六个容器的K3s集群:* 1个负载均衡器* 3个server(控制平面节点)* 2个agent(以前为worker节点)

通过--api-port 127.0.0.1:6445,您可以使用k3d将Kubernetes API端口(6443内部)映射到127.0.0.1 / localhost的端口6445。这意味着随后将在Kubeconfig中包含以下连接字符串:server: https://127.0.0.1:6445以连接到此集群。
该端口将从负载均衡器映射到您的主机系统。请求将从那里被代理到server节点,从而有效地模拟生产环境设置,在该环境中server节点也可能发生故障,并且希望故障转移到另一个server上。

--volume /home/me/mycode:/code@agent[] 绑定将你的本地目录/home/me/mycode挂载到所有([] agent 节点)内部的路径/code。使用索引(0或1)替换*,以便只把它挂载到其中一个节点。
告诉k3d应该将卷安装到哪个节点的规范称为“节点过滤器”,它也用于其他标志,例如端口映射的--port标志。

也就是说,--port '8080:80@loadbalancer'将本地主机的端口8080映射到负载均衡器(serverlb)上的端口80,该负载均衡器可用于将Http ingress流量转发到集群。 例如,可以将WEB应用程序部署到集群(Deployment)中,该集群通过一个 Ingress(如myapp.k3d.localhost)在外部暴露(Service)。

然后(前提是一切都设置为将该域解析为本地主机IP),则可以将浏览器指向http://myapp.k3d.localhost:8080 访问您的应用程序。 然后,流量从您的主机通过Docker桥接口流向负载均衡器。 从那里,它被代理到集群,并通过Ingress和Service传递到您的应用程序Pod。

注意:你必须设置一些机制,将myapp.k3d.localhost路由到本地主机IP(127.0.0.1)。
最常见的方法是在你的/etc/hosts文件中使用127.0.0.1
myapp.k3d.localhost的条目(C:\windows\System32\drivers\etc/hosts)。。
但是,这不允许使用通配符(.localhost),因此一段时间后可能会变得有些麻烦,因此您可能需要了解dnsmasq(MacOS /
UNIX)或Acrylic(Windows)之类的工具来减轻负担。 提示:可以在某些系统(至少是linux操作系统,包括SUSE
Linux和openSUSE)上安装libnss-myhostname软件包,以将
.localhost域自动解析为127.0.0.1,这意味着您不必再手动操作。例如
,如果您希望通过Ingress进行测试,则需要在其中设置域。

在此处,需要注意的事是:如果创建多个server节点,则K3s将被分配到--cluster-init标志,这意味着它将K3s的默认内部数据库(默认为sqlite)更改为etcd。

“配置即编码”方式

从k3d v4.0.0(发布于2021年1月)开始,我们支持使用配置文件,来配置一切您以前通过命令行标志所做的代码(不久之后甚至可能支持更多)。在撰写本文时,您可以在repo中找到用于验证配置文件的JSON模式:
https://GitHub.com/rancher/k3d/blob/092f26a4e27eaf9d3a5bc32b249f897f448bc1ce/pkg/config/v1alpha2/schema.json

示例配置文件:

# k3d configuration file, saved as e.g. /home/me/myk3dcluster.yamlapiVersion: k3d.io/v1alpha2  # this will change in the future as we make everything more stablekind: Simple  # internally, we also have a Cluster config, which is not yet available externallyname: mycluster  # name that you want to give to your cluster (will still be prefixed with `k3d-`)servers: 1  # same as `--servers 1`agents: 2  # same as `--agents 2`kubeAPI:  # same as `--api-port 127.0.0.1:6445`  hostIP: "127.0.0.1"  hostPort: "6445"ports:  - port: 8080:80  # same as `--port 8080:80@loadbalancer    nodeFilters:      - loadbalanceroptions:  k3d:  # k3d runtime settings    wait: true  # wait for cluster to be usable before returining; same as `--wait` (default: true)    timeout: "60s"  # wait timeout before aborting; same as `--timeout 60s`  k3s:  # options passed on to K3s itself    extraServerArgs:  # additional arguments passed to the `k3s server` command      - --tls-san=my.host.domain    extraAgentArgs: []  # aDDDitional arguments passed to the `k3s agent` command  kubeconfig:    updateDefaultKubeconfig: true  # add new cluster to your default Kubeconfig; same as `--kubeconfig-update-default` (default: true)switchCurrentContext: true  # also set current-context to the new cluster's context; same as `--kubeconfig-switch-context` (default: true)

假设我们将其另存为/home/me/myk3dcluster.yaml,我们可以使用它来配置新集群
k3d cluster create --config /home/me/myk3dcluster.yaml

注意:您仍然可以设置额外的参数或标志,这些参数或标志将优先于(或将被合并)你在配置文件中定义的任何参数。

k3d还能做什么?

你可以在很多场景下使用k3d,例如:

  • 与k3d托管的容器仓库一起创建集群

  • 使用集群通过热代码重载进行快速开发

  • 将k3d与其他开发工具(例如Tilt或Skaffold)结合使用

  • 两者都可以通过k3d image import利用镜像导入的功能

  • 两者都可以利用k3d托管的仓库来加快开发周期

  • 在您的CI系统中使用k3d(为此我们提供了PoC:https://github.com/iwilltry42/k3d-demo/blob/main/.drone.yml)

  • 使用社区维护的vscode扩展程序(https://github.com/inercia/vscode-k3d)将其集成到您的

  • vscode工作流程中 用它来设置K3s的高可用

以上就是如何在Docker中运行K3s,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何在Docker中运行K3s

本文链接: https://www.lsjlt.com/news/276862.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Docker中运行K3s
    本篇文章给大家分享的是有关如何在Docker中运行K3s,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是k3d?k3d是一个小型程序,用于在Docker中运行K3s集群。 ...
    99+
    2023-06-15
  • k3d入门指南之在Docker中运行K3s的详细教程
    什么是k3d? k3d是一个小型程序,用于在Docker中运行K3s集群。 K3s是经过CNCF认证的轻量级Kubernetes发行和沙箱项目。它是为资源有限环境设计的,被打包为单...
    99+
    2022-11-12
  • 如何在 Docker 容器中运行 MySQL
    本指南逐步解释了如何在几分钟内设置在 Docker 容器中运行的新 MySQL 服务器。 Docker 的一大优点是您可以快速使用它来试用应用程序,而无需直接在您的机器上安装它。您可以使用 Docker 在容器中运行数据库,就像它是远程服务...
    99+
    2023-09-17
    python php 开发语言
  • 如何在docker中运行mariadb程序
    这篇文章主要介绍如何在docker中运行mariadb程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!安装docker获取mariadb镜像docker pull mariadb首先在https://hub.doc...
    99+
    2023-06-07
  • 如何在Fedora 32上运行Docker
    这篇文章给大家介绍如何在Fedora 32上运行Docker,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随着 Fedora 32 的发布,Docker 的普通用户面临着一个小挑战。在编写本文时,Fedora...
    99+
    2023-06-15
  • 怎么在docker中运行docker swarm模式
    这篇文章将为大家详细讲解有关怎么在docker中运行docker swarm模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。安装docker使用yum安装更新yum源,sudo yum u...
    99+
    2023-06-07
  • 在Docker中运行PostgreSQL + pgAdmin 4
    拉取postgresql镜像:docker pull postgres 运行postgresql:docker run -d -p 5432:5432 --name postgresql -v pgdata:/var/li...
    99+
    2018-06-18
    在Docker中运行PostgreSQL + pgAdmin 4
  • 在docker上如何安装运行mysql
    这篇文章主要讲解了“在docker上如何安装运行mysql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在docker上如何安装运行mysql”吧!ps:实...
    99+
    2022-10-19
  • 如何在docker上部署运行workerman
    这篇文章主要介绍如何在docker上部署运行workerman,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在docker上部署gatawayWorker项目,项目中使用到mysql,redis。安装 mysql拉取...
    99+
    2023-06-29
  • 怎么在Fedora 32中运行Docker
    本篇文章给大家分享的是有关怎么在Fedora 32中运行Docker,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤 1:系统准备在 Fedora 的最后两个版本中,操作系统...
    99+
    2023-06-07
  • java9学习系列之在docker中如何运行java9
    前言本文将给大家详细介绍下如何在docker中运行java9的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。镜像docker pull openjdk:9-jdk...
    99+
    2023-05-31
    docker 运行 java9
  • 如何在docker中部署一个.NET 5 运行环境
    如何在docker中部署一个.NET 5 运行环境?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、创建站点创建一个ASP.NET Core Web应用程序,选中启用Docke...
    99+
    2023-06-07
  • Docker中怎么运行MySQL
    这篇文章将为大家详细讲解有关 Docker中怎么运行MySQL,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据安全问题不要将数据储存在容器中,这也是 Do...
    99+
    2022-10-18
  • Docker中安装运行rabbitMQ
    1拉取rabbitmq镜像 docker pull rabbitmq # 默认使用 rabbitmq最新版 1.2、启动容器实例  docker run -d --name rabbitmq -p15672:15672 -p5672:56...
    99+
    2023-10-03
    java-rabbitmq rabbitmq docker 中间件
  • 怎么在Docker中运行Jupyter/Spark/Mesos服务
    本篇内容介绍了“怎么在Docker中运行Jupyter/Spark/Mesos服务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Docke...
    99+
    2023-06-19
  • 教你成功在Windows10系统中运行Docker
    要在Windows 10系统中成功运行Docker,你需要按照以下步骤进行设置:1. 检查系统要求:确保你的Windows 10版本...
    99+
    2023-09-22
    Windows10
  • 怎么在docker中运行指定的内存
    怎么在docker中运行指定的内存?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如下:-m,--memory     &nbs...
    99+
    2023-06-14
  • 如何用docker运行Linux桌面
    这期内容当中小编将会给大家带来有关如何用docker运行Linux桌面,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。容器的大流行让很多东西虚拟化、容器化变成了现实。很多人还希望更多,想在容器中跑整个OS,...
    99+
    2023-06-15
  • ubuntu环境下如何运行docker
    ubuntu环境下运行docker的方法:打开终端输入以下命令,安装docker运行环境。sudo apt install docker-ce添加docker开机自启动,命令如下:sudo systemctl enable docker启动...
    99+
    2022-10-15
  • .NET5部署程序在Docker上运行
    本篇内容介绍了“.NET5部署程序在Docker上运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、创...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作