当前位置: 首页 > news >正文

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

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

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


写在前面

Kubernetes 作为容器编排的事实标准,已经成为云原生时代的必备技能。本文基于Ubuntu 24.04Kubernetes 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-proxypause

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,如有版本差异请适当调整。

http://www.jsqmd.com/news/1070017/

相关文章:

  • 2026实战:用Gemini镜像站解决Spring Boot微服务性能瓶颈与故障排查
  • 易元智创APP:AI智能画面去杂物,海南易元现实科技有限公司一键净化实拍场景
  • 零代码组态开发实操:串口屏项目从数月迭代压缩至数天
  • 多卡并行不卡顿,Instinct GPU 张量并行配置全解析
  • 2024年06月 GESP等级认证C++编程(四级)试题解析
  • 清华团队提出UniCM模型:统一框架学习气候模态,提升预测时效与精度
  • 淡泊名利之前,先承认我们都很焦虑
  • 杏林集:智汇中医-阶段八
  • 别被唱衰!程序员_小白必看:计算机4大黄金赛道+避坑原则(含网络安全)
  • 挖掘 Github 宝藏,盘点那些好用的 ROCm 开源项目
  • windows经典漏洞之永恒之蓝
  • AT21CSMK100单线EEPROM开发指南:从1-Wire协议到嵌入式存储实战
  • ATmega MCU功耗管理与I/O驱动设计:嵌入式硬件可靠性实战指南
  • 不如喘口气吧,小大人:别让卡顿的电脑,消耗掉你所有的耐心
  • 简单好用,一键搜索全网资源!
  • AI改写电商短视频赛道!全新图生视频功能,打破内容生产同质化僵局
  • 曹操出行RoboX战略升级,20万辆无人车开启无人出行万亿级市场变现周期!
  • AT21CSMK100单线EEPROM评估与开发:从硬件连接到协议实现
  • 揭秘 TileLang 编译黑科技,如何让 AMD GPU 算子性能超越预期
  • Tcache attack
  • 具身智能头部企业评估:越疆的技术底座与落地能力
  • 西北大学、亚马逊、高通联手攻克AI自我纠错难题
  • 工业高危场景防爆监控系统供应商选型分析报告|5 家厂商技术、服务、场景适配对比
  • OpenAI发布最强网络安全模型GPT - 5.5 - Cyber,却曝出Codex「烧穿硬盘」漏洞!
  • 初尝Docker容器
  • XMEGA A3U DAC与AC实战:从精密波形生成到硬件级快速保护
  • ATA5279天线驱动芯片Boost转换器与电流调节环路设计实战指南
  • AVR单片机无感BLDC驱动:BEMF过零检测与六步换相实战详解
  • LLaMA-Factory 原生支持 ROCm 是真的香,配合 HIPify 几分钟完成环境验证
  • 1.4 面试:Function Calling(函数调用)