kubeadm 搭建 K8s v1.30 集群:从系统模板到 Calico 网络全流程

Kubernetes v1.30.2 完整安装部署实战(Ubuntu24.04+containerd+Calico)

环境:VMware Workstation 17,Ubuntu‑24.04‑live‑server‑amd64,K8s 1.30.2,containerd 1.7.20,Calico v3.30.7

一、K8s 多种安装方式对比

表格

安装方式 核心特点 难度 适用场景 优点 缺点 推荐指数
kubeadm 官方标准、无魔改 中等 生产自建、CKA/CKAD 考试、标准集群 兼容性强、易升级、生态完善、文档全 步骤较多,需手动配置运行时 / 网络 ⭐⭐⭐⭐⭐
二进制手工部署 全手动、底层可控 极高 原理研究、深度定制、教学演示 掌控所有组件、无任何封装 极易出错、升级繁琐、维护成本高 ⭐⭐
Sealos / KubeKey 一键部署、高可用 低 快速搭建生产 / 测试环境 命令简单、自动装依赖、自带插件 轻度封装,不如 kubeadm 透明 ⭐⭐⭐⭐
k3s / k0s 轻量、单二进制 低 边缘节点、低配机器、开发测试 占用小、启动快、自带 containerd/ingress 裁剪版,部分高级特性有差异 ⭐⭐⭐⭐
minikube / kind / k3d 单机实验环境 极低 本地开发、快速验证、学习调试 一键启动、环境干净 不能模拟真实多节点生产集群 ⭐⭐⭐
云厂商托管 (ACK/EKS 等) Master 托管、免运维 低 云上生产业务 高可用、自动升级、无需维护控制面 成本高、受厂商限制 ⭐⭐⭐⭐
RKE / OpenShift 企业发行版 中高 大型企业、有商业化支持需求 生态成熟、技术支持完善 重、学习成本高、商用成本高 ⭐⭐⭐

选型建议

  • 学习 + 未来上生产:优先 kubeadm
  • 快速搭建、不想折腾:Sealos
  • 本地测试开发:k3s /minikube
  • 边缘 / 低配机器:k3s

二、环境与节点规划

软件清单

  • vmware workstation 17
  • ubuntu‑24.04‑live‑server‑amd64
  • kubeadm/kubelet/kubectl 1.30.2
  • containerd.io=1.7.20‑1
  • nerdctl‑1.7.7‑linux‑amd64
  • cni‑plugins‑linux‑amd64‑v1.6.0

虚拟机硬件

2 核 CPU、4G 内存、NAT 网卡、200G 硬盘,不使用 swap 分区 分区:/boot 2G,/ 90G

节点规划

表格

节点 IP 角色
master30.laoma.cloud 10.1.8.30 master 控制平面
worker31.laoma.cloud 10.1.8.31 worker 工作节点
worker32.laoma.cloud 10.1.8.32 worker 工作节点

三、系统模板准备(所有节点执行)

1. 替换操作系统源为华为云

bash 复制代码
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

2. containerd 软件源

bash 复制代码
curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | gpg --dearmour -o /etc/apt/trusted.gpg.d/containerd.gpg

cat << 'EOF' > /etc/apt/sources.list.d/docker-ce.list
deb [arch=amd64] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu noble stable
EOF

3. kubernetes apt 源(1.28 + 新版源格式)

bash 复制代码
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo "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

4. 安装基础工具包

bash 复制代码
apt update && apt install -y vim lrzsz bash-completion open-vm-tools apt-transport-https sshpass

5. 配置静态 IP(以 master30 为例,worker 修改对应 IP)

