K3s 配置参数完整手册

1 阅读8分钟

📘 K3s 配置参数完整手册

版本: 适用于 K3s v1.27+ (2026年最新)
文档类型: 完整配置参考手册


📖 目录

  1. K3s 简介与架构
  2. 配置方式概述
  3. Server 节点配置参数
  4. Agent 节点配置参数
  5. 通用配置参数
  6. 配置文件格式
  7. 环境变量对照表
  8. 常见场景配置示例
  9. 故障排查与调试

1. K3s 简介与架构

1.1 什么是 K3s?

K3s 是一个轻量级 Kubernetes 发行版,由 Rancher Labs 开发,具有以下特点:

特性说明
二进制大小< 100 MB
内存占用约为标准 K8s 的一半
存储后端默认 SQLite,支持 etcd3/MySQL/PostgreSQL
适用场景Edge、IoT、CI/CD、开发环境、ARM 嵌入式
认证状态CNCF 认证的 Kubernetes 发行版

1.2 架构组件

┌─────────────────────────────────────────────────────────────┐
│                    K3s Server (控制平面)                      │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ kube-apiserver│ │ scheduler   │ │ controller- │            │
│  │             │ │             │ │ manager     │            │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ datastore   │ │ cloud-ctrl  │ │ agent       │            │
│  │ (SQLite/etcd)│ │ manager     │ │ components│            │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
└─────────────────────────────────────────────────────────────┘
                              │
                              │ TLS Tunnel
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    K3s Agent (工作节点)                       │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ kubelet     │ │ containerd  │ │ CNI (Flannel)│           │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
└─────────────────────────────────────────────────────────────┘

2. 配置方式概述

K3s 支持三种配置方式,优先级从高到低:

CLI 命令行参数 > 配置文件 > 环境变量

2.1 CLI 命令行参数

# Server 节点
k3s server --token mytoken --flannel-backend=none

# Agent 节点
k3s agent --server https://master:6443 --token mytoken

2.2 配置文件 (YAML)

# Server 配置文件位置
/etc/rancher/k3s/config.yaml

# Agent 配置文件位置
/etc/rancher/k3s/agent-config.yaml

2.3 环境变量

# 所有环境变量以 K3S_ 为前缀
export K3S_TOKEN="mytoken"
export K3S_KUBECONFIG_MODE="644"

3. Server 节点配置参数

3.1 集群与认证

参数环境变量默认值说明
--token value$K3S_TOKEN自动生成集群认证令牌,用于 Agent 加入
--token-file value$K3S_TOKEN_FILE-从文件读取集群令牌
--agent-token value$K3S_AGENT_TOKEN同 token仅用于 Agent 加入的令牌
--agent-token-file value$K3S_AGENT_TOKEN_FILE-从文件读取 Agent 令牌
--cluster-init$K3S_CLUSTER_INITfalse初始化集群(用于 HA 第一个节点)
--server value$K3S_URL-加入现有集群的 Server URL

3.2 网络配置

参数环境变量默认值说明
--flannel-backend value$K3S_FLANNEL_BACKENDvxlanFlannel 后端:vxlan/host-gw/wireguard/none
--flannel-conf value$K3S_FLANNEL_CONF/etc/flannel-channel.yamlFlannel 配置文件路径
--flannel-ipv6-masq$K3S_FLANNEL_IPV6_MASQfalse启用 IPv6 伪装
--cluster-cidr value$K3S_CLUSTER_CIDR10.42.0.0/16Pod 网络 CIDR
--service-cidr value$K3S_SERVICE_CIDR10.43.0.0/16Service 网络 CIDR
--cluster-dns value$K3S_CLUSTER_DNS10.43.0.10集群 DNS 服务 IP
--cluster-domain value$K3S_CLUSTER_DOMAINcluster.local集群域名
--disable-network-policy$K3S_DISABLE_NETWORK_POLICYfalse禁用 NetworkPolicy
--disable-flannel$K3S_DISABLE_FLANNELfalse禁用 Flannel CNI
--flannel-iface value$K3S_FLANNEL_IFACE自动检测指定 Flannel 使用的网络接口

3.3 存储配置

参数环境变量默认值说明
--datastore-endpoint value$K3S_DATASTORE_ENDPOINTSQLite外部存储:etcd/mysql/postgres
--datastore-cafile value$K3S_DATASTORE_CAFILE-数据存储 TLS CA 证书
--datastore-certfile value$K3S_DATASTORE_CERTFILE-数据存储 TLS 客户端证书
--datastore-keyfile value$K3S_DATASTORE_KEYFILE-数据存储 TLS 客户端密钥
--data-dir value$K3S_DATA_DIR/var/lib/rancher/k3s数据存储目录
--default-local-storage-path value$K3S_DEFAULT_LOCAL_STORAGE_PATH-默认本地存储路径

