k3s 指南

news/2024/4/27 10:31:54/文章来源:https://blog.csdn.net/xixihahalelehehe/article/details/127530735

k3s 指南

在这里插入图片描述

文章目录

  • k3s 指南
    • 简介
    • 什么是 K3s?
    • 技术亮点
    • 架构
    • 发展趋势
    • 云边缘
    • k3s 周边
      • 单节点
      • 高可用
    • 代理注册
    • 部署清单
    • 集群要求
      • 大型集群
        • cpu 与 内存
      • 数据库
    • 配置选项
      • 使用安装脚本
      • 二进制配置
      • 配置文件
    • 网络选项
      • Flannel options

简介

轻量级Kubernetes
k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。易于安装,全部在不到 100 MB 的二进制文件中。

非常适合:

  • 边缘(Edge)
  • 物联网(IoT)
  • CI
  • Development
  • ARM
  • 嵌入 K8s

什么是 K3s?

K3s 是一个完全兼容的 Kubernetes 发行版,具有以下增强功能:

  • 打包为单个二进制文件。
  • 基于 sqlite3 作为默认存储机制的轻量级存储后端。etcd3MySQLPostgres 也仍然可用。
  • 包裹在简单的启动器中,可以处理 TLS 和选项的许多复杂性。
  • 默认情况下安全,轻量级环境的合理默认值。
  • 添加了简单但强大的“包含电池”功能,例如:本地存储提供程序、服务负载均衡器、- Helm 控制器和 Traefik 入口控制器。
  • 所有 Kubernetes 控制平面组件的操作都封装在一个二进制文件和进程中。这允许 K3s 自动化和管理复杂的集群操作,例如分发证书。
  • 外部依赖性已最小化(只需要现代内核和 cgroup 挂载)。K3s 打包了所需的依赖,包括:
    • containerd
    • Flannel
    • CoreDNS
    • CNII
    • 主机实用程序(iptables、socat 等)
    • Ingress controller (traefik)
    • 嵌入式服务负载均衡器(Embedded service loadbalancer)
    • 嵌入式网络策略控制器(Embedded network policy controller)

技术亮点

  • 单进程架构简化部署
  • 移除各种非必需代码,减少资源占用
  • TLS证书管理
  • 内置Containerd
  • 内置运行rootfs
  • 内置Helm Charts管理机制
  • 内置L4/L7 LB支持

在这里插入图片描述
在这里插入图片描述

架构

本页介绍了高可用 K3s 服务器集群的架构以及它与单节点服务器集群的区别。它还描述了代理节点如何注册到 K3s 服务器。

k3s server服务器节点定义为运行命令的机器(裸机或虚拟机) 。工作节点定义为运行k3s agent命令的机器。

在这里插入图片描述
在这里插入图片描述

发展趋势

在这里插入图片描述

云边缘

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

k3s 周边

在这里插入图片描述

单节点

下图显示了具有单节点 K3s 服务器和嵌入式 SQLite 数据库的集群示例。

在此配置中,每个代理节点都注册到同一个服务器节点。K3s 用户可以通过调用服务器节点上的 K3s API 来操作 Kubernetes 资源。

在这里插入图片描述

高可用

单服务器集群可以满足各种用例,但对于 Kubernetes 控制平面的正常运行时间至关重要的环境,您可以在 HA 配置中运行 K3s。一个 HA K3s 集群包括:

  • 两个或多个服务于 Kubernetes API 并运行其他控制平面服务的服务器节点
  • 外部数据存储(与单服务器设置中使用的嵌入式 SQLite 数据存储相对)

在这里插入图片描述

代理注册

在高可用服务器配置中,每个节点还必须使用固定的注册地址向 Kubernetes API 注册,如下图所示。

注册后,代理节点直接与其中一个服务器节点建立连接。

在这里插入图片描述

代理节点注册到由k3s agent进程启动的 websocket 连接,连接由作为代理进程一部分运行的客户端负载均衡器维护。

代理将使用节点集群密码以及随机生成的节点密码向服务器注册,存储在/etc/rancher/node/password. 服务器会将各个节点的密码存储为 Kubernetes 机密,任何后续尝试都必须使用相同的密码。节点密码秘密存储在kube-system命名空间中,名称使用模板<host>.node-password.k3s

