在这里插入图片描述
Kubernetes由于首字母K和尾字母s之间有8个字符,被简称为k8s,这并不是一个创新,早在国际化的i18n中最做过类似的简称。而k3s则是由Rancher Lab在2019年2月推出的轻量级的Kubernetes(实际上在github上的源码发布最早可以追溯到2018年7月14,对于kubernetes1.10.5所做的轻量级的名为v1.10.5-lite1的发布),Rancher官方号称史上最轻量级的Kubernetes。由于Kubernetes自身历史也不过短短数年,几天之前k3s终于结束接近一年的孵化,在k8s 1.16.3上推出了k3s的1.0.0版本,最轻量相关的特性到底如何,让我们一探究竟。

概要信息
k3s的概要信息如下表所示:

在这里插入图片描述

项目    说明
官网    https://k3s.io/
开源/闭源    开源
源码管理地址    https://github.com/rancher/k3s
License类别    Apache License 2.0
开发语言    Go、Shell
当前稳定版本    v1.0.0 (2019/11/19)
Kubernetes版本    1.16.3
Why k3s
Kubernetes已经足够强大,为什么还需要k3s,k3s有如下特性:

轻量级的kubernetes
磁盘空间要求:小于40M的二进制文件,仅需200M磁盘空间
安装简单
内存需求较低:512M(服务器端)、75M(节点)
支持x86_64, ARMv7, ARM64
k3s使用场景
Kubernetes虽然非常强大,但是在使用中还是有很多问题:

安装部署复杂,资源耗费尤其在内存和磁盘使用上都较大
关联组件较多,而且功能迭代较快,比如存在各种版本的API
往往需要有专业的精通Kubernetes的运维人员,在很多项目中这并不现实
在IoT或者ARM等资源受限的场景下,较难充分发挥作用
整体来说,k3s紧抓轻量级这个关键特性,主要应用于物联网IoT、边缘计算Edge、ARM、CI四大场景

k3s是什么
k3s仍然是kubernetes,而且是一个fully compliant(完全符合标准)的kubernetes发行版,它的特性在于轻量级,轻量级主要体现在如下方面:

过时功能、Alpha功能、非默认功能,这些在k3s中均被移除
删除注入运供应商插件或者存储插件等内置插件,需要时可使用外部插件予以替换
使用SQLite3作为默认存储,etcd3可以使用,但非默认设置
简化了安装,但是同时支持TLS的相关选项
Docker成为可选组件
提供Helm Chart管理机制
提供containerd, CoreDNS, Flannel
最低配置要求
从目前官方给出的最低配置要求,可以看到k3s能很好地适应ARM、物联网等资源受限场景。

Linux 3.10+
每台服务器512MB的RAM
每个节点75MB的RAM
200MB的磁盘空间
x86_64, ARMv7, ARM64
k3s构成
k3s由k3s Server和k3s Agent构成,详细信息如下所示。

从上图可以清晰地看出,基本和k8s相差无几,不同仅仅在于:

存储使用SQLite而不是etcd
使用了Tunnel Proxy充当Agent和Server之间的关联
安装k3s
k3s安装非常简单,此处以CentOS 7为例进行说明。

事前准备
CentOS 7最小化安装
[root@liumiaocn ~]# uname -a
Linux liumiaocn 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@liumiaocn ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@liumiaocn ~]# 
 
设定SELINUX
[root@liumiaocn ~]# setenforce 0
[root@liumiaocn ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@liumiaocn ~]# 
 
这里为了简单,直接将SELINUX设定为disabled。SELINUX不做设定安装时可能会出现类似下面的错误提示信息

[ERROR]  SELinux is enabled but semanage is not found
1
步骤1: 使用快速安装脚本进行安装
快速安装脚本:curl -sfL https://get.k3s.io | sh -

执行日志如下所示:

[root@liumiaocn ~]# curl -sfL https://get.k3s.io | sh -
[INFO]  Finding latest release
[INFO]  Using v1.0.0 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.0.0/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.0.0/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
which: no kubectl in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
which: no crictl in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
which: no ctr in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s
[root@liumiaocn ~]#
 
步骤2: 结果确认
从步骤1中的安装日志也可以看到kubectl只是个软链接,详细如下所示:

[root@liumiaocn ~]# which kubectl
/usr/local/bin/kubectl
[root@liumiaocn ~]# ls -l /usr/local/bin/kubectl
lrwxrwxrwx. 1 root root 3 Nov 25 04:08 /usr/local/bin/kubectl -> k3s
[root@liumiaocn ~]# 
 
确认版本信息

[root@liumiaocn ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3-k3s.2", GitCommit:"e7e6a3c4e9a7d80b87793612730d10a863a25980", GitTreeState:"clean", BuildDate:"2019-11-18T18:31:23Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3-k3s.2", GitCommit:"e7e6a3c4e9a7d80b87793612730d10a863a25980", GitTreeState:"clean", BuildDate:"2019-11-18T18:31:23Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
[root@liumiaocn ~]# 
 
获取节点信息

[root@liumiaocn ~]# kubectl get node -o wide
NAME        STATUS   ROLES    AGE     VERSION         INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
liumiaocn   Ready    master   3m38s   v1.16.3-k3s.2   192.168.163.143   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.3.0-k3s.4
[root@liumiaocn ~]# 
 
获取namespace信息

[root@liumiaocn ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   8m51s
kube-system       Active   8m51s
kube-public       Active   8m51s
kube-node-lease   Active   8m51s
[root@liumiaocn ~]# 
 
k3s版本信息

[root@liumiaocn ~]# k3s --version
k3s version v1.0.0 (18bd921c)
[root@liumiaocn ~]# 
 
确认k3s服务信息

[root@liumiaocn ~]# systemctl status k3s
● k3s.service - Lightweight Kubernetes
   Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-11-25 06:08:47 EST; 11min ago
     Docs: https://k3s.io
  Process: 3652 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
  Process: 3648 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
 Main PID: 3656 (k3s-server)
    Tasks: 10
   Memory: 443.4M
   CGroup: /system.slice/k3s.service
           └─3674 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state ...
           ‣ 3656 /usr/local/bin/k3s server

 ...省略
[root@liumiaocn ~]# 
 
总结
至于k8s - k3s 是不是等于5,这是一个不规则数学计算问题,到底剪掉了哪五项,完全不要介意,这不是主要的。kubernetes很强,很大,也难用。轻量级的k3s很小,是否很好用,这才是主要的,但这还需要时间和项目的检验。
 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