1. 私有化部署Kubernetes集群的完整配置指南
作为云原生领域的从业者,我深知私有化部署Kubernetes集群时最让人头疼的不是技术本身,而是那些琐碎的配置细节。今天我就把我们团队经过数十个客户验证的配置清单完整分享出来,这份清单已经帮你避开了所有常见的坑。
2. 硬件配置:别在基础资源上省钱
2.1 测试环境配置(3节点)
测试环境主要用于功能验证和开发测试,但配置过低会导致连基本功能都无法正常运行:
- CPU:4核(低于这个数,连基本的调度压力测试都跑不起来)
- 内存:8GB(实测6GB就会频繁触发OOM)
- 系统盘:100GB SSD(系统日志和容器运行时至少需要60GB)
- 数据盘:200GB SSD(用于存储镜像和临时数据)
注意:很多团队试图用2核4G的配置来搭建测试环境,结果连Prometheus+Alertmanager这样的基础监控栈都跑不起来。
2.2 生产环境配置(5节点起)
生产环境必须考虑高可用和性能冗余:
- CPU:16核(考虑到kubelet、etcd等组件的资源消耗)
- 内存:64GB(每个节点至少预留4GB给系统进程)
- 系统盘:200GB SSD(生产环境日志量会大幅增加)
- 数据盘:1TB NVMe(分布式存储的性能瓶颈往往在IO)
我们强烈建议将Master和Worker节点分开部署。曾经有个客户为了省钱混部,结果一个批量任务就把控制面打挂了。
3. 网络配置:最容易忽视的关键环节
3.1 必须开放的端口
markdown复制6443 # API Server(Kubernetes控制面的入口)
10250 # Kubelet(节点与控制面通信)
2379-2380 # etcd(集群状态存储)
30000-32767 # NodePort(服务暴露端口)
3.2 网络性能要求
- 内网带宽:至少1Gbps(etcd对网络延迟极其敏感)
- 跨机房延迟:控制在10ms以内(超过这个值会导致leader频繁选举)
我们曾遇到一个案例:某客户在三个AZ部署集群,但AZ间延迟达到15ms,结果etcd出现了持续的leader切换,集群几乎不可用。
4. 系统预处理:这些步骤一个都不能少
4.1 基础配置
bash复制# 关闭swap(Kubernetes调度器依赖内存统计)
swapoff -a && sed -i '/swap/d' /etc/fstab
# 禁用SELinux(与容器运行时存在兼容性问题)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 关闭防火墙(或配置精确规则)
systemctl disable firewalld --now
4.2 时间同步
bash复制# 使用chrony同步时间
yum install -y chrony
systemctl enable chronyd --now
chronyc sources
血的教训:证书校验依赖时间同步,曾有客户因为时间不同步导致所有API调用都被拒绝。
5. 一键安装:Sealos的最佳实践
5.1 安装命令解析
bash复制sealos run labring/kubernetes:v1.27.7 \
labring/helm:v3.12.0 \
labring/calico:v3.26.1 \
--masters 192.168.1.10,192.168.1.11,192.168.1.12 \
--nodes 192.168.1.20,192.168.1.21
这条命令会自动化完成:
- 容器运行时(containerd)安装配置
- kubelet、kubeadm、kubectl安装
- etcd集群初始化
- 控制面组件部署
- CNI网络插件安装
5.2 版本选择建议
- Kubernetes:v1.27.x(LTS版本,已通过生产验证)
- Calico:v3.26.x(稳定性最好的CNI插件版本)
- Helm:v3.12.x(兼容当前主流Chart)
6. 存储方案选型指南
6.1 测试环境方案
markdown复制| 场景 | 推荐方案 | 优点 | 缺点 |
|--------------|---------------|-----------------------|---------------------|
| 功能验证 | local-path | 零配置,开箱即用 | 无高可用 |
| 开发测试 | hostPath | 直接使用本地磁盘 | 安全性差 |
6.2 生产环境方案
markdown复制| 场景 | 推荐方案 | 适用规模 | 注意事项 |
|--------------|---------------|-----------------------|---------------------|
| 单机房 | OpenEBS LocalPV| 中小集群(<50节点) | 需监控磁盘使用 |
| 多机房 | Ceph | 大规模集群 | 需要专业运维 |
| 混合云 | Longhorn | 跨云场景 | 性能损耗约15% |
个人建议:除非确实需要跨节点共享存储,否则优先使用LocalPV。分布式存储带来的复杂度往往超过其价值。
7. 部署后检查清单
7.1 基础状态检查
bash复制# 节点状态(所有节点应为Ready)
kubectl get nodes -o wide
# 系统组件(所有Pod应为Running)
kubectl get pods -n kube-system
# DNS解析测试
kubectl run test --image=busybox --rm -it -- nslookup kubernetes.default
7.2 进阶检查项
bash复制# etcd集群健康状态
kubectl exec -n kube-system etcd-$(hostname) -- etcdctl endpoint health
# 网络连通性测试
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80
kubectl run test --image=busybox --rm -it -- wget -O- nginx
8. 常见问题与避坑指南
8.1 Hostname冲突
问题表现:节点注册失败,日志中出现"already exists"错误。
解决方法:
bash复制# 为每台机器设置唯一hostname
hostnamectl set-hostname <unique-name>
8.2 磁盘空间不足
监控建议:
yaml复制# Prometheus告警规则示例
- alert: NodeDiskUsage
expr: 100 - (node_filesystem_avail_bytes{mountpoint="/var/lib/docker"} * 100 / node_filesystem_size_bytes{mountpoint="/var/lib/docker"}) > 85
for: 10m
8.3 内核版本问题
升级步骤:
bash复制# CentOS 7内核升级
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grub2-set-default 0
reboot
8.4 证书过期处理
预防措施:
bash复制# 查看证书有效期
kubeadm certs check-expiration
# 自动续期配置(kubeadm)
kubeadm init phase certs renew all
9. 性能调优建议
9.1 etcd优化参数
yaml复制# /etc/kubernetes/manifests/etcd.yaml 追加参数
- --auto-compaction-retention=1h
- --max-request-bytes=33554432
- --quota-backend-bytes=8589934592
9.2 kubelet配置调整
bash复制# /var/lib/kubelet/config.yaml 关键参数
cpuManagerPolicy: static
topologyManagerPolicy: single-numa-node
10. 监控与日志方案
10.1 基础监控栈
bash复制# 使用Prometheus-Operator部署
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack
10.2 日志收集方案
bash复制# 使用Loki+Promtail
helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack
这套配置我们已经在上百个集群中验证过稳定性。如果遇到问题,建议直接查看组件日志:
bash复制# 查看kubelet日志
journalctl -u kubelet -f
# 查看容器运行时日志
journalctl -u containerd -f
最后分享一个实用技巧:在安装前使用kube-bench运行CIS基准测试,可以提前发现安全配置问题:
bash复制docker run --rm --pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest run