Kubernetes集群搭建:kubeadm生产环境部署指南
1. K8s集群搭建方案选型在生产环境中部署Kubernetes集群时kubeadm是目前官方推荐的标准化工具。相比手动部署各组件或使用kubespray等方案kubeadm具有以下优势标准化程度高严格遵循Kubernetes最佳实践自动生成符合PKI规范的证书体系可扩展性强支持从单节点开发环境扩展到多主高可用生产集群维护成本低内置集群升级和配置管理功能简化生命周期管理典型部署架构包含1个或多个控制平面节点运行API Server、Controller Manager等多个工作节点运行kubelet和容器运行时etcd集群可嵌入式部署或独立集群2. 基础环境准备2.1 系统要求检查在所有节点执行以下检查项# 内核版本检查建议4.19 uname -r # 内存检查控制平面建议4GB free -h # CPU检查控制平面建议2核 nproc # 主机名解析 hostnamectl status # 关闭swap sudo swapoff -a sudo sed -i /swap/s/^/#/ /etc/fstab2.2 容器运行时安装containerd是目前推荐的生产级运行时# 安装containerd cat EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 配置系统参数 cat EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-ip6tables 1 EOF sudo sysctl --system3. kubeadm集群部署3.1 组件安装在所有节点执行# 添加仓库 cat EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled1 gpgcheck1 gpgkeyhttps://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key EOF # 安装三件套 sudo yum install -y kubelet kubeadm kubectl --disableexcludeskubernetes sudo systemctl enable --now kubelet3.2 控制平面初始化在主节点执行sudo kubeadm init \ --pod-network-cidr10.244.0.0/16 \ --upload-certs \ --control-plane-endpointCLUSTER_IP:6443关键参数说明--pod-network-cidr指定Pod网络CIDR需与后续安装的CNI插件匹配--control-plane-endpoint高可用场景下应配置负载均衡器地址4. 网络插件部署Flannel是较简单的选择kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml生产环境建议考虑Calicokubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml5. 工作节点加入在控制平面初始化完成后会输出加入命令kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxx6. 生产环境调优6.1 kubelet配置优化# /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 250 kubeAPIQPS: 50 kubeAPIBurst: 100 serializeImagePulls: false6.2 控制平面高可用使用3个控制平面节点第一个节点执行kubeadm init时添加--upload-certs其他控制平面节点使用kubeadm join时指定--control-plane配置外部负载均衡器指向所有控制平面节点7. 常见问题排查7.1 节点NotReady检查项journalctl -u kubelet -f # kubelet日志 crictl ps -a # 容器状态 ip route show # 网络路由7.2 证书过期处理更新证书kubeadm certs renew all systemctl restart kubelet7.3 集群升级升级kubeadmyum install -y kubeadm-1.28.2 --disableexcludeskubernetes升级控制平面kubeadm upgrade apply v1.28.2升级节点kubeadm upgrade node