跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    在 Fedora 上装 k3s:单机集群与国内加速

    想在 Fedora 上跑 Kubernetes,先要知道一件事:官方仓库里没有 k3s,也没有 kind。

    Terminal window
    dnf search --available kind k3s

    没有任何结果。所以只能走上游安装脚本,这就更需要配国内镜像。

    k3s 从安装到节点 Ready,以及 kubeconfig 的 0600 权限问题

    k3s 官方提供了一个国内镜像站,安装脚本与二进制都走它:

    Terminal window
    curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh -o k3s-install.sh
    ls -l k3s-install.sh
    38251

    脚本下来后带镜像参数执行:

    Terminal window
    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 unit
    Created symlink '/etc/systemd/system/multi-user.target.wants/k3s.service' → '/etc/systemd/system/k3s.service'.
    [INFO] systemd: Starting k3s

    k3s 自带 systemd 服务,装完就是 active:

    Terminal window
    systemctl is-active k3s
    k3s --version
    active
    k3s 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 独占的:

    Terminal window
    ls -l /etc/rancher/k3s/k3s.yaml
    -rw-------. root root

    两个解法,任选其一。

    一、用 sudo(最快)

    Terminal window
    sudo kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    fd45-repo Ready control-plane 76s v1.36.5+k3s1

    二、把 kubeconfig 拷到用户目录(长期用)

    Terminal window
    mkdir -p ~/.kube
    sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
    sudo chown $USER ~/.kube/config
    kubectl get nodes
    Terminal window
    sudo kubectl get pods -A
    NAMESPACE NAME READY STATUS RESTARTS AGE
    kube-system coredns-7cfb7bc9c7-ckx4n 0/1 ContainerCreating 0 71s
    kube-system helm-install-traefik-crd-b8hss 0/1 ContainerCreating 0 71s
    kube-system helm-install-traefik-hwhd4 0/1 ContainerCreating 0 71s

    刚起来时是 ContainerCreating,因为 k3s 在用容器编排自己——它需要先拉起 containerd 里的系统组件(CoreDNS、Traefik ingress)。

    等一两分钟再看就变成 Running:

    Terminal window
    watch -n 5 sudo kubectl get pods -A
    组件作用
    coredns集群内 DNS
    traefik默认 ingress controller
    local-path-provisioner默认 StorageClass
    metrics-serverkubectl top 依赖它

    k3s 把这些全打在一个 ~70 MB 的二进制里,所以比 kubeadm 那套轻得多,单机 4 GB 内存就能跑。

    Terminal window
    sudo kubectl create deployment hello --image=nginx
    sudo kubectl expose deployment hello --port=80 --type=NodePort
    sudo kubectl get svc hello

    NodePort 会分配一个 30000-32767 的端口,用节点的 IP 加端口访问。

    k3s 装了个卸载脚本:

    Terminal window
    sudo /usr/local/bin/k3s-uninstall.sh

    它会停服务、删 systemd 单元、清理 /var/lib/rancher/k3s 与容器数据。先确认没有需要保留的工作负载。

    kind 需要先有 Docker 或 Podman 作为”节点容器”的运行时,在 Fedora 上等于多一层。单机实验直接用 k3s 更省事:

    方案依赖适合
    k3s(本文)无,自带 containerd单机实验、边缘、轻量生产
    kindDocker/PodmanCI 里临时集群、测试多节点拓扑
    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 被占