介绍

k3s 是一个轻量级 Kubernetes,它易于安装,二进制文件包小于 40 mb,只需要 512MB RAM 即可运行。

Kubernetes is a 10-letter word stylized as K8s. So something half as big as Kubernetes would be a 5-letter word stylized as K3s. There is no long form of K3s and no official pronunciation.

k3s 旨在成为完全兼容的 Kubernetes 发行版,相比 k8s 主要更改如下:

  1. 新增 SQLite3 作为默认存储机制,etcd3 仍然有效,但是不再是默认项。
  2. 封装在简单的启动器中,可以处理大量 LTS 复杂性和选项。
  3. 最小化到没有操作系统依赖,只需要一个内核和 cgroup 挂载。
  4. 网络插件使用 Flannel, 反向代理入口使用 traefik 代替 ingress nginx
  5. apiserver 、schedule 等组件全部简化,并以进程的形式运行在节点上
  6. 默认使用 local-path-provisioner 提供本地存储卷

k3s 包需要依赖:

  • containerd
  • Flannel
  • CoreDNS
  • CNI
  • Host 工具(iptables、socat 等)

K3s 包含并默认使用containerd, 代替docker这是一种行业标准的容器运行时.

k3s架构

单机版

下图显示了具有单节点 K3s 服务器和嵌入式 SQLite 数据库的群集示例。
在此配置中,每个代理节点都注册到同一服务器节点。K3s 用户可以通过在服务器节点上调用 K3s API 来操作 Kubernetes 资源。

具有单个服务器的 K3s 架构
image.png

高可用

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

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

具有高可用性服务器的 K3s 体系结构
image.png

k3s运行机制

K8s 所有控制面组件最终都以进程的形式运行在 server node 上,不再以静态pod的形式。数据库使用 SQLite ,没有etcd 那么重了。也就是说,当我们安装部署好 K3s 后,使用kubectl get po -n kube-system 时,则不会有 apiserver、scheduler 等控制面的pod了

Agent 端 kubelet 和 kube proxy 都是进程化了,此外容器运行时也由docker 改为 containerd。server node 和 agent node 通过特殊的代理通道连接,从这个运行机制确实能感受到 K3s 极大的轻量化了 K8s
image.png

K3s安装部署

手动安装

  1. Download K3s - latest release, x86_64, ARMv7, and ARM64 are supported
    2. Run server
    sudo k3s server &
    # Kubeconfig is written to /etc/rancher/k3s/k3s.yaml
    sudo k3s kubectl get node

# On a different node run the below. NODE_TOKEN comes from /var/lib/rancher/k3s/server/node-token
# on your server
sudo k3s agent —server https://myserver:6443 —token ${NODE_TOKEN}

脚本安装

1) k3s-server安装

The install.sh script provides a convenient way to download K3s and add a service to systemd or openrc.
To install k3s as a service just run: curl -sfL [https://get.k3s.io](https://get.k3s.io) | sh -
image.png
A kubeconfig file is written to /etc/rancher/k3s/k3s.yaml and the service is automatically started or restarted. The install script will install K3s and additional utilities, such as kubectl, crictl, k3s-killall.sh, and k3s-uninstall.sh, for example:
sudo kubectl get nodes
image.png
使用 kubectl 从外部访问集群 - download the file /etc/rancher/k3s/k3s.yaml located on the master node to our local machine into ~/.kube/config.
image.png

2) k3s-agent安装

k3s-gent 通过进程启动的 websocket 连接注册,并且该连接由客户端负载均衡器维护, 作为k3s-gent进程的一部分运行.

Agent安装需要传入额外的K3S_URL和K3S_TOKEN参数

  • K3S_URL是Server节点的IP地址, 默认端口是6443
  • K3S_TOKEN存储在Server节点的/var/lib/rancher/k3s/server/node-token文件中

To install on worker nodes we should pass K3S_URL along with K3S_TOKEN or K3S_CLUSTER_SECRET environment variables, for example:
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -
image.png

卸载操作

如果使用安装脚本安装了 K3s,则会在安装过程中生成用于卸载 K3s 的脚本. Uninstalling K3s deletes the cluster data and all of the scripts.

  • 卸载server端- /usr/local/bin/k3s-uninstall.sh
  • 卸载 agent 端- /usr/local/bin/k3s-agent-uninstall.sh

    k3s服务配置

    1) k3s命令行CLI

    image.png

    2) k3s-server 配置文件

    image.png

    3) k3s-agent 配置文件

    image.png

参考: