k3s是一个高可用的、经过认证的Kubernetes发行版,设计用于无人值守、资源受限的服务器中或物联网设备内的服务。
相关链接
- k3s 官网:https://k3s.io
- k3s 源码:https://github.com/rancher/k3s
起源
2019年2月26日,业界领先的容器管理软件提供商Rancher Labs(以下简称Rancher)宣布推出轻量级Kubernetes发行版K3s,这款产品专为在资源有限的环境中运行Kubernetes的研发和运维人员设计。Rancher此次发布的K3s项目,将满足在边缘计算环境中运行在x86、ARM64和ARMv7处理器上的小型、易于管理的Kubernetes集群日益增长的需求。
K3s如何减少Kubernetes的大小
为了减少运行Kubernetes所需内存,Rancher K3s开发团队主要专注于以下四个方面的主要变化:
删除旧的、非必须的代码
:K3s不包括任何默认禁用的Alpha功能或者过时的功能,原有的API组件目前仍运行于标准部署当中。除此之外,Rancher还删除了所有非默认许可控制器,in- tree云提供商和存储驱动程序,但允许用户添加任何他们需要的驱动程序。整合正在运行的打包进程
:为了节省RAM,Rancher将通常在Kubernetes管理服务器上运行的多流程合并为单个流程。Rancher还将在工作节点上运行的kubelet、kubeproxy和flannel代理进程组合成一个进程。使用containerd代替Docker作为运行时的容器引擎
:通过用containderd替换Docker,Rancher能够显著减少运行时占用空间,删除libnetwork、swarm、Docker存储驱动程序和其他插件等功能。- 除了 etcd 之外,引入 SQLite 作为可选的数据存储:Rancher在k3s中添加了SQLite作为可选的数据存储,从而为etcd提供了一个轻量级的替代方案。该方案不仅占用了较少的内存,而且大幅简化了操作。
推动Kubernetes在边缘计算场景落地
随着Kubernetes的部署开始有边缘部署的发展趋势,企业需要运维管理的Kubernetes集群数量正在迅速增加。在许多最有趣的边缘计算用例当中,组织将运行成千上万的只有一个、两个或者三个节点的Kubernetes集群,运维人员需要负责管理如此大规模的基础架构,而K3s正是为此而生,旨在最大限度地简化用户的安装和操作体验。K3s主要功能包括:
- 生产级Kubernetes:K3s是一个符合标准的、已获CNCF官方认证的Kubernetes发行版。
- 一个没有主机依赖的二进制文件:在任何设备上安装Kubernetes所需的一切都包含在这一个40MB的二进制文件当中,不需要像KuberSpray、KubeADM或者RKE这样的外部安装程序。只需要一个命令,用户就可以配置或者升级单节点K3s集群。
- 一条命令,向集群添加节点:若想向集群添加其他节点,管理员只需在新节点上运行一条命令,指向原始服务器,通过安全token传递即可。
- 自动生成证书:集群启动时,在Kubernetes主服务器和节点之间建立TLS所需的所有证书都会被自动创建,还会自动创建服务账号的加密密钥。
Rancher同时发布了支持x86_64、ARM64和ARMv7架构的K3s,使K3s得以更加灵活地跨任何边缘基础架构工作。除了边缘计算的使用场景,K3s还非常适合那些寻求简单方法来部署Kubernetes轻量级发行版的用户。在早期技术预览期间,许多用户反馈说K3s对于CI/CD环境、嵌入式系统和本地Kubernetes部署特别有帮助。
K3s的四大使用场景
安装
Mac
需要安装 Multipass
。它提供命令行界面,允许用户协调Ubuntu Linux
虚拟机的创建,管理和维护,以简化应用程序的开发,并且可以在mac上
使用。
首先我们使用brew
(一个软件包管理工具)安装 Multipass
创建VM
现在使用Multipass
来创建一个VM
:需要1GB
内存和5GB
磁盘
# multipass launch --name k3s --mem 1G --disk 5G
Creating k3s /
Retrieving image: 6%
...
Retrieving kernel image: -
Starting k3s -
...
Launched: k3s
离线解决方案:
multipass launch --name k3s --mem 1G --disk 5G http://127.0.0.1:8080/ubuntu-18.04-server-cloudimg-amd64.img
multipass launch --name k3s --mem 1G --disk 5G file:///Users/xiexianbin/Downloads/ubuntu-18.04-server-cloudimg-amd64.img
基础镜像下载地址:http://cloud-images.ubuntu.com/releases/server/releases/bionic/release-20191008/ubuntu-18.04-server-cloudimg-amd64.img
安装k3s
等待VM
创建,然后为VM
启动一个shell
# multipass shell k3s
修改/etc/resolv.conf
,保证容器可以上网。
下载离线镜像:
wget wget https://github.com/rancher/k3s/releases/download/v0.9.1/k3s-airgap-images-amd64.tar
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
接着运行如下命令来安装k3s:
curl -sSL https://get.k3s.io | sh
multipass@k3s:~$ curl -sSL https://raw.githubusercontent.com/rancher/k3s/master/install.sh | sh
[INFO] Finding latest release
[INFO] Using v0.9.1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.9.1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.9.1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[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 /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
测试kubectl命令
安装好k3s之后,在mac上运行它,使用kubectl验证它。
multipass@k3s:~$ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s Ready master 3m16s v1.15.4-k3s.1
multipass@k3s:~$ sudo kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-66f496764-hp2t8 1/1 Running 0 3m35s
kube-system helm-install-traefik-nqj5s 1/1 Running 0 3m36s
kube-system svclb-traefik-cd2sx 3/3 Running 0 3m37s
kube-system traefik-d869575c8-q7hh9 1/1 Running 0 3m38s
注意:K3s
默认使用containerd
,要使用docker
需要设置--docker
:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" sh -
配置私有镜像仓库
$ cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"k8s.gcr.io":
endpoint:
- "https://k8s.xxx.io"
"gcr.io":
endpoint:
- "https://gcr.xxx.io"
"ghcr.io":
endpoint:
- "https://ghcr.xxx.io"
"registry.k8s.io":
endpoint:
- "https://registry.xxx.io"
EOF
$ systemctl restart k3s
说明
转载自 RancherLabs 2019-2-27 《Rancher发布K3s!史上最轻量K8s发行版,赋能边缘计算》