Kubernetes集群部署实战:kubeadm与高可用配置指南

发布时间:2026/7/26 2:48:48
Kubernetes集群部署实战:kubeadm与高可用配置指南 1. Kubernetes 集群部署概述在云原生技术栈中Kubernetes 已经成为容器编排的事实标准。而 kubeadm 作为官方推荐的集群部署工具以其简洁性和可靠性赢得了广大运维人员的青睐。我至今还记得第一次用 kubeadm 成功拉起集群时的兴奋感——那种原来如此的顿悟时刻。kubeadm 的设计哲学很明确提供最小化的最佳实践实现同时保持足够的灵活性。它不像某些全自动部署工具那样隐藏细节也不会像手动部署那样复杂。这种平衡使得 kubeadm 特别适合需要理解底层机制又追求效率的场景。2. 环境准备与系统配置2.1 硬件资源规划根据我的经验生产环境最少需要3个节点1 master 2 worker每个节点配置CPU至少2核4核更佳内存4GB起步master节点建议8GB磁盘40GB系统盘 单独的数据盘如果使用本地存储重要提示虽然kubeadm可以在单节点上运行但这样部署的集群无法体现Kubernetes的高可用特性仅适合开发测试。2.2 操作系统配置我通常在CentOS 7/8或Ubuntu 18.04/20.04上部署以下是必须的系统配置# 关闭swapKubernetes 1.8要求 sudo swapoff -a sudo sed -i / swap / s/^/#/ /etc/fstab # 设置防火墙规则如果启用 sudo firewall-cmd --permanent --add-port6443/tcp sudo firewall-cmd --permanent --add-port10250/tcp sudo firewall-cmd --reload # 加载br_netfilter模块 sudo modprobe br_netfilter echo br_netfilter | sudo tee /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 EOF sudo sysctl --system3. 组件安装与初始化3.1 容器运行时安装我推荐使用containerd作为运行时安装步骤如下# 安装containerd sudo yum install -y containerd.io sudo systemctl enable --now containerd # 配置cgroup驱动为systemd sudo containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.toml sudo systemctl restart containerd3.2 kubeadm/kubelet/kubectl安装配置Kubernetes仓库后安装三件套cat EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck1 repo_gpgcheck1 gpgkeyhttps://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 --disableexcludeskubernetes sudo systemctl enable --now kubelet4. 集群初始化实战4.1 Master节点初始化这是我常用的初始化命令模板sudo kubeadm init \ --pod-network-cidr10.244.0.0/16 \ --apiserver-advertise-addressMASTER_IP \ --control-plane-endpointLOAD_BALANCER_DNS:6443 \ --upload-certs关键参数说明--pod-network-cidr需要与后续安装的CNI插件匹配--control-plane-endpoint高可用集群必填指向负载均衡器--upload-certs自动生成并上传证书用于其他控制平面节点加入初始化成功后务必保存最后输出的join命令它长这样kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4.2 Worker节点加入在worker节点上直接运行上述join命令即可。如果token过期默认24小时可以在master上重新生成kubeadm token create --print-join-command5. 网络插件安装我偏好使用Calico这是经过生产验证的选择kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml安装后检查网络组件状态watch kubectl get pods -n kube-system直到所有pod都显示Running状态通常需要2-3分钟。6. 高可用集群扩展6.1 添加控制平面节点使用初始化时输出的control-plane join命令kubeadm join LOAD_BALANCER_DNS:6443 --token xxx \ --discovery-token-ca-cert-hash sha256:xxx \ --control-plane --certificate-key xxx6.2 配置负载均衡我通常使用HAProxy配置TCP负载均衡关键配置片段frontend k8s-api bind *:6443 mode tcp default_backend k8s-api-nodes backend k8s-api-nodes mode tcp balance roundrobin server master1 192.168.1.101:6443 check server master2 192.168.1.102:6443 check server master3 192.168.1.103:6443 check7. 集群验证与问题排查7.1 基本健康检查# 查看节点状态 kubectl get nodes -o wide # 检查核心组件状态 kubectl get pods -n kube-system # 运行测试pod kubectl run -it --rm --imagebusybox:1.28 test-pod -- sh7.2 常见问题处理问题1kubelet不断重启检查日志journalctl -xeu kubelet常见原因容器运行时未正确配置防火墙阻止了端口问题2Pod网络不通诊断步骤# 检查Calico pod日志 kubectl logs -n kube-system calico-pod-name # 验证路由 ip route show8. 生产环境优化建议8.1 证书管理默认证书有效期1年建议提前续期kubeadm certs renew all8.2 集群升级策略我采用的滚动升级方法# 升级kubeadm yum upgrade -y kubeadm # 检查升级计划 kubeadm upgrade plan # 执行升级 kubeadm upgrade apply v1.23.5 # 升级节点组件 kubectl drain node --ignore-daemonsets yum upgrade -y kubelet kubectl systemctl restart kubelet kubectl uncordon node8.3 关键监控指标必须监控的核心指标包括API server响应延迟etcd写入延迟节点CPU/内存压力Pod启动时间我通常使用PrometheusGrafana组合来监控这些指标。