K3S:轻量的Kubernetes -- 概览&部署指

网友投稿 1431 2022-11-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

K3S:轻量的Kubernetes -- 概览&部署指

K3S:轻量版的 Kubernetes

K3S项目地址:https://github.com/rancher/k3s, 其项目介绍只有简单的一句话:

Lightweight Kubernetes https://k3s.io

简约而不简单, 一句话足以看出其分量。

Simple IS the BEST!

K8S之痛

如果之前的十年是“开源的黄金十年”,未来的十年将是“云原生的黄金十年”。

而云原生(Cloud Native)的基石则是:Kubernetes(简称K8S)。正如十年前的Hadoop建立起来的大数据巨型生态(Hadoop已英雄暮年), 围绕着Kubernetes的云原生海量生态也已经初见成型。

K8S的优势非常大,这里不再赘述,不过其本身的复杂性,也是使得无数追随者经历了很多彻夜难眠的深夜。但是,

K8S虐我千百遍,我待K8S如初恋!

我所在的公司自2016年创业开始,就在K8S这条船上不断前行,期间遇到过各种痛苦:

如何安装和学习K8S可能是最大的问题

开始起步K8S的过程可能是最痛苦的过程。2016年时,K8S的文档还没有现在这么全,所以,尝试过几次,每次都是Hang在某一个步骤,屏幕输出类似于:

Installing Kubernetes……….

然后就再也没进展了。于是买了一本书《Kubernetes权威指南》,不评价这本书的好坏,只看了最前面安装部分,最大的收获就是找到了安装不了的原因:自动下载的Pause容器是默认在:gcr.io/google_containers/pause

You know:并不是所有的地方都能自由访问google相关网站的。

加了 –pod-infra-container-image 到国内镜像后, 终于装好了。虽然只读了一小部分, 但是知道了这个绕过 gcr.io 的秘籍,这本书真的是超值了。

K8S的组件也很多

和臃肿的大象Hadoop一样的问题, K8S的组件也非常多:

etcdapiservercontroller managerschedulerkubeletkube-proxyflannelkube-dns (or coredns)

这对于实际大规模应用是有很大挑战的,尤其是当客户的集群规模还比较小时(可能只有3台机器),却要承受如此的复杂:

客户培训成本非常高,光把这些组件讲明白就很难了,更别说客户能自己运维做到高可用更难,每个组件都要高可用,即使是最底层的etcd要做高可用都已经够运维人员喝一壶的了

直到遇见K3S

遇到K3S,有种眼前一亮的感觉,马上觉得其对于小规模集群非常有应用前景。

练习K3S安装的工具——VirtualBox

快照

借助虚拟机的快照功能,可以让你反复练习如何最快速度安装好 K3S

我亦无他,惟手熟尔

网络设置

关于网络设置,建议设置2块网卡

其中一块是:仅主机(Host-Only)网络,用于在同一个HostOnly网络中的多台机器之前的内部通信,比如:K3S/K8S的内部通信。另一块网卡是:网络地址转换(NAT), 这样方便虚拟机中自动通过这个网卡下载一些外网资源。

操作系统安装

这里用了 CentOS 7.x, CentOS安装的时候,需要注意几个几个点:

1). 最好安装的时候配置好网络信息,以及主机名, 比如两台VM分别为:centos1.local 和 centos2.local, 并且把两块网卡都要选择”打开“ (否则你需要后续通过命令来启动该网卡)

2). Centos安装好后, 当有两块网卡时, 有的时候会出现某块网卡未开机启动,具体可以通过

ip addr

看来两块网卡是否分配了IP, 对于VirtualBox来说, 两块网卡的设备名字可能为:

enp0s3enp0s8

如果某块网卡未开机自启动, 可以通过修改对应的配置文件, 比如:/etc/sysconfig/network-scripts/ifcfg-enp0s3 中 ONBOOT 部分为:

