k3s vs k8s vs k9s

9,631 阅读4分钟

k3s

官方网址:www.rancher.cn/k3s/

k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。

K3s 仅需要 kernel 和 cgroup 挂载。 K3s 软件包需要的依赖项包括:

  1. containerd
  2. Flannel
  3. CoreDNS
  4. CNI
  5. 主机实用程序(iptables、socat 等)
  6. Ingress controller(Traefik)
  7. 嵌入式服务负载均衡器(service load balancer)
  8. 嵌入式网络策略控制器(network policy controller)

为何叫k3s

引用官网的说法

我们希望安装的 Kubernetes 在内存占用方面只是一半的大小。Kubernetes 是一个 10 个字母的单词,简写为 K8s。所以,有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 K3s。K3s 没有全称,也没有官方的发音。

单点安装

# 一键安装
curl -sLS https://get.k3sup.dev | sh -

通过如上只执行了一个命令即部署了一套 all in one k3s 单节点环境,相对 k8s 无需额外安装如下组件:

  • kubelet
  • kube-proxy
  • Docker
  • etcd
  • ingress,如 ngnix

适用场景

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

工作原理

图片.png

存储

本地存储

k3s 删除了 k8s 内置 cloud provider 以及 storage 插件(当然这不会影响使用通过手动安装的外部插件),内置了 Local Path Provider

外部存储插件 longhorn

可以通过使用外部的存储插件解决 k3s 存储问题

GitHub地址: github.com/longhorn/lo…

Longhorn轻量级、可靠且功能强大。可以使用kubectl apply命令或使用Helm charts在现有的Kubernetes集群上安装Longhorn。安装Longhorn之后,它将为Kubernetes集群添加持久卷支持。

image.png

网络

默认情况下,K3s 将以 Flannel 作为 CNI 运行,使用 VXLAN 作为默认后端。

Flannel

Flannel 的默认后端是 VXLAN

CLI Flag 和 Value描述
--flannel-backend=vxlan (默认)使用 VXLAN 后端。
--flannel-backend=ipsec使用 IPSEC 后端,对网络流量进行加密。
--flannel-backend=host-gw使用 host-gw 后端。
--flannel-backend=wireguard使用 WireGuard 后端,对网络流量进行加密。可能需要额外的内核模块和配置。

k3s 除了内置 Flannel 网络插件以外,还内置了 CoreDNS、Traefik Ingress Controller、Service Load Balancer,如果不使用默认的组件,用户也可以自己部署其他组件,比如使用 MetalLB 替代内置的 load balancer

Traefik 是一个现代的 HTTP 反向代理和负载均衡器,它是为了轻松部署微服务而生的。在设计,部署和运行应用程序时,它简化了网络复杂性。

k8s

Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可自动实施 Linux 容器操作的开源平台。

Kubernetes相关术语

和其它技术一样,Kubernetes 也会采用一些专用的词汇,这可能会对初学者理解和掌握这项技术造成一定的障碍。为了帮助您了解 Kubernetes,我们在下面来解释一些常用术语。

  • 主机(Master): 用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。
  • 节点(Node):负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。
  • 容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。
  • 复制控制器(Replication controller):用于控制应在集群某处运行的完全相同的容器集副本数量。
  • 服务(Service):将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。
  • Kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。
  • kubectl: Kubernetes 的命令行配置工具。

推荐阅读

kubernetes.io/zh/docs/con…

k3s vs k8s

功能对比

  • 移除过时的功能、Alpha功能、非默认功能,这些功能在大多数Kubernetes集群中已不可用。
  • 删除内置插件(比如云供应商插件和存储插件),可用外部插件程序替换。K3s在默认状态下只会启动除自身进程之外的两个应用:coredns和traefik。
  • 添加SQLite3作为默认的数据存储。etcd3仍然可用,但并非默认项。
  • 默认执行容器从docker换成了containerd。
  • 封装在简单的启动程序中,该启动程序处理很多复杂的 TLS 和选项。

k9s

k9s 是一个基于 curses 的全屏终端 UI 管理工具,可以与 Kubernetes 集群进行交互,可以观察系统资源,在各种资源之间切换,检查清单、日志、监控事件并执行 Pod 等,从而确保桌面空间不至于被大量终端窗格所占据

GitHub地址:github.com/derailed/k9…

常用命令

# List all available CLI options
$ k9s help

# To get info about K9s runtime (logs, configs, etc..)
$ k9s info

# To run K9s in a given namespace
$ k9s -n mycoolns

# Start K9s in an existing KubeConfig context
$ k9s --context coolCtx

# Start K9s in readonly mode - with all modification commands disabled
$ k9s --readonly

运行效果图

Pods

screen_po.png

Logs

screen_logs.png

Deployments

screen_dp.png

Example

dracula.png

推荐阅读

云原生社区小工具 SIG