在 Fedora 上装 k3s:单机集群与国内加速
想在 Fedora 上跑 Kubernetes,先要知道一件事:官方仓库里没有 k3s,也没有 kind。
dnf search --available kind k3s没有任何结果。所以只能走上游安装脚本,这就更需要配国内镜像。
用国内镜像装 k3s
Section titled “用国内镜像装 k3s”k3s 官方提供了一个国内镜像站,安装脚本与二进制都走它:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh -o k3s-install.shls -l k3s-install.sh38251脚本下来后带镜像参数执行:
sudo INSTALL_K3S_MIRROR=cn sh k3s-install.sh安装过程会依次做这些事:
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env[INFO] systemd: Creating service file /etc/systemd/system/k3s.service[INFO] systemd: Enabling k3s unitCreated symlink '/etc/systemd/system/multi-user.target.wants/k3s.service' → '/etc/systemd/system/k3s.service'.[INFO] systemd: Starting k3sk3s 自带 systemd 服务,装完就是 active:
systemctl is-active k3sk3s --versionactivek3s version v1.36.5+k3s1 (3dd98cc5)第一次 kubectl 会遇到 permission denied
Section titled “第一次 kubectl 会遇到 permission denied”直接跑 kubectl get nodes 会失败:
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied因为 kubeconfig 是 root 独占的:
ls -l /etc/rancher/k3s/k3s.yaml-rw-------. root root两个解法,任选其一。
一、用 sudo(最快)
sudo kubectl get nodesNAME STATUS ROLES AGE VERSIONfd45-repo Ready control-plane 76s v1.36.5+k3s1二、把 kubeconfig 拷到用户目录(长期用)
mkdir -p ~/.kubesudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/configsudo chown $USER ~/.kube/configkubectl get nodes集群里默认有什么
Section titled “集群里默认有什么”sudo kubectl get pods -ANAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-7cfb7bc9c7-ckx4n 0/1 ContainerCreating 0 71skube-system helm-install-traefik-crd-b8hss 0/1 ContainerCreating 0 71skube-system helm-install-traefik-hwhd4 0/1 ContainerCreating 0 71s刚起来时是 ContainerCreating,因为 k3s 在用容器编排自己——它需要先拉起 containerd 里的系统组件(CoreDNS、Traefik ingress)。
等一两分钟再看就变成 Running:
watch -n 5 sudo kubectl get pods -A| 组件 | 作用 |
|---|---|
coredns | 集群内 DNS |
traefik | 默认 ingress controller |
local-path-provisioner | 默认 StorageClass |
metrics-server | kubectl top 依赖它 |
k3s 把这些全打在一个 ~70 MB 的二进制里,所以比 kubeadm 那套轻得多,单机 4 GB 内存就能跑。
跑一个工作负载
Section titled “跑一个工作负载”sudo kubectl create deployment hello --image=nginxsudo kubectl expose deployment hello --port=80 --type=NodePortsudo kubectl get svc helloNodePort 会分配一个 30000-32767 的端口,用节点的 IP 加端口访问。
k3s 装了个卸载脚本:
sudo /usr/local/bin/k3s-uninstall.sh它会停服务、删 systemd 单元、清理 /var/lib/rancher/k3s 与容器数据。先确认没有需要保留的工作负载。
为什么不推荐 kind
Section titled “为什么不推荐 kind”kind 需要先有 Docker 或 Podman 作为”节点容器”的运行时,在 Fedora 上等于多一层。单机实验直接用 k3s 更省事:
| 方案 | 依赖 | 适合 |
|---|---|---|
| k3s(本文) | 无,自带 containerd | 单机实验、边缘、轻量生产 |
| kind | Docker/Podman | CI 里临时集群、测试多节点拓扑 |
| minikube | 驱动(podman/docker/kvm) | 需要完整 Kubernetes 特性验证 |
| 现象 | 原因 |
|---|---|
kubectl: permission denied 读 kubeconfig | 文件 0600 root,用 sudo 或拷到 ~/.kube/config |
Pod 一直 ContainerCreating | 还在拉镜像或初始化,等 1-2 分钟再看 |
| 拉镜像慢/失败 | containerd 没配镜像加速,见国内加速源 |
| 装完内存吃紧 | 至少 2 GB 空闲,4 GB 更稳 |
k3s 反复重启 | 看 journalctl -u k3s -n 50,常见是端口 6443 被占 |
- Podman 上手 — 容器基础
- Containerfile 与构建 — 自己做镜像
- 国内加速源 — 镜像站与 registry 加速
- 防火墙 firewalld — NodePort 放行
- 官方:k3s 文档