3.4 组件控制

参数环境变量默认值说明
--disable value$K3S_DISABLE-禁用组件:traefik,servicelb,metrics-server,local-storage
--disable-cloud-controller$K3S_DISABLE_CLOUD_CONTROLLERfalse禁用云控制器
--disable-kube-proxy$K3S_DISABLE_KUBE_PROXYfalse禁用 kube-proxy
--disable-scheduler$K3S_DISABLE_SCHEDULERfalse禁用调度器
--disable-controller-manager$K3S_DISABLE_CONTROLLER_MANAGERfalse禁用控制器管理器
--disable-apiserver$K3S_DISABLE_APISERVERfalse禁用 API Server

3.5 API Server 配置

参数环境变量默认值说明
--api-port value$K3S_API_PORT6443API Server 监听端口
--bind-address value$K3S_BIND_ADDRESS0.0.0.0API Server 绑定地址
--advertise-address value$K3S_ADVERTISE_ADDRESS-API Server 通告地址
--advertise-port value$K3S_ADVERTISE_PORT-API Server 通告端口
--tls-san value$K3S_TLS_SAN-TLS 证书额外 SAN(域名/IP)
--kube-apiserver-arg value$K3S_KUBE_APISERVER_ARG-传递参数给 kube-apiserver
--kube-controller-manager-arg value$K3S_KUBE_CONTROLLER_MANAGER_ARG-传递参数给 controller-manager
--kube-scheduler-arg value$K3S_KUBE_SCHEDULER_ARG-传递参数给 scheduler

3.6 证书配置

参数环境变量默认值说明
--cert-dir value$K3S_CERT_DIR/var/lib/rancher/k3s/server/tls证书存储目录
--service-node-port-range value$K3S_SERVICE_NODE_PORT_RANGE30000-32767NodePort 端口范围

4. Agent 节点配置参数

4.1 连接配置

参数环境变量默认值说明
--server value$K3S_URL-K3s Server URL(必须)
--token value$K3S_TOKEN-集群认证令牌(必须)
--token-file value$K3S_TOKEN_FILE-从文件读取令牌

4.2 节点配置

参数环境变量默认值说明
--node-name value$K3S_NODE_NAME主机名节点名称
--with-node-id$K3S_WITH_NODE_IDfalse在节点名后添加随机 ID
--node-label value$K3S_NODE_LABEL-节点标签(可多次使用)
--node-taint value$K3S_NODE_TAINT-节点污点(可多次使用)
--node-ip value$K3S_NODE_IP自动检测节点 IP 地址
--node-external-ip value$K3S_NODE_EXTERNAL_IP-节点外部 IP 地址

4.3 容器运行时配置

参数环境变量默认值说明
--docker$K3S_DOCKERfalse使用 Docker 作为运行时
--container-runtime-endpoint value$K3S_CONTAINER_RUNTIME_ENDPOINT-容器运行时端点
--pause-image value$K3S_PAUSE_IMAGErancher/mirrored-pausePause 容器镜像
--snapshotter value$K3S_SNAPSHOTTERoverlayfs容器快照驱动

4.4 Kubelet 配置

参数环境变量默认值说明
--kubelet-arg value$K3S_KUBELET_ARG-传递参数给 kubelet
--resolv-conf value$K3S_RESOLV_CONF/etc/resolv.confresolv.conf 文件路径
--rootless$K3S_ROOTLESSfalse以 rootless 模式运行
--protect-kernel-defaults$K3S_PROTECT_KERNEL_DEFAULTSfalse保护内核默认参数

4.5 镜像配置

参数环境变量默认值说明
--private-registry value$K3S_PRIVATE_REGISTRY/etc/rancher/k3s/registries.yaml私有镜像仓库配置
--image-credential-provider-config value$K3S_IMAGE_CREDENTIAL_PROVIDER_CONFIG-镜像凭证提供者配置
--image-credential-provider-bin-dir value$K3S_IMAGE_CREDENTIAL_PROVIDER_BIN_DIR-镜像凭证提供者二进制目录

5. 通用配置参数

5.1 日志配置

参数环境变量默认值说明
--v value$K3S_V0日志详细程度(0-9)
--vmodule value$K3S_VMODULE-文件过滤日志
--log value, -l value$K3S_LOG-日志文件路径

