诗筝彩绮
诗筝彩绮
发布于 2026-07-10 / 20 阅读
0
0

在 Arch Linux 安装 Kubernetes

kubeadm + containerd + calico

完整安装流程

0. 清理旧环境(非常重要)

如果你之前用 Docker 试过 Kubernetes,那必须先完全移除相关配置

  • 停止 kubelet、Docker、cri-dockerd(如果有)
sudo systemctl stop kubelet
sudo systemctl stop docker
sudo systemctl stop cri-docker cri-docker.socket 2>/dev/null
  • 移除 cri-dockerd(如果有)
yay -Rns cri-dockerd-bin
  • 移除 Docker(可选)
sudo pacman -Rns docker docker-cli docker-buildx 2>/dev/null
  • 重置 kubeadm(如果之前尝试过)
sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d
sudo rm -rf /etc/kubernetes

1. 安装 Kubernetes 组件(AUR 官方二进制版)

yay -S kubeadm-bin kubelet-bin kubectl-bin

2. 安装 containerd(Kubernetes 推荐运行时)

sudo pacman -S containerd

3. 配置 containerd(必须,否则 kubeadm 会卡死)

生成默认配置

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

编辑 /etc/containerd/config.toml

  • 找到:
SystemdCgroup = false
  • 改成:
SystemdCgroup = true
  • 若未找到 SystemdCgroup = false

    • 则在 [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options] 配置下
    • 添加 SystemdCgroup = true 配置项
  • 这是 kubeadm 官方要求的 cgroup driver

重启 containerd

sudo systemctl enable --now containerd
sudo systemctl restart containerd

4. 关闭 swap(kubeadm 必须)

关闭 swap

sudo swapoff -a

永久禁用

  • 注释掉 swap 行
sudo vim /etc/fstab
  • 或者去掉 swap 行
sudo sed -i '/swap/d' /etc/fstab

验证修改

cat /proc/swaps
  • 输出内容必须为空

5. 启动 kubelet(它会报错,正常)

sudo systemctl enable --now kubelet
  • kubelet 现在会循环报错,因为还没 init 这完全正常

6. 初始化 Kubernetes(使用 containerd 的 CRI)

pod 网络段必须与 Calico 一致:192.168.0.0/16

执行

sudo kubeadm init \
  --cri-socket=unix:///run/containerd/containerd.sock \
  --pod-network-cidr=192.168.0.0/16
  • 完成后会看到
Your Kubernetes control-plane has initialized successfully!
  • 这就表示成功

7. 配置 kubectl(普通用户使用)

配置 kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

验证配置

kubectl get nodes
  • 节点是 NotReady(正常,因为 CNI 还没装)

8. 安装 Calico 网络

Calico 推荐 IP 池为 192.168.0.0/16(我们 init 时也用了这个)

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/calico.yaml

等几分钟

kubectl get pods -n kube-system
kubectl get nodes
  • 当所有 pods 变成 Running,节点变成 Ready 后,说明 Calico 已经生效,集群完全正常

完成!你现在有一个完全干净、稳定的 kubeadm + containerd + Calico 集群

可视化界面

1. 使用官方 Web UI:Kubernetes Dashboard

安装 Kubernetes 专用包管理器

sudo pacman -S helm 

部署 Dashboard

  • 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
  • 安装 Dashboard
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

创建管理员用户(必须)

  • 创建配置文件 dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
  • 应用配置
kubectl apply -f dashboard-admin.yaml

获取登录 Token

kubectl -n kubernetes-dashboard create token admin-user 
  • 复制这个 Token

启动本地代理(可选,推荐)

kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443 

打开 Web UI

  • 很多代理 / 科学上网客户端会劫持 https,然后自己去解析域名
  • 对于 localhost 或 10.x.x.x 这种地址,有些代理会处理得很奇怪,导致 “name resolution failed”
  • 可以尝试关掉 代理插件 / 系统代理 再访问
  • 浏览器打开 https://localhost:8443

    • 粘贴 Token 登录即可
  • 如果不启动本地代理,则先使用以下命令查看 kubernetes-dashboard-kong-proxyCLUSTER-IP

    • 浏览器打开 https://<CLUSTER-IP>:443
      • <CLUSTER-IP> 换成 kubernetes-dashboard-kong-proxyCLUSTER-IP
    • 粘贴 Token 登录即可
kubectl -n kubernetes-dashboard get svc

2. 使用 Lens(可选,推荐)

Lens 是一款可视化桌面应用,类似于 docker-desktop

安装应用

yay -S lens-bin
  • 注册并登录账户后即可使用

命令行容器管理工具

在 Kubernetes 环境下,使用 Docker 风格的命令,管理给 containerd 用的镜像

1. 安装 nerdctl

yay -S nerdctl

2. 使用 nerdctl

常用功能

功能nerdctldocker
列出容器nerdctl psdocker ps
拉镜像nerdctl pulldocker pull
构建镜像nerdctl builddocker build
运行容器nerdctl rundocker run
查看日志nerdctl logsdocker logs
推送镜像nerdctl pushdocker push

还有更多的功能,Docker 命令怎么写,nerdctl 命令就怎么写

本地构建并使用镜像

nerdctl build -t myimage:latest .
kubectl apply ...
  • 镜像必须在 containerd 的 k8s.io namespace 下,k8s 才能使用

查看 containerd namespace(重要概念)

containerd 支持多 namespace

  • k8s 默认使用:k8s.io
  • 列出 namesapce
nerdctl namespace ls
  • 切换 namespace(非常重要)
nerdctl -n k8s.io images
nerdctl -n k8s.io ps
  • 把镜像直接放进 k8s 使用
nerdctl -n k8s.io build -t myimage:v1 .
  • 把已经 build 好的镜像转移到 k8s.io
nerdctl save -o hello.tar hello:v1
nerdctl -n k8s.io load -i hello.tar

常见验证命令

查看控制平面是否全部正常

kubectl get pods -n kube-system -o wide

查看节点状态

kubectl get nodes -o wide

测试 pod 网络

kubectl run test --image=busybox -it -- sh
# 在 Pod 中:
ping 8.8.8.8

评论