CentOS 8 安装 Kubernetes(MicroK8s)集群指南

在 CentOS 8 上使用 MicroK8s v1.35.6 从零搭建 Kubernetes 集群:snapd 安装、MicroK8s 启动、多节点 add-node 组网、NodePort 访问验证与卸载,命令与回显实测验证。

MicroK8sMicroK8sKubernetesk8s2026/10/12

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-main172.18.0.3承担 control-plane 与 datastore 引导
worker1microk8s-c8-worker1172.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/stablev1.34.x1.34.x2.x上一稳定版
1.35/stablev1.35.6v1.35.62.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二进制用途
runcio.containerd.runc.v2runc默认运行时,通用工作负载
nvidia-container-runtimeio.containerd.runc.v2nvidia-container-runtimeGPU 工作负载
kataio.containerd.kata.v2kata-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 生效。

十三、参考链接