MicroK8s 集群配置文件详解(Ubuntu 22.04)

MicroK8s 集群配置文件详解(Ubuntu 22.04):解析 args 目录下 kubelite、kubelet、kube-apiserver 参数文件与 containerd 模板,逐项给出含义与修改方法,附 FAQ,实测验证通过。

MicroK8sMicroK8sKubernetesk8s2026/10/12

MicroK8s 集群配置文件详解(Ubuntu 22.04)

目标:详解 MicroK8s 在 Ubuntu 22.04 上 /var/snap/microk8s/current/args/ 目录下的全部核心配置文件,逐项讲解 kubelite / kubelet / kube-apiserver / kube-proxy / kube-controller-manager / kube-scheduler 参数文件,以及 containerd.toml、containerd-template.toml、containerd-env、k8s-dqlite、ha-conf、cni-env、certs.d 的含义、默认值与修改方法,并给出可直接落地的生产配置模板与 FAQ。文中配置与回显均在 Ubuntu 22.04.5 LTS + MicroK8s v1.35.6(revision 9072)实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS / x86_64(内核 6.8.0-138-generic)
  • MicroK8s:v1.35.6 revision 9072(snap 通道 1.35/stable,发布者 canonical,classic 安装)
  • Kubernetes:v1.35.6;客户端 kubectl v1.35.6(Kustomize v5.7.1)
  • 内置运行时:containerd v2.1.6;数据存储:k8s-dqlite(监听 127.0.0.1:19001)
  • CNI 网络:calico(Pod 网段 10.1.0.0/16,Service 网段 10.152.183.0/24,集群 DNS 10.152.183.10,域名 cluster.local)
  • API Server:https://172.18.0.2:16443(secure-port 16443)
  • 集群:microk8s-u22-main(172.18.0.2,主节点)+ microk8s-u22-worker1(172.18.0.4,worker)
  • 配置目录:/var/snap/microk8s/current/args/(属主 root:microk8s,权限 660)
  • 示例账号:root(示例密码 q1w2e3r4)

二、配置文件一览与修改方式

2.1 配置目录结构

MicroK8s 的所有组件启动参数、运行时配置与网络配置集中存放在 /var/snap/microk8s/current/args/ 目录。实测目录清单一览:

ls -l /var/snap/microk8s/current/args/

实测回显:

total 120
drwxrwx--- 6 root microk8s 4096 Oct 11 13:48 .
drwxr-xr-x 9 root root     4096 Oct 11 13:20 ..
-rw-rw---- 1 root microk8s  129 Oct 11 13:19 admission-control-config-file.yaml
-rw-rw---- 1 root microk8s  132 Oct 11 13:19 apiserver-proxy
drwxrwx--- 4 root microk8s 4096 Oct 11 13:50 certs.d
-rw-rw---- 1 root microk8s  120 Oct 11 13:19 cluster-agent
-rw-rw---- 1 root microk8s  347 Oct 11 13:19 cni-env
drwxrwx--- 2 root microk8s 4096 Oct 11 13:50 cni-network
-rw-rw---- 1 root microk8s  167 Oct 11 13:19 containerd
-rw-rw---- 1 root microk8s  996 Oct 11 13:19 containerd-env
-rw-rw---- 1 root microk8s 2815 Oct 11 13:47 containerd-template.toml
-rw-rw---- 1 root microk8s 2854 Oct 11 13:48 containerd.toml
-rw-rw---- 1 root microk8s   64 Oct 11 13:19 ctr
-rw-rw---- 1 root microk8s  295 Oct 11 13:19 etcd
-rw-rw---- 1 root microk8s  129 Oct 11 13:19 eventconfig.yaml
-rw-rw---- 1 root microk8s   56 Oct 11 13:19 flannel-network-mgr-config
-rw-rw---- 1 root microk8s  502 Oct 11 13:19 flannel-template.conflist
-rw-rw---- 1 root microk8s  250 Oct 11 13:19 flanneld
drwxrwx--- 2 root microk8s 4096 Oct 11 13:19 git
-rw-rw---- 1 root microk8s   17 Oct 11 13:19 ha-conf
-rw-rw---- 1 root microk8s  119 Oct 11 13:19 k8s-dqlite
-rw-rw---- 1 root microk8s  125 Oct 11 13:19 k8s-dqlite-env
-rw-rw---- 1 root microk8s 2332 Oct 11 13:48 kube-apiserver
-rw-rw---- 1 root microk8s  467 Oct 11 13:20 kube-controller-manager
-rw-rw---- 1 root microk8s  129 Oct 11 13:20 kube-proxy
-rw-rw---- 1 root microk8s  141 Oct 11 13:19 kube-scheduler
-rw-rw---- 1 root microk8s    0 Oct 11 13:19 kubectl
-rw-rw---- 1 root microk8s   54 Oct 11 13:19 kubectl-env
-rw-rw---- 1 root microk8s  972 Oct 11 13:48 kubelet
-rw-rw---- 1 root microk8s  348 Oct 11 13:48 kubelite
drwxrwx--- 2 root microk8s 4096 Oct 11 13:19 traefik

