锅炉信息网 > 锅炉知识 > 锅炉学习

K3S 入门级实战教程,和 K8S 有何不同?

发布时间:

我们知道 Kubernetes(或 K8s)是用于管理容器化工作负载和服务的便携式开源平台。它有助于在集群中编排和管理 pod 中的应用程序。它


我们知道 Kubernetes(或 K8s)是用于管理容器化工作负载和服务的便携式开源平台。它有助于在集群中编排和管理 pod 中的应用程序。它还有效地改进了任务,例如重新部署的零停机时间或容器的自我修复。

如果我们想在嵌入式系统中使用 K8s,或者快速建立一个带有节点的本地 Kubernetes 集群,我们可能有必要试试 K3s

[1]

在本教程中,我们将讨论 K3s 的主要特性并制作一个简单的集群示例。

2. K3s:轻量级的 K8s

K3s 是CNCF

[2]
认证的 Kubernetes 发行版和Sandbox
[3]
项目,专为低资源环境而设计。由 Rancher Labs
[4]
维护着 K3s。

总的来说,K3s 提供了一个开销较小的 Kubernetes 集群设置,但仍然集成了 K8s 的大部分架构和功能。

以下是 K3s 成为轻量级发行版的原因:

  • 打包为具有最小外部依赖性的单个二进制文件

  • 低硬件要求

    [5]
    和内存占用
  • 能够作为单个服务器和高可用性

    [6]
    服务器运行

K3s 将标准的 Kubernetes组件

[7]
打包在一个不到 100 MB 的二进制文件中。这是通过删除额外的驱动程序、可选的卷插件和第三方云集成来完成的

它包含较少的安装和运行 Kubernetes 不需要的部分。但是,我们仍然可以使用附加组件与 AWS 或 GCP 等云提供商集成。

K3s 应该能够在具有至少 512M RAM(尽管建议使用 1GB)和一个 CPU 的 Linux 操作系统中运行。

尽管 K3s 是 Kubernetes 的轻量级版本,但它并没有改变 Kubernetes 的核心工作方式。K3s 架构由运行在集群中的 master 服务器和代理(或工作节点)组成。它仍然有 CoreDNS 和 Ingress Controller 作为核心 Networking 的一部分。它有一个内置的 SQLite 数据库来存储所有的服务器信息。

尽管如此,如果我们需要一个高可用性服务器,也可以插入到一个外部数据库,例如ETCD

[8]
、MySQL
[9]
或Postgres
[10]
。Flannel
[11]
作为集群网络的默认CNI
[12]
插件。

最后,作为完全认证的 K8s 版本,我们可以编写 YAML 来像使用 K8s 一样在 K3s 集群上运行。例如,当我们管理工作负载

[13]
或定义 pod与服务和负载平衡的网络
[14]
时,同样使用kubectl
[15]
与集群交互。

3.使用

下面看看如何安装 K3s,如何访问集群,如何将节点添加到 master。

3.1. 安装

基本安装

[16]
命令很简单:$curl-sfLhttps://get.k3s.io|sh-n

这会执行来自 k3s 官方安装脚本

[17]
,并在我们的 Linux 主机中将 K3s 作为服务运行。

作为替代方案,我们可以下载一个特定指定版本

[18]
并安装它。无论哪种方式,我们都可以将服务器配置
[19]
选项与环境变量
[20]
混合使用。

例如,我们可能想要禁用 Flannel 并使用不同的 CNI 提供程序。

我们可以通过运行脚本来做到这一点:

$curl-sfLhttps://get.k3s.io|sh-s---flannel-backendnonen

如果我们已经安装了 K3s 二进制文件,我们可以在命令行中添加环境变量前缀:

$INSTALL_K3S_EXEC="--flannel-backendnone"k3sservern

3.2. 集群访问

默认情况下,K3s 将在/etc/rancher/k3s目录中安装一个配置文件。安装完成后,和 K8s 类似,我们需要定义一个配置文件位置。

我们可以通过导出一个环境变量让 K3s 指向配置文件:

$exportKUBECONFIG=/etc/rancher/k3s/k3s.yamln

作为替代方案,可以在 K8s 默认指向的主目录中定义配置文件:

$mkdir-p~/.kuben$sudok3skubectlconfigview--raw|tee~/.kube/confign$chmod600~/.kube/confign

可以检查集群是否正在运行:

$kubectlgetnodesnNAMESTATUSROLESAGEVERSIONn<cluster-name>Readycontrol-plane,master4d3hv1.25.6+k3s1n

值得注意的是,我们可以看到控制平面将与主节点一起运行。

现在让我们看看创建了哪些容器(pods):

$kubectlgetpods--all-namespacesnNAMESPACENAMEREADYSTATUSRESTARTSAGEnkube-systemhelm-install-traefik-crd-6v28l0/1Completed04d2hnkube-systemhelm-install-traefik-vvfh20/1Completed24d2hnkube-systemsvclb-traefik-cfa7b330-fkmms2/2Running10(8hago)4d2hnkube-systemtraefik-66c46d954f-2lvzr1/1Running5(8hago)4d2hnkube-systemcoredns-597584b69b-sq7mk1/1Running5(8hago)4d2hnkube-systemlocal-path-provisioner-79f67d76f8-2dkkt1/1Running8(8hago)4d2hn

可以在集群上看到可用 pod 的列表。

可以看到一个基本的 K3s 设置,包括:

  • Traefik

    [21]
    作为 HTTP 反向代理和负载均衡的入口控制器
  • CoreDns

    [22]
    管理集群和节点内的 DNS 解析
  • Local Path Provisioner

    [23]
    提供了一种在每个节点中利用本地存储的方法
  • Helm

    [24]
    ,我们可以使用它来打包、部署

K3s 将在单个服务器或代理进程中运行所有组件,而不是在不同的进程中运行组件。由于它被打包在一个文件中,我们也可以[离线安装]((https://docs.k3s.io/installation/airgap "离线安装")。当然,我们还可以使用 K3d

[25]
在 Docker 中运行 K3s 。

3.3. 添加节点

如果我们想将节点添加到集群中,只需要执行指向节点主机的相同命令:

$curl-sfLhttps://get.k3s.io|K3S_URL=https://<node-host>:6443K3S_TOKEN=mynodetokensh-n

K3S_TOKEN 存储在本地:

$cat/var/lib/rancher/k3s/server/node-tokenn

一旦工作节点加入主节点,控制平面就会识别节点和在其上调度服务 Pod。

4.部署服务

让我们做一个简单的集群示例,我们将在其中安装一个 Nginx 镜像。

创建一个 Nginx 镜像的 deployment ,其中三个副本,通过端口 80 提供服务:

$kubectlcreatedeploymentnginx--image=nginx--port=80--replicas=3n

接下来,检查一下 pod:

$kubectlgetpodsnNAMEREADYSTATUSRESTARTSAGEnnginx-ff6774dc6-ntxv61/1Running017snnginx-ff6774dc6-qs4r61/1Running017snnginx-ff6774dc6-nbxmx1/1Running017sn

应该看到三个正在运行的容器。

Pod 不是永久资源,会不断创建和销毁,IP 发生变化。因此,需要一个服务来动态地将 pod 的 IP 映射到外部世界。

我们将选择一个 ClusterIp 类型的 Service:

$kubectlcreateserviceclusteripnginx--tcp=80:80n

看看我们的服务定义:

$kubectldescribeservicenginxnName:nginxnNamespace:defaultnLabels:app=nginxnAnnotations:<none>nSelector:app=nginxnType:ClusterIPnIPFamilyPolicy:SingleStacknIPFamilies:IPv4nIP:10.43.238.194nIPs:10.43.238.194nPort:80-8080/TCPnTargetPort:80/TCPnEndpoints:10.42.0.10:80,10.42.0.11:80,10.42.0.9:80n

我们可以看到访问应用程序的 pod(或容器)地址对应的 Endpoints。

服务没有直接访问权限。Ingress Controller 通常位于它前面,用于缓存、负载平衡和安全合规控制,例如过滤掉恶意请求。

最后,让我们在 YAML 文件中定义一个 Traefik 控制器。这会将流量从传入请求路由到服务:

apiVersion:networking.k8s.io/v1nkind:Ingressnmetadata:nname:nginxnannotations:ningress.kubernetes.io/ssl-redirect:"false"nspec:nrules:n-http:npaths:n-path:/npathType:Prefixnbackend:nservice:nname:nginxnport:nnumber:80n

我们可以通过将此资源应用于集群来创建 ingress

$kubectlapply-f<nginx-ingress-file>.yamln

describe一下:

$kubectldescribeingressnginxnName:nginxnLabels:<none>nNamespace:defaultnAddress:192.168.1.103nIngressClass:traefiknDefaultbackend:<default>nRules:nHostPathBackendsn----------------n*n/nginx:80(10.42.0.10:80,10.42.0.11:80,10.42.0.9:80)nAnnotations:ingress.kubernetes.io/ssl-redirect:falsen

现在可以通过从主机或浏览器向 192.168.1.103 地址发送 GET 请求来访问 Nginx 主页。

我们可能想向入口控制器添加一个 负载均衡器

[26]
K3s 默认使用 ServiceLB
[27]

5. K8s 和 K3s 有何不同

K3s 和 K8s 之间最显着的区别是包装。K3s 是一个不到 100MB 的单一打包二进制文件。K8s 有多个组件作为进程运行。

此外,作为一个更轻量级的版本,K3s 可以在几秒钟内启动一个 Kubernetes 集群。我们可以用更少的资源更快地运行操作。

K3s 支持 AMD64、ARM64 和 ARMv7 等架构。这意味着我们可以在任何地方运行它,例如,在 Raspberry PI Zero 中。K3s 还可以处理连接受限的环境。

在学习 K3s 时上手更快,需要掌握的命令更少。开始使用它的工作量比 K8s 少,例如,如果我们还没有使用分布式集群的背景。

但是,对于复杂的集群或繁重的工作负载,我们仍然应该考虑使用 K8s。K3s 确实提供了一个高可用性选项,但它需要做更多的工作才能插入,例如,不同的数据库或集成云提供商。

如果要在 K3s 和 K8s 之间做出决定,可能会归结为资源的考量。但是,K3s 是持续集成测试的不错选择。

六,结论

在本文中,我们将 K3s 视为一种轻量级发行版和 K8s 的有效替代品。它需要的资源少并且设置启动。我们在创建一个简单集群的示例时已经看到了这一点。

尽管如此,它仍然与 K8s 完全兼容,并且也是高可用性服务器的潜在用途。最后,我们讨论了 K8s 和 K3s 的不同之处,以及我们什么时候应该使用 K3s。

作者:baeldung

出处:https://goo.gs/rgram

参考资料

[1]

K3s: https://docs.k3s.io/

[2]

CNCF: https://www.cncf.io/

[3]

Sandbox: https://www.cncf.io/sandbox-projects/

[4]

Rancher Labs: https://ranchermanager.docs.rancher.com/

[5]

硬件要求: https://docs.k3s.io/installation/requirements#hardware

[6]

高可用性: https://docs.k3s.io/architecture#high-availability-k3s-server-with-an-external-db

[7]

组件: https://kubernetes.io/docs/concepts/overview/components/

[8]

ETCD: https://etcd.io/

[9]

MySQL: https://www.mysql.com/

[10]

Postgres: https://www.postgresql.org/

[11]

Flannel: https://github.com/flannel-io/flannel#flannel

[12]

CNI: https://github.com/containernetworking/cni#cni---the-container-network-interface

[13]

工作负载: https://kubernetes.io/docs/concepts/workloads/

[14]

与服务和负载平衡的网络: https://kubernetes.io/docs/concepts/services-networking/

[15]

kubectl: https://kubernetes.io/docs/reference/kubectl/

[16]

安装: https://docs.k3s.io/installation

[17]

k3s 官方安装脚本: https://get.k3s.io./

[18]

版本: https://github.com/k3s-io/k3s/releases

[19]

服务器配置: https://docs.k3s.io/reference/server-config

[20]

环境变量: https://docs.k3s.io/reference/env-variables

[21]

Traefik: https://traefik.io/

[22]

CoreDns: https://coredns.io/

[23]

Local Path Provisioner: https://github.com/rancher/local-path-provisioner#local-path-provisioner

[24]

Helm: https://helm.sh/

[25]

K3d: https://k3d.io/

[26]

负载均衡器: https://docs.k3s.io/networking#service-load-balancer

[27]

ServiceLB: https://github.com/k3s-io/klipper-lb



10T 技术资源大放送!包括但不限于:Linux、虚拟化、容器、云计算、网络、Python、Go 等。在开源Linux公众号内回复10T,即可免费获取!Linux学习指南有收获,点个在看

精选推荐

  • 催化燃烧设备供应商
    催化燃烧设备供应商

    催化燃烧设备供应商,催化燃烧处理装置厂家,本装置是采用废气先进入喷淋塔过滤——干式过滤—-蜂窝活性碳吸附—脱附再生——催化燃

  • 该不该有模具供应商
    该不该有模具供应商

    今天红姐又来跟我探讨供应商的管理问题了。故事是这样的:供应商来料不良,原因是模具问题。而那个模具是我们找的一家模具供应商做的

  • 什么牌子高压锅好,高压锅哪个牌子好,高压锅什么牌子好,高压锅哪个品牌好
    什么牌子高压锅好,高压锅哪个牌子好,高

    1苏泊尔 双重安全阀门 高压锅双重安全阀,防烫把手,复合底。这款高压锅拥有双重安全阀门,更好的保证使用安全。搭载防烫伤把手,方便起

  • 高压锅啥牌子好,高压锅哪个牌子的好,什么高压锅牌子好,高压锅推荐选购指南
    高压锅啥牌子好,高压锅哪个牌子的好,什

    1、双喜阶梯型复底高压锅推荐理由:高压锅满足上蒸下煮,饭菜同时进行,方便快速,有效提升烹饪效率。多重安全防护,安全系数较高,家人使用

0