CentOS 8 安装 Kubernetes(MicroK8s)集群指南
在 CentOS 8 上使用 MicroK8s v1.35.6 从零搭建 Kubernetes 集群:snapd 安装、MicroK8s 启动、多节点 add-node 组网、NodePort 访问验证与卸载,命令与回显实测验证。
CentOS 8 安装 Kubernetes(MicroK8s)集群指南
目标:在 CentOS 8 服务器上,用 MicroK8s(Canonical 出品的轻量级 Kubernetes 发行版,以 snap 包交付、内置 containerd 运行时与 calico 网络)从零搭建一套「1 个主节点 + 1 个 worker 节点」的 Kubernetes v1.35.6 集群,覆盖 snapd 安装、MicroK8s 安装与启动、集群就绪验证、多运行时方案(内置 containerd / 快照器 / kata / nvidia 运行时 / CRI-O 备选)、通过
add-node把 worker 节点加入集群、以及 nginx 示例应用 NodePort 访问验证。文中所有命令与回显均在 CentOS Linux release 8.4.2105(内核 6.8.0-138-generic)实测通过。
一、环境信息
- 操作系统:CentOS Linux release 8.4.2105 / x86_64(内核 6.8.0-138-generic)
- MicroK8s:v1.35.6 revision 9072(snap 通道 1.35/stable,发布者 canonical)
- Kubernetes:v1.35.6;客户端 kubectl v1.35.6(Kustomize v5.7.1)
- 运行时:内置 containerd v2.1.6(MicroK8s 自带,随 snap 交付)
- 数据存储:k8s-dqlite(MicroK8s 默认轻量数据存储,监听 127.0.0.1:19001)
- CNI 网络:calico v3.29.3(Pod 网段 10.1.0.0/16,Service 网段 10.152.183.0/24,集群 DNS 10.152.183.10,域名 cluster.local)
- API Server:https://<主节点IP>:16443
- 集群形态:1 主节点 + 1 worker 节点
- kubeconfig context:microk8s
- 示例账号:以 root 登录(示例密码 q1w2e3r4,生产环境请按安全规范设置强密码)
节点规划:
| 节点角色 | 节点名 | 内网 IP | 说明 |
|---|---|---|---|
| 主节点 | microk8s-c8-main | 172.18.0.3 | 承担 control-plane 与 datastore 引导 |
| worker1 | microk8s-c8-worker1 | 172.18.0.5 | 工作节点,由主节点 add-node 加入 |
💡 MicroK8s 使用「单节点即集群」的设计:一个节点安装完成即为一个可用的单节点集群;后续用
microk8s add-node/microk8s join水平扩展 worker 节点组。
二、MicroK8s 简介与版本选型
MicroK8s 由 Canonical 维护,是把 Kubernetes 控制面与运行时打包进一个 snap 包的轻量级发行版,特点:
- 一体化交付:一个 snap 包内含 kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet(打包为 kubelite 进程)、containerd、k8s-dqlite 数据存储与 CNI。
- 安装极简:一条
snap install命令即可完成安装,无需逐组件编译或手动初始化。 - 自动升级:跟随 snap 通道自动刷新,版本升级只需切换通道。
- 插件化 addon:dns、storage、ingress、metrics-server、dashboard 等能力以 addon 形式一键启用。
版本选型对照:
| snap 通道 | MicroK8s 版本 | Kubernetes 版本 | 内置 containerd | 说明 |
|---|---|---|---|---|
| 1.34/stable | v1.34.x | 1.34.x | 2.x | 上一稳定版 |
| 1.35/stable | v1.35.6 | v1.35.6 | 2.1.6 | 本指南实测版本 |
| latest/stable | 跟随最新 | 跟随最新 | 2.x | 尝鲜,不建议生产 |
💡 生产环境建议固定
1.35/stable通道,避免latest/stable随上游变动。
三、环境准备
3.1 系统要求
- x86_64 架构的 CentOS 8 服务器,root 或具备 sudo 权限;
- 内存建议 ≥ 4 GB(单节点控制面 + 工作负载),磁盘 ≥ 20 GB;
- 内核需支持 cgroup v2、overlayfs(或由 MicroK8s 自动选择 native 快照器);
- 服务器可访问 snap 商店(或使用预置的本地 snap 包)。
3.2 修复 CentOS 8 软件源(EOL 后源失效)
CentOS 8 已停止维护(EOL),默认 mirrorlist.centos.org 源不可用,需切换为 vault.centos.org 归档源,否则安装 snapd 依赖会失败。修改 /etc/yum.repos.d/CentOS-Base.repo:
sed -i 's|mirror.centos.org|vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's|^#baseurl=http://vault.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
dnf clean all && dnf makecache
💡 执行后出现
Metadata cache created.即表示缓存刷新成功。
3.3 安装 snapd
MicroK8s 以 snap 形式交付,需先安装 snapd。CentOS 8 的 snapd 位于 EPEL 仓库,先安装 EPEL:
dnf install -y epel-release
若默认 EPEL 源不可达,改用镜像源安装:
dnf install -y https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-8.noarch.rpm
安装 snapd 与基础依赖:
dnf install -y snapd conntrack socat iptables curl
启用 snapd 并创建 snap 挂载点软链接(classic 权限 snap 需要 /snap 路径):
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
实测版本回显:
snapd.x86_64 2.77.1-0.el8 @epel
3.4 内核与网络前置
加载网桥过滤模块并开启转发(calico 与 kube-proxy 依赖):
modprobe br_netfilter
cat > /etc/sysctl.d/99-microk8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
⚠️ kube-proxy 需要读写
/proc/sys/net/netfilter/nf_conntrack_max;若该文件在部分受限内核环境中不可写,会持续报open ... nf_conntrack_max: permission denied。生产服务器默认可写,无需额外处理。
关闭 swap(Kubernetes 要求):
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
四、安装 MicroK8s
4.1 安装 snap 包
固定 1.35/stable 通道安装 MicroK8s:
snap install microk8s --classic --channel=1.35/stable
实测回显:
microk8s (1.35/stable) v1.35.6 from Canonical** installed
安装完成后确认版本:
microk8s version
MicroK8s v1.35.6 revision 9072
查询 snap 包信息:
snap list microk8s
Name Version Rev Tracking Publisher Notes
microk8s v1.35.6 9072 1.35/stable canonical** classic
4.2 加入 microk8s 用户组(可选)
为避免每次执行都带 sudo,把当前用户加入 microk8s 组:
usermod -a -G microk8s root
newgrp microk8s
💡 若以 root 运行则无需此步;
microk8s命令默认需要 root 或 microk8s 组成员权限。
五、启动与初始化集群
5.1 启动命令
snap 安装后服务通常已自动启动;如需显式启动:
microk8s start
⚠️ 若节点已作为集群一员(执行过
join),microk8s start会提示This MicroK8s deployment is acting as a node in a cluster. Use 'snap start microk8s' to start services on this node.,此时应改用snap start microk8s。
5.2 就绪等待
等待集群进入 ready 状态(最长 60 秒):
microk8s status --wait-ready --timeout 60
首次启动会初始化 k8s-dqlite 数据存储、写入证书、拉起控制面并部署 calico 与 CoreDNS,通常 1~2 分钟内完成。
5.3 数据存储与初始化说明
MicroK8s 默认使用 k8s-dqlite 作为数据存储(而非 etcd),datastore 主节点监听 127.0.0.1:19001。kube-apiserver 通过本地 unix socket kine.sock:12379 访问该存储,因此单节点场景无需额外配置 etcd 集群。
六、集群就绪验证
6.1 查看集群状态
microk8s status
实测回显:
microk8s is running
high-availability: no
datastore master nodes: 172.18.0.3:19001
datastore standby nodes: none
addons:
enabled:
dns # (core) CoreDNS
ha-cluster # (core) Configure high availability on the current node
helm # (core) Helm - the package manager for Kubernetes
helm3 # (core) Helm 3 - the package manager for Kubernetes
disabled:
cert-manager # (core) Cloud native certificate management
cis-hardening # (core) Apply CIS K8s hardening
community # (core) The community addons repository
dashboard # (core) The Kubernetes dashboard
gpu # (core) Alias to nvidia add-on
host-access # (core) Allow Pods connecting to Host services smoothly
hostpath-storage # (core) Storage class; allocates storage from host directory
ingress # (core) Ingress controller for external access
kube-ovn # (core) An advanced network fabric for Kubernetes
mayastor # (core) OpenEBS MayaStor
metallb # (core) Loadbalancer for your Kubernetes cluster
metrics-server # (core) K8s Metrics Server for API access to service metrics
minio # (core) MinIO object storage (DEPRECATED). This addon is deprecated and will be completely removed in the upcoming versions
nvidia # (core) NVIDIA hardware (GPU and network) support
observability # (core) A lightweight observability stack for logs, traces and metrics
prometheus # (core) Prometheus operator for monitoring and logging
rbac # (core) Role-Based Access Control for authorisation
registry # (core) Private image registry exposed on localhost:32000
rook-ceph # (core) Distributed Ceph storage using Rook
storage # (core) Alias to hostpath-storage add-on, deprecated
💡
high-availability: no表示当前为单数据存储节点;dns、ha-cluster、helm、helm3为默认启用的 addon。
6.2 查看节点
microk8s kubectl get nodes -o wide
实测回显:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
microk8s-c8-main Ready <none> 50m v1.35.6 172.18.0.3 <none> CentOS Linux 8 6.8.0-138-generic containerd://2.1.6
microk8s-c8-worker1 Ready <none> 4m33s v1.35.6 172.18.0.5 <none> CentOS Linux 8 6.8.0-138-generic containerd://2.1.6
💡
CONTAINER-RUNTIME显示containerd://2.1.6,即节点使用内置 containerd 作为 CRI 运行时。
6.3 查看系统 Pod
microk8s kubectl get pods -A -o wide
实测回显:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default nginx-demo-7cd774bfdd-zj8j9 1/1 Running 0 50s 10.1.26.193 microk8s-c8-worker1 <none> <none>
kube-system calico-kube-controllers-676854dc5d-8pgrl 1/1 Running 0 18m 10.1.162.129 microk8s-c8-main <none> <none>
kube-system calico-node-4zvxn 1/1 Running 0 4m33s 172.18.0.5 microk8s-c8-worker1 <none> <none>
kube-system calico-node-t5dqx 1/1 Running 0 5m11s 172.18.0.3 microk8s-c8-main <none> <none>
kube-system coredns-78894c95f4-jn974 1/1 Running 0 18m 10.1.162.130 microk8s-c8-main <none> <none>
6.4 查看服务与集群信息
microk8s kubectl get svc -A
microk8s kubectl cluster-info
实测回显:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 50m
kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 50m
Kubernetes control plane is running at https://127.0.0.1:16443
CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
6.5 获取 kubeconfig
microk8s config
该命令输出标准 kubeconfig(context 名为 microk8s),如需导出到文件供普通 kubectl 使用:
microk8s config > /root/.kube/config
⚠️ kubeconfig 内含集群证书与客户端私钥,属敏感信息,请按最小权限妥善保管,切勿外泄。
七、多运行时方案
MicroK8s 的运行时能力由内置的 containerd 承载:默认运行时为 runc,同时在 containerd 配置模板中预置了多个运行时处理器(runtime handler),可通过 RuntimeClass 按工作负载选择。
7.1 内置 containerd(默认,实测)
MicroK8s 随 snap 交付 containerd v2.1.6,作为唯一的 CRI 运行时。查看运行时版本与插件:
microk8s ctr version
实测回显:
Client:
Version: v2.1.6
Revision: 9c005f05ff1da3421bbe069e7297e0a98ebe214c
Go version: go1.24.13
Server:
Version: v2.1.6
Revision: 9c005f05ff1da3421bbe069e7297e0a98ebe214c
UUID: 836873df-b532-4c29-8ee4-432f7e41ef70
查看 CRI 运行时插件状态:
microk8s ctr plugins ls | grep -iE "cri|runtime|snapshotter"
实测回显:
io.containerd.snapshotter.v1 native linux/amd64 ok
io.containerd.snapshotter.v1 overlayfs linux/amd64 ok
io.containerd.cri.v1 runtime linux/amd64 ok
io.containerd.grpc.v1 cri - ok
7.2 运行时候选:runc / kata / nvidia
在 /var/snap/microk8s/current/args/containerd-template.toml 中,MicroK8s 预置了三个运行时处理器:
| 运行时处理器 | runtime_type | 二进制 | 用途 |
|---|---|---|---|
runc | io.containerd.runc.v2 | runc | 默认运行时,通用工作负载 |
nvidia-container-runtime | io.containerd.runc.v2 | nvidia-container-runtime | GPU 工作负载 |
kata | io.containerd.kata.v2 | kata-runtime | 强隔离安全运行时 |
默认运行时为 runc:
grep -nE "default_runtime_name|runtime_type|SystemdCgroup" /var/snap/microk8s/current/args/containerd.toml
实测回显:
46: default_runtime_name = "runc"
53: runtime_type = "io.containerd.runc.v2"
57: runtime_type = "io.containerd.runc.v2"
63: runtime_type = "io.containerd.kata.v2"
7.3 快照器方案(overlayfs / native)
containerd 的快照器由 MicroK8s 依据节点 SNAP_COMMON 所在文件系统自动选择:普通文件系统选 overlayfs,受限环境(如嵌套文件系统)选 native。查看当前生效值:
grep -n "snapshotter" /var/snap/microk8s/current/args/containerd.toml
39: snapshotter = "native"
如需强制指定快照器,编辑模板文件 /var/snap/microk8s/current/args/containerd-template.toml 中 snapshotter 一行后重启 MicroK8s:
microk8s stop
# 编辑 containerd-template.toml 的 snapshotter 行,如改为 "overlayfs"
microk8s start
💡 快照器决定镜像分层落盘方式;
overlayfs性能更好,native兼容性更强。
7.4 启用 Kata 安全运行时
Kata 运行时处理器已在 containerd 模板中预置。使用前需在服务器安装 kata-runtime 二进制,并在 /var/snap/microk8s/current/args/containerd-env 中设置 KATA_PATH 指向其安装目录:
# 在 containerd-env 中设置(示例)
KATA_PATH=/opt/kata/bin
随后按运行时创建 RuntimeClass 并在 Pod 中指定:
cat > kata-runtimeclass.yaml <<EOF
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata
handler: kata
EOF
microk8s kubectl apply -f kata-runtimeclass.yaml
apiVersion: v1
kind: Pod
metadata:
name: kata-demo
spec:
runtimeClassName: kata
containers:
- name: app
image: nginx:alpine
⚠️ kata-runtime 依赖宿主机虚拟化能力(KVM 等);未安装 kata 二进制时,指定
runtimeClassName: kata的 Pod 将拉起失败。
7.5 CRI-O 备选方案
MicroK8s 官方仅支持内置 containerd 作为 CRI 运行时,不支持把节点 CRI 直接切换为 CRI-O。如确有 CRI-O 需求(例如迁移既有 CRI-O 运维体系),可行路径是:在不使用 MicroK8s 原生运行时的前提下,自行在服务器安装 CRI-O,并通过 kubelet 的 --container-runtime-endpoint 指向 CRI-O 的 socket。该方式超出 MicroK8s 官方支持范围,需自行处理 CRI-O 版本与 Kubernetes 的兼容矩阵、CNI 配置与镜像仓库配置。
通用参考步骤(非 MicroK8s 原生,仅作对照):
# 以 CRI-O 官方仓库安装(示例,具体版本按 Kubernetes 版本匹配)
curl -L -o /etc/yum.repos.d/cri-o.repo https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.35/rpm/cri-o.repo
dnf install -y cri-o
systemctl enable --now crio
然后在 kubelet 配置中把运行时端点指向 CRI-O:
--container-runtime-endpoint=unix:///var/run/crio/crio.sock
⚠️ 上述 CRI-O 路径并非 MicroK8s 官方支持方案,仅用于能力对照;生产环境建议直接采用 MicroK8s 内置 containerd(或 kata 安全运行时)。
7.6 运行时方案对照与选择建议
| 方案 | 运行时处理器 | 是否官方支持 | 隔离级别 | 适用场景 |
|---|---|---|---|---|
| 内置 containerd(runc) | runc | 是(默认) | 进程级隔离 | 通用工作负载,推荐默认 |
| native 快照器 | —(快照器) | 是 | 兼容优先 | 受限文件系统环境 |
| kata 安全运行时 | kata | 是(需装二进制) | 轻量虚拟机隔离 | 多租户、强隔离场景 |
| nvidia 运行时 | nvidia-container-runtime | 是(需装驱动) | 进程级 + GPU 直通 | GPU 训练/推理 |
| CRI-O(自建) | —(外部 CRI) | 否 | 进程级隔离 | 既有 CRI-O 体系迁移 |
选择建议:无特殊需求一律使用内置 containerd 默认运行时;需强隔离选 kata;GPU 场景启用 nvidia 运行时;CRI-O 仅作为对照参考。
八、加入 worker 节点组
8.1 主节点生成加入令牌
在主节点执行 add-node,生成供其他节点加入的连接串:
microk8s add-node --token-ttl 3600
实测回显:
From the node you wish to join to this cluster, run the following:
microk8s join 172.18.0.3:25000/01d181979cb2dba73816f2ce5f3f8d82/a065471a4413
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 172.18.0.3:25000/01d181979cb2dba73816f2ce5f3f8d82/a065471a4413 --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 172.18.0.3:25000/01d181979cb2dba73816f2ce5f3f8d82/a065471a4413
仅输出连接串(便于脚本化):
microk8s add-node --token-ttl 3600 --format short
microk8s join 172.18.0.3:25000/f7ac587c820985599f07108b326be229/2093f48e808a
💡
--token-ttl 3600表示令牌 3600 秒内有效;--token-ttl -1表示令牌仅可一次性使用。
8.2 worker 节点准备
在准备加入的 worker 服务器上,按第三章完成 snapd 与内核前置(br_netfilter、关闭 swap),并安装同版本 MicroK8s:
snap install microk8s --classic --channel=1.35/stable
⚠️ worker 节点与主节点的 MicroK8s 大版本应保持一致(同为 1.35/stable),避免版本不一致导致加入失败。
8.3 执行加入
在 worker 节点执行主节点给出的 join 命令;若作为纯工作节点加入,追加 --worker:
microk8s join 172.18.0.3:25000/01d181979cb2dba73816f2ce5f3f8d82/a065471a4413 --worker
实测回显:
Contacting cluster at 172.18.0.3
The node has joined the cluster and will appear in the nodes list in a few seconds.
This worker node gets automatically configured with the API server endpoints.
If the API servers are behind a loadbalancer please set the '--refresh-interval' to '0s' in:
/var/snap/microk8s/current/args/apiserver-proxy
and replace the API server endpoints with the one provided by the loadbalancer in:
/var/snap/microk8s/current/args/traefik/provider.yaml
Successfully joined the cluster.
⚠️ 加入过程中 MicroK8s 服务会被重启;若加入后服务未自动拉起,在 worker 节点执行
snap start microk8s启动。
8.4 验证多节点
回到主节点查看节点列表:
microk8s kubectl get nodes -o wide
实测回显(2 节点全部 Ready):
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
microk8s-c8-main Ready <none> 50m v1.35.6 172.18.0.3 <none> CentOS Linux 8 6.8.0-138-generic containerd://2.1.6
microk8s-c8-worker1 Ready <none> 4m33s v1.35.6 172.18.0.5 <none> CentOS Linux 8 6.8.0-138-generic containerd://2.1.6
确认 calico-node 在每个节点均运行:
microk8s kubectl get daemonset -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system calico-node 2 2 2 2 2 kubernetes.io/os=linux 51m
8.5 移除节点
在主节点移除一个 worker 节点:
microk8s remove-node microk8s-c8-worker1
💡 关键
--force可强制移除不可达节点(microk8s remove-node <node> --force);在 worker 节点本地也可执行microk8s leave主动脱离集群。
九、示例应用部署验证(nginx NodePort)
9.1 创建 Deployment 与 Service
microk8s kubectl create deployment nginx-demo --image=nginx:alpine
microk8s kubectl expose deployment nginx-demo --type=NodePort --port=80
实测回显:
deployment.apps/nginx-demo created
service/nginx-demo exposed
9.2 验证访问
查看工作负载与 NodePort:
microk8s kubectl get deploy,rs,pods -o wide
microk8s kubectl get svc nginx-demo
实测回显:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-demo-7cd774bfdd-zj8j9 1/1 Running 0 31s 10.1.26.193 microk8s-c8-worker1 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-demo NodePort 10.152.183.104 <none> 80:32230/TCP 26s
通过节点 IP + NodePort 访问:
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:32230
curl -s http://127.0.0.1:32230 | head -4
实测回显:
HTTP 200
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
💡 返回 HTTP 200 且输出 nginx 欢迎页,说明集群网络(calico + kube-proxy)与 NodePort 转发链路工作正常。
9.3 清理示例应用
microk8s kubectl delete service nginx-demo
microk8s kubectl delete deployment nginx-demo
十、常用运维操作
10.1 启用与禁用 addon
microk8s enable dashboard
microk8s enable metrics-server
microk8s disable dashboard
💡 具体 addon 及参数用法可用
microk8s enable <addon> -- --help查看。
10.2 停止、启动与重置
microk8s stop
microk8s start
重置节点到初始状态(会禁用全部 addon 并重新初始化,--destroy-storage 默认 true):
microk8s reset
10.3 诊断与日志
microk8s inspect
journalctl -u snap.microk8s.daemon-kubelite -n 50 --no-pager
journalctl -u snap.microk8s.daemon-containerd -n 50 --no-pager
💡
microk8s inspect会收集日志与跟踪信息并打包为 tar,便于问题上报。
十一、卸载 MicroK8s
停止服务并卸载 snap 包:
microk8s stop
snap remove microk8s
清理残留数据(如需彻底清除):
rm -rf /var/snap/microk8s
rm -rf /var/lib/snapd/snap/microk8s
十二、常见问题(FAQ)
Q1:microk8s status 显示 microk8s is not running 怎么办?
首次安装或加入集群后服务可能未自动拉起。执行 microk8s start;若节点已在集群中(acting as a node in a cluster),改用 snap start microk8s,再执行 microk8s status --wait-ready 等待就绪。
Q2:CentOS 8 安装 snapd 报源不可用?
CentOS 8 已 EOL,需按 3.2 节切换 vault.centos.org 归档源,并从 EPEL(或镜像源)安装 snapd。
Q3:节点一直 NotReady,如何排查?
依次检查系统 Pod 是否异常(microk8s kubectl get pods -A)、CNI 是否就绪(calico-node 是否 Running)、kubelet 日志(journalctl -u snap.microk8s.daemon-kubelite)。常见原因是镜像拉取失败或网络插件未初始化。
Q4:worker 节点加入后一直不出现?
确认 worker 能访问主节点 25000 端口;确认两节点 MicroK8s 版本一致;加入后在 worker 执行 snap start microk8s 确保服务运行。
Q5:如何让集群具备高可用(HA)?
单节点 high-availability: no。MicroK8s 的 HA 需要至少 3 个控制面节点,通过 microk8s add-node 生成令牌并在新节点执行不带 --worker 的 join(默认即控制面加入)组成 dqlite 多数派。
Q6:如何升级 MicroK8s 版本?
snap refresh microk8s --channel=1.36/stable 切换到目标通道;升级前建议备份数据并评估工作负载兼容性。
Q7:节点无法拉取镜像(网络受限)?
可为内置 containerd 配置镜像加速:在 /var/snap/microk8s/current/args/certs.d/<registry>/hosts.toml 中配置镜像端点,重启 MicroK8s 生效。
十三、参考链接
- MicroK8s 官方文档:https://microk8s.io/docs
- MicroK8s 安装指南:https://microk8s.io/docs/getting-started
- MicroK8s 集群(多节点):https://microk8s.io/docs/clustering
- MicroK8s addon 列表:https://microk8s.io/docs/addons