关键文件与作用:

文件 / 目录作用
kubelite控制面聚合进程(apiserver+controller-manager+scheduler+kube-proxy+kubelet)的入口参数
kubeletkubelet 参数
kube-apiserverAPI Server 参数
kube-proxykube-proxy 参数
kube-controller-manager控制器管理器参数
kube-scheduler调度器参数
containerd.toml运行时 containerd 实际生效配置(由模板渲染)
containerd-template.toml运行时 containerd 配置模板(修改入口)
containerd-envcontainerd 环境变量(代理、ulimit、Kata 路径)
cni-envCNI 网络选择与网段配置
cni-network/CNI 插件配置与 calico 清单
k8s-dqlite默认数据存储参数
ha-conf高可用域配置
certs.d/镜像仓库 hosts.toml(镜像加速入口)

2.2 变量语法说明

MicroK8s 参数文件使用 snapd 变量语法,snapd 在组件启动时将其展开为真实路径,因此这些变量是配置文件的真实内容,并非占位符。展开对照如下:

变量展开后的真实路径
${SNAP_DATA}/var/snap/microk8s/current
${SNAP_COMMON}/var/snap/microk8s/common
${DEFAULT_INTERFACE_IP_ADDR}节点默认出口网卡 IP(本环境主节点为 172.18.0.2)

查看变量当前展开值:

ls -l /var/snap/microk8s/

实测回显(软链接指向当前 revision 目录):

total 8
drwxr-xr-x 9 root root 4096 Oct 11 13:20 9072
drwxr-xr-x 8 root root 4096 Oct 11 13:20 common
lrwxrwxrwx 1 root root    4 Oct 11 13:19 current -> 9072

2.3 修改方式与重启要求

修改参数文件后需重启对应组件或整个 MicroK8s 才能生效:

# 修改单个参数文件
vi /var/snap/microk8s/current/args/kube-apiserver

# 重启 MicroK8s 使全部参数生效(集群成员节点用 snap start/stop)
snap stop microk8s
snap start microk8s

⚠️ 直接执行 microk8s stop / microk8s start 在已加入集群的节点上会提示 "acting as a node in a cluster",此时应改用 snap stop microk8s / snap start microk8s。

2.4 修改后验证命令与预期结果

microk8s status --wait-ready
microk8s kubectl get nodes

预期结果(Ubuntu 22.04 实测回显):

NAME                   STATUS   ROLES    AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
microk8s-u22-main      Ready    <none>   42m     v1.35.6   172.18.0.2    <none>        Ubuntu 22.04.5 LTS   6.8.0-138-generic   containerd://2.1.6
microk8s-u22-worker1   Ready    <none>   4m34s   v1.35.6   172.18.0.4    <none>        Ubuntu 22.04.5 LTS   6.8.0-138-generic   containerd://2.1.6

💡 节点全部 Ready、CONTAINER-RUNTIME 显示 containerd://2.1.6,即视为参数修改后集群恢复验证通过。

三、核心组件参数详解

MicroK8s 将控制面整合为 kubelite 单一进程:kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet 合并运行,各自读取对应的参数文件。kubelite 文件即聚合入口。

