K3S 安装使用教程

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 资源。

Architecture

高可用架构

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

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

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

K3s高可用架构:

Architecture

固定 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-token

INSTALL_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.0
    
    rancher/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

猜你喜欢

转载自blog.csdn.net/wq1205750492/article/details/124823514