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-cidrpod 网段,要和 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