3.1 kubelite:控制面聚合入口

cat /var/snap/microk8s/current/args/kubelite

实测回显:

--scheduler-args-file=$SNAP_DATA/args/kube-scheduler
--controller-manager-args-file=$SNAP_DATA/args/kube-controller-manager
--proxy-args-file=$SNAP_DATA/args/kube-proxy
--kubelet-args-file=$SNAP_DATA/args/kubelet
--apiserver-args-file=$SNAP_DATA/args/kube-apiserver
--kubeconfig-file=$SNAP_DATA/credentials/client.config
--start-control-plane=true
参数说明默认值
--scheduler-args-file调度器参数文件路径$SNAP_DATA/args/kube-scheduler
--controller-manager-args-file控制器管理器参数文件路径$SNAP_DATA/args/kube-controller-manager
--proxy-args-filekube-proxy 参数文件路径$SNAP_DATA/args/kube-proxy
--kubelet-args-filekubelet 参数文件路径$SNAP_DATA/args/kubelet
--apiserver-args-fileAPI Server 参数文件路径$SNAP_DATA/args/kube-apiserver
--start-control-plane本节点是否启动控制面true

💡 说明:--start-control-plane=true 表示本节点承担控制面角色;纯 worker 节点加入后该值为 false,不再启动 apiserver 等控制面组件。修改该文件即可切换节点的控制面职责。

3.2 kubelet

cat /var/snap/microk8s/current/args/kubelet

实测回显:

--kubeconfig=${SNAP_DATA}/credentials/kubelet.config
--cert-dir=${SNAP_DATA}/certs
--client-ca-file=${SNAP_DATA}/certs/ca.crt
--anonymous-auth=false
--root-dir=${SNAP_COMMON}/var/lib/kubelet
--fail-swap-on=false
--eviction-hard="memory.available<100Mi,nodefs.available<1Gi,imagefs.available<1Gi"
--container-runtime-endpoint=${SNAP_COMMON}/run/containerd.sock
--containerd=${SNAP_COMMON}/run/containerd.sock
--node-labels="microk8s.io/cluster=true,node.kubernetes.io/microk8s-controlplane=microk8s-controlplane"
--authentication-token-webhook=true
--read-only-port=0
--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
--serialize-image-pulls=false
--cluster-dns=10.152.183.10
--cluster-domain=cluster.local

核心参数:

参数说明默认值
--root-dirkubelet 数据根目录${SNAP_COMMON}/var/lib/kubelet
--fail-swap-on关闭 Swap 强制检查(允许节点启用 Swap)false
--eviction-hard节点资源驱逐阈值(内存<100Mi、nodefs/imagefs<1Gi)见左
--container-runtime-endpointCRI 运行时端点${SNAP_COMMON}/run/containerd.sock
--cluster-dns集群 DNS 服务 IP10.152.183.10
--cluster-domain集群域名后缀cluster.local
--anonymous-auth匿名访问 kubelet 端点false
--serialize-image-pulls串行拉取镜像false(并发拉取)

修改方法:如调大驱逐阈值,编辑 --eviction-hard 一行(如改为 memory.available<200Mi,nodefs.available<2Gi),保存后 snap restart microk8s 使 kubelet 重新读取参数。

3.3 kube-apiserver

cat /var/snap/microk8s/current/args/kube-apiserver

实测回显(节选关键行):

--service-cluster-ip-range=10.152.183.0/24
--authorization-mode=AlwaysAllow
--secure-port=16443
--etcd-servers="unix://${SNAP_DATA}/var/kubernetes/backend/kine.sock:12379"
--allow-privileged=true
--service-account-issuer='https://kubernetes.default.svc'
--event-ttl=5m
--profiling=false
--enable-admission-plugins=EventRateLimit
--admission-control-config-file=${SNAP_DATA}/args/admission-control-config-file.yaml
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

核心参数:

参数说明默认值
--secure-portAPI Server 安全端口16443
--service-cluster-ip-rangeService 网段10.152.183.0/24
--authorization-mode授权模式(单节点默认 AlwaysAllow)AlwaysAllow
--etcd-servers数据存储端点(实际指向 k8s-dqlite 的 kine 兼容层)unix://${SNAP_DATA}/var/kubernetes/backend/kine.sock:12379
--event-ttl事件保留时长5m
--enable-admission-plugins启用的准入插件EventRateLimit
--profiling性能分析端口false
--kubelet-preferred-address-types连接 kubelet 优先地址类型InternalIP,Hostname,...

💡 说明:--etcd-servers 指向 kine.sock,说明 MicroK8s 默认用 k8s-dqlite(含 kine 兼容接口)承载数据存储而非原生 etcd;--authorization-mode=AlwaysAllow 为单节点默认,生产多用户场景应启用 RBAC(microk8s enable rbac)。

3.4 kube-proxy

cat /var/snap/microk8s/current/args/kube-proxy

实测回显:

--kubeconfig=${SNAP_DATA}/credentials/proxy.config
--cluster-cidr=10.1.0.0/16
--healthz-bind-address=127.0.0.1
--profiling=false
参数说明默认值
--cluster-cidrPod 网段(用于识别集群内流量)10.1.0.0/16
--healthz-bind-address健康检查监听地址127.0.0.1
--profiling性能分析端口false

⚠️ kube-proxy 需要读写 /proc/sys/net/netfilter/nf_conntrack_max;若该文件在部分受限内核环境中不可写会持续报 permission denied(生产服务器默认可写,无需额外处理)。

3.5 kube-controller-manager

cat /var/snap/microk8s/current/args/kube-controller-manager

实测回显:

--cluster-cidr=10.1.0.0/16
--service-cluster-ip-range=10.152.183.0/24
--kubeconfig=${SNAP_DATA}/credentials/controller.config
--service-account-private-key-file=${SNAP_DATA}/certs/serviceaccount.key
--root-ca-file=${SNAP_DATA}/certs/ca.crt
--cluster-signing-cert-file=${SNAP_DATA}/certs/ca.crt
--cluster-signing-key-file=${SNAP_DATA}/certs/ca.key
--use-service-account-credentials
--leader-elect-lease-duration=60s
--leader-elect-renew-deadline=30s
--profiling=false
参数说明默认值
--cluster-cidrPod 网段10.1.0.0/16
--service-cluster-ip-rangeService 网段10.152.183.0/24
--use-service-account-credentials各控制器使用独立 ServiceAccount 凭据启用
--leader-elect-lease-duration选主租约时长60s
--leader-elect-renew-deadline选主续约截止30s

💡 leader-elect-lease-duration 与 renew-deadline 决定多控制面高可用时的选主速度,HA 集群可按需缩短(如 15s/10s)以加快故障切换。

3.6 kube-scheduler

cat /var/snap/microk8s/current/args/kube-scheduler

实测回显:

--kubeconfig=${SNAP_DATA}/credentials/scheduler.config
--leader-elect-lease-duration=60s
--leader-elect-renew-deadline=30s
--profiling=false
参数说明默认值
--leader-elect-lease-duration选主租约时长60s
--leader-elect-renew-deadline选主续约截止30s
--profiling性能分析端口false

四、运行时配置详解(containerd)

MicroK8s 随 snap 交付 containerd v2.1.6,作为唯一的 CRI 运行时,其配置分为「模板」与实际「渲染结果」两文件。

4.1 containerd.toml 与 containerd-template.toml

  • containerd-template.toml:配置模板,是修改运行时行为的入口,其中保留变量占位;
  • containerd.toml:实际生效配置,由模板渲染生成,变量已被替换为真实值。

模板中运行时(CRI 接口)核心段:

grep -nA2 -E "sandbox_image|snapshotter|default_runtime_name" /var/snap/microk8s/current/args/containerd-template.toml

实测回显:

31:  sandbox_image = "registry.k8s.io/pause:3.10"
40:    snapshotter = "native"
47:    default_runtime_name = "${RUNTIME}"

渲染后的生效配置(关键行):

grep -nE "sandbox_image|snapshotter|default_runtime_name|config_path" /var/snap/microk8s/current/args/containerd.toml

实测回显:

