K3S 安装使用教程

官方文档: K3s - 轻量级 Kubernetes | Rancher文档

一.K3s 简介

什么是K3s

K3s 是一个轻量级的 Kubernetes 发行版

它针对边缘计算、物联网等场景进行了高度优化。

K3s 有以下增强功能:

  • 打包为单个二进制文件。
  • 使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
  • 封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。
  • 默认情况下是安全的,对轻量级环境有合理的默认值。
  • 添加了简单但功能强大的batteries-included功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller。
  • 所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
  • 最大程度减轻了外部依赖性,K3s 仅需要 kernel 和 cgroup 挂载。 K3s 软件包需要的依赖项包括:
    • containerd
    • Flannel
    • CoreDNS
    • CNI
    • 主机实用程序(iptables、socat 等)
    • Ingress controller(Traefik)
    • 嵌入式服务负载均衡器(service load balancer)
    • 嵌入式网络策略控制器(network policy controller)

为什么叫 K3s?

k3s内存占用是k8s的一半

kubernetes是一个10个字母的单词,简写为k8s

kubenetes的一半是5个字母,简写为k3s

适用场景

K3s 适用于以下场景:

  • 边缘计算-Edge
  • 物联网-IoT
  • CI
  • Development
  • ARM
  • 嵌入 K8s

由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景。

在这些场景中,如果开发或测试人员需要对某些功能进行验证,或对某些问题进行重现,那么使用 K3s 不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源。

二.架构介绍

K3s server 是运行k3s server命令的机器(裸机或虚拟机),而 K3s worker 节点是运行k3s agent命令的机器

单节点架构

K3s 单节点集群的架构如下图所示,该集群有一个内嵌 SQLite 数据库的单节点 K3s server。

在这种配置中,每个 agent 节点都注册到同一个 server 节点。

K3s 用户可以通过调用 server 节点上的 K3s API 来操作 Kubernetes 资源。

高可用架构

虽然单节点 k3s 集群可以满足各种用例,但对于 Kubernetes control-plane 的正常运行至关重要的环境,您可以在高可用配置中运行 K3s。

一个高可用 K3s 集群由以下几个部分组成:

  • K3s Server 节点:两个或更多的server节点将为 Kubernetes API 提供服务并运行其他 control-plane 服务
  • 外部数据库:与单节点 k3s 设置中使用的嵌入式 SQLite 数据存储相反,高可用 K3s 需要挂载一个external database外部数据库作为数据存储的媒介。

K3s高可用架构:

固定 agent 节点的注册地址