bash 复制代码
mkdir /etc/netplan/origin
mv /etc/netplan/*yaml /etc/netplan/origin

cat > /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
EOF

chmod 600 /etc/netplan/00-static.yaml
netplan apply

6. /etc/hosts 主机解析

bash 复制代码
cat << 'EOF' >> /etc/hosts
###### kubernetes #####
10.1.8.30 master30.laoma.cloud master30
10.1.8.31 worker31.laoma.cloud worker31
10.1.8.32 worker32.laoma.cloud worker32
10.1.8.21 hub.laoma.cloud
EOF

7. 关闭 swap

bash 复制代码
swapoff -a && sed -i '/^.*swap/d' /etc/fstab
rm -f /swap.img

8. 时间同步 chrony

bash 复制代码
apt install -y chrony
systemctl enable chrony --now

9. SSH 优化与免密

bash 复制代码
echo 'UseDNS no' >> /etc/ssh/sshd_config
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
ssh-keygen -N '' -f ~/.ssh/id_rsa -t rsa
sshpass -p huawei ssh-copy-id root@localhost

10. IPVS 模块与内核网络参数

安装依赖

bash 复制代码
apt install -y iptables ipvsadm ipset conntrack

临时加载内核模块

bash 复制代码
modprobe overlay
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_lc
modprobe ip_vs_sh
modprobe nf_conntrack

永久开机加载模块

bash 复制代码
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

内核 sysctl 参数

bash 复制代码
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
EOF

sysctl -p /etc/sysctl.d/k8s.conf

四、配置 containerd 容器运行时

1. 安装软件包

bash 复制代码
apt install -y containerd.io=1.7.20-1 cri-tools
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

2. 生成默认配置、修改 systemd cgroup 与 pause 镜像

bash 复制代码
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.k8s.io/pause:3.9"|' /etc/containerd/config.toml

3. 配置镜像加速(config.toml 内修改)

配置 docker.io、registry.k8s.io、私有仓库 hub.laoma.cloud 镜像源,hub 仓库关闭 tls 校验

bash 复制代码
[plugins."io.containerd.grpc.v1.cri".registry.configs."hub.laoma.cloud".tls]
insecure_skip_verify = true

[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://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://k8s.m.daocloud.io","https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."hub.laoma.cloud"]
endpoint = ["http://hub.laoma.cloud"]

重启生效

bash 复制代码
systemctl restart containerd.service

4. 安装 nerdctl 与 cni‑plugins

bash 复制代码
tar -xf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/bin/
mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.6.0.tgz -C /opt/cni/bin

⚠️ nerdctl 不读取 CRI 的 mirror,需要使用 certs.d 目录单独配置 hosts.toml 镜像加速配置(文档中有完整配置,分别对 docker.io、registry.k8s.io、hub.laoma.cloud 创建 hosts.toml)

测试镜像拉取

bash 复制代码
nerdctl pull busybox
nerdctl pull registry.k8s.io/pause:3.9
nerdctl pull hub.laoma.cloud/library/busybox

五、安装 Kubernetes 组件

bash 复制代码
apt install -y kubeadm=1.30.2-1.1 kubelet=1.30.2-1.1 kubectl=1.30.2-1.1
systemctl enable kubelet --now

kubelet 刚安装状态为 activating,集群初始化完成后变为 active

命令补全配置

bash 复制代码
mkdir /etc/bash_completion.d

# crictl
crictl completion bash > /etc/bash_completion.d/crictl
source /etc/bash_completion.d/crictl

# nerdctl
nerdctl completion bash > /etc/bash_completion.d/nerdctl
echo 'export CONTAINERD_NAMESPACE=k8s.io' >> /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl

# kubectl
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubectl

# kubeadm
kubeadm completion bash > /etc/bash_completion.d/kubeadm
source /etc/bash_completion.d/kubeadm

关机做模板快照

bash 复制代码
init 0

六、克隆模板虚拟机,修改各节点主机名与网络

使用 VMware 完全克隆,分别生成 master30、worker31、worker32,修改 hostname 和 netplan 静态 IP 配置,执行netplan apply生效。

七、master 节点初始化 K8s 集群

1. 预先拉取镜像

bash 复制代码
kubeadm config images pull --kubernetes-version=v1.30.2

2. kubeadm init 初始化控制平面

bash 复制代码
kubeadm init --kubernetes-version=v1.30.2 --pod-network-cidr=10.224.0.0/16 --image-repository hub.laoma.cloud/kubernetes

参数说明

  • --kubernetes-version 指定版本
  • --pod-network-cidr pod 网段,要和 calico 配置完全匹配
  • --image-repository 指定私有镜像仓库

3. 配置 kubectl 认证(root 用户 master 节点执行)

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

八、部署 Calico 网络插件

pod 网段必须和 kubeadm init 的10.224.0.0/16保持一致

bash 复制代码
#下载yaml
wget --no-check-certificate https://raw.githubusercontent.com/projectcalico/calico/v3.30.7/manifests/calico.yaml

#修改calico的ipv4pool cidr
sed -i "s|# - name: CALICO_IPV4POOL_CIDR|- name: CALICO_IPV4POOL_CIDR|g" calico.yaml
sed -i "s|# value: \"192.*| value: \"10.224.0.0/16\"|g" calico.yaml

#部署
kubectl apply -f calico.yaml

等待 calico 全部 pod 变为 Running 状态

bash 复制代码
kubectl get pods -A

九、worker 节点加入集群

master 获取 join 命令(token 过期时执行)

bash 复制代码
kubeadm token create --print-join-command

worker 节点执行输出的 join 命令示例:

bash 复制代码
kubeadm join 10.1.8.30:6443 --token xxx \
--discovery-token-ca-cert-hash sha256:xxxxxx

十、集群验证

bash 复制代码
#集群信息
kubectl cluster-info
#客户端服务端版本
kubectl version
#查看节点状态,全部Ready代表成功
kubectl get nodes
#查看全部pod状态,全部Running
kubectl get pods -A
相关推荐
updayday8541 小时前
印染产线电脑进程异常占用资源却要逐台排查 - Ping64 远程进程管理
大数据·网络·数据库·安全·智能路由器
zxanz12 小时前
一张 SSL 证书,如何降低业务流量劫持与数据泄露风险
网络·网络协议·ssl
茉莉玫瑰花茶2 小时前
GO [ 数据格式 ]
服务器·网络·算法·golang
KIDULT°2 小时前
Kubeadm 部署 Kubernetes v1.30.2 实战:Ubuntu24.04 三节点集群 + 排坑记录
ubuntu·云原生·容器·kubernetes·k8s
明航咨询—张老师2 小时前
工业控制系统安全工程师(CISP-ICSSE)全解析:报考条件、知识体系与职业价值
网络
酣大智2 小时前
TightVNC Server 配置窗口
网络·vnc
隐擎fox2 小时前
解密 BGP Anycast 边缘路由与跨国链路质量检测:多租户网络出口的低时延与防丢包架构实战
网络·python·网络协议·tcp/ip·网络安全·架构·tcpdump
Escalating_xu3 小时前
【Linux 网络编程】Windows 客户端访问 Linux:用 Winsock 跑通 UDP 回显
linux·网络·windows
zhengqweasd3 小时前
Linux 软中断原理:网卡报文是怎么抢占 CPU 的
linux·运维·网络