轻量级Kubernetes之k3s:1:简介与安装

淼叔 2019-11-25 20:09:31 3547 收藏 8 分类专栏: # K3S版权


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: 使用快速安装脚本进行安装

快速安装脚本: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很小,是否很好用,这才是主要的,但这还需要时间和项目的检验。

发表评论

邮箱地址不会被公开。 必填项已用*标注