我们都知道Kubernetes是一个容器编排平台,可以用来管理我们的容器集群。但是如果只是用来学习的话,Kubernetes有点太重了,有些人的本地机器可能跑不完3个实例(一个master,两个agent)的完整集群环境。虽然网上有使用vagrant和machine的部署方式,但是使用和配置还是比较复杂。而k3s就是为了解决以上问题而应运而生的。项目介绍我们首先需要了解项目的适用场景和功能特点!了解或使用过Kubernetes的用户,一定听说过开源产品Rancher。它也是一个开源的企业级Kubernetes管理平台,可以非常好地安装和管理Kubernetes集群。而轻量级Kubernetes发行版k3s也由该公司创建和维护。k3s也是完全通过CNCF认证的Kubernetes发行版,这意味着我们可以编写YAML来操作完整版本的Kubernetes,它们同样适用于k3s集群。而且,它完整实现了Kubernetes提供的所有API接口,我们可以通过接口自由操作Kubernetes。创建k3s项目的目的是创建一个非常非常轻量级的Kubernetes发行版,主要适用于以下几个方面:EdgeIoTCIDevelopmentARMEmbeddingK8sK8s集群学博士不可能的情况k3s将安装Kubernetes所需的一切都打包成一个XXMB大小的二进制文件。此外,为了减少运行k8s所需的内存,许多不必要的驱动程序被删除并替换为附加组件。这样只需要极低的资源就可以运行,安装所需的时间也很短,可以在树莓派等设备上运行,即master和agent一起运行的模式。TailoringFeaturesDeprecatedandnon-defaultfeaturesDeprecatedandnon-defaultfeaturesAlphafeaturesDeprecatedandnon-defaultfeaturesBuilt-incloudproviderpluginsDeprecatedandnon-defaultfeaturesBuilt-instoragedrivers已弃用和非默认功能但仍然支持etcd。内置localstorageprovider、serviceloadbalancer等,将api-server、scheduler等所有k8s控制组件打包成一个精简的二进制程序,可以单进程运行删除内置插件,如cloudprovider插件和storage插件等,减少外部依赖。操作系统只需要安装更新的内核并支持cgroups。缺点是在高可用场景下不可能或很难实现。所以如果你要部署一个大的集群,那么我建议你选择使用K8s来安装部署。如果你处于边缘计算等小型部署场景,或者只是需要部署一些非核心的集群进行开发/测试,那么选择k3s是一个性价比更高的选择。在单主的k3s中,默认使用SQLite数据库存储数据,对小型数据库非常友好,但如果受到重创,那么SQLite就会成为主要痛点。然而,Kubernetes控制平面发生的变化更多是关于频繁更新部署、调度pod等,因此对于小型开发/测试集群,数据库的负载不是太大。当然,如果你想学习k8s又不想折腾k8s繁琐的安装部署,可以用k3s代替k8s。k3s包含了k8s的所有基本功能,k8s的附加功能其实大部分情况下是用不到的。#这不会花很长时间...$curl-sfLhttps://get.k3s.io|sh-#CheckforReadynode,takesmaybe30seconds$k3skubectlgetnodeprojectarchitecture下图是官网提供的其项目架构图解!k3s安装包中已经包含了containerd、Flannel、CoreDNS组件,一键安装非常方便,不需要额外安装Docker、Flannel等组件。架构使用嵌入式数据库的单服务器设置具有外部数据库的高可用性K3s服务器代理节点的固定注册地址安装非常简单!快速使用=>使用安装脚本#部署一套k3s单节点环境(allinone)#安装脚本可以在systemd或openrc中注册k3s并实际运行为服务$curl-sfLhttps://get.k3s.io|sh-#安装完成后,可以执行相应的命令#kubeconfig配置文件/etc/rancher/k3s/k3s.yaml#kubectl,crictl,k3s-killall.sh,k3s-uninstall.sh$sudokubectlgetnodes#添加多个node节点#k3S_URL:api-server服务的URL地址#k3S_TOKEN:为节点注册token字符串#K3S_TOKEN:master节点的/var/lib/rancher/k3s/server/node-token路径下$curl-sfLhttps://get.k3s.io|K3S_URL=https://myserver:6443K3S_TOKEN=XXXsh-sourceinstallation=>usebinarypackage#下载k3s二进制包https://github.com/rancher/k3s/releases/latest#运行主节点服务(/etc/rancher/k3s/k3s.yaml)$sudok3sserver&$sudok3skubectlgetnodes#添加节点信息到另一台机器上的master节点$sudok3sagent--serverhttps://myserver:6443--token${NODE_TOKEN}像使用k8s一样使用k3s命令!安装k3s后,内置了一个kubectl子命令,我们通过执行k3skubectl命令来调用它。它的功能和用法类似于k8s的kubectl命令是一致的。为了我们更方便的使用,我们可以设置别名alias或者创建软连接来实现命令的无缝使用。#创建别名$aliaskubectl='k3skubectl'#创建软连接$ln-sf/usr/bin/kubectl/usr/local/bin/k3s#配置kubectl命令完成$source<(kubectlcompletionbash)配置完成之后就可以使用kubectl来操作集群机器了。您可以通过运行以下命令查看在kube-system命名空间中运行的pod列表。我们发现apiserver、scheduler、kube-proxy、flannel等组件没有运行,因为这些已经嵌入到k3s进程中。另外,k3s已经默认为我们部署了traefikingress、metrics-server等服务,不需要额外安装。#?查看kube-system运行的pod列表$?kubectl?get?pod?-n?kube-systemNAME??????????????????????????????????????READY???STATUS??????RESTARTS???AGEmetrics-server-6d123c7b5-4qppl????????????1/1?????Running?????0??????????70mlocal-path-provisioner-58f123bdfd-8l4hn???1/1?????Running?????0??????????70mhelm-install-traefik-pltbs????????????????1/1?????Running?????0??????????70mcoredns-6c62348b64-b9qcl??????????????????1/1?????Running?????0??????????70msvclb-traefik-223g2???????????????????????2/2?????Running?????0??????????70mtraefik-7b81234c8-xk237???????????????????1/1?????Running?????0??????????70mk3s默认没有使用Docker作为容器的运行环境,Instead,thebuilt-incontainedisused,andthecrictlsubcommandcanbeusedtointeractwiththeCRI.Ofcourse,wecanalsocreatealiasestoachieveseamlessuseofcommands.#Createaliasalias$aliasdocker='k3scrictl'#Configuredockercommandcompletion$source<(dockercompletion)$complete-F_cli_bash_autocompletedockerInthiscase,wecanusethedockercommandtoviewthecontainersrunningonthemachine.Wefoundthatintheoutputofthefollowingcommand,therearemorefieldssuchasATTEMPTandPODID,whichareuniquetoCRI,buttherealdockercommanddoesnot.#通过Docker查看正在运行的容器$DockerPSContainerImageCreatedStatenameAttemptpodIDD8A...5AA7...11minRunningTrayfik0799...C1EC...F897...F897...F897...F897...4430457...D021...1897...F1min运行lb-port-800407...D089...0C4D...B1min运行Coredns0423...DAC0...DAC0...09dd...11minRunningmetrics-server00f6f...6服务安装和配置后,下面就是我们需要知道的(有效betterwithk9s!):Network因为k3s内置了TraefikComponents,不需要单独安装ingresscontroller,直接创建Ingress即可。其中192.168.xxx.xxx为master节点的IP。由于我们没有DNS解析,所以我们可以通过配置/etc/hosts文件来静态配置,然后我们就可以通过域名来访问我们的服务了。网络因为k3s内置了Flannel网络插件,所以后端默认使用VXLAN,默认IP段为10.42.0.0/16。除了VXLAN,内置的Flannel还支持ipsec、host-gw和wireguard。当然,除了默认的Flannel,k3s还支持其他的CNI,比如Canal、Calico等。Storagek3s去掉了k8s内置的cloudprovider和storage插件,内置了LocalPathProvider提供存储。内置的本地路径存储只能在单机上使用,不支持跨主机使用,也不支持存储的高可用。k3s存储问题可以通过使用外部存储插件来解决,比如Longhorn云原生分布式块存储系统。作者:Escape链接:https://www.escapelife.site/p...
