从零搭建 Kubernetes 1.28 高可用集群
前言
📘 一、K8s 集群部署环境准备
1.1 环境架构
1.2 配置主机名与 hosts
1.3 关闭防火墙与 SELinux
1.4 关闭 Swap 分区
1.5 配置内核参数
1.6 安装网络和系统依赖
🧱 二、安装 Containerd
2.1 安装依赖与源
2.2 加载模块
2.3 安装与配置 Containerd
2.4 启动并设置开机自启
⚙️ 三、安装 kubeadm、kubelet、kubectl
3.1 添加 Kubernetes 源
3.2 安装指定版本
🚩 四、初始化 Kubernetes 集群
4.1 生成配置文件
4.2 初始化集群
🌐 五、安装 Calico 网络插件(v3.25)
5.1 下载 YAML 文件
5.2 修改 Calico 配置
✅ 第一处(约第 4601 行)
✅ 第二处(建议添加)
5.3 应用配置
🔗 六、工作节点加入集群
⚒️ 七、kubectl 自动补全
🧰 八、安装 Nerdctl 管理工具(可选)
🖥️ 九、安装 Kubernetes Dashboard
9.1 下载 Dashboard 配置
9.2 创建管理员账户与 Token
✅ 十、总结
前言
本教程基于 CentOS 7.9 环境,使用 Containerd 作为容器运行时,Calico v3.25 作为网络插件,手动部署 Kubernetes v1.28.2 集群。 所有步骤均附详细说明与命令,并标注执行节点(Master / 所有节点 / Worker)。
📘 一、K8s 集群部署环境准备
1.1 环境架构
IP | 主机名 | 系统版本 | Kubelet 版本 | 用途 |
---|---|---|---|---|
192.168.10.50 | master01 | CentOS 7.9 | v1.28.2 | 控制节点 |
192.168.10.250 | node01 | CentOS 7.9 | v1.28.2 | 工作节点 |
192.168.10.40 | node02 | CentOS 7.9 | v1.28.2 | 工作节点 |
⚙️ 集群规划
控制节点 1 台 + 工作节点 2 台
网络插件:Calico
容器运行时:Containerd
初始化工具:kubeadm
1.2 配置主机名与 hosts
📍 执行节点:所有节点(master01、node01、node02)
# 分别在各节点执行 hostnamectl set-hostname master01 # Master 节点 hostnamectl set-hostname node01 # node01 节点 hostnamectl set-hostname node02 # node02 节点
添加主机映射:
cat >> /etc/hosts <<EOF 192.168.10.50 master01 192.168.10.250 node01 192.168.10.40 node02 EOF
1.3 关闭防火墙与 SELinux
📍 执行节点:所有节点
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
1.4 关闭 Swap 分区
📍 执行节点:所有节点
swapoff -a sed -i '/swap/s/^/#/g' /etc/fstab
1.5 配置内核参数
📍 执行节点:所有节点
cat >/etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
1.6 安装网络和系统依赖
📍 执行节点:所有节点
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
加载 IPVS 模块:
cat >/etc/modules-load.d/ipvs.conf <<EOF ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack nf_conntrack_ipv4 EOF systemctl enable --now systemd-modules-load.service lsmod | egrep "ip_vs|nf_conntrack_ipv4"
🧱 二、安装 Containerd
📍 执行节点:所有节点
2.1 安装依赖与源
yum -y install yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.2 加载模块
cat >>/etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter
2.3 安装与配置 Containerd
yum -y install containerd.io mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml
修改配置文件:
# 启用 systemd 作为 cgroup 管理驱动 sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml # 替换镜像源为阿里云 sed -i '/sandbox_image/s|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
2.4 启动并设置开机自启
systemctl enable containerd systemctl start containerd
⚙️ 三、安装 kubeadm、kubelet、kubectl
📍 执行节点:所有节点
3.1 添加 Kubernetes 源
cat >/etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF
3.2 安装指定版本
yum -y install kubeadm-1.28.2 kubelet-1.28.2 kubectl-1.28.2 systemctl enable kubelet systemctl start kubelet
🚩 四、初始化 Kubernetes 集群
📍 执行节点:Master 节点(master01)
4.1 生成配置文件
cat >/tmp/kubeadm-init.yaml <<EOF apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.28.2 controlPlaneEndpoint: 192.168.10.50:6443 imageRepository: registry.aliyuncs.com/google_containers networking:podSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/16 --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs EOF
4.2 初始化集群
#将输出结果生成日志文件 kubeadm init --config=/tmp/kubeadm-init.yaml --ignore-preflight-errors=all | tee kubeadm-init.log
配置 kubectl 环境:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf
检查节点状态:
kubectl get nodes kubectl get pods -A
Node 为
NotReady
,因为还未安装 CNI。
🌐 五、安装 Calico 网络插件(v3.25)
📍 执行节点:Master 节点
5.1 下载 YAML 文件
wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml
5.2 修改 Calico 配置
打开文件:
vim calico.yaml
✅ 第一处(约第 4601 行)
- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"
✅ 第二处(建议添加)
指定主机网卡探测方式:
- name: IP_AUTODETECTION_METHODvalue: "interface=ens33"
若节点可访问外网,可改为:
- name: IP_AUTODETECTION_METHODvalue: "can-reach=8.8.8.8"
5.3 应用配置
kubectl apply -f calico.yaml
验证状态:
kubectl get pods -n kube-system kubectl get nodes
全部 Running
表示网络安装成功。
🔗 六、工作节点加入集群
📍 执行节点:Worker 节点(node01、node02)
使用 Master 输出的 join 命令:
kubeadm join 192.168.10.50:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash值>
验证:
kubectl get nodes
⚒️ 七、kubectl 自动补全
📍 执行节点:所有节点(建议至少 Master)
yum -y install bash-completion echo "source <(kubectl completion bash)" >> /etc/profile source /etc/profile
🧰 八、安装 Nerdctl 管理工具(可选)
📍 执行节点:所有节点
wget -q -c https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-1.7.0-linux-amd64.tar.gz tar xf nerdctl-1.7.0-linux-amd64.tar.gz -C /usr/local/bin nerdctl -n k8s.io ps echo "source <(nerdctl completion bash)" >> ~/.bashrc source ~/.bashrc
🖥️ 九、安装 Kubernetes Dashboard
📍 执行节点:Master 节点
9.1 下载 Dashboard 配置
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
修改 Service 类型为 NodePort:
#39行,手动添加内容 spec:type: NodePort (添加)ports:- port: 443targetPort: 8443nodePort: 30000 (添加)
部署:
kubectl apply -f recommended.yaml kubectl get pod,svc -n kubernetes-dashboard
9.2 创建管理员账户与 Token
cat >dashboard-admin.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata:name: adminnamespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: admin roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin subjects: - kind: ServiceAccountname: adminnamespace: kubernetes-dashboard EOF kubectl apply -f dashboard-admin.yaml
生成 Token:
kubectl -n kubernetes-dashboard create token admin
访问:
https://<master_ip>:30000
如提示权限不足:
kubectl create clusterrolebinding serviceaccount-cluster-admin --clusterrole=cluster-admin --user=system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard
✅ 十、总结
模块 | 执行节点 | 说明 |
---|---|---|
系统初始化、关闭防火墙 | 所有节点 | 系统安全优化 |
Containerd、kubelet 安装 | 所有节点 | 基础运行环境 |
kubeadm 初始化 | Master | 集群初始化 |
Calico 网络插件 | Master | 配置网络通信 |
Worker 加入集群 | Worker | 注册节点 |
Dashboard 控制台 | Master | 图形化界面 |
🎯 至此,Kubernetes v1.28.2 集群部署完成。 可使用 Dashboard 管理集群,也可继续部署 Ingress、Metrics、Prometheus 等插件。