K3S - 轻量级Kubernetes集群

本文介绍了如何使用K3S搭建一个轻量级的高可用Kubernetes集群,包括K3S的架构、虚拟机节点的准备、Server节点和Agent节点的启动,以及部署应用的过程。K3S是Rancher为物联网和边缘计算环境设计的Kubernetes发行版,具有轻量、可快速部署的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K3SRancher 为物联网(IoT)和边缘计算环境开发的轻量级 Kubernetes 发行版本。相比原生的 Kubernetes,其移除了很多非必要的组件,例如云控制管理器(CCM)、内置的(In-Tree)的存储插件等,以及为ARM架构的基础设施做了优化。

K3s 的轻量级同时也体现在其打包成一个二进制可执行文件进行分发,状态存储除了支持 etcd 外,还支持 Sqlite3、MySQl和Postgres。其跟多特性可参考官方文档

K3s 支持单节集群部署(可用于开发测试环境),也支持高可用的多节点集群。同时还可以通过 k3d 项目快速在本地开发环境使用Docker容器部署 k3s 集群作为开发环境。

这里我将演示通过虚拟机部署一个高可用的多节点集群(3个Servers节点 + 3个Agent节点)。

k3S架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3I2DzwSO-1658505658738)(https://k3s.io/img/how-it-works-k3s-revised.svg)]

上图是来自k3s官网的架构图,其架构与Kubernetes的架构是相似的,k3s的server节点也就是控制面节点,agent节点是工作负载节点。k3s默认使用 containerd 作为容器运行时。

更信息的部署架构可参考官方文档

准备虚拟机节点

这里我们将部署 3 + 3 的集群,需要6台虚拟机,基本配置如下

主机名 IP vCPU 内存
homek3s-server1 192.168.0.150 1 2 GB
homek3s-server2 192.168.0.151 1 2 GB
homek3s-server3 192.168.0.152 1 2 GB
homek3s-agent1 192.168.0.154 2 4 GB
homek3s-agent2 192.168.0.155 2 4 GB
homek3s-agent3 192.168.0.156 2 4 GB

部署的最小需求,可参考官方文档

K3s 支持大部分主流的Linux操作系统,这里我使用的是 openSUSE Leap Micro 15.2,其是一个基于openSUSE,为容器负载而设计的操作系统。

为了部署简单,这里我们禁用了系统的防火墙,如果开启防火墙,需要为Server节点开放如下端口

  • 6443/TCP - Kubernetes API 服务
  • 8472/UDP - Flannel VXLAN模式需要
  • 51820/UDP - Flannel Wireguard后端需要
  • 10250/TCP - Kubelet metrics需要
  • 2379-2380/TCP - 基于内嵌etcd高可用部署模式需要

启动Server节点

首先登陆到第一个Server节点 homek3s-server1,然后下载最新版本(v1.24.3+k3s1)的 k3s 二进制文件

# curl -sfL https://github.com/k3s-io/k3s/releases/download/v1.24.3%2Bk3s1/k3s -o /usr/local/bin/k3s
# chmod +x k3s
# k3s --version
k3s version v1.24.3+k3s1 (990ba0e8)
go version go1.18.1

k3s 支持一下几个子命令

  • k3s server - 用于运行管理服务节点
  • k3s agent - 用于运行agent工作节点
  • k3s kubectl - 运行 kubectl 命令
  • k3s crictl - 运行 crictl 容器管理命令

其他的命令帮助,请通过 k3s --help 查看。

这里我们将要创建一个使用内置etcd数据库的高可用集群,执行如下命令

# k3s server --cluster-init --advertise-address=192.168.0.150 --tls-san=homek3s.mengz.lan --write-kubeconfig-mode=644

参数 --cluster-init 是使用内置的etcd初始户一个新的集群;
参数 --advertise-address 是指定API服务器的监听IP地址,如果不指定,默认为节点的IP地址;
参数 --tls-san 是指定额外的域名或者IP地址作为TLS证书的SAN,使得我们从客户端可通过域名访问而API服务器。

运行成功后,在 homek3s-server1 打开另一个终端执行

# k3s kubectl get no
NAME              STATUS   ROLES            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值