AIOps 一场颠覆传统运维的盛筵
1431
2022-11-07
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 云原生架构的思考及规划》
发表评论
暂时没有评论,来抢沙发吧~