注意:在 K3s v1.20.2之前,服务器将密码存储在磁盘上的/var/lib/rancher/k3s/server/cred/node-passwd.

如果/etc/rancher/node删除了代理的目录,则应为代理重新创建密码文件,或者从服务器中删除条目。

--with-node-id通过使用该标志启动 K3s 服务器或代理,可以将唯一节点 ID 附加到主机名。

部署清单

位于目录路径的清单/var/lib/rancher/k3s/server/manifests在构建时被捆绑到 K3s 二进制文件中。这些将由rancher/helm-controller在运行时安装。

集群要求

K3s 非常轻量级,但有一些最低要求,如下所述。

无论您是将 K3s 集群配置为在 Docker 还是 Kubernetes 设置中运行,运行 K3s 的每个节点都应满足以下最低要求。您可能需要更多资源来满足您的需求。

  • 两个节点不能具有相同的主机名。
    如果您的所有节点都具有相同的主机名,请使用该--with-node-id选项为每个节点附加一个随机后缀,或者设计一个唯一名称以与您添加到集群的每个节点一起传递--node-name$K3S_NODE_NAME为每个节点传递。

  • K3s 有望在大多数现代 Linux 系统上运行。
    一些操作系统有特定的要求:

    • 如果您使用的是(Red Hat/CentOS) Enterprise Linux,请按照以下步骤进行其他设置。
    • 如果您使用的是Raspberry Pi OS,请按照以下步骤切换到旧版 iptables。
  • 硬件要求会根据您的部署规模进行扩展。此处概述了最低建议。

    • RAM:至少 512MB(我们建议至少 1GB)
    • CPU:至少 1 个

K3s Resource Profiling捕获测试结果以确定 K3s 代理、具有工作负载的 K3s 服务器和具有一个代理的 K3s 服务器的最低资源需求。它还包含对 K3s 服务器和代理利用率影响最大的分析,以及如何保护集群数据存储免受代理和工作负载的干扰。

  • K3s 的性能取决于数据库的性能。为确保最佳速度,我们建议尽可能使用 SSD。使用 SD 卡或 eMMC 的 ARM 设备的磁盘性能会有所不同。

  • K3s 服务器需要 6443 端口才能被所有节点访问。

  • 当使用 Flannel VXLAN 时,节点需要能够通过 UDP 端口 8472 访问其他节点,或者当使用 Flannel Wireguard 后端时,节点需要能够通过 UDP 端口 5182051821(使用 IPv6 时)访问其他节点。该节点不应侦听任何其他端口。K3s 使用反向隧道,以便节点与服务器建立出站连接,并且所有 kubelet 流量都通过该隧道运行。但是,如果您不使用 Flannel 并提供自己的自定义 CNI,那么 K3s 不需要 Flannel 所需的端口。

如果您希望使用指标服务器,则需要在每个节点上打开端口 10250。如果您计划使用嵌入式 etcd 实现高可用性,则服务器节点必须可以在端口 2379 和 2380 上相互访问。

重要提示:节点上的 VXLAN 端口不应暴露给外界,因为它会打开您的集群网络以供任何人访问。在禁止访问端口 8472 的防火墙/安全组后面运行您的节点。 警告: Flannel 依赖于Bridge CNI 插件来创建交换流量的 L2 网络。具有 NET_RAW 功能的流氓 pod 可以滥用该 L2 网络来发起攻击,例如ARP 欺骗。因此,如kubernetes 文档中所述,请设置一个受限配置文件,在不可信任的 pod 上禁用 NET_RAW

K3s 服务器节点的入站规则

协议港口资源描述
TCP6443K3s代理节点Kubernetes API 服务器
UDP8472K3s 服务器和代理节点仅 Flannel VXLAN 需要
UDP51820K3s 服务器和代理节点仅 Flannel Wireguard 后端需要
UDP51821K3s 服务器和代理节点只有使用 IPv6 的 Flannel Wireguard 后端才需要
TCP10250K3s 服务器和代理节点Kubelet 指标
TCP2379-2380K3s 服务器节点仅适用于具有嵌入式 etcd 的 HA

通常允许所有出站流量。

大型集群

硬件要求取决于您的 K3s 集群的大小。对于生产和大型集群,我们建议使用具有外部数据库的高可用性设置。对于生产中的外部数据库,建议使用以下选项:

  • MySQL
  • PostgreSQL

