ubantu24使用kubeadm的方式安装k8s v1.28.2 + kubesphere v4.2
集群规划(3 节点)
master节点,主机名:k8s-master-01,ip:172.29.128.1
工作节点1:主机名:k8s-worker-01,ip:172.29.132.68
工作节点2:主机名:k8s-worker-02,ip:172.29.132.69
| 机器名 | 内网 ip |
| k8s-master-01 | 172.29.128.1 |
| k8s-worker-01 | 172.29.132.68 |
| k8s-worker-02 | 172.29.132.69 |
一、所有节点统一基础环境配置(全部机器执行)
1.1 设置主机名 + hosts 解析
master 节点
hostnamectl set-hostname k8s-master-01
worker01
hostnamectl set-hostname k8s-worker-01
worker02
hostnamectl set-hostname k8s-worker-02
所有节点编辑 /etc/hosts,追加:
cat >> /etc/hosts << EOF 172.29.128.1 k8s-master-01 172.29.132.68 k8s-worker-01 172.29.132.69 k8s-worker-02 EOF
1.2 关闭 Swap(K8s 强制要求)
# 临时关闭 sudo swapoff -a # 永久注释fstab内swap,开机不挂载 sudo sed -i '/swap.img/s/^/#/' /etc/fstab # 验证无swap free -h
Swap那一行都为0表示无交换内存

1.3 加载内核网络模块、开启 IP 转发
# 写入内核模块配置 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # 立即加载 sudo modprobe overlay sudo modprobe br_netfilter # sysctl网络参数持久化配置 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 生效 sudo sysctl --system # 可选:启用ipvs(kube-proxy性能更好) sudo apt install -y ipset ipvsadm cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF sudo modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack
1.5 关闭 ufw 防火墙(测试环境;生产放行对应端口)
systemctl stop ufw
systemctl disable ufw
1.5 时间同步(Ubuntu24)
apt update && apt install chrony -y # 启用并立即启动时间同步服务 systemctl enable --now chrony.service # 验证状态 systemctl status chrony.service
二、所有节点安装 containerd 容器运行时
# 更新源、安装依赖 sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release # 添加docker源(内置containerd) curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update # 安装containerd(不装docker) sudo apt install -y containerd.io # 生成默认配置 sudo containerd config default | sudo tee /etc/containerd/config.toml
修改 containerd 配置(关键:systemd cgroup + 阿里云镜像加速)
# 生成默认配置 containerd config default > /etc/containerd/config.toml # 替换sandbox镜像为国内地址 sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml sed -i 's#registry.k8s.io/pause:3.9#registry.aliyuncs.com/google_containers/pause:3.9#g' /etc/containerd/config.toml # 添加阿里云镜像加速器(在[plugins."io.containerd.grpc.v1.cri".registry.mirrors]下插入) sudo tee -a /etc/containerd/config.toml <<EOF [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.mirrors.ustc.edu.cn"] EOF # 重启并开机自启 sudo systemctl daemon-reload sudo systemctl restart containerd sudo systemctl enable containerd # 验证状态,无报错即正常 sudo systemctl status containerd

显示 active(running)表求containerd已经安装成功。
三、所有节点安装 kubeadm kubelet kubectl v1.32
3.1 添加 K8s 阿里云镜像源(国内加速)
# 清理旧密钥 rm -f /usr/share/keyrings/kubernetes-archive-keyring.gpg # 删除labring无关源消除404报错 rm -f /etc/apt/sources.list.d/labring.list # 下载公钥并导入生成二进制keyring curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg # 设置权限 chmod 644 /usr/share/keyrings/kubernetes-archive-keyring.gpg # 写入正确源(固定xenial) echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list # 更新源 apt update
没有报errorq错误才表示安装成功。
3.2 安装 1.28.2,锁定版本
查看当前仓库有哪些k8s版本
apt-cache madison kubeadm

