轻量级Kubernetes之k3s:1:简介与安装
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由于首字母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很小,是否很好用,这才是主要的,但这还需要时间和项目的检验。
更多推荐
所有评论(0)