cpu 与 内存

以下是高可用性 K3s 服务器中节点的最低 CPU 和内存要求:

Deployment SizeNodesVCPUSRAM
SmallUp to 1024 GB
MediumUp to 10048 GB
LargeUp to 250816 GB
X-LargeUp to 5001632 GB
XX-Large500+3264 GB

集群性能取决于数据库性能。为确保最佳速度,我们建议始终使用 SSD 磁盘来支持您的 K3s 集群。在云提供商上,您还需要使用允许最大 IOPS 的最小大小。

您应该考虑增加集群 CIDR 的子网大小,这样您就不会用完 PodIP。您可以通过--cluster-cidr在启动时将选项传递给 K3s 服务器来做到这一点。

数据库

K3s 支持不同的数据库,包括 MySQLPostgreSQLMariaDBetcd,以下是运行大型集群所需的数据库资源的大小指南:

Deployment SizeNodesVCPUSRAM
SmallUp to 1012 GB
MediumUp to 10028 GB
LargeUp to 250416 GB
X-LargeUp to 500832 GB
XX-Large500+1664 GB

配置选项

使用安装脚本

如快速入门指南中所述,您可以使用https://get.k3s.io上提供的安装脚本将 K3s 作为服务安装在基于 systemdopenrc 的系统上。

您可以结合使用INSTALL_K3S_EXECK3S_环境变量和命令标志来配置安装。

为了说明这一点,以下命令都会导致在没有 flannel 和使用令牌的情况下注册服务器的相同行为:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend none --token 12345" sh -s -
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --flannel-backend none" K3S_TOKEN=12345 sh -s -
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" sh -s - --flannel-backend none
curl -sfL https://get.k3s.io | K3S_TOKEN=12345 sh -s - server --flannel-backend none
curl -sfL https://get.k3s.io | sh -s - --flannel-backend none --token 12345

有关所有环境变量的详细信息,请参阅环境变量。

二进制配置

如前所述,安装脚本主要关注将 K3s 配置为作为服务运行。
如果您选择不使用该脚本,您只需从我们的发布页面下载二进制文件,将其放在您的路径上,然后执行即可运行 K3s。或者您可以安装 K3s 而不将其作为服务启用:

curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_ENABLE=true sh -

K3S_您可以通过环境变量以这种方式配置K3s :

K3S_KUBECONFIG_MODE="644" k3s server

或命令标志:

k3s server --write-kubeconfig-mode 644

k3s 代理也可以这样配置:

k3s agent --server https://k3s.example.com --token mypassword
  • 有关配置 K3s 服务器的详细信息,请参阅服务器配置。
  • 有关配置 K3s 代理的详细信息,请参阅代理配置。

您还可以使用该--help标志查看所有可用选项的列表。

配置文件

从v1.19.1+k3s1 开始可用

除了使用环境变量和 CLI 参数配置 K3s 之外,K3s 还可以使用配置文件。

默认情况下,位于 的 YAML 文件中的值/etc/rancher/k3s/config.yaml将在安装时使用。

下面是一个基本server配置文件的示例:

write-kubeconfig-mode: "0644"
tls-san:- "foo.local"
node-label:- "foo=bar"- "something=amazing"

通常,CLI 参数映射到它们各自的 YAML 键,可重复的 CLI 参数表示为 YAML 列表。

下面显示了仅使用 CLI 参数的相同配置来演示这一点:

k3s server \--write-kubeconfig-mode "0644"    \--tls-san "foo.local"             \--node-label "foo=bar"            \--node-label "something=amazing"

也可以同时使用配置文件和 CLI 参数。在这些情况下,将从两个来源加载值,但 CLI 参数将优先。对于诸如 的可重复参数--node-label,CLI 参数将覆盖列表中的所有值。

最后,可以通过 CLI 参数--config FILE, -c FILE或环境变量$K3S_CONFIG_FILE更改配置文件的位置。

上述所有选项都可以组合成一个示例。

在以下位置创建一个config.yaml文件/etc/rancher/k3s/config.yaml

token: "secret"
debug: true

然后使用环境变量和标志的组合运行安装脚本:

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="server" sh -s - --flannel-backend none

或者,如果您已经安装了 K3s 二进制文件:

