kubeadm 是 kubernetes 1.28 最稳妥部署方式,需关闭 swap、firewalld 和 selinux,使用 containerd 1.7.x 并启用 systemdcgroup,初始化时指定 --cri-socket,搭配 calico v3.25 网络插件且确保 pod 网段一致。

kubeadm 是当前最稳妥、可复现的 Kubernetes 1.28 部署方式,不建议用二进制或脚本一键包——后者容易在证书、网络插件、containerd 配置上出错,且升级路径不清晰。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
必须先关掉 swap、firewalld 和 SELinux
Kubernetes 1.28 对运行时环境比旧版更严格,这几项不关,kubelet 直接报错退出,日志里反复出现 failed to run Kubelet: unable to load client CA file 或 cgroups v2 not supported(其实是被 SELinux 拦了):
- swapoff -a + 注释 /etc/fstab 中 swap 行(否则重启后复活)
- systemctl stop firewalld && systemctl disable firewalld
- setenforce 0 + 把 /etc/selinux/config 里 SELINUX=enforcing 改成 disabledcontainerd 版本要匹配 1.28
Kubernetes 1.28 不再支持 Docker Engine,只认containerd。官方推荐搭配 containerd 1.7.x(如 1.7.13),用 1.6.x 可能触发 failed to load plugin "io.containerd.grpc.v1.cri":
- 下载 containerd 二进制包(别用 yum 安装的老旧版本)
- 配置 /etc/containerd/config.toml 时,确认 SystemdCgroup = true 已启用(否则 kubelet 启动失败)
- 执行 systemctl restart containerd 后,用 crictl info 验证 CRI 接口是否 ready
kubeadm init 时必须指定容器运行时 socket
默认kubeadm init 会去找 /var/run/dockershim.sock,但你没装 Docker。漏掉这个参数,初始化卡在 [preflight] Running pre-flight checks:
- 正确命令是:kubeadm init --cri-socket /run/containerd/containerd.sock --kubernetes-version v1.28.2
- 如果用了自定义 Pod 网段(比如 --pod-network-cidr=10.244.0.0/16),必须和后续 Calico/Flannel 的配置一致,否则节点 NotReady
- 初始化成功后,kubeconfig 默认写在 /etc/kubernetes/admin.conf,别忘了 export KUBECONFIG=/etc/kubernetes/admin.confCalico v3.25 是目前最稳的网络插件
Kubernetes 1.28 去掉了PodSecurityPolicy,而 Calico v3.24 及更早版本依赖它,直接 kubectl apply -f calico.yaml 会报错 error when creating "calico.yaml": customresourcedefinitions.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" is forbidden:
- 必须用 Calico v3.25+(对应 Kubernetes 1.28 兼容)
- 下载 YAML 后,重点改两处:
- 找到 kind: Installation 下的 spec.calicoNetwork.ipPools,确保 cidr 和 kubeadm init 时的 --pod-network-cidr 一致
- 在 kind: Installation 下加一行 spec.hostNetwork: true(避免某些内核下 BGP 路由异常)
所有节点跑通 kubectl get nodes 显示 Ready 之前,最容易被忽略的是:master 节点默认不参与调度,但 calico-node DaemonSet 依赖 hostNetwork,如果没开 hostNetwork 或 containerd cgroup driver 不对,Node 就一直卡在 NotReady,此时 kubectl describe node 的 Events 里往往只有 “node is not ready” 这一句废话,得看 journalctl -u kubelet -n 100 才能找到真实原因。