30:  sandbox_image = "registry.k8s.io/pause:3.10"
39:    snapshotter = "native"
46:    default_runtime_name = "runc"
77:    config_path = "/var/snap/microk8s/9072/args/certs.d"
配置项说明默认值本环境值
sandbox_imagePod 沙箱(pause)镜像registry.k8s.io/pause:3.10registry.k8s.io/pause:3.10
snapshotter快照器类型由 MicroK8s 依据文件系统自动选择native
default_runtime_name默认运行时 handlerruncrunc
config_path镜像仓库 hosts.toml 目录${SNAP_DATA}/args/certs.d/var/snap/microk8s/9072/args/certs.d

💡 snapshotter = "native" 是受限文件系统环境(嵌套 overlayfs)下的实测取值——普通物理服务器通常自动选 overlayfs;如需强制指定,编辑 containerd-template.toml 的 snapshotter 行后重启 MicroK8s。

4.2 快照器与运行时 handler

模板预置三个运行时 handler,可通过 RuntimeClass 按工作负载选择:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-container-runtime]
  runtime_type = "io.containerd.runc.v2"
  BinaryName = "nvidia-container-runtime"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata]
  runtime_type = "io.containerd.kata.v2"
  BinaryName = "kata-runtime"
handlerruntime_type二进制用途
runcio.containerd.runc.v2runc默认运行时,通用工作负载
nvidia-container-runtimeio.containerd.runc.v2nvidia-container-runtimeGPU 工作负载
kataio.containerd.kata.v2kata-runtime强隔离安全运行时

查询当前生效的运行时插件:

microk8s ctr plugins ls

实测回显:

io.containerd.snapshotter.v1              blockfile                linux/amd64    skip
io.containerd.snapshotter.v1              btrfs                    linux/amd64    skip
io.containerd.snapshotter.v1              devmapper                linux/amd64    skip
io.containerd.snapshotter.v1              erofs                    linux/amd64    skip
io.containerd.snapshotter.v1              native                   linux/amd64    ok
io.containerd.snapshotter.v1              overlayfs                linux/amd64    ok
io.containerd.snapshotter.v1              zfs                      linux/amd64    skip
io.containerd.service.v1                  snapshots-service        -              ok
io.containerd.cri.v1                      images                   -              ok
io.containerd.cri.v1                      runtime                  linux/amd64    ok
io.containerd.grpc.v1                     snapshots                -              ok
io.containerd.nri.v1                      nri                      -              ok
io.containerd.grpc.v1                     cri                      -              ok

💡 快照器中 native 与 overlayfs 状态为 ok,即两者均可用,实际采用哪一个由 containerd.toml 的 snapshotter 行决定(本环境为 native)。

⚠️ 使用 kata handler 前需在服务器安装 kata-runtime 并在 containerd-env 中设置 KATA_PATH;使用 nvidia-container-runtime 需先安装 GPU 驱动与对应运行时二进制。

4.3 containerd-env

cat /var/snap/microk8s/current/args/containerd-env

实测回显(有效行):

