1. Kubernetes集群搭建概述
Kubernetes作为容器编排的事实标准,已经成为现代云原生应用的核心基础设施。对于刚接触Kubernetes的开发者来说,搭建一个可用的集群往往是第一个挑战。本指南将使用kubeadm工具,带你从零开始构建一个生产可用的Kubernetes集群。
kubeadm是Kubernetes官方推荐的集群引导工具,它遵循最佳实践,能够创建符合Kubernetes一致性测试的集群。相比其他部署方式,kubeadm具有以下优势:
- 标准化:生成的集群结构与官方文档一致
- 轻量化:只包含必要的核心组件
- 可扩展:可作为更复杂部署方案的基础
2. 环境准备
2.1 硬件要求
搭建Kubernetes集群前,需要准备符合以下要求的机器:
- 操作系统:兼容deb/rpm的Linux发行版(如Ubuntu 20.04+或CentOS 7+)
- 控制平面节点:至少2核CPU、2GB内存、30GB磁盘
- 工作节点:至少1核CPU、1GB内存、20GB磁盘
- 网络:所有节点间需互通,建议千兆内网
生产环境建议控制平面节点配置4核CPU/8GB内存以上,并采用多节点高可用架构
2.2 系统配置
在所有节点上执行以下基础配置:
- 关闭swap:
sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab- 设置主机名:
sudo hostnamectl set-hostname <node-name> # 如master-node或worker-01- 配置时间同步:
sudo timedatectl set-timezone Asia/Shanghai sudo systemctl enable --now chronyd- 加载内核模块:
sudo modprobe br_netfilter sudo modprobe overlay echo "br_netfilter" | sudo tee /etc/modules-load.d/k8s.conf echo "overlay" | sudo tee -a /etc/modules-load.d/k8s.conf- 配置内核参数:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system3. 容器运行时安装
Kubernetes支持多种容器运行时,我们以containerd为例:
3.1 安装containerd
- 安装依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2- 添加Docker仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo- 安装containerd:
sudo yum install -y containerd.io- 配置containerd:
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml- 启动服务:
sudo systemctl enable --now containerd3.2 验证安装
检查containerd状态:
sudo systemctl status containerd ctr version4. 安装kubeadm、kubelet和kubectl
在所有节点上执行:
- 添加Kubernetes仓库:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF- 安装组件:
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes- 启动kubelet:
sudo systemctl enable --now kubelet5. 初始化控制平面
在主节点上执行:
5.1 初始化集群
sudo kubeadm init \ --apiserver-advertise-address=<主节点IP> \ --control-plane-endpoint=<负载均衡IP或域名> \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs \ --kubernetes-version=stable关键参数说明:
--apiserver-advertise-address:API服务器广播地址--control-plane-endpoint:高可用集群端点--pod-network-cidr:Pod网络CIDR,需与后续安装的CNI插件匹配
5.2 配置kubectl
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config5.3 安装网络插件
以Flannel为例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml其他可选CNI插件:
- Calico:适合需要网络策略的场景
- Cilium:基于eBPF的高性能网络方案
- Weave Net:简单易用的网络方案
6. 加入工作节点
在每个工作节点上执行kubeadm join命令(初始化输出中会显示):
sudo kubeadm join <控制平面端点>:6443 \ --token <令牌> \ --discovery-token-ca-cert-hash sha256:<哈希值>如果令牌过期,可在主节点生成新令牌:
kubeadm token create --print-join-command7. 验证集群状态
在主节点执行以下命令验证集群状态:
- 查看节点状态:
kubectl get nodes -o wide- 查看Pod状态:
kubectl get pods -A -o wide- 检查集群健康状况:
kubectl get componentstatuses8. 集群配置优化
8.1 移除主节点污点
默认情况下,工作负载不会调度到主节点。如需允许调度:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-8.2 配置自动补全
为bash添加kubectl自动补全:
echo 'source <(kubectl completion bash)' >> ~/.bashrc8.3 安装Dashboard(可选)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml创建访问令牌:
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin kubectl -n kubernetes-dashboard create token dashboard-admin9. 常见问题排查
9.1 kubelet无法启动
检查错误日志:
journalctl -xeu kubelet常见原因:
- 容器运行时未正确安装
- 内核参数未正确配置
- 防火墙阻止通信
9.2 Pod网络异常
检查CNI插件日志:
kubectl logs -n kube-system <cni-pod-name>常见解决方法:
- 确认
--pod-network-cidr与CNI配置匹配 - 检查节点间网络连通性
- 重启kubelet和容器运行时服务
9.3 证书过期问题
查看证书有效期:
kubeadm certs check-expiration更新证书:
kubeadm certs renew all10. 生产环境建议
对于生产环境,建议考虑以下增强措施:
高可用架构:
- 部署多个控制平面节点
- 使用外部etcd集群
- 配置负载均衡器
安全加固:
- 启用RBAC
- 配置网络策略
- 定期轮换证书
监控告警:
- 部署Prometheus + Grafana
- 配置节点和Pod资源监控
- 设置关键事件告警
备份恢复:
- 定期备份etcd数据
- 测试集群恢复流程
- 文档化运维手册