ONBOOT="yes"

3). 安装后Centos系统, 配置好网卡, 并进行系统更新 (yum update)后, 我们可以每个VM建立一个快照, 方便我们后面不断练习。

安装K3S

下载需要的唯一程序binary

首先从 https://github.com/rancher/k3s/releases 下载对应的binary,比如:v1.17.5+k3s1 对应的 k3s 文件 (https://github.com/rancher/k3s/releases/download/v1.17.5%2Bk3s1/k3s)

上传到centos1, centos2 两台机器的 /usr/bin/ 目录下, 并执行

chmod a+x k3s

对每台机器做如下配置

1. 关闭 firewalld

systemctl stop firewalldsystemctl disable firewalld

2. 关闭selinux

通过编辑 /etc/selinux/config

SELINUX=disabled

可以通过 sestatus 命令来检查selinux是否成功关闭了

SELinux status: disabled

3. 加载模块

对于K3S,需要确保系统中的如下module是加载状态的,

ip_conntrackbr_netfilter

可以通过在 /etc/modules-load.d/ 目录下,建立一个配置文件, 比如:k3s.conf

ip_conntrackbr_netfilter

来做到启动自加载

4. 重启VM

注意:上面的各个步骤都有不需要重启而能生效的单独命令, 不过为了简单,并且避免以后重启后发现系统又不可用,这里直接重启VM。

机器1, 启动k3s server

机器1上,启动如下命令

k3s server --flannel-iface enp0s3

注意:对于多网卡环境, 这个指定网卡参数 --flannel-iface enp0s3 非常重要(使用之前创建的 Host-Only 网络所对应的网卡),可以避免很多问题

另外,在启动参数中,也可以加入一些api-server,或者kubelet所需要的参数, 比如:

k3s server --flannel-iface enp0s3 --kube-apiserver-arg service-node-port-range=1-65535

默认状态下,K8S只能允许node port的端口绑定到 30000-32767 这个范围, 但是,对于简单的实验,有时需要简单的绑定到 80、443 等端口,这时就可以通过设置 apiserver 的参数来实现自定义绑定范围。

机器2, 启动k3s agent (可选)

机器1 本身已经是一个可以使用的kubernetes集群了,不过我们要是有多节点,其它节点可以通过如下方式加入集群

首先在 机器1 上,读取 /var/lib/rancher/k3s/server/node-token 的内容, 比如:

K109783da72467af34e663138dd8dd99f9cc7507c08c87eea726dfe8ad934359b94::server:afa081a89a86fa3008e0754f265f1911

在机器2上运行:

k3s agent --flannel-iface enp0s3 --server https://centos1:6443 --token K109783da72467af34e663138dd8dd99f9cc7507c08c87eea726dfe8ad934359b94::server:afa081a89a86fa3008e0754f265f1911

来加入刚建好的集群。注意:同样指定使用的网卡:--flannel-iface enp0s3

大功告成,可以在机器1上 k3s kubectl 来使用建好的 K8S 集群了

比如:

获取机器 (node) 信息:k3s kubectl get nodes获取pods信息:k3s kubectl get pods –all-namespaces

K3S后续探索

本文只是K3S的初步安装,后面还有更多可以探索的地方,比如:如何把K3S的信息存储在外部关系数据库中。比如:如果基于外部关系数据库,做到K3S的高可用等。

不过能够在几分钟内快速的部署好一个完整的Kubernetes多节点集群,本身也是非常有价值的!

欢迎大家都来体验 K3S:Make Kubernetes Great Again!

本文中图片来自于:https://mp.weixin.qq.com/s/mBLeSlU-IQlYTNe9cOkFVQ 《Apache Kylin 云原生架构的思考及规划》

上一篇:软件测试培训之回归测试的基本过程及实践
下一篇:软件测试培训之总结各种软件的测试手段
相关文章

 发表评论

暂时没有评论,来抢沙发吧~