前言
Kubernetes(简称 K8s)作为容器编排领域的标杆技术,已成为云原生架构的核心组件。本文将以 Rocky Linux 8 为例,手把手教你如何从零部署一套生产可用的 Kubernetes 集群。内容涵盖控制节点与计算节点配置、私有镜像仓库集成、网络插件选型等关键环节,并附带详细命令与排错技巧。
环境规划
1. 集群架构
-
控制节点(Master):1 台,负责集群调度与管理。
-
计算节点(Node):3 台,运行业务容器。
-
镜像仓库(Harbor):1 台,存储自定义镜像。
2. 主机配置
主机名 | IP 地址 | 最低配置 |
---|---|---|
harbor | 192.168.88.240 | 2CPU, 4G 内存 |
master | 192.168.88.50 | 2CPU, 4G 内存 |
node-0001 | 192.168.88.51 | 2CPU, 2G 内存 |
node-0002 | 192.168.88.52 | 2CPU, 2G 内存 |
node-0003 | 192.168.88.53 | 2CPU, 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-node
、coredns
、kube-proxy
等组件正常运行。
九、常见问题排查
-
节点 NotReady
-
检查
kubelet
服务状态:systemctl status kubelet
-
查看容器运行时日志:
journalctl -u containerd -f
-
-
镜像拉取失败
-
确认 Harbor 证书是否受信
-
检查
containerd
的config.toml
中镜像仓库配置
-
-
网络插件异常
-
确认
podSubnet
配置与 Calico 的CIDR
匹配 -
查看 Calico Pod 日志:
kubectl logs -n kube-system <calico-pod-name>
-
结语
通过以上步骤,一个基于 Rocky Linux 的 Kubernetes 集群已部署完成。建议在生产环境中进一步配置持久化存储、监控系统(Prometheus + Grafana) 和日志收集(EFK) 等组件。持续关注集群的证书有效期与版本升级,确保系统安全稳定。