PATH=$PATH:$KATA_PATH
ulimit -n 65536 || true
ulimit -l 16384 || true
配置项说明默认值
HTTPS_PROXY为 containerd 配置代理(注释态,按需填写,形如 http://用户:密码@代理:端口/)空
NO_PROXY免代理网段(应含 Pod/Service 网段)空
KATA_PATHkata-runtime 安装目录空
ulimit -n最大打开文件数65536
ulimit -l最大锁定内存16384

修改方法:在 containerd-env 内新增环境变量行(如 HTTPS_PROXY=http://user:pass@proxy:3128),然后 snap stop microk8s && snap start microk8s 生效,并用下列命令验证:

systemctl show snap.microk8s.daemon-containerd -p Environment

4.4 ctr 客户端封装

cat /var/snap/microk8s/current/args/ctr

实测回显:

--address=${SNAP_COMMON}/run/containerd.sock
--namespace k8s.io
参数说明默认值
--addresscontainerd GRPC 套接字${SNAP_COMMON}/run/containerd.sock
--namespace默认命名空间k8s.io

💡 由于封装文件已默认 --namespace k8s.io,直接执行 microk8s ctr images ls 无需再传 -n;重复传参会报 Cannot use two forms of the same flag: n namespace。

五、数据存储、网络与高可用配置

5.1 k8s-dqlite

MicroK8s 默认使用 k8s-dqlite(内置 kine 兼容层)作为数据存储:

cat /var/snap/microk8s/current/args/k8s-dqlite

实测回显:

--storage-dir=${SNAP_DATA}/var/kubernetes/backend/
--listen=unix://${SNAP_DATA}/var/kubernetes/backend/kine.sock:12379
参数说明默认值
--storage-dirdqlite 数据目录${SNAP_DATA}/var/kubernetes/backend/
--listen监听套接字(kine 接口,供 apiserver 访问)unix://${SNAP_DATA}/var/kubernetes/backend/kine.sock:12379

💡 传统 etcd 参数文件 args/etcd 同样存在(供 flannel 后端与外部接入使用),但默认数据存储为 k8s-dqlite;microk8s dbctl 可用于 dqlite 运维。

5.2 ha-conf

cat /var/snap/microk8s/current/args/ha-conf

实测回显:

failure-domain=1
参数说明默认值
failure-domain故障域编号,控制面节点按域分布以避免同域多节点同时故障1

💡 组建高可用集群时,同域控制面节点数不应超过半数,failure-domain 用于在 microk8s join(非 --worker)时给控制面节点打域标签。

5.3 cni-env 与 CNI 网络

cat /var/snap/microk8s/current/args/cni-env

实测回显:

# Choose CNI to deploy. Only 'calico' is supported at the moment
CNI=calico

# IPv4 configuration
IPv4_SUPPORT=true
IPv4_CLUSTER_CIDR=10.1.0.0/16
IPv4_SERVICE_CIDR=10.152.183.0/24

# IPv6 configuration
IPv6_SUPPORT=false
# IPv6_CLUSTER_CIDR=fd01::/64
# IPv6_SERVICE_CIDR=fd98::/108

# Calico-specific configuration settings
# CALICO_VETH_MTU=1450
配置项说明默认值
CNICNI 插件类型(当前仅支持 calico)calico
IPv4_SUPPORT是否启用 IPv4true
IPv4_CLUSTER_CIDRPod 网段10.1.0.0/16
IPv4_SERVICE_CIDRService 网段10.152.183.0/24
IPv6_SUPPORT是否启用 IPv6(双栈)false
CALICO_VETH_MTUcalico veth 网卡 MTU(注释态,按网络环境调整)注释

CNI 插件目录内容:

ls /var/snap/microk8s/current/args/cni-network/

实测回显:

10-calico.conflist
calico-kubeconfig
cni.yaml

⚠️ 修改 IPv4_CLUSTER_CIDR / IPv4_SERVICE_CIDR 后需 snap restart microk8s 重建 CNI;网段变更会导致现有 Pod 网络重建,请勿在生产运行中的集群随意调整。

5.4 flannel 与 etcd(历史网络路径)

args/ 下仍保留 flannel 相关文件(flanneld、flannel-template.conflist、flannel-network-mgr-config)供旧版网络模式使用:

cat /var/snap/microk8s/current/args/flannel-network-mgr-config

实测回显:

{"Network": "10.1.0.0/16", "Backend": {"Type": "vxlan"}}

💡 当前版本默认 CNI 为 calico,flannel 文件不参与生效;保留仅为兼容历史模式与外部接入场景。

六、证书与镜像仓库配置

6.1 certs.d 镜像仓库配置

镜像加速与私有仓库通过 args/certs.d/<registry>/hosts.toml 配置(containerd 的 config_path 指向该目录):

ls -R /var/snap/microk8s/current/args/certs.d

实测回显:

/var/snap/microk8s/current/args/certs.d:
docker.io
localhost:32000

/var/snap/microk8s/current/args/certs.d/docker.io:
hosts.toml

/var/snap/microk8s/current/args/certs.d/localhost:32000:
hosts.toml

docker.io 加速配置:

cat /var/snap/microk8s/current/args/certs.d/docker.io/hosts.toml

实测回显:

server = "https://docker.io"

[host."https://dockerproxy.net"]
  capabilities = ["pull", "resolve"]
字段说明
server原始仓库地址
[host."<镜像端点>"]镜像加速端点
capabilities能力声明,通常为 ["pull", "resolve"]

内置 registry addon 的配置(localhost:32000):

server = "http://localhost:32000"

[host."http://localhost:32000"]
  capabilities = ["pull", "resolve"]

⚠️ 修改 hosts.toml 后需 snap restart microk8s 使 containerd 重新加载;部分国内加速端点路径前缀会变化(实测曾出现 404),请以加速服务实际声明为准。

6.2 准入控制与客户端配置

准入控制配置文件:

cat /var/snap/microk8s/current/args/admission-control-config-file.yaml

实测回显:

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: EventRateLimit
    path: eventconfig.yaml

事件限流参数(eventconfig.yaml):

apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
  - type: Server
    qps: 5000
    burst: 20000

kubectl 客户端环境文件:

cat /var/snap/microk8s/current/args/kubectl-env

实测回显:

export KUBECONFIG=$SNAP_DATA/credentials/client.config

💡 kubectl-env 为 microk8s kubectl 指定默认 kubeconfig;如需用系统 kubectl,可 microk8s config > /root/.kube/config 导出后使用。

七、生产环境配置模板

以下为 16GB 内存、SSD 磁盘的单主 + 多 worker 生产形态推荐配置要点(直接落到对应参数文件即可)。

配置目标文件推荐写法
API 端口kube-apiserver--secure-port=16443
授权模式kube-apiserver生产启用 RBAC(microk8s enable rbac)后由集群角色控制
Pod / Service 网段cni-env + kube-proxy + kube-controller-manager按实际规划统一为 10.1.0.0/16 / 10.152.183.0/24
节点驱逐阈值kubelet--eviction-hard="memory.available<200Mi,nodefs.available<2Gi,imagefs.available<2Gi"
镜像加速certs.d/docker.io/hosts.toml填写企业内网镜像端点
代理containerd-envHTTPS_PROXY=http://user:pass@proxy:3128 + NO_PROXY=10.1.0.0/16,10.152.183.0/24
高可用域ha-conf多控制面时按物理机架设置 failure-domain
运行时安全隔离containerd-template.toml保留 kata handler,按需用 RuntimeClass 指定

修改后统一重启与验证:

snap restart microk8s
microk8s status --wait-ready
microk8s kubectl get nodes

预期结果:节点全部 Ready,microk8s status 显示 microk8s is running。

八、常见问题(FAQ)

Q1:改了参数文件为什么不生效?

定位:参数文件在组件启动时读取一次,运行中修改不会热更新。

解决:snap restart microk8s(或 snap stop microk8s + snap start microk8s)后重新读取参数;再用 2.4 节命令验证。

Q2:microk8s stop 报 "acting as a node in a cluster"?

定位:节点已加入集群,MicroK8s 要求用 snap 层命令管理服务。

解决:改用 snap stop microk8s 与 snap start microk8s。

Q3:参数文件里的 ${SNAP_DATA} 是什么,需要替换吗?

定位:这是 snapd 的变量语法,由 snapd 在启动时自动展开为 /var/snap/microk8s/current。

解决:不需要手工替换,保持原样即可;${SNAP_COMMON} 展开为 /var/snap/microk8s/common。

Q4:snapshotter 显示 native 而不是 overlayfs?

定位:MicroK8s 依据 SNAP_COMMON 所在文件系统自动选择快照器,嵌套 overlayfs 环境会退化为 native。

解决:功能不受影响;如需强制 overlayfs,编辑 containerd-template.toml 的 snapshotter 行后重启 MicroK8s。

Q5:如何为 containerd 配置代理拉取镜像?

定位:containerd 的环境变量由 containerd-env 提供。

解决:在 containerd-env 中写入 HTTPS_PROXY 与 NO_PROXY(含 Pod/Service 网段),snap stop microk8s && snap start microk8s 生效,用 systemctl show snap.microk8s.daemon-containerd -p Environment 复核。

九、参考链接