温馨提示×

Kubernetes在Linux上的最佳实践

小樊
41
2025-11-20 19:26:51
栏目: 智能运维

Linux 上部署与运行 Kubernetes 的最佳实践

一 基础环境与系统配置

  • 操作系统与内核:优先选择 Ubuntu 20.04/22.04 LTSCentOS Stream 8+/Rocky Linux 8+,保持内核与驱动为较新稳定版本,避免使用过旧内核。
  • 资源基线:每节点至少 2 核 CPU、2GB 内存、20GB 存储;生产建议更高规格并配备 SSD/NVMe
  • 主机与网络:节点间 SSH 免密互通,按规划开放或放行 6443(API Server)10250(kubelet) 等端口;统一 NTP 时间同步
  • 关键系统设置:
    • 禁用 Swap(临时:swapoff -a;永久:注释 /etc/fstab 中 swap 行)。
    • RHEL/CentOS 上临时关闭 SELinux 并修改 /etc/selinux/configSELINUX=disabled(生产请结合安全策略评估)。
    • 启用 IPv4 转发br_netfilternet.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1
    • 提升系统资源上限:fs.file-maxfs.inotify.max_user_instancesfs.inotify.max_user_watches 等。
  • 容器运行时:优先 containerd(轻量高效),或 CRI-O;安装后确保 systemd cgroup 驱动 一致(常见为 systemd)。

二 集群搭建与网络选型

  • 组件安装:在所有节点安装并启用 kubeadm、kubelet、kubectl,建议固定版本以避免非预期升级。
  • 初始化控制面:
    • 预先拉取镜像(国内可用镜像仓库)以避免网络波动:kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.32.1
    • 初始化示例:kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.32.1 --pod-network-cidr=10.244.0.0/16(CIDR 需与网络插件匹配)。
  • 加入工作节点:使用 kubeadm join 命令加入集群。
  • 网络插件:
    • Flannel:简单易用,默认 10.244.0.0/16
    • Calico:生产常用,默认 192.168.0.0/16
    • Cilium:基于 eBPF,高性能并支持高级网络策略。
  • 验证:kubectl get nodeskubectl get pods -A 检查节点与系统 Pod 状态。

三 性能与安全加固

  • 内核与网络调优:
    • 提升连接与缓冲:net.core.somaxconnnet.core.rmem_maxnet.core.wmem_maxnet.ipv4.tcp_max_syn_backlognet.ipv4.tcp_max_tw_buckets
    • 连接跟踪:net.netfilter.nf_conntrack_maxnet.netfilter.nf_conntrack_tcp_timeout_established 结合业务调优。
    • 虚拟内存与文件监控:vm.max_map_count(如 Elasticsearch/MongoDB 受益)、fs.inotify 系列。
  • 容器运行时与 kubelet:
    • containerd 使用 systemd cgroup 驱动;日志轮转:max-size=100m
    • kubelet 合理设置 –max-pods,避免超出节点可承载 Pod 上限。
  • kube-proxy:高并发场景优先 IPVS 模式,减少 iptables 规则膨胀带来的性能瓶颈。
  • etcd:部署 3/5 节点 HA,数据落 SSD;按需调整 –quota-backend-bytes–heartbeat-interval–election-timeout
  • API Server:结合规模调大 –max-requests-inflight–max-mutating-requests-inflight,并优化 watch 缓存 相关参数。
  • 安全基线:
    • 禁用 Swap、最小权限 RBAC、镜像来源可信、Pod Security(如 PodSecurity 标准或 OPA/Gatekeeper)、网络策略(默认拒绝)。

四 存储 调度 与可观测性

  • 存储:为数据库/日志等 I/O 密集负载选择 SSD/高性能云盘;通过 StorageClass 提供差异化性能层级;有状态应用优先 StatefulSet动态供给
  • 调度与资源治理:
    • Namespace/Pod 设置 ResourceQuota/LimitRange;为关键负载配置 requests/limits
    • 使用 Node/Pod Affinity/Anti-AffinityTaints/Tolerations 实现拓扑与干扰隔离。
    • 滚动升级策略:合理设置 maxSurge/maxUnavailable,保障零或低停机发布。
  • 自动扩缩容:部署 Metrics Server,启用 HPA(CPU/内存/自定义指标)。
  • 可观测性:
    • 监控告警:Prometheus + Grafana 覆盖节点、Pod、网络、etcd 等关键指标。
    • 日志聚合:EFK(Elasticsearch/Fluentd/Kibana) 或 Loki/ClickHouse 等方案。
  • 版本与变更:制定 升级策略(如按小版本逐步升级)、备份与恢复(etcd 快照、应用与配置备份)、Runbook 与演练。

五 生产落地清单

领域 关键动作 建议值或工具
操作系统 基线加固、内核网络与文件句柄 vm.max_map_count=262144fs.file-max=1000000net.core.somaxconn=4096
容器运行时 使用 containerd、启用 systemd cgroup systemd cgroup 驱动、日志 max-size=100m
网络 选择 CNI、规划 Pod/Service CIDR Flannel(10.244.0.0/16)、Calico(192.168.0.0/16)、Cilium(eBPF)
高可用 多 Master + 多 etcd 3/5 节点 etcd,LB 前置 API Server
调度 资源配额与亲和性 ResourceQuota、Affinity/Anti-Affinity、Taints/Tolerations
伸缩 HPA 与集群扩缩 Metrics Server、HPA(CPU/内存/自定义)
可观测性 监控与日志 Prometheus/Grafana、EFK/Loki
升级与备份 版本策略与灾备 小版本滚动升级、定期 etcd 快照与配置备份

0