轻量化K8S 入门

简介: K3s是轻量级Kubernetes发行版,单二进制文件集成控制平面,支持快速部署。采用containerd、Flannel等组件,支持高可用、离线安装与灵活扩展,适用于边缘计算、开发测试及生产环境。

核心概念与架构
理解K3s的架构和核心概念,是正确部署和运维的基础。

核心特性:K3s是一个轻量级的Kubernetes发行版(由Rancher/SUSE推出),它将所有Kubernetes控制平面组件封装在一个不足100MB的单一二进制文件中,极大简化了部署和运维。
K3s如何实现轻量化?
移除:删减了大量K8s原生的in-tree代码(如云厂商驱动、存储插件),这些都可以通过out-of-tree的CSI/CCI插件按需安装。
替换:使用containerd替换了Kubelet中对Docker的依赖;使用Flannel作为默认CNI;使用CoreDNS等。
打包:将API Server, Controller Manager, Scheduler, Kubelet等组件编译打包进一个进程(k3s server)中运行,极大降低了管理开销。
节点类型:
Server节点:运行 k3s server 命令的主机,负责管理控制平面和数据存储组件。
Agent节点:运行 k3s agent 命令的主机,主要负责运行工作负载(Kubelet, Containerd),不具备控制平面组件。
数据存储模式:
单节点模式:默认使用嵌入式SQLite数据库,非常简单,适用于开发或测试。
高可用模式:推荐使用外部数据库(如MySQL、PostgreSQL)或多个Server节点使用嵌入式etcd数据存储。
安装与部署
K3s的安装非常灵活,你可以根据网络环境和集群规模选择合适的方式。

  1. 快速在线安装
    这是最常见的方式,使用官方提供的安装脚本。

安装Server节点:在目标机器上执行 curl -sfL https://get.k3s.io | sh - 。
国内用户,可以使用加速镜像:curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - 。
加入Agent节点:在其他机器上,使用从Server节点获取的Token(位于 /var/lib/rancher/k3s/server/node-token)执行:curl -sfL https://get.k3s.io | K3S_URL=https://:6443 K3S_TOKEN= sh - 。

  1. 离线环境安装
    对于无法直接连接互联网的环境(这在信息安全和物理隔离项目中很常见),你需要提前准备。

从K3s GitHub Release页面获取对应版本的镜像tar文件(k3s-airgap-images-$ARCH.tar.gz)和K3s二进制文件。
将镜像文件放置在 /var/lib/rancher/k3s/agent/images/ 目录下。
将K3s二进制文件放在 /usr/local/bin 并确保拥有可执行权限。
使用 INSTALL_K3S_SKIP_DOWNLOAD=true 参数运行安装脚本:INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh 。

  1. 搭建高可用(HA)集群
    生产环境强烈建议高可用配置。K3s提供两种主流HA方案:

方案一:使用外部数据库(推荐)
这是最简单可靠的HA方式,所有Server节点共享同一个外部数据库状态。

创建外部数据库:首先准备一个外部的MySQL、PostgreSQL或etcd数据库。
启动Server节点:在所有Server节点上运行安装命令,并指定数据存储端点。例如,使用MySQL时:
curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET_TOKEN \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
配置固定注册地址(重要):为了让Agent节点和后续Server节点总能找到集群,建议在Server节点(端口6443)前配置一个负载均衡器或固定DNS作为统一入口,并通过 --tls-san 参数将该地址添加到TLS证书中。
方案二:使用嵌入式Etcd(原生HA)
此方案不依赖外部数据库,K3s会自己维护一个etcd集群。

启动第一个Server节点:使用 --cluster-init 参数初始化集群:
curl -sfL https://get.k3s.io | sh -s - server \
--cluster-init \
--token=SECRET_TOKEN
加入其他Server节点:在其他Server节点上(推荐至少3个Server节点),使用 --server 参数加入集群:
curl -sfL https://get.k3s.io | sh -s - server \
--server https://:6443 \
--token=SECRET_TOKEN
Agent节点加入:Agent节点可以指向任意一个Server节点或配置好的LB地址。

  1. 集群升级与版本管理(重要)
    K3s的升级相对简单,但生产环境务必谨慎。

手动升级:最直接的方式是重新运行安装脚本。脚本会检测到已安装的K3s并进行升级。

升级到最新稳定版

curl -sfL https://get.k3s.io | sh -

升级到指定版本

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.4+k3s1 sh -
自动升级(推荐):K3s社区提供了 System Upgrade Controller。你可以通过CRD(自定义资源)来定义升级计划(Plan),控制器会自动协调各个节点的升级过程,实现滚动更新。

  1. 重要的安装参数
    在执行安装脚本时,可以通过环境变量或CLI参数精细控制K3s的行为:

--docker:如指南所述,使K3s使用Docker(如果已安装)而不是默认的containerd。
--flannel-backend=none:禁用默认的Flannel CNI。
--disable-network-policy:禁用网络策略控制器(如果CNI不支持)。
--disable=traefik:禁用默认安装的Traefik Ingress。
--node-taint:如指南所述,给节点添加污点。
--tls-san:为API Server的TLS证书添加额外的主机名或IP,在高可用或外部访问时必须设置。
组件与工具
K3s开箱即用,并内置了大量实用工具。

内置组件:K3s默认集成了Traefik(Ingress控制器)、CoreDNS(服务发现)、Local Path Provisioner(动态存储分配)等核心组件,覆盖了大部分基础需求。
容器运行时:K3s默认使用containerd作为容器运行时。
内置CLI工具:K3s二进制文件内置了丰富的命令行工具:
k3s kubectl: 用于与集群交互。
k3s crictl: 用于调试容器运行时(CRI)问题。
k3s etcd-snapshot: 用于对etcd数据进行按需备份(仅限使用嵌入式etcd时)。
k3s certificate: 用于管理K3s证书。
k3s token: 用于管理和创建加入集群的Token。
网络(CNI)详解
网络是K3s(及所有K8s)的核心。

默认Flannel:K3s默认使用Flannel (VXLAN模式),它简单、稳定,能满足基本的Pod间通信,但不(默认)支持Kubernetes的NetworkPolicy(网络策略)。
替换CNI:在生产环境或需要网络隔离时,你可能需要替换为Calico或Cilium。
方法:在安装K3s Server时,使用 --flannel-backend=none 和 --disable-network-policy 参数禁用默认配置。
安装Calico/Cilium:K3s安装完成后,手动kubectl apply -f Calico或Cilium的YAML清单文件。
注意:Calico等CNI需要集群CIDR(--cluster-cidr),确保与K3s的配置一致。
存储(CSI)详解
存储是有状态应用的关键。

Local Path Provisioner (默认):
工作方式:它会在节点本地文件系统(HostPath)上创建PersistentVolume。
局限性(非常重要):它提供的不是网络存储。如果一个Pod被重新调度到另一个节点,它将无法访问之前的数据,导致数据丢失。
适用场景:仅适用于开发、测试,或那些数据无需持久化的应用。
生产级存储方案:
Longhorn:Rancher官方推荐的、开源的、云原生分布式块存储解决方案。它易于部署(一个Helm搞定),提供数据复制、快照、备份等功能,非常适合K3s。
Rook-Ceph:功能强大的Ceph集群的K8s Operator,提供块、文件和对象存储,但相对复杂。
NFS/CIFS:如果已有NFS/CIFS服务器,可以使用nfs-subdir-external-provisioner等插件。
云厂商CSI:如果K3s部署在公有云上,应安装对应云厂商的CSI驱动以使用云硬盘。
进阶配置
Kubeconfig的访问与配置:
位置:K3s Server安装后,会在 /etc/rancher/k3s/k3s.yaml 生成kubeconfig文件。
权限:该文件默认只对root可读。你需要sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config并sudo chown $(id -u):$(id -g) ~/.kube/config,才能让普通用户使用kubectl。
远程访问:该文件中的server地址默认是127.0.0.1。如果你想从外部机器访问API Server,需要将其IP改为Server节点的内网或公网IP。
配置HTTP代理:如果服务器需要通过代理访问外网,可以编辑K3s的systemd环境文件(如 /etc/systemd/system/k3s.service.env),设置 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 等环境变量。
证书管理:K3s客户端和服务器证书有效期为365天,在过期前90天内会自动更新。你可以使用 k3s certificate 命令系列手动轮换。
节点注册与污点:确保集群中所有节点的主机名是唯一的。如果希望Server节点只运行控制平面,使用 --node-taint 参数为其添加污点。
生产环境建议
将K3s用于生产环境时,请特别关注以下几点:

启用高可用:必须使用外部数据库或嵌入式etcd HA架构。
安全加固:
定期轮换证书和Token。
使用 k3s secrets-encrypt 命令启用静态Secret数据加密。
网络策略:如需隔离命名空间或Pod,请替换为支持NetworkPolicy的CNI(如Calico)。
CIS基准:K3s提供了加固脚本(k3s-cis-config)并支持--profile=cis-1.23(取决于版本)参数来自动应用CIS安全基准,强烈推荐使用。
数据备份与恢复:
对于使用嵌入式etcd的集群,定期备份至关重要。使用 k3s etcd-snapshot 命令创建快照,并配置--etcd-snapshot-schedule(定时备份)和--etcd-snapshot-retention(保留策略)。
对于使用外部数据库的集群,请使用数据库自身的备份工具(如mysqldump)进行备份。
生态与周边工具
K3s拥有一个活跃且实用的生态系统。

K3d:一个非常棒的工具,用于在Docker中快速运行本地K3s集群。非常适合本地开发和CI/CD流水线。
K3sup (ketchup):由Alex Ellis开发的轻量级CLI,可以通过SSH在任何远程主机(包括树莓派)上快速部署K3s集群,极大简化了多节点部署。
Rancher集成:K3s可以无缝地被Rancher(多集群管理平台)导入和管理。K3s也可以作为Rancher Server自身的运行底座。
Helm Controller:K3s内置了Helm Controller,允许你通过HelmChart CRD以声明式(GitOps)的方式管理应用部署,而无需在客户端安装Helm CLI。
故障排查
遇到问题时,可以按照以下思路排查:

检查节点与Pod状态:kubectl get nodes 和 kubectl get pods -A -o wide。
查看日志(K3s服务):使用journalctl -u k3s(Server)或journalctl -u k3s-agent(Agent)查看K3s服务的启动和运行日志。
查看日志(Pod):使用 kubectl logs -n 查看具体Pod的日志。
查看日志(容器运行时):sudo k3s crictl logs 。
检查网络:确认Flannel等网络插件正常工作,Pod间网络是否通畅。
重置节点:如果节点状态异常,可以尝试使用 /usr/local/bin/k3s-agent-uninstall.sh(Agent节点)或 /usr/local/bin/k3s-uninstall.sh(Server节点)脚本彻底卸载后重新加入。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
15天前
|
弹性计算 Kubernetes 安全
已上线!云监控 2.0 面向实体的全链路日志审计与风险溯源
在云端,一次 API 调用背后可能隐藏着一场数据泄露;一个异常进程背后,或许是 AK 泄露引发的链式攻击。传统日志“看得见却看不懂”,而云监控 2.0 日志审计通过 UModel 实体建模,将分散在 ACS、K8s、主机各层的日志自动串联。
142 39
|
2月前
|
存储 Kubernetes 数据库
K3S ——轻量化K8S 入门指南
本文介绍轻量级Kubernetes发行版K3s,适用于边缘计算、IoT等场景。涵盖其架构、安装部署(单节点/高可用/离线)、核心组件、网络存储配置及生产建议,助力快速构建轻量化容器平台。
439 4
|
11天前
|
机器学习/深度学习 人工智能 安全
2025 智能体工程现状
全面分析 AI 智能体在企业中的采用现状、挑战与趋势。
108 10
|
2月前
|
人工智能 运维 Serverless
从 Transform 到 Transformer,用 EventBridge 与百炼构建实时智能的 ETL 数据管道
作为数据处理领域的经典模式,ETL(Extract-Transform-Load)通过提取、转换、加载三个步骤,高效地处理着各类结构化数据。然而,面对 AI 时代海量、异构、实时的“数据洪流”,传统 ETL 链路,尤其是其核心的转换(Transform)环节,正面临严峻挑战。本文将从一个初级开发者也能理解和上手的视角,探讨 AI 时代的数据处理新范式:如何利用基于 Transformer 架构的大语言模型(LLM)重塑传统数据处理中的转换(Transform)环节,并结合事件驱动架构(Event-Driven Architecture, EDA),为 AI 数据处理链路“注入实时智能”。
195 16
|
2月前
|
存储 运维 安全
一篇文章带你了解什么是云计算,SaaS PaaS IaaS的区别
云计算将硬件与软件资源集中于云端,企业按需租用,实现弹性扩容、降低成本。相比本地部署,云服务在运维、安全、效率上优势显著,并通过SaaS、PaaS、IaaS分层提供灵活支持,助力企业高效发展。(238字)
395 2
|
2月前
|
Kubernetes API 开发工具
深入浅出K8S技术原理,搞懂K8S?这一篇就够了!
本文以“K8S帝国”为喻,系统解析Kubernetes核心技术原理。从声明式API、架构设计到网络、存储、安全、运维生态,深入浅出揭示其自动化编排本质,展现K8S如何成为云时代分布式操作系统的基石。(239字)
694 4
|
5月前
|
监控 Java Spring
AOP切面编程快速入门
AOP(面向切面编程)通过分离共性逻辑,简化代码、减少冗余。它通过切点匹配目标方法,在不修改原方法的前提下实现功能增强,如日志记录、性能监控等。核心概念包括:连接点、通知、切入点、切面和目标对象。Spring AOP支持多种通知类型,如前置、后置、环绕、返回后、异常通知,灵活控制方法执行流程。通过@Pointcut可复用切点表达式,提升维护性。此外,结合自定义注解,可实现更清晰的切面控制。
459 5
|
5月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
24天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
1192 26
|
4月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
981 1