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表示无交换内存

image

 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

 

 

 

image

显示 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

 

image

 当前仓库的最高版是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,足够中小型集群。

三条硬性规则(必须遵守)

  1. pod 网段 ≠ service 网段,两段不能重叠;
  2. 两段都不能和宿主机物理网卡网段重叠(你宿主机是 172.29.128.1,宿主机网段为 172.29.128.0/24);
  3. 两段不能和机房其他业务网段冲突。

 

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

 

image

 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

 

image

 

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)

补充注意事项

  1. 生产环境不推荐 local-path:仅单机 / 测试集群使用;正式环境替换 NFS/Ceph/ 云存储 SC;
  2. local-path 是节点本地存储,Pod 漂移到其他节点会丢失数据,仅临时测试;
  3. 若跳过这两步直接装 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

 

posted @ 2026-07-17 17:50  民工黑猫  阅读(6)  评论(0)    收藏  举报