K3S_KUBECONFIG_MODE="644" k3s server --flannel-backend none

网络选项

以下网络选项:

  • Flannel options
  • Custom CNI
  • Dual-stack installation
  • IPv6-only-installation
  • Distributed hybrid or multicloud cluster

Flannel options

flannel 的默认后端是 VXLAN。要启用加密,请传递下面的 IPSec(Internet 协议安全)或 WireGuard 选项。

如果你想使用 WireGuard 作为你的 flannel 后端,它可能需要额外的内核模块。有关详细信息,请参阅WireGuard 安装指南。WireGuard 安装步骤将确保为您的操作系统安装适当的内核模块。在尝试利用 WireGuard flannel 后端选项之前,您需要在每个节点上安装 WireGuard,包括服务器和代理。wireguard后端将从 v1.26 中删除,以支持 Flannel 的本地wireguard-native后端。

我们建议用户尽快迁移到新的后端。当节点提出新配置时,迁移需要很短的停机时间。您应该遵循以下两个步骤:

1 - 更新所有控制平面节点中的 K3s 配置。配置文件/etc/rancher/k3s/config.yaml应该包括flannel-backend: wireguard-native而不是flannel-backend: wireguard.

2 - 重新启动所有节点。

参考:

  • https://k3s.io/
  • https://docs.rancher.cn/k3s/
  • https://github.com/k3s-io/k3s
  • k3s进阶之路
  • k3s从入门到进阶全攻略
  • k3s 问题讨论文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410348.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring底层核心概念

在深入Spring核心源码之前&#xff0c;需要了解一些Spring的核心概念&#xff0c;便于后面的进行展开。 一:BeanDefinition 表示Bean定义&#xff0c;BeanDefinition中存在很多属性用来描述一个Bean的特点&#xff1b; class&#xff0c;表示Bean的类型scope,表示Bean作用域…

快速排序【模板+边界处理】

全文目录&#xff1a;&#x1f603;快速排序的思想&#x1f615; 快速排序演示图&#x1f634; 代码模板❗️ i 和 j 的取值和循环处理 ❗️&#x1f5fd; i 和 j 的取值 &#x1f5fd;&#x1f5fd; 循环条件判断 &#x1f5fd;&#x1f4a2; 边界问题 &#x1f4a2;&#x1f…

Scala数组常用函数(2)

函数&#xff08;1&#xff09;&#xff1a;Scala数组常用函数&#xff08;1&#xff09;_后季暖的博客-CSDN博客 目录 四十六.-def isTraversableAgain: Boolean 四十七.-def iterator: collection.Iterator[T] 四十八.-def last: T 四十九.-def lastIndexOf(elem: T):…

计算机毕业设计(66)php小程序毕设作品之视频点播学习在线教育小程序系统

基于微信小程序的毕业设计题目&#xff08;12&#xff09;php在线教育视频点播学习小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板) 项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序视频点播系统&#xff0c;前台用户使用小程序&a…

【2022秋招面经】——数据库

参考链接&#xff1a; 1. 20个数据库常见面试题讲解 2. MySQL数据库面试题&#xff08;2020最新版&#xff09; 小林coding-MySQL 小林coding-Redis 文章目录数据库关系型数据库和非关系型数据库数据库高并发环境解决方案数据库外键的优缺点百万级别或以上的数据如何删除如何保…

计算机毕业设计(64)php小程序毕设作品之校园运动场地预约小程序系统

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序运动场地预约系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基PHPMySql的B/S架构&#xff1b;通过后台添加开放的场地类型&#xff08;比如羽毛球、篮球、网球等&#xff09;、…

混合与面剔除帧缓冲

混合混合不同物体的多种颜色为一种颜色,所以透明度能让我们看穿物体,透明度一般由alpha颜色值来决定的,透明度为1-alpha值。首先试着使用有一部分透明的草贴图.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);//用来说明现在…

JavaScript 52 JavaScript this 关键词

JavaScript 文章目录JavaScript52 JavaScript this 关键词52.1 this 是什么&#xff1f;52.2 方法中的 this52.3 单独的 this52.4 函数中的 this&#xff08;默认&#xff09;52.5 函数中的 this&#xff08;严格模式&#xff09;52.6 事件处理程序中的 this52.7 对象方法绑定5…