当前仓库的最高版是1.28.2
# 安装指定1.28.2最新补丁版 K8S_VERSION="1.28.2" apt install -y kubelet=${K8S_VERSION}-00 kubeadm=${K8S_VERSION}-00 kubectl=${K8S_VERSION}-00 # 锁定版本防止自动升级 apt-mark hold kubelet kubeadm kubectl systemctl enable --now kubelet
四、仅第一个 Master 节点执行:kubeadm init 初始化控制平面
4.1 执行初始化命令
kubeadm init \ --apiserver-advertise-address=172.29.128.1 \ --kubernetes-version=v1.28.2 \ --image-repository=registry.aliyuncs.com/google_containers \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
- apiserver-advertise-address:master 内网 IP
- image-repository:阿里云镜像仓库,避免国外拉取失败
- service-cidr=10.96.0.0/12 Service 虚拟网段:ClusterIP 地址池,仅集群内部虚拟地址
- pod-network-cidr=10.244.0.0/16: pod网段
注意:pod网段与service虚拟网段不要跟宿主机用同一网段,会导致节点路由冲突:内核分不清流量是发给宿主机、Pod 还是 Service,直接导致网络不通、节点失联。
- Pod:
10.244.0.0/16可容纳六万多 Pod; - Service:
10.96.0.0/12包含 4096 个 ClusterIP,足够中小型集群。
三条硬性规则(必须遵守)
- pod 网段 ≠ service 网段,两段不能重叠;
- 两段都不能和宿主机物理网卡网段重叠(你宿主机是
172.29.128.1,宿主机网段为172.29.128.0/24); - 两段不能和机房其他业务网段冲突。
4.2 部署 Pod 网络插件 Calico(仅master 执行)
# 1. 下载 yaml curl -O shturl.cc/Jq4HfenCPpIMcYboPNxJnQzh20WO8fNzkgywEND6iPhUcSVpmPScmvtr0M6fo2peHOge2ZKmjf8pt0tSIWJaavYbGAVm1A #如果上面的下载不成功,就用下面这个下载 curl -O https://ghproxy.net/https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml #2. 替换国内镜像(解决 docker.io 拉取超时) sed -i 's#docker.io/calico/#docker.m.daocloud.io/calico/#g' calico.yaml #3. Ubuntu 放行 IPIP 隧道协议(必须,否则 calico-node 起不来) ufw allow 47 ufw reload #4. 部署 Calico kubectl apply -f calico.yaml #5. 等待组件就绪,实时观察pod状态 kubectl get pods -n kube-system -w
4.3 验证集群状态
# 实时观察pod状态
kubectl get pods -n kube-system -w
kubectl get nodes # 此时master状态NotReady,等calico就绪变为Ready kubectl get cs

STATUS为Ready表示Calico已安装成功,集群准备就绪;STATUS为 NotReady表示未就绪,Calico 未安装完成。
五,将工作节点加入集群
5.1 获取Worker 节点加入命令(一键输出完整带 Token)
kubeadm token create --print-join-command
5.3 在工作节点执行kubeadm join命令
kubeadm join 172.29.128.1:6443 --token qsf9zd.qmtekn15hyo0erlz --discovery-token-ca-cert-hash sha256:b04e430618dd055c300990d6d001d4daa0aff88c29d5de7925f3d6ce6ba1dbc9
查看pods状态,等待工作节点就绪
kubectl get pods -A kubectl get nodes

5.3 添加其它Master 控制平面节点(高可用多 Master)
# 1. 在主master节点上传证书,获取key kubeadm init phase upload-certs --upload-certs # 2. 获取join基础命令 kubeadm token create --print-join-command # 3. 拼接 --control-plane --certificate-key "上面输出的密钥" kubeadm join 172.29.128.1:6443 \ --token abcdef.xxxxxxxxxxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx \ --control-plane \ --certificate-key 刚才upload-certs输出的字符串
六、Master 节点安装 KubeSphere v4.1
6.1 必须装默认 StorageClass,再安装 KubeSphere,否则安装卡死、组件起不来
1. 部署本地动态存储插件
kubectl apply -f https://mirror.ghproxy.com/https://github.com/openebs/local-path-provisioner/raw/master/deploy/local-path-storage.yaml
2. 标记为集群默认存储类(关键)
kubectl patch storageclass local-path -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
3. 验证存储类生效
kubectl get sc
# 输出中 local-path 会标注 (default)
补充注意事项
- 生产环境不推荐 local-path:仅单机 / 测试集群使用;正式环境替换 NFS/Ceph/ 云存储 SC;
- local-path 是节点本地存储,Pod 漂移到其他节点会丢失数据,仅临时测试;
- 若跳过这两步直接装 KubeSphere,ks-install 日志会持续报错
pvc unbound,无法完成安装。
6.2 安装 ks-installer 工具
# 下载安装器yaml wget https://mirror.ghproxy.com/https://github.com/kubesphere/ks-installer/releases/download/v4.2.1/kubesphere-installer.yaml -O kubesphere-installer.yaml # 下载集群配置yaml wget https://mirror.ghproxy.com/https://github.com/kubesphere/ks-installer/releases/download/v4.2.1/cluster-configuration.yaml -O cluster-configuration.yaml
6.3 修改镜像仓库(必做,解决 docker.io 超时)
sed -i '/global:/a \ imageRegistry: swr.cn-southwest-2.myhuaweicloud.com/ks' cluster-configuration.yaml sed -i '/extension:/a \ imageRegistry: swr.cn-southwest-2.myhuaweicloud.com/ks' cluster-configuration.yaml
6.4 部署 kubesphere
# 部署安装器 kubectl apply -f kubesphere-installer.yaml # 部署集群配置 kubectl apply -f cluster-configuration.yaml
查看安装进度
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o name) -f

浙公网安备 33010602011771号