在高可用 K3s server 配置中,每个节点还必须使用固定的注册地址向 Kubernetes API 注册,注册后,agent 节点直接与其中一个 server 节点建立连接

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OAIZbzxX-1652774253221)(https://docs.rancher.cn/assets/images/k3s-production-setup-bf069ee663ad82a8104d19f0cccaf59a.svg)]

注册 Agent 节点

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

Agent 将使用节点集群 secret 以及随机生成的节点密码向 k3s server 注册,密码存储在 /etc/rancher/node/password路径下。

K3s server 将把各个节点的密码存储为 Kubernetes secrets,随后的任何尝试都必须使用相同的密码。节点密码秘密存储在kube-system命名空间中,名称使用模板<host>.node-password.k3s

注意:

  • 在 K3s v1.20.2 之前,K3s server 将密码存储在/var/lib/rancher/k3s/server/cred/node-passwd的磁盘上。
  • 如果您删除了 agent 的/etc/rancher/node目录,则需要为该 agent 重新创建密码文件,或者从 server 中删除该条目。
  • 通过使用--with-node-id标志启动 K3s server 或 agent,可以将唯一的节点 ID 附加到主机名中。

自动部署的清单

位于目录路径/var/lib/rancher/k3s/server/manifests 的清单在构建时被捆绑到 K3s 二进制文件中

将由rancher/helm-controller在运行时安装。

k3s默认容器运行时

k3s默认使用 containerd 作为容器运行时
在 goroutine 中以 子进程 方式 启动 containerd

验证:

ps aux | grep “k3s server”

root       7897 13.7 17.7 1459612 592916 ?      Ssl  10:51  48:13 /usr/local/bin/k3s server

ps -A -ostat,pid,ppid,cmd |grep 7897

Ssl    7897      1 /usr/local/bin/k3s server
Sl     7911   7897 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd

三、离线安装

概述

你可以使用两种不同的方法在离线环境中安装 K3s。

离线环境是不直接连接到 Internet 的任何环境。

你可以部署一个私有镜像仓库,或者你可以手动部署镜像,比如用于小型集群。

离线安装的过程主要分为以下两个步骤:

步骤 1:部署镜像

步骤 2:安装 K3s

离线升级 K3s 版本: 完成离线安装 K3s 后,您还可以通过脚本升级 K3s 版本,或启用自动升级功能,以保持离线环境中的 K3s 版本与最新的 K3s 版本同步。

部署私有镜像仓库

前提条件

搭建私有仓库 ,例如 harbor仓库, 搭建参考Harbor安装与配置

创建镜像仓库 YAML

请按照 K3S 私有镜像仓库配置创建并配置registry.yaml文件。

完成后,现在可以转到下面的[安装 K3s]部分,开始安装 K3

手动部署镜像

前提条件

假设已经在离线环境中创建了节点。

这种方法需要您手动将必要的镜像部署到每个节点,适用于运行无法部署镜像仓库的边缘部署场景。

操作步骤

请按照以下步骤准备镜像目录和 K3s 二进制文件

  1. 从K3s GitHub Release页面获取你所运行的 K3s 版本的镜像 tar 文件。

  2. 将 tar 文件放在images目录下,例如:

    sudo mkdir -p /var/lib/rancher/k3s/agent/images/
    sudo cp k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/
    
  3. 将 k3s 二进制文件放在 /usr/local/bin/k3s路径下,并确保拥有可执行权限。完成后,现在可以转到下面的安装 K3s部分,开始安装 K3s。

安装 K3s

更多安装选项参考 安装选项介绍 | Rancher文档

前提条件

  • 在安装 K3s 之前,完成上面的部署私有镜像仓库或手动部署镜像,导入安装 K3s 所需要的镜像。
  • 从 release 页面下载 K3s 二进制文件,K3s 二进制文件需要与离线镜像的版本匹配。将二进制文件放在每个离线节点的 /usr/local/bin 中,并确保这个二进制文件是可执行的。
  • 下载 K3s 安装脚本:https://get.k3s.io 。将安装脚本放在每个离线节点的任意地方,并命名为 install.sh

当使用 INSTALL_K3S_SKIP_DOWNLOAD 环境变量运行 K3s 脚本时,K3s 将使用本地的脚本和二进制。

单节点安装

server节点
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
Agent节点
# 将 myserver 替换为 server 的 IP 或有效的 DNS
# 将 mynodetoken 替换 server 节点的 token
# token 通常在/var/lib/rancher/k3s/server/node-tokenINSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken ./install.sh

注意:

K3s 还为 kubelets 提供了一个--resolv-conf标志,这可能有助于在离线网络中配置 DNS

高可用安装

需要调整安装命令,以便指定INSTALL_K3S_SKIP_DOWNLOAD=true并在本地运行安装脚本。您还将利用INSTALL_K3S_EXEC='args'为 k3s 提供其他参数。

例如,使用外部数据库实现高可用安装指南的第二步提到了以下内容:

curl -sfL https://get.k3s.io | sh -s - server \--datastore-endpoint='mysql://username:password@tcp(hostname:3306)/database-name'

由于在离线环境中无法使用curl命令进行安装,所以您需要参考以下示例,将这条命令行修改为离线安装:

INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server' K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/database-name' ./install.sh

四、升级 K3s

通过脚本升级

离线环境的升级可以通过以下步骤完成:

  1. 从K3s GitHub Release页面下载要升级到的 K3s 版本。将 tar 文件放在每个节点的/var/lib/rancher/k3s/agent/images/目录下。删除旧的 tar 文件。
  2. 复制并替换每个节点上/usr/local/bin中的旧 K3s 二进制文件。复制https://get.k3s.io 的安装脚本(因为它可能在上次发布后发生了变化)。再次运行脚本。
  3. 重启 K3s 服务。

启用自动升级功能

除了可以通过脚本升级 K3s 以外,您还可以启用自动升级功能,以保持离线环境中的 K3s 版本与最新的 K3s 版本同步。

v1.17.4+k3s1 开始,K3s 支持自动升级。要在离线环境中启用此功能,您必须确保所需镜像在您的私有镜像仓库中可用。

  1. 你将需要与你打算升级到的 K3s 版本相对应的 rancher/k3s-upgrade 版本。

    注意,镜像标签将 K3s 版本中的+替换为-,因为 Docker 镜像不支持+

  2. 你还需要在你要部署的system-upgrad-controller manifestYAML 中指定的 system-upgrad-controllerkubectl的版本。

    在这里检查 system-upgrad-controller 的最新版本,并下载 system-upgrad-controller.yaml来确定你需要推送到私有镜像仓库的版本。例如,在system-upgrade-controller的 v0.4.0 版本中,在 manifest YAML 中指定了这些镜像:

    rancher/system-upgrade-controller:v0.4.0rancher/kubectl:v0.17.0
    
  3. 将必要的 rancher/k3s-upgrade、rancher/system-upgrade-controller 和 rancher/kubectl 镜像添加到您的私有镜像仓库中以后 ,就可以按照K3s 自动升级指南进行操作。

五.卸载 K3s

卸载 K3s 会删除集群数据和所有脚本。

要使用不同的安装选项重新启动集群,请使用不同的标志重新运行安装脚本。

server 节点卸载 K3s

/usr/local/bin/k3s-uninstall.sh

agent 节点卸载 K3s

/usr/local/bin/k3s-agent-uninstall.sh

K3S 安装使用教程相关推荐

  1. centos7 mysql workbench_centOS下mysql workbench安装配置教程

    本文为大家分享了mysql workbench安装配置教程,供大家参考,具体内容如下 step0:安装mysql 在按照workbench之前,先安装mysql.指令是 yum install mys ...

  2. geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网

    Geany是利用GTK 2工具包开发的一个快速.轻巧的集成开发环境,具有良好的可移植性和通用性.安全性,广泛应用于各个行业.Geany具有语法高亮.代码折叠.代码自动完成等功能,非常适合开发人员使用. ...

  3. python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil

    "python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...

  4. Mac环境下Docker及Splash的安装运行教程

    一.前言 由于最近使用Python爬虫框架scrapy练习爬虫,在爬取动态网页的时候,需要用到splash,进行对动态网页进行JavaScript渲染,但是使用splash又必须安装Docker.因为 ...

  5. kafka不使用自带zk_kafka 安装部署教程

    kafka 安装部署教程 1. 下载 官网链接 http://kafka.apache.org/downloads 浙大源 http://mirrors.tuna.tsinghua.edu.cn/ap ...

  6. Matlab2013a安装简单教程以及遇到的问题解决(反复提示激活问题)

    虽然说现在matlabr2018都出来了,但是有的时候还是需要这些老版本的matlab,最囧的时刻时不熟悉新版本而产生的障碍而导致使用2013版本的matlab. 今天在安装matlab时候,遇到了一 ...

  7. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  8. Linux入门第三集!JDK8的Linux版本资源分享!jdk-8u301-linux-x64.rpm官方资源分享!Linux安装JDK8教程!

    Linux入门第三集!JDK8的Linux版本资源分享!jdk-8u301-linux-x64.rpm官方资源分享!Linux安装JDK8教程! 提取码均为0916 jdk-8u301-linux-x ...

  9. ENVI5.1安装破解教程

    原文地址: ENVI5.1安装破解_百度经验 http://jingyan.baidu.com/article/020278118b5ded1bcd9ce57a.html ENVI5.1_x86_x6 ...

最新文章

  1. Linux中切换用户变成-bash4.1-$的解决方法
  2. usb接口供电不足_电脑USB接口不够用?来试试ORICO条纹hub扩展器吧
  3. C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
  4. 【学术相关】大学老师的职业前景究竟怎么样?薪资待遇如何?
  5. android one x2,HTC One X 深度OS Android4.1.2 大气不失稳重 雍容华贵 流畅运行
  6. 如何迁移mac电脑上的itunes备份iphone的文件
  7. 第十九章:李丽质入狱
  8. jQuery实现留言板功能
  9. 华为android界面强刷救砖教程,华为P9刷机失败变砖开不了机了怎么办 华为P9救砖方法...
  10. qemu: usb存储设备仿真
  11. Google SketchUp Cookbook: (Chapter 1) Making Multiple Copies
  12. MySQL异常一之: You can‘t specify target table for update in FROM clause解决办法
  13. x264和x265编码技术的区别
  14. 腾讯安全2020年区块链成绩单出炉
  15. android 端口查看工具,安卓模拟器连接端口一览表:(2018.11收录10款)
  16. 工具分享--IDM下载工具利器,让下载速度提升一百倍
  17. 华为交换机MPU、LPU硬件信息解释
  18. 计算机水平考试试题c,计算机水平考试-初级程序员下午试题模拟6
  19. Python小白项目练习500例(附源代码),练完可就业
  20. 微信小程序开发教程:项目五导航组件 课后习题

热门文章

  1. 电容式触摸感应技术原理之自容式触摸按键电极设计建议(3)
  2. 推荐几个优秀的UI素材网站!做网站不发愁了。
  3. js获取2020年后当前年月日 星期 农历
  4. 从maya灯光贴图lightmap到unity
  5. iOS利用UIDocumentInteractionController和Quick Look打开或预览文档
  6. Disruptor学习笔记:基本使用、核心概念和原理
  7. java8 stream流 .map
  8. 华为正式发布鸿蒙罗,华为正式发布鸿蒙系统,未来将适配全场景
  9. 计算机博士英文复试自我介绍,博士复试自我介绍中英文
  10. 能率服务器显示er72,燃气热水器er什么意思