2022年马丁·加德纳聚会数学魔术分享之《加加减减的奥秘》回顾

早点关注我&#xff0c;精彩不错过&#xff01;2022.10.30&#xff0c;本年度的线上马丁加德纳聚会如约举行。随着大家对线上这种活动方式的适应和不变的对趣味数学的热爱&#xff0c;今年聚会的规模&#xff0c;无论是线下还是线上&#xff0c;都朝着欣欣向荣的方向发展着。详…

【CV】第 7 章:使用 YOLO 进行对象检测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【历史上的今天】11 月 1 日:蒂姆·库克诞生;Amazon.com 注册域名;比特币问世

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 11 月 1 日&#xff0c;在 1949 年的今天&#xff0c;中国科学院在北京成立&#xff0c;它是中国最高学术领导机构的综合研究中心&#xff0c;首任院长是郭沫若…

【C++】继承- 赋值兼容转换、虚基表

前言 Hi~大家好呀&#xff01;欢迎来到我的C系列学习笔记&#xff01; 我上一篇的C笔记链接在这里哦~&#xff1a;【C】模板的非类型参数、特化、分离编译_柒海啦的博客-CSDN博客 C类与对象博客在这里哦~&#xff1a;【C】类和对象_柒海啦的博客-CSDN博客_c类和对象 本篇&#…

【异步系列五】关于async、await、promise、微任务、宏任务的执行顺序解析【最终篇】

前段时间总结了几篇关于异步原理、Promise原理、Promise面试题、async/await 原理的文章&#xff0c;链接如下&#xff0c;感兴趣的可以去看下&#xff0c;相信会有所收获。 一篇文章理清JavaScript中的异步操作原理 Promise原理及执行顺序详解 10道 Promise 面试题彻底理解…

输入输出、文件读写、数据类型

package chapter01 /* object:关键字&#xff0c;声明一个单例对象&#xff08;伴生对象&#xff09;*/ object HelloWorld {/*main方法&#xff1a;从外部可以直接调用执行的方法def 方法名称&#xff08;参数名称&#xff1a;参数数据类型&#xff09;:方法返回值类型 { 方法…

2.8 标准输入与格式化输出

文章目录1. Input 标准输入1.1 标准输入1.2 阻塞状态1.3 输入提示1.4 获取输入字符串1.5 输入版本差异1. Python3 输入数据类型2. Python2 输入数据类型2. Print 格式化输出2.1 输入2.2 sep 参数2.3 end 参数2.4 快捷写法2.5 格式化输出1. 语法格式2. 字典形式传值3. 元组形式传…

什么是GPT

什么是GPT 参考资料&#xff1a; https://zhuanlan.zhihu.com/p/350017443 https://zhuanlan.zhihu.com/p/106462515 https://www.cnblogs.com/yifanrensheng/p/13167796.html https://blog.csdn.net/weixin_45577864/article/details/119651372 Generative Pre-trained T…

这可能是你需要的vue考点梳理

对 React 和 Vue 的理解&#xff0c;它们的异同 相似之处&#xff1a; 都将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库&#xff1b;都有自己的构建工具&#xff0c;能让你得到一个根据最佳实践设置的项目模板&#xff1b;都使用了Virt…

Golang学习之路3-基础认识(下)

文章目录前言一、数组1.定长数组2.不定长数组二、map1.使用关键字 map 来声明2.使用 make 来声明3.添加元素4.检索key的value是否存在5.删除元素6.遍历map7.map的注意点在这里插入图片描述三、指针1.使用指针& 及 *2.空指针四、循环与条件判断1.循环2.条件判断前言 学习一…

Go语言函数

什么是函数 func main() {fmt.Println("hello,world")//调用函数fmt.Println(add(1, 2)) }// func 函数名&#xff08;参数&#xff0c;参数。。。&#xff09;&#xff0c;函数调用返回值类型&#xff08;&#xff09; func add(a, b int) int {c : a breturn c }函…

Ray tracing 光线追踪 之 embree ,从入门到精通 02 从源码编译与安装

1. 下载预编译的ispc&#xff0c;安装 网址&#xff1a; https://ispc.github.io resources -> github page 进入ispc 的github的release页&#xff1a;Releases ispc/ispc GitHub 找到一个预编译好了的ispc&#xff0c;其中在windows平台上是&#xff1a;https://github…