Kubernetes v1.28.2 集群安装文档(CentOS 7)
目录
- 一、环境准备
- 二、安装容器运行时(containerd)
- 三、安装 kubeadm、kubelet、kubectl
- 四、初始化控制平面节点(Master)
- 五、安装 Calico 网络插件
- 六、配置 kubectl
- 七、加入工作节点(Worker)
- 八、验证集群
- 九、常见问题及解决方案
一、环境准备
1.1 节点规划
| 角色 | 主机名 | CPU | 内存 | 数量 |
|---|---|---|---|---|
| 控制平面节点 | k8s-master | ≥2核 | ≥2GB | 1台 |
| 工作节点 | k8s-worker-1 | ≥2核 | ≥2GB | ≥1台 |
1.2 操作系统要求
- CentOS 7.x
- 所有节点网络互通
- 确保时间同步
1.3 基础配置(所有节点执行)
设置主机名
# Master 节点执行hostnamectl set-hostname k8s-master# Worker 节点执行(如有多个,依次设置)hostnamectl set-hostname k8s-worker-1配置 hosts 解析
cat>>/etc/hosts<<EOF <MASTER_IP> k8s-master <WORKER1_IP> k8s-worker-1 EOF将
<MASTER_IP>和<WORKER1_IP>替换为实际 IP 地址。
关闭防火墙(测试环境)
systemctl stop firewalld systemctl disable firewalld生产环境建议:放通必要端口而非直接关闭,详见第九节。
关闭 SELinux
setenforce0sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config关闭 Swap
swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab配置内核参数
cat>/etc/modules-load.d/k8s.conf<<EOF overlay br_netfilter EOFmodprobe overlay modprobe br_netfiltercat>/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 EOFsysctl--system配置国内 YUM 源(可选)
mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakcurl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache二、安装容器运行时(containerd)
2.1 安装 containerd
# 添加 Docker 官方源yuminstall-yyum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 containerd(注意包名是 containerd.io)yuminstall-ycontainerd.io2.2 配置 containerd
# 生成默认配置mkdir-p/etc/containerd containerd config default>/etc/containerd/config.toml# 启用 SystemdCgroup(K8s 要求)sed-i's/SystemdCgroup = false/SystemdCgroup = true/'/etc/containerd/config.toml# 配置镜像加速器(解决国内网络问题)cat>>/etc/containerd/config.toml<<EOF [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] endpoint = ["https://registry.aliyuncs.com/google_containers"] EOF2.3 启动 containerd
systemctl restart containerd systemctlenablecontainerd systemctl status containerd2.4 安装 crictl(可选,用于调试)
VERSION="v1.28.0"wgethttps://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gztarzxvf crictl-$VERSION-linux-amd64.tar.gz-C/usr/local/binrm-fcrictl-$VERSION-linux-amd64.tar.gz# 配置 crictlcat>/etc/crictl.yaml<<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 EOF三、安装 kubeadm、kubelet、kubectl
3.1 配置 Kubernetes YUM 源
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=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF3.2 安装指定版本
yuminstall-ykubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2# 锁定版本防止自动更新yuminstall-yyum-plugin-versionlock yum versionlock kubelet kubeadm kubectl# 启动 kubelet(此时会循环重启,等待 kubeadm 初始化)systemctlenablekubelet systemctl start kubelet四、初始化控制平面节点(Master)
4.1 执行初始化
kubeadm init\--apiserver-advertise-address=<MASTER_IP>\--image-repository=registry.aliyuncs.com/google_containers\--pod-network-cidr=10.244.0.0/16\--kubernetes-version=v1.28.2将
<MASTER_IP>替换为 Master 节点的实际 IP 地址。
4.2 配置 kubectl
mkdir-p$HOME/.kubecp-i/etc/kubernetes/admin.conf$HOME/.kube/configchown$(id-u):$(id-g)$HOME/.kube/config4.3 保存 Join 命令
初始化成功后,会输出类似以下命令,请务必保存:
kubeadmjoin<MASTER_IP>:6443--token<token>--discovery-token-ca-cert-hash sha256:<hash>如忘记,可执行
kubeadm token create --print-join-command重新生成。
五、安装 Calico 网络插件
5.1 安装 Calico
kubectl apply-fhttps://docs.projectcalico.org/v3.25/manifests/calico.yaml5.2 等待 Calico 启动
# 监控 Pod 状态,等待所有 Pod 变为 Runningwatch-n2kubectl get pods-nkube-system按Ctrl+C退出监控。
5.3 如果只有单节点,允许 Master 调度 Pod
kubectl taint nodes--allnode-role.kubernetes.io/control-plane-六、验证集群
# 查看节点状态kubectl get nodes# 预期输出:# NAME STATUS ROLES AGE VERSION# k8s-master Ready control-plane 10m v1.28.2# 查看所有系统 Podkubectl get pods-nkube-system所有节点状态为Ready、系统 Pod 均为Running即表示集群搭建成功。
七、加入工作节点(Worker)
在每个 Worker 节点上执行之前保存的kubeadm join命令:
kubeadmjoin<MASTER_IP>:6443--token<token>--discovery-token-ca-cert-hash sha256:<hash>在 Master 节点验证:
kubectl get nodes# NAME STATUS ROLES AGE VERSION# k8s-master Ready control-plane 20m v1.28.2# k8s-worker-1 Ready <none> 2m v1.28.2八、集群测试
8.1 部署测试 Pod
kubectl create deployment nginx-test--image=nginx kubectl expose deployment nginx-test--port=80--type=NodePort kubectl get svc nginx-test8.2 清理测试资源
kubectl delete deployment nginx-test kubectl delete svc nginx-test九、常见问题及解决方案
9.1 镜像拉取失败
问题:failed to pull image "registry.k8s.io/pause:3.6"
解决方案:配置 containerd 镜像加速(已在第二章配置),或手动拉取镜像:
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.29.2 节点一直是 NotReady
原因:网络插件未安装或未启动
解决方案:
# 确认 Calico 是否正常运行kubectl get pods-nkube-system|grepcalico# 查看节点详细信息kubectl describenodek8s-master9.3 cgroup 驱动不一致
解决方案:确保 containerd 配置了SystemdCgroup = true
grepSystemdCgroup /etc/containerd/config.toml# 应该显示 SystemdCgroup = true9.4 生产环境防火墙配置
Master 节点需要开放的端口:
firewall-cmd--permanent--add-port=6443/tcp# Kubernetes API Serverfirewall-cmd--permanent--add-port=2379-2380/tcp# etcdfirewall-cmd--permanent--add-port=10250/tcp# Kubelet APIfirewall-cmd--reloadWorker 节点需要开放的端口:
firewall-cmd--permanent--add-port=10250/tcp# Kubelet APIfirewall-cmd--permanent--add-port=30000-32767/tcp# NodePortfirewall-cmd--reload十、集群信息摘要
| 项目 | 信息 |
|---|---|
| Kubernetes 版本 | v1.28.2 |
| 容器运行时 | containerd |
| 网络插件 | Calico v3.25 |
| Pod 网段 | 10.244.0.0/16 |
| Service 网段 | 10.96.0.0/12 |