尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

从零搭建 Kubernetes 1.30 集群:基于 kubeadm 的完整部署与集群管理指南

从零搭建 Kubernetes 1.30 集群:基于 kubeadm 的完整部署与集群管理指南
📅 发布时间:2026/6/24 2:20:48

从零搭建 Kubernetes 1.30 集群:基于 kubeadm 的完整部署与集群管理指南

手把手教你用 kubeadm 部署生产级 K8s 集群,并掌握节点管理、命名空间与多集群切换


写在前面

Kubernetes 作为容器编排的事实标准,已经成为云原生时代的必备技能。本文基于Ubuntu 24.04和Kubernetes 1.30.2,使用官方推荐的kubeadm工具,从虚拟机模板准备到集群部署、网络插件安装,再到节点管理、命名空间与多集群切换,一条龙带你入门 K8s 运维。

如果你是:

  • 准备 CKA/CKAD 考试的考生
  • 想在生产环境自建集群的运维工程师
  • 刚接触 K8s 的开发者

这篇文章将是你绝佳的实战手册。


一、环境准备

1.1 节点规划

节点名称IP角色
master30.tz.cloud10.1.8.30master
worker31.tz.cloud10.1.8.31worker
worker32.tz.cloud10.1.8.32worker

1.2 硬件与软件

  • VMware Workstation 17
  • Ubuntu 24.04 LTS(最小化安装)
  • Kubernetes 1.30.2
  • containerd.io 1.7.20
  • nerdctl 1.7.7
  • Calico 网络插件 v3.30.7

虚拟机配置:2 CPU、4GB 内存、100GB 硬盘,NAT 网络。


二、基础系统配置(模板机)

为了后续克隆节点方便,我们先准备一台干净的模板机,完成所有通用配置。

2.1 安装与分区

  • 安装 Ubuntu 24.04 时,断开网络以避免自动更新拖慢安装。
  • 分区建议:/boot2GB,/剩余全部(90GB),不创建 swap。

2.2 配置软件源

使用华为云镜像加速:

cat>/etc/apt/sources.list.d/ubuntu.sources<<'EOF' Types: deb URIs: http://mirrors.huaweicloud.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg EOF

添加 containerd 官方源(用于安装 containerd.io):

curl-fsSLhttps://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg|gpg--dearmour-o/etc/apt/trusted.gpg.d/containerd.gpgecho"deb [arch=amd64] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu noble stable">/etc/apt/sources.list.d/docker-ce.list

添加 Kubernetes 1.30 源(阿里云):

curl-fsSLhttps://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key|gpg--dearmor-o/etc/apt/keyrings/kubernetes-apt-keyring.gpgecho"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /">/etc/apt/sources.list.d/kubernetes.list

2.3 安装基础软件包

aptupdate&&aptinstall-yvimlrzsz bash-completion open-vm-tools apt-transport-https sshpass

2.4 配置静态 IP(以 master 为例)

mkdir/etc/netplan/originmv/etc/netplan/*yaml /etc/netplan/origincat>/etc/netplan/00-static.yaml<<EOF network: ethernets: ens33: dhcp4: no addresses: - 10.1.8.30/24 routes: - to: default via: 10.1.8.2 nameservers: addresses: - 10.1.8.2 - 223.5.5.5 version: 2 EOFchmod600/etc/netplan/00-static.yaml netplan apply

2.5 配置主机名解析

cat<<'EOF'>>/etc/hosts###### kubernetes ##### 10.1.8.30 master30.tz.cloud master30 10.1.8.31 worker31.tz.cloud worker31 10.1.8.32 worker32.tz.cloud worker32 EOF

2.6 关闭 swap

swapoff-a&&sed-i'/^.*swap/d'/etc/fstabrm-f/swap.img

2.7 配置时间同步

aptinstall-ychrony systemctlenablechrony--nowtimedatectl set-timezone Asia/Shanghai

2.8 SSH 优化与免密

echo'UseDNS no'>>/etc/ssh/sshd_configecho'StrictHostKeyChecking no'>>/etc/ssh/ssh_config ssh-keygen-N''-f~/.ssh/id_rsa-trsa sshpass-ppassword ssh-copy-id root@localhost# 替换为实际密码

2.9 加载内核模块(IPVS + 网络)

aptinstall-yiptables ipvsadm ipset conntrack# 临时加载modprobe overlay br_netfilter modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc ip_vs_sh nf_conntrack# 永久生效cat>/etc/modules-load.d/k8s-net.conf<<EOF br_netfilter overlay ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc ip_vs_sh nf_conntrack EOF

2.10 配置内核参数

cat>/etc/sysctl.d/k8s.conf<<'EOF' net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 vm.swappiness=0 EOFsysctl-p/etc/sysctl.d/k8s.conf

三、安装 containerd 与客户端工具

3.1 安装 containerd.io

aptinstall-ycontainerd.io=1.7.20-1 cri-tools crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

生成默认配置并修改:

containerd config default>/etc/containerd/config.tomlsed-i's/SystemdCgroup = false/SystemdCgroup = true/'/etc/containerd/config.tomlsed-i's|sandbox_image = ".*"|sandbox_image = "registry.k8s.io/pause:3.9"|'/etc/containerd/config.toml

3.2 配置镜像加速(CRI 方式)

编辑/etc/containerd/config.toml,在[plugins."io.containerd.grpc.v1.cri".registry.mirrors]下添加:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.m.daocloud.io","https://docker.1ms.run","https://docker.xuanyuan.me"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] endpoint = ["https://k8s.m.daocloud.io","https://registry.cn-hangzhou.aliyuncs.com/google_containers"]

重启 containerd:

systemctl restart containerd

3.3 安装 nerdctl 和 CNI 插件

wgethttp://192.168.46.100/01.softwares/03.stage-3/nerdctl-1.7.7-linux-amd64.tar.gztar-xfnerdctl-1.7.7-linux-amd64.tar.gz-C/usr/bin/wgethttp://192.168.46.100/01.softwares/03.stage-3/cni-plugins-linux-amd64-v1.6.0.tgzmkdir-p/opt/cni/bintar-xfcni-plugins-linux-amd64-v1.6.0.tgz-C/opt/cni/bin

3.4 配置 nerdctl 镜像加速(原生 API)

nerdctl 不读取 CRI 的mirrors,需单独配置certs.d:

mkdir-p/etc/containerd/certs.d/docker.iocat>/etc/containerd/certs.d/docker.io/hosts.toml<<EOF server = "https://registry-1.docker.io" [host."https://09def58152000fc00ff0c00057bad7e0.mirror.swr.myhuaweicloud.com"] capabilities = ["pull", "resolve"] EOFmkdir-p/etc/containerd/certs.d/registry.k8s.iocat>/etc/containerd/certs.d/registry.k8s.io/hosts.toml<<EOF server = "https://registry.k8s.io" [host."https://k8s.m.daocloud.io"] capabilities = ["pull", "resolve"] [host."https://k8s.mirrorify.net"] capabilities = ["pull", "resolve"] [host."https://registry.cn-hangzhou.aliyuncs.com/google_containers"] capabilities = ["pull", "resolve"] override_path = true EOF

3.5 安装 kubeadm、kubelet、kubectl

aptinstall-ykubeadm=1.30.2-1.1kubelet=1.30.2-1.1kubectl=1.30.2-1.1 systemctlenablekubelet--now

3.6 配置命令补全

mkdir-p/etc/bash_completion.d crictl completionbash>/etc/bash_completion.d/crictl nerdctl completionbash>/etc/bash_completion.d/nerdctlecho'export CONTAINERD_NAMESPACE=k8s.io'>>/etc/bash_completion.d/nerdctl kubectl completionbash>/etc/bash_completion.d/kubectl kubeadm completionbash>/etc/bash_completion.d/kubeadmsource/etc/bash_completion.d/*

关键点:CONTAINERD_NAMESPACE=k8s.io确保 nerdctl 默认操作 k8s 使用的命名空间,否则 kubelet 无法识别镜像。


四、克隆节点与配置网络

关闭模板机,使用完全克隆创建三个节点。分别启动后,修改主机名和 IP 地址(以 worker31 为例):

hostnamectl set-hostname worker31.tz.cloudcat>/etc/netplan/00-static.yaml<<EOF network: ethernets: ens33: dhcp4: no addresses: - 10.1.8.31/24 routes: - to: default via: 10.1.8.2 nameservers: addresses: - 10.1.8.2 - 223.5.5.5 version: 2 EOFnetplan apply

确保所有节点的/etc/hosts都包含三台机器的解析记录。


五、部署 Kubernetes 集群

5.1 预拉取镜像(master 节点)

kubeadm config images pull --kubernetes-version=v1.30.2

worker 节点只需拉取kube-proxy和pause:

nerdctl pull registry.k8s.io/kube-proxy:v1.30.2 nerdctl pull registry.k8s.io/pause:3.9

5.2 初始化 master

kubeadm init --kubernetes-version=v1.30.2 --pod-network-cidr=10.224.0.0/16

如果拉取镜像慢,可加--image-repository registry.aliyuncs.com/google_containers使用阿里云镜像。

初始化成功后,会输出类似下面的 join 命令,务必保存:

kubeadm join 10.1.8.30:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

5.3 配置 kubectl 凭据

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

5.4 安装 Calico 网络插件

wget--no-check-certificate https://raw.githubusercontent.com/projectcalico/calico/v3.30.7/manifests/calico.yaml

修改calico.yaml,将CALICO_IPV4POOL_CIDR改为与初始化时一致的网段(10.224.0.0/16):

sed-i"s|# - name: CALICO_IPV4POOL_CIDR|- name: CALICO_IPV4POOL_CIDR|g"calico.yamlsed-i"s|# value:\"192.*| value:\"10.224.0.0/16\"|g"calico.yaml

所有节点提前下载 Calico 镜像:

nerdctl pull docker.io/calico/cni:v3.30.7 nerdctl pull docker.io/calico/node:v3.30.7 nerdctl pull docker.io/calico/kube-controllers:v3.30.7

部署:

kubectl apply-fcalico.yaml

5.5 加入 worker 节点

在 worker31 和 worker32 上执行上面保存的 join 命令。

如果忘记 token,可在 master 上重新生成:

kubeadm token create --print-join-command

5.6 验证集群

kubectl get nodes kubectl get pods-A

所有节点状态应为Ready,所有系统 Pod 为Running。


六、集群管理进阶

6.1 节点管理

查看节点详情
kubectl describenodeworker31.tz.cloud
维护节点(驱逐 Pod)
kubectl drain worker31.tz.cloud --ignore-daemonsets
删除节点
kubectl deletenodeworker31.tz.cloud

在被删除的节点上执行重置:

kubeadm reset-f
恢复节点重新加入

节点重置后,重新执行 join 命令即可。

6.2 命名空间(Namespace)

Namespace 用于逻辑隔离资源。Kubernetes 默认有四个:

  • default:默认命名空间
  • kube-system:系统组件
  • kube-public:公共可读
  • kube-node-lease:节点心跳
创建 Namespace
kubectl create ns laoma

或使用 YAML:

apiVersion:v1kind:Namespacemetadata:name:laoma
kubectl apply-fns-laoma.yaml
在指定命名空间操作资源
kubectl run nginx--image=nginx-nlaoma kubectl get pods-nlaoma
删除 Namespace(会级联删除其中所有资源)
kubectl delete ns laoma

6.3 切换默认命名空间

使用 kubectl 命令
kubectl config set-context--current--namespace=laoma kubectl config get-contexts# 查看当前上下文
使用 kubens 工具(更便捷)

安装:

wgethttps://codeload.github.com/ahmetb/kubectx/zip/refs/heads/master-Okubectx.zipunzipkubectx.zipcpkubectx-master/kubens /usr/local/bin/chmod+x /usr/local/bin/kubenscpkubectx-master/completion/kubens.bash /etc/bash_completion.d/source/etc/bash_completion.d/kubens.bash

使用:

kubens# 列出所有命名空间kubens kube-system# 切换到 kube-systemkubens -# 切换到上一个

6.4 多集群切换(Context)

当你有多个 K8s 集群时,可以通过~/.kube/config定义多个 context。

查看当前配置
kubectl config view kubectl config get-contexts kubectl config get-clusters
切换 context
kubectl config use-context<context-name>
使用 kubectx 工具

安装(与 kubens 同包):

cpkubectx-master/kubectx /usr/local/bin/chmod+x /usr/local/bin/kubectxcpkubectx-master/completion/kubectx.bash /etc/bash_completion.d/

使用:

kubectx# 列出所有 contextkubectx<name># 切换kubectx-c# 显示当前 contextkubectx-u# 取消当前 context

七、集群销毁与重建

7.1 删除所有节点

kubectl drain worker31.tz.cloud --ignore-daemonsets--forcekubectl drain worker32.tz.cloud --ignore-daemonsets--forcekubectl deletenodeworker31.tz.cloud worker32.tz.cloud

在 worker 节点上执行:

kubeadm reset-f

7.2 删除 master

kubectl deletenodemaster30.tz.cloud kubeadm reset-frm-rf.kube/

7.3 重建集群

可使用之前保存的kubeadm.yml(来自kubectl get cm kubeadm-config -n kube-system -o yaml清理后)或直接运行kubeadm init命令,然后重复部署网络和加入节点步骤。


八、常见问题与避坑指南

问题解决方案
kubectl get nodes显示 NotReady检查网络插件是否部署成功(Calico 镜像拉取失败可手动拉取)
kubeadm init拉取镜像超时更换镜像仓库(--image-repository)或配置代理
节点加入失败(token 过期)在 master 重新生成 token:kubeadm token create --print-join-command
nerdctl pull慢检查/etc/containerd/certs.d加速配置是否正确
K8s 无法识别镜像确保 nerdctl 默认命名空间为k8s.io(见 3.6 节)
删除 namespace 卡住检查是否有 finalizer,可kubectl patch ns <ns> -p '{"metadata":{"finalizers":[]}}' --type=merge
忘记admin.conf密码可直接从/etc/kubernetes/admin.conf复制,或重新生成证书

总结

本文详细记录了从 Ubuntu 24.04 系统初始化到部署 Kubernetes 1.30 集群的全过程,包括:

  • 系统基础优化与内核参数调整
  • containerd 安装与镜像加速(CRI 和 nerdctl 双配置)
  • kubeadm 初始化集群与 Calico 网络插件部署
  • 节点管理、命名空间切换和多集群 context 管理

通过这篇实战指南,你不仅能够搭建一个生产可用的 K8s 集群,还能掌握日常运维的常用命令和排错思路。

后续可继续探索:存储卷(PV/PVC)、负载均衡(Service/Ingress)、自动伸缩(HPA)等高级主题。

如果觉得有用,欢迎收藏、评论,也欢迎关注我的 CSDN,后续会带来更多云原生干货!


本文所有命令均经过实测,基于 Kubernetes v1.30.2 + containerd 1.7.20,如有版本差异请适当调整。

相关新闻

  • 清华团队提出UniCM模型:统一框架学习气候模态,提升预测时效与精度
  • 多卡并行不卡顿,Instinct GPU 张量并行配置全解析
  • 淡泊名利之前,先承认我们都很焦虑

最新新闻

  • CodeHealth — 全栈代码健康检查与上线评估
  • 微博相册批量下载终极指南:如何轻松获取高清图片收藏
  • 2026 全栈 GEO 机构实力评级:主流服务商智能优化系统与区域流量获取能力拆解
  • AI 智能电动窗帘智能功率覆盖 H 桥电机驱动、电源管理完整选型方案
  • Alibaba Dragonwell17深度解析:云原生Java运行时的架构实践与性能优化
  • Cesium 海量面线教程

日新闻

  • 终极指南:如何用shadPS4在电脑上免费畅玩PS4游戏
  • 打造个性化Instagram Clone:主题定制与用户体验优化技巧
  • 未来展望:RoseTTAFold-All-Atom的发展路线图与社区支持资源汇总

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号