从零开始搭建 Kubernetes 集群:详细步骤与避坑指南

前言

Kubernetes(简称 K8s)作为容器编排领域的标杆技术,已成为云原生架构的核心组件。本文将以 Rocky Linux 8 为例,手把手教你如何从零部署一套生产可用的 Kubernetes 集群。内容涵盖控制节点与计算节点配置私有镜像仓库集成网络插件选型等关键环节,并附带详细命令与排错技巧


环境规划
1. 集群架构
  • 控制节点(Master):1 台,负责集群调度与管理。

  • 计算节点(Node):3 台,运行业务容器。

  • 镜像仓库(Harbor):1 台,存储自定义镜像。

2. 主机配置
主机名IP 地址最低配置
harbor192.168.88.2402CPU, 4G 内存
master192.168.88.502CPU, 4G 内存
node-0001192.168.88.512CPU, 2G 内存
node-0002192.168.88.522CPU, 2G 内存
node-0003192.168.88.532CPU, 2G 内存

一、Harbor 仓库准备
1. 同步 RPM 包
# 同步 Docker 和 Kubernetes 安装包到 Harbor 服务器
rsync -av docker/ 192.168.88.240:/var/ftp/rpms/docker/
rsync -av kubernetes/packages/ 192.168.88.240:/var/ftp/rpms/k8s/

# 更新仓库元数据
ssh 192.168.88.240
createrepo --update /var/ftp/rpms/
2. 配置 YUM 源

在所有节点创建 k8s.repo 文件:

vim /etc/yum.repos.d/k8s.repo
[k8s]
name=Rocky Linux $releasever - Kubernetes
baseurl=ftp://192.168.88.240/rpms
enabled=1
gpgcheck=0

二、系统基础配置
1. 禁用 Swap 和防火墙
# 永久关闭 Swap
sed -i '/swap/d' /etc/fstab
swapoff -a

# 卸载防火墙
dnf remove -y firewalld-*
2. 配置 Hosts 解析
cat >> /etc/hosts <<EOF
192.168.88.240  harbor
192.168.88.50   master
192.168.88.51   node-0001
192.168.88.52   node-0002
192.168.88.53   node-0003
EOF

三、安装容器运行时(Containerd)
1. 安装 Containerd
dnf install -y containerd.io
2. 配置 Containerd

生成默认配置并修改关键参数:

containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
# 修改镜像仓库地址和认证
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  endpoint = ["https://192.168.88.240:443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]
  endpoint = ["https://192.168.88.240:443"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls]
  insecure_skip_verify = true

# 启用 Systemd Cgroup
SystemdCgroup = true
3. 启动 Containerd
systemctl enable --now containerd

四、安装 Kubernetes 组件
1. 安装 kubeadm、kubelet、kubectl
dnf install -y kubeadm kubelet kubectl ipvsadm ipset iproute-tc
2. 配置内核参数
# 加载内核模块
cat > /etc/modules-load.d/containerd.conf <<EOF
br_netfilter
xt_conntrack
EOF
systemctl start systemd-modules-load

# 设置内核参数
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.netfilter.nf_conntrack_max = 1000000
EOF
sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf

五、部署 Master 节点
1. 准备 Kubernetes 镜像
# 加载并推送镜像到 Harbor
docker load -i init/v1.29.2.tar.xz
docker images | while read i t _; do
  [[ "${t}" == "TAG" ]] && continue
  docker tag ${i}:${t} harbor:443/k8s/${i##*/}:${t}
  docker push harbor:443/k8s/${i##*/}:${t}
done
2. 初始化控制平面

创建 init.yaml 配置文件:

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.88.50  # Master 节点 IP
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.29.2
networking:
  podSubnet: 10.244.0.0/16  # Calico 默认网段
imageRepository: harbor:443/k8s

执行初始化:

kubeadm init --config=init.yaml | tee init.log
3. 配置 kubectl 权限
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

六、部署网络插件(Calico)
1. 加载 Calico 镜像
docker load -i calico.tar.xz
docker tag calico/cni:v3.26.4 harbor:443/plugins/calico-cni:v3.26.4
docker push harbor:443/plugins/calico-cni:v3.26.4
2. 部署 Calico

修改 calico.yaml 中的镜像地址:

sed -i 's|docker.io/calico/|harbor:443/plugins/|g' calico.yaml
kubectl apply -f calico.yaml

七、加入计算节点
1. 生成 Join 命令

在 Master 节点执行:

kubeadm token create --ttl=0 --print-join-command
# 输出示例:kubeadm join 192.168.88.50:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:...
2. Node 节点加入集群

在每个 Node 节点执行:

kubeadm join 192.168.88.50:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

八、验证集群状态
1. 检查节点状态
kubectl get nodes -o wide

输出应显示所有节点为 Ready 状态。

2. 查看 Pod 状态
kubectl -n kube-system get pods

确保 calico-nodecorednskube-proxy 等组件正常运行。


九、常见问题排查
  1. 节点 NotReady

    • 检查 kubelet 服务状态:systemctl status kubelet

    • 查看容器运行时日志:journalctl -u containerd -f

  2. 镜像拉取失败

    • 确认 Harbor 证书是否受信

    • 检查 containerd 的 config.toml 中镜像仓库配置

  3. 网络插件异常

    • 确认 podSubnet 配置与 Calico 的 CIDR 匹配

    • 查看 Calico Pod 日志:kubectl logs -n kube-system <calico-pod-name>


结语

通过以上步骤,一个基于 Rocky Linux 的 Kubernetes 集群已部署完成。建议在生产环境中进一步配置持久化存储监控系统(Prometheus + Grafana) 和日志收集(EFK) 等组件。持续关注集群的证书有效期版本升级,确保系统安全稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值