5.2 系统配置

参数环境变量默认值说明
--data-dir value$K3S_DATA_DIR/var/lib/rancher/k3s数据目录
--config value, -c value$K3S_CONFIG-配置文件路径
--write-kubeconfig value$K3S_WRITE_KUBECONFIG/etc/rancher/k3s/k3s.yamlkubeconfig 写入路径
--write-kubeconfig-mode value$K3S_KUBECONFIG_MODE600kubeconfig 文件权限
--selinux$K3S_SELINUXfalse启用 SELinux
--lb-server-port value$K3S_LB_SERVER_PORT6444负载均衡器端口

5.3 代理配置

参数环境变量默认值说明
--http-proxy value$K3S_HTTP_PROXY-HTTP 代理地址
--https-proxy value$K3S_HTTPS_PROXY-HTTPS 代理地址
--no-proxy value$K3S_NO_PROXY-不使用代理的地址列表

6. 配置文件格式

6.1 Server 配置示例 (/etc/rancher/k3s/config.yaml)

# 集群认证
token: "my-secret-token"
agent-token: "my-agent-token"

# 网络配置
flannel-backend: "vxlan"
cluster-cidr: "10.42.0.0/16"
service-cidr: "10.43.0.0/16"
cluster-dns: "10.43.0.10"
cluster-domain: "cluster.local"

# 存储配置
datastore-endpoint: "mysql://user:pass@tcp(192.168.1.100:3306)/k3s"
datastore-cafile: "/etc/ssl/mysql-ca.crt"
datastore-certfile: "/etc/ssl/mysql-client.crt"
datastore-keyfile: "/etc/ssl/mysql-client.key"

# 禁用组件
disable:
  - traefik
  - servicelb
  - metrics-server

# API Server 配置
api-port: 6443
bind-address: "0.0.0.0"
advertise-address: "192.168.1.100"
tls-san:
  - "k3s.example.com"
  - "192.168.1.100"

# 组件参数
kube-apiserver-arg:
  - "feature-gates=RemoveSelfLink=false"
  - "audit-log-path=/var/log/k3s/audit.log"
kube-controller-manager-arg:
  - "node-cidr-mask-size=24"
kube-scheduler-arg:
  - "profiling=true"

# 其他
data-dir: "/var/lib/rancher/k3s"
write-kubeconfig-mode: "0644"

6.2 Agent 配置示例 (/etc/rancher/k3s/agent-config.yaml)

# 连接配置
server: "https://192.168.1.100:6443"
token: "my-secret-token"

# 节点配置
node-name: "worker-01"
node-label:
  - "node-type=worker"
  - "zone=us-west-1"
node-taint:
  - "dedicated=special:NoSchedule"
node-ip: "192.168.1.101"
node-external-ip: "203.0.113.10"

# 容器运行时
docker: false
container-runtime-endpoint: ""
pause-image: "rancher/mirrored-pause:3.6"

# Kubelet 配置
kubelet-arg:
  - "max-pods=110"
  - "pod-max-pids=100"
resolv-conf: "/etc/resolv.conf"

# 镜像配置
private-registry: "/etc/rancher/k3s/registries.yaml"

# 其他
data-dir: "/var/lib/rancher/k3s"

6.3 私有镜像仓库配置 (/etc/rancher/k3s/registries.yaml)

mirrors:
  docker.io:
    endpoint:
      - "https://registry-mirror.example.com"
  gcr.io:
    endpoint:
      - "https://gcr-mirror.example.com"
  quay.io:
    endpoint:
      - "https://quay-mirror.example.com"

configs:
  "registry.example.com":
    auth:
      username: "myuser"
      password: "mypass"
    tls:
      ca_file: "/etc/ssl/registry-ca.crt"
      cert_file: "/etc/ssl/registry-client.crt"
      key_file: "/etc/ssl/registry-client.key"
      insecure_skip_verify: false

7. 环境变量对照表

参数环境变量示例值
--tokenK3S_TOKENK3S_TOKEN="mytoken"
--serverK3S_URLK3S_URL="https://master:6443"
--data-dirK3S_DATA_DIRK3S_DATA_DIR="/opt/k3s"
--flannel-backendK3S_FLANNEL_BACKENDK3S_FLANNEL_BACKEND="host-gw"
--cluster-cidrK3S_CLUSTER_CIDRK3S_CLUSTER_CIDR="10.100.0.0/16"
--service-cidrK3S_SERVICE_CIDRK3S_SERVICE_CIDR="10.101.0.0/16"
--disableK3S_DISABLEK3S_DISABLE="traefik,servicelb"
--node-labelK3S_NODE_LABELK3S_NODE_LABEL="app=web"
--kubelet-argK3S_KUBELET_ARGK3S_KUBELET_ARG="max-pods=50"
--write-kubeconfig-modeK3S_KUBECONFIG_MODEK3S_KUBECONFIG_MODE="644"

8. 常见场景配置示例

8.1 单节点开发环境

# 快速启动(默认配置)
curl -sfL https://get.k3s.io | sh -

# 或手动启动
k3s server --cluster-init

8.2 高可用集群(3 Server + 外部数据库)

# Server 1 (第一个节点)
k3s server \
  --cluster-init \
  --datastore-endpoint "mysql://user:pass@tcp(db:3306)/k3s" \
  --token "my-secret-token"

# Server 2 & 3
k3s server \
  --server "https://server1:6443" \
  --datastore-endpoint "mysql://user:pass@tcp(db:3306)/k3s" \
  --token "my-secret-token"

# Agent 节点
k3s agent \
  --server "https://server1:6443" \
  --token "my-secret-token"

8.3 边缘设备(资源受限)

k3s server \
  --disable traefik,servicelb,metrics-server \
  --flannel-backend=none \
  --disable-network-policy \
  --kubelet-arg "eviction-hard=memory.available<256Mi" \
  --kubelet-arg "max-pods=20"

8.4 使用 Docker 作为运行时

# 安装 Docker 后
k3s server --docker --disable traefik

# Agent 节点
k3s agent --docker --server https://master:6443 --token mytoken

8.5 内网/离线环境

# 下载镜像并保存
docker pull rancher/k3s:v1.27.4-k3s1
docker save -o k3s-airgap-images.tar rancher/k3s:v1.27.4-k3s1

# 离线安装
INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_SKIP_ENABLE=true \
./k3s-install.sh

# 将镜像放入 airgap 目录
mkdir -p /var/lib/rancher/k3s/agent/images/
cp k3s-airgap-images.tar /var/lib/rancher/k3s/agent/images/

8.6 自定义网络接口

# 指定 Flannel 使用的网络接口
k3s server \
  --flannel-iface eth1 \
  --node-ip 192.168.1.100 \
  --node-external-ip 203.0.113.10

8.7 启用审计日志

k3s server \
  --kube-apiserver-arg "audit-log-path=/var/log/k3s/audit.log" \
  --kube-apiserver-arg "audit-log-maxage=30" \
  --kube-apiserver-arg "audit-log-maxbackup=10" \
  --kube-apiserver-arg "audit-log-maxsize=100"

9. 故障排查与调试

9.1 查看日志

# Systemd 服务日志
journalctl -u k3s -f
journalctl -u k3s-agent -f

# 增加日志详细程度
k3s server --v 4
k3s agent --v 5

9.2 常用诊断命令

# 检查节点状态
kubectl get nodes -o wide

# 检查 Pod 状态
kubectl get pods -A

# 检查网络连通性
kubectl run test --rm -it --image=busybox -- ping -c 3 kubernetes.default

# 检查 DNS
kubectl run test --rm -it --image=busybox -- nslookup kubernetes.default

# 查看证书信息
k3s certificate check

# 旋转证书
k3s certificate rotate
k3s certificate rotate-ca

9.3 常见问题

问题可能原因解决方案
Agent 无法加入Token 错误/网络不通检查 token 和防火墙
Pod 无法启动镜像拉取失败配置镜像加速器/私有仓库
网络不通CNI 配置问题检查 flannel-backend 配置
证书过期证书有效期到运行 k3s certificate rotate
存储不足本地磁盘满清理 /var/lib/rancher/k3s

9.4 卸载 K3s

# 使用官方卸载脚本
/usr/local/bin/k3s-uninstall.sh

# Agent 节点卸载
/usr/local/bin/k3s-agent-uninstall.sh

# 手动清理
systemctl stop k3s
rm -rf /var/lib/rancher/k3s
rm -rf /etc/rancher/k3s
rm -rf /usr/local/bin/k3s

📎 附录:端口参考

端口协议服务说明
6443TCPAPI ServerKubernetes API
6444TCPLoad Balancer内部负载均衡
10250TCPKubelet节点管理
10256TCPKube-Proxy服务代理
8472UDPFlannelVxLAN 网络
4789UDPFlannelVxLAN 数据
30000-32767TCP/UDPNodePort服务暴露

提示: 本手册基于 K3s 官方文档整理,具体参数可能随版本更新有所变化。建议定期查阅 官方文档 获取最新信息。