news 2026/10/29 7:43:35

单Master节点Kubernetes生产集群实战部署指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单Master节点Kubernetes生产集群实战部署指南

1. 项目概述

最近在帮客户部署生产级Kubernetes集群时,发现很多技术文档要么过于简单要么太过复杂。今天我就来分享一个经过实战验证的单Master节点K8S集群搭建方案,这个配置已经在多个中小型生产环境稳定运行超过2年。

为什么选择单Master架构?对于日均访问量在5万以下的中小型应用,单Master完全能够满足需求。相比多Master集群,它的部署和维护成本要低得多。我们团队实测单Master节点可以轻松支撑50个Node和300+Pod的稳定运行。

2. 环境准备与系统配置

2.1 硬件配置建议

生产环境的最低配置要求:

  • Master节点:4核CPU/8GB内存/100GB SSD
  • Worker节点:根据业务需求调整
  • 网络:千兆内网,建议使用独立网卡

重要提示:千万不要在Master节点上混部业务Pod!这个节点应该专用于集群控制平面。

2.2 操作系统优化

以CentOS 7.9为例,必须进行的系统配置:

# 关闭Swap swapoff -a sed -i '/swap/s/^/#/' /etc/fstab # 关闭SELinux setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 配置内核参数 cat <<EOF > /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 sysctl --system

3. 核心组件安装与配置

3.1 容器运行时选择

虽然Docker已经不再是K8S官方推荐的运行时,但在生产环境中它仍然是最稳定的选择。我们使用以下版本组合:

# 安装Docker CE yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce-20.10.12 docker-ce-cli-20.10.12 containerd.io-1.4.12 systemctl enable docker && systemctl start docker # 配置Docker镜像加速和cgroup驱动 mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": ["https://registry.docker-cn.com"] } EOF systemctl restart docker

3.2 kubeadm工具安装

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 安装指定版本(这里选择1.22.6长期支持版) yum install -y kubelet-1.22.6 kubeadm-1.22.6 kubectl-1.22.6 systemctl enable kubelet

4. 集群初始化实战

4.1 初始化Master节点

这是最关键的步骤,我们使用自定义配置:

kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.22.6 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs

初始化完成后,务必保存最后的join命令输出!这个token默认24小时有效。

4.2 网络插件部署

我们选择Calico作为网络插件,它提供了更好的网络策略支持:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

验证网络插件状态:

kubectl get pods -n kube-system -l k8s-app=calico-node

5. 生产环境关键配置

5.1 证书自动续期

单Master集群最大的风险是证书过期。配置自动续期:

# 修改kubelet配置 sed -i 's/rotateCertificates: false/rotateCertificates: true/' /var/lib/kubelet/config.yaml systemctl restart kubelet # 设置自动批准 kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: auto-approve-csrs-for-group subjects: - kind: Group name: system:bootstrappers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: system:certificates.k8s.io:certificatesigningrequests:nodeclient apiGroup: rbac.authorization.k8s.io EOF

5.2 关键组件高可用

虽然我们是单Master,但仍可以做一些高可用配置:

  1. etcd定期备份
# 创建备份脚本 cat > /usr/local/bin/etcd-backup.sh <<'EOF' #!/bin/bash DATE=$(date +%Y%m%d) ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save /data/etcd-snapshot-${DATE}.db EOF chmod +x /usr/local/bin/etcd-backup.sh # 添加定时任务 (crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/etcd-backup.sh") | crontab -

6. 常见问题排查

6.1 节点NotReady问题

这是最常见的问题,排查步骤:

  1. 检查kubelet状态
journalctl -u kubelet -n 50 --no-pager
  1. 检查网络插件日志
kubectl logs -n kube-system <calico-pod-name>
  1. 检查网络连通性
ping <其他节点IP> curl -I https://<master-ip>:6443

6.2 Pod创建失败

典型错误及解决方案:

  1. ImagePullBackOff:
# 检查镜像名称是否正确 kubectl describe pod <pod-name> # 临时解决方案(不推荐生产环境) kubectl edit deployment <deployment-name> # 将imagePullPolicy改为IfNotPresent
  1. CrashLoopBackOff:
# 查看容器日志 kubectl logs <pod-name> --previous

7. 性能优化建议

7.1 API Server调优

# 修改/etc/kubernetes/manifests/kube-apiserver.yaml - --max-requests-inflight=1500 - --max-mutating-requests-inflight=500

7.2 kubelet配置优化

# 修改/var/lib/kubelet/config.yaml evictionHard: memory.available: "500Mi" nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "15%"

8. 安全加固措施

8.1 RBAC基础配置

# 创建管理员用户 kubectl create serviceaccount admin-user -n kube-system kubectl create clusterrolebinding admin-user-binding \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:admin-user

8.2 网络策略示例

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress

在实际部署中,我们还需要考虑监控方案(如Prometheus+Granfa)、日志收集(EFK栈)和备份策略等。这些内容我会在后续文章中详细展开。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 7:43:29

DuckDB与MySQL在大数据查询性能上的对比分析

1. 超大数据集查询性能对比的必要性在数据量爆炸式增长的今天&#xff0c;处理超大规模数据集已成为数据工程师和分析师的日常挑战。最近我在一个包含3亿条记录的用户行为分析项目中&#xff0c;遇到了传统关系型数据库查询性能瓶颈的问题。这促使我系统性地对比测试了DuckDB和…

作者头像 李华
网站建设 2026/10/29 7:43:24

修复版微信壁纸表情包头像小程序源码:流量主接入前必填的五个坑

简介&#xff1a;这份修复版微信壁纸表情包头像小程序源码&#xff0c;面向希望快速搭建个性化内容平台并实现流量变现的开发者&#xff0c;尤其适合具备一定前端与后端基础、想切入小程序开发领域的人群。源码开源未加密、无授权限制&#xff0c;包含可对接支付的企业版与免支…

作者头像 李华
网站建设 2026/10/29 7:43:19

WorkBuddy+Obsidian:公式教材结构化与自动出题全流程

备课&#xff0c;应该是培训行业里最容易被低估的“隐形加班”。尤其是理工科、财会、工程类培训&#xff0c;一份公式教材从整理到出题&#xff0c;工作量远比想象中大。我见过太多讲师把周末耗在 Word 里敲公式&#xff0c;或者为了凑一套阶段测验翻遍三年前的讲义。直到我把…

作者头像 李华
网站建设 2026/10/29 7:43:19

扩散模型在多智能体系统全局状态重建中的应用

1. 项目概述GlobeDiff是一项针对多智能体系统中部分可观测性难题的创新解决方案。这个由扩散模型驱动的框架&#xff0c;能够从局部观测数据中重建全局状态&#xff0c;为分布式决策系统提供了全新的技术路径。我在研究多智能体强化学习系统时&#xff0c;经常遇到因局部观测导…

作者头像 李华
网站建设 2026/10/29 7:43:17

Fetch API二进制数据处理:Blob与ArrayBuffer实战指南

1. 为什么Fetch API的响应处理会成为前端开发的"隐形杀手"&#xff1f;第一次遇到Fetch API响应处理问题时&#xff0c;我正在为一个金融项目开发文件导出功能。当用户点击"导出Excel"按钮时&#xff0c;前端需要从服务器获取二进制数据并生成下载链接。我…

作者头像 李华
网站建设 2026/10/29 7:43:15

Java工程师如何将AI Agent集成到高并发Spring Boot生产系统

1. 这不是“学个框架就上岗”&#xff0c;而是Java工程师的二次能力重构我带过三届校招Java后端&#xff0c;也做过五年AI方向技术顾问。去年有位在某电商做订单履约系统的 senior engineer 找我聊转型&#xff0c;他说&#xff1a;“我看了十多个LangChain4j教程&#xff0c;照…

作者头像 李华