我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在Docker中运行K3s

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在Docker中运行K3s

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

下载Word文档

猜你喜欢

如何在Docker中运行K3s

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

如何在docker中运行mariadb程序

这篇文章主要介绍如何在docker中运行mariadb程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.安装docker2.获取mariadb镜像docker pull mariadb首先在https://hub
2023-06-07

如何在Fedora 32上运行Docker

这篇文章给大家介绍如何在Fedora 32上运行Docker,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随着 Fedora 32 的发布,Docker 的普通用户面临着一个小挑战。在编写本文时,Fedora 32 不
2023-06-15

如何在docker上部署运行workerman

这篇文章主要介绍如何在docker上部署运行workerman,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在docker上部署gatawayWorker项目,项目中使用到mysql,redis。安装 mysql拉取
2023-06-29

在Docker中运行PostgreSQL + pgAdmin 4

拉取postgresql镜像:docker pull postgres运行postgresql:docker run -d -p 5432:5432 --name postgresql -v pgdata:/var/lib/postgresql/data -e
在Docker中运行PostgreSQL + pgAdmin 4
2018-06-18

怎么在docker中运行docker swarm模式

这篇文章将为大家详细讲解有关怎么在docker中运行docker swarm模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。安装docker使用yum安装1.更新yum源,sudo yum
2023-06-07

java9学习系列之在docker中如何运行java9

前言本文将给大家详细介绍下如何在docker中运行java9的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。镜像docker pull openjdk:9-jdk
2023-05-31

怎么在Fedora 32中运行Docker

本篇文章给大家分享的是有关怎么在Fedora 32中运行Docker,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤 1:系统准备在 Fedora 的最后两个版本中,操作系统
2023-06-07

如何在docker中部署一个.NET 5 运行环境

如何在docker中部署一个.NET 5 运行环境?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、创建站点创建一个ASP.NET Core Web应用程序,选中启用Docke
2023-06-07

javaweb在eclipse中如何运行

要在Eclipse中运行Java Web项目,您需要按照以下步骤进行操作:1. 确保您已经安装了Java Development Kit(JDK)和Eclipse IDE。2. 在Eclipse中创建一个新的Dynamic Web Proj
2023-09-22

如何用docker运行Linux桌面

这期内容当中小编将会给大家带来有关如何用docker运行Linux桌面,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。容器的大流行让很多东西虚拟化、容器化变成了现实。很多人还希望更多,想在容器中跑整个OS,
2023-06-15

linux如何查看docker是否运行

本篇内容介绍了“linux如何查看docker是否运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在linux中,可以利用systemct
2023-07-02

教你成功在Windows10系统中运行Docker

要在Windows 10系统中成功运行Docker,你需要按照以下步骤进行设置:1. 检查系统要求:确保你的Windows 10版本是支持Docker的。Docker要求Windows 10版本为1903及更高版本,且系统架构为x64。你可
2023-09-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录