Kubernetes 是云原生应用编排的核心平台。本文档提供生产级 Kubernetes 集群部署方案,涵盖架构设计、环境准备、组件安装、网络配置、安全加固、性能优化和故障排查等全流程内容,适用于学习和生产环境。
适用版本与环境说明:
Kubernetes: 1.28.x - 1.33.x(本文以 v1.33.6 为示例)
Containerd: 1.7.x 及以上版本
Flannel: v0.27.x 及以上版本
操作系统: Debian 12 (Trixie)/Ubuntu 22.04+/CentOS 7.9+/Rocky Linux 9+
内核版本: 建议 5.4+ 以支持完整的容器网络特性
更新日期: 2025-11-13(建议关注 Kubernetes 官方版本更新公告)
Kubernetes 版本迭代较快,部署前请访问 Kubernetes Releases 查看最新稳定版本和版本兼容性矩阵。
Kubernetes 架构概述 Kubernetes 架构概述 Control Plane 组件
组件
功能
生产要求
kube-apiserver
集群 API 入口,认证授权
3+ 副本,负载均衡
etcd
分布式键值存储,保存集群状态
3+ 节点,定期备份
kube-scheduler
Pod 调度决策
多副本,Leader选举
kube-controller-manager
控制器管理(Deployment、Node等)
多副本,Leader选举
cloud-controller-manager
云平台集成控制器
可选,云环境必需
Worker Node 组件
组件
功能
配置要点
kubelet
节点代理,与 API Server 通信
配置资源预留
kube-proxy
服务代理,实现 Service
iptables/IPVS 模式
Container Runtime
容器运行时(containerd/Docker)
systemd cgroup 驱动
网络模型 Kubernetes 网络需满足四个要求:
所有 Pod 不使用 NAT 即可相互通信
所有 Node 不使用 NAT 即可与所有 Pod 通信
Pod 看到的自身 IP 与其他 Pod 看到的 IP 相同
Service 的 ClusterIP 可在集群内访问
部署架构 单控制平面架构(测试环境) ┌─────────────────────────────────────────┐ │ Control Plane (192.168.199.135) │ │ ├─ kube-apiserver (6443) │ │ ├─ etcd (2379-2380) │ │ ├─ kube-scheduler │ │ ├─ kube-controller-manager │ │ └─ kubelet │ └─────────────────────────────────────────┘ │ │ Pod Network (10.244.0.0/16) │ ┌─────────────────────────────────────────┐ │ Worker Node (192.168.199.136) │ │ ├─ kubelet │ │ ├─ kube-proxy │ │ └─ Pods (业务应用) │ └─────────────────────────────────────────┘
高可用架构(生产环境) ┌────────────────────────────────────────────────────┐ │ Load Balancer (HAProxy/Nginx) │ │ VIP: 192.168.1.100 │ └────────────────────────────────────────────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Master 1 │ │ Master 2 │ │ Master 3 │ │ API Server │ │ API Server │ │ API Server │ │ etcd │ │ etcd │ │ etcd │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ └────────────────────┴────────────────────┘ │ ┌──────────────────┼──────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Worker 1 │ │ Worker 2 │ │ Worker 3 │ └──────────────┘ └──────────────┘ └──────────────┘
高可用要点:
etcd 集群:3 或 5 节点,奇数配置
API Server:多副本 + 负载均衡
控制器:内置 Leader 选举机制
网络:跨节点 Pod 通信,Service 负载均衡
前置要求 硬件资源配置
环境
CPU
内存
存储
说明
测试环境
2核
2GB
20GB
最小配置,仅用于学习
开发环境
4核
4GB
50GB
推荐配置,支持轻量应用
生产环境
8核+
16GB+
100GB+
SSD存储,独立etcd
大规模集群
16核+
32GB+
200GB+
高IO性能,专用磁盘
生产环境补充建议:
Master节点:CPU预留1核,内存预留2GB给系统进程
Worker节点:根据应用负载动态调整
etcd数据:独立SSD磁盘,避免IO竞争
网络带宽:至少1Gbps,生产推荐10Gbps
网络配置要求 必需开放的端口 Control Plane节点:
端口
协议
服务
说明
6443
TCP
API Server
Kubernetes API入口
2379-2380
TCP
etcd
etcd服务端口
10250
TCP
Kubelet
节点状态和日志
10251
TCP
Scheduler
调度器端口
10252
TCP
Controller
控制器端口
10257
TCP
kube-controller-manager
安全端口
10259
TCP
kube-scheduler
安全端口
Worker节点:
端口
协议
服务
说明
10250
TCP
Kubelet
节点通信
10256
TCP
kube-proxy
代理健康检查
30000-32767
TCP
NodePort
服务暴露端口
网络插件端口
网络插件
端口
说明
Flannel
8285/8472
VXLAN通信
Calico
179/4789
BGP/VXLAN
Cilium
4240/8472
健康检查/VXLAN
系统检查清单 执行以下检查确保系统就绪:
ip link | grep link /ether cat /sys/class/dmi/id/product_uuidfree | grep Swap timedatectl status systemctl status systemd-timesyncd uname -rdf -hfree -g lscpu
安装步骤 配置 APT 源(两台 VM) 使用清华 TUNA 镜像加速软件包下载:
nano /etc/apt/sources.list
替换为以下内容:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie main contrib non-free-firmware deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie main contrib non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-updates main contrib non-free-firmware deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-updates main contrib non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-backports main contrib non-free-firmware deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-backports main contrib non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ trixie-security main contrib non-free-firmware deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security/ trixie-security main contrib non-free-firmware
禁用 Swap(两台 VM) Kubelet 无法在启用 Swap 的系统上运行:
sudo swapoff -asudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstabfree | grep Swap | awk '{print $2}'
安装并配置容器运行时(两台 VM) 使用 Containerd 作为容器运行时(Kubernetes 1.24+ 推荐):
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlaysudo modprobe br_netfiltercat <<EOF | sudo tee /etc/sysctl.d/k8s.conf # Kubernetes 必需参数 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 # 性能优化参数 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 net.core.netdev_max_backlog = 5000 vm.swappiness = 10 vm.max_map_count = 262144 fs.file-max = 655350 EOF sudo sysctl --systemsudo apt updatesudo apt install -y containerdsudo mkdir -p /etc/containerdsudo containerd config default | sudo tee /etc/containerd/config.tomlsudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.tomlsudo sed -i 's|registry.k8s.io/pause:3\.[0-9]\+|registry.aliyuncs.com/google_containers/pause:3.10|g' /etc/containerd/config.tomlsudo systemctl enable --now containerdsudo systemctl status containerdsudo ctr versionsudo ctr config dump | grep -A5 "plugins"
Containerd 生产级配置详解:
[plugins."io.containerd.grpc.v1.cri"] enable_tls_streaming = false [plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "overlayfs" default_runtime_name = "runc" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry.aliyuncs.com" ]
安装 Kubeadm、Kubelet、Kubectl(两台 VM) 添加 Kubernetes 官方仓库并安装 v1.33 版本:
sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificates curl gnupgcurl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet=1.33.* kubeadm=1.33.* kubectl=1.33.*sudo apt-mark hold kubelet kubeadm kubectlkubeadm version
初始化 Control Plane(仅 VM 1 - Master 节点) 前置条件: 记录 Master 节点的 IP 地址(本例为 192.168.199.135)
sudo kubeadm init \ --apiserver-advertise-address=192.168.199.135 \ --pod-network-cidr=10.244.0.0/16 \ --kubernetes-version v1.33.6 \ --image-repository registry.aliyuncs.com/google_containers
初始化完成后,终端会输出:
kubectl 配置命令
kubeadm join 命令 (必须保存供 Worker 节点使用)
配置 Kubectl(仅 VM 1) mkdir -p $HOME /.kubesudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/configsudo chown $(id -u):$(id -g) $HOME /.kube/configkubectl get nodes
Worker Node 加入集群(仅 VM 2) 在 VM 2 上执行步骤 5 中保存的 kubeadm join 命令:
sudo kubeadm join 192.168.199.135:6443 --token <YOUR_TOKEN> \ --discovery-token-ca-cert-hash sha256:<YOUR_HASH>
<YOUR_TOKEN> 和 <YOUR_HASH> 来自步骤 5 的输出。
部署网络插件 - Flannel(VM 1 或任意有 kubectl 访问的节点) Kubernetes 需要网络插件实现 Pod 间通信。我们使用 Flannel:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml kubectl get pods -n kube-system | grep flannel kubectl get pods -n kube-system
预加载 Flannel 镜像(两台 VM - 可选但推荐) 如果网络不稳定或镜像下载缓慢,可提前在两台 VM 上加载 Flannel 镜像:
方案一:直接拉取镜像
sudo ctr image pull ghcr.io/flannel-io/flannel:v0.27.4sudo ctr image pull ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1
方案二:本地打包后导入
如果镜像源不可达,可在能访问外网的机器上下载后导入:
docker pull ghcr.io/flannel-io/flannel:v0.27.4 docker pull ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1 docker save -o flannel_images.tar \ ghcr.io/flannel-io/flannel:v0.27.4 \ ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1 sudo ctr --namespace k8s.io image import flannel_images.tarsudo ctr images list | grep flannelsudo ctr --namespace k8s.io images list | grep flannel
修复 CNI 插件路径(两台 VM) 如果 CoreDNS Pod 仍无法启动,执行以下修复:
sudo mkdir -p /usr/lib/cnicd /usr/lib/cni/for plugin in /opt/cni/bin/*; do sudo ln -sf "$plugin " "$(basename $plugin) " done ls -lh /usr/lib/cni/sudo systemctl restart kubeletkubectl get pods -n kube-system
集群验证 最终验证(VM 1) kubectl get nodes kubectl get pods -n kube-system kubectl cluster-info kubectl run test-pod --image=nginx --port=80 kubectl get pods kubectl delete pod test-pod
常见验证命令 kubectl describe node <NODE_NAME> kubectl top nodes kubectl get events -n kube-system kubectl get cs
故障排除 故障诊断流程图 ┌─────────────────────────────────────────────────────────────┐ │ Kubernetes 集群故障诊断流程 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────┐ │ 1. 检查节点状态 │ │ kubectl get nodes │ └──────────────────────────────────┘ │ ┌────────┴────────┐ │ │ Ready NotReady │ │ ▼ ▼ ┌──────────────┐ ┌──────────────────┐ │ 2. 检查Pod │ │ 检查 kubelet │ │ 状态 │ │ 日志和网络插件 │ └──────────────┘ └──────────────────┘ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ 3. 检查系统组件 │ │ 重启 kubelet │ │ Pod 状态 │ │ 修复 CNI 配置 │ └──────────────────┘ └──────────────────┘ │ ┌────────┴─────────┐ │ │ Running Pending/CrashLoopBackOff │ │ ▼ ▼ ┌────────────┐ ┌──────────────────┐ │ 集群正常 │ │ 检查 Pod 日志 │ └────────────┐ │ 修复镜像/配置 │ └──────────────────┘
诊断命令链 kubectl get nodes -o wide kubectl describe node <node-name> kubectl top nodes sudo systemctl status kubeletsudo journalctl -u kubelet -n 100 --no-pagerkubectl get pods -n kube-system -o wide kubectl describe pod <pod-name> -n kube-system kubectl logs <pod-name> -n kube-system kubectl logs <pod-name> -n kube-system --previous kubectl get componentstatuses kubectl get pods -n kube-system | grep -E "flannel|calico|cilium" ls -la /etc/cni/net.d/cat /etc/cni/net.d/*.confkubectl logs -n kube-system <flannel-pod-name> kubectl run test-pod --image=busybox --restart=Never --rm -it -- ping <pod-ip>
问题:节点处于 NotReady 状态 原因分析:
网络插件未部署或未就绪
kubelet 服务异常
CNI 配置错误
容器运行时异常
解决方案:
kubectl get pods -n kube-system | grep flannel kubectl logs -n kube-system <FLANNEL_POD_NAME> kubectl describe pod -n kube-system <FLANNEL_POD_NAME> sudo journalctl -u kubelet -fsudo systemctl status containerdsudo journalctl -u containerd -n 50sudo systemctl restart kubeletls -la /opt/cni/bin/ls -la /etc/cni/net.d/kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证修复:
问题:CoreDNS Pod 处于 Pending 状态 原因分析:
CNI 插件路径配置不正确
网络插件未就绪
节点资源不足
解决方案: 执行步骤 9 的修复步骤
sudo mkdir -p /usr/lib/cnicd /usr/lib/cni/for plugin in /opt/cni/bin/*; do sudo ln -sf "$plugin " "$(basename $plugin) " done ls -lh /usr/lib/cni/sudo systemctl restart kubeletkubectl get pods -n kube-system | grep coredns kubectl describe pod -n kube-system <coredns-pod-name>
问题:kubeadm join 失败 原因分析:
Token 过期(默认 24 小时有效)
CA 证书哈希不匹配
Master 节点 API Server 不可达
端口 6443 被防火墙阻止
解决方案:
kubeadm token create --print-join-command kubeadm token list openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash > ping <master-ip> curl -k https://<master-ip>:6443/version sudo ufw status | grep 6443sudo iptables -L -n | grep 6443
问题:Pod 无法启动(镜像拉取失败) 原因分析:
镜像仓库不可达
镜像不存在或版本错误
需要认证但未配置 Secret
网络策略阻止下载
解决方案:
kubectl describe pod <pod-name> -n <namespace> sudo ctr image pull <image-name>docker pull <image-name> [plugins."io.containerd.grpc.v1.cri" .registry.mirrors."docker.io" ] endpoint = ["https://registry.aliyuncs.com" ] sudo systemctl restart containerdkubectl create secret docker-registry regcred \ --docker-server=<registry-server> \ --docker-username=<username> \ --docker-password=<password> spec: imagePullSecrets: - name: regcred
获取调试日志 sudo journalctl -u kubelet -fsudo journalctl -u containerd -fkubectl logs -n kube-system kube-apiserver-<master-node-name> kubectl logs -n kube-system kube-scheduler-<master-node-name> kubectl logs -n kube-system kube-controller-manager-<master-node-name> kubectl logs -n kube-system etcd-<master-node-name> sudo crictl logs <container-id>kubectl get events -n kube-system --sort-by='.lastTimestamp'
常用命令参考 kubectl get nodes kubectl get pods -A kubectl get svc -A kubectl get events -n kube-system kubectl cordon <NODE_NAME> kubectl uncordon <NODE_NAME> kubectl drain <NODE_NAME> kubectl logs -n kube-system <POD_NAME> kubectl describe pod <POD_NAME> kubectl cluster-info kubectl api-resources
参考资源 官方文档
Kubernetes 官方文档
kubeadm 官方指南
kubeadm 配置参考
Kubernetes 版本支持政策
Kubernetes 发行说明
Flannel 官方文档
Containerd 官方文档
Containerd 配置指南
安全与加固
CIS Kubernetes Benchmark - Kubernetes 安全配置基准
Kubernetes 安全最佳实践
Pod Security Standards
Kubernetes 安全审计
RBAC 配置指南
网络与 CNI
Kubernetes 网络模型
CNI 插件规范
Flannel 网络配置
Calico 网络策略
Cilium 网络方案
高可用与运维
Kubernetes 高可用拓扑
etcd 运维指南
Kubernetes 备份与恢复
Kubernetes 监控架构
kubelet 配置参考
社区与工具
Kubernetes GitHub 仓库
kubeadm GitHub
Kubernetes Enhancement Proposals (KEP)
Kubernetes Slack 社区
Kubernetes Issue 跟踪
进阶阅读
《Kubernetes 权威指南》
云原生计算基金会 (CNCF)
Kubernetes 安全白皮书
生产级 Kubernetes 部署检查清单
生产环境优化配置 Kubelet 资源预留 编辑 /var/lib/kubelet/config.yaml(或通过 kubeadm 配置):
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration systemReserved: cpu: "500m" memory: "1Gi" ephemeral-storage: "10Gi" kubeReserved: cpu: "500m" memory: "1Gi" ephemeral-storage: "10Gi" evictionHard: memory.available: "500Mi" nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "10%" maxPods: 110 imageGCHighThresholdPercent: 85 imageGCLowThresholdPercent: 80
应用配置:
sudo systemctl restart kubeletkubectl describe node | grep -A5 "Allocated resources"
API Server 性能调优 高并发场景配置(添加到 kubeadm init 参数):
sudo kubeadm init \ --apiserver-advertise-address=192.168.199.135 \ --pod-network-cidr=10.244.0.0/16 \ --kubernetes-version v1.33.6 \ --image-repository registry.aliyuncs.com/google_containers \ --apiserver-extra-args=--max-requests-inflight=800 \ --apiserver-extra-args=--max-mutating-requests-inflight=400 \ --apiserver-extra-args=--default-not-ready-toleration-seconds=300 \ --apiserver-extra-args=--default-unreachable-toleration-seconds=300
etcd 性能优化 编辑 /etc/kubernetes/manifests/etcd.yaml:
spec: containers: - command: - etcd - --snapshot-count=10000 - --heartbeat-interval=200 - --election-timeout=2000 - --quota-backend-bytes=8589934592 - --auto-compaction-retention=1h
安全加固配置 RBAC 最小权限原则 创建命名空间管理员角色:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: production name: namespace-admin rules: - apiGroups: ["" , "apps" , "extensions" ] resources: ["*" ] verbs: ["get" , "list" , "watch" , "create" , "update" , "patch" , "delete" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: production name: namespace-admin-binding subjects: - kind: User name: dev-user apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: namespace-admin apiGroup: rbac.authorization.k8s.io
Pod 安全策略(PSP) 使用 Pod Security Standards:
apiVersion: v1 kind: Namespace metadata: name: production labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/enforce-version: latest pod-security.kubernetes.io/audit: restricted pod-security.kubernetes.io/audit-version: latest pod-security.kubernetes.io/warn: restricted pod-security.kubernetes.io/warn-version: latest
网络策略(Network Policy) 限制命名空间间通信:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny namespace: production spec: podSelector: {} policyTypes: - Ingress - Egress --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-same-namespace namespace: production spec: podSelector: {} ingress: - from: - podSelector: {} egress: - to: - podSelector: {}
集群证书轮换 证书有效期检查与更新:
kubeadm certs check-expiration kubeadm certs renew all sudo kill -s SIGHUP $(pidof kube-apiserver)sudo kill -s SIGHUP $(pidof kube-controller-manager)sudo kill -s SIGHUP $(pidof kube-scheduler)cp /etc/kubernetes/admin.conf ~/.kube/config
监控与运维 集群健康检查脚本 cat << 'EOF' > k8s-health-check.shecho "=== Kubernetes Cluster Health Check ===" echo "" echo "1. Node Status:" kubectl get nodes -o wide echo "" echo "2. System Pods Status:" kubectl get pods -n kube-system echo "" echo "3. Resource Usage:" kubectl top nodes kubectl top pods -A --sort-by=memory | head -n 10 echo "" echo "4. Certificate Expiration:" kubeadm certs check-expiration echo "" echo "5. Component Health:" kubectl get componentstatuses echo "" echo "6. Recent Events:" kubectl get events -A --sort-by='.lastTimestamp' | tail -n 20 echo "" echo "7. Cluster Info:" kubectl cluster-info EOF chmod +x k8s-health-check.sh./k8s-health-check.sh
etcd 备份与恢复 备份脚本:
cat << 'EOF' > etcd-backup.shBACKUP_DIR="/backup/etcd" DATE=$(date +%Y%m%d-%H%M%S) ETCDCTL_API=3 etcdctl snapshot save ${BACKUP_DIR} /etcd-snapshot-${DATE} .db \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key find ${BACKUP_DIR} -name "*.db" -mtime +7 -delete EOF chmod +x etcd-backup.sh
恢复流程:
sudo systemctl stop kubeletsudo crictl stopp $(sudo crictl pods -q)sudo crictl rmp $(sudo crictl pods -q)ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd/etcd-snapshot.db \ --data-dir=/var/lib/etcd-restore sudo mv /var/lib/etcd /var/lib/etcd-oldsudo mv /var/lib/etcd-restore/member /var/lib/etcdsudo systemctl start kubelet
日志收集配置 配置 Fluent Bit:
apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: kube-system data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Parsers_File parsers.conf [INPUT ] Name tail Path /var/log/containers/*.log Parser cri Tag kube.* Mem_Buf_Limit 10MB [FILTER ] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token [OUTPUT ] Name forward Match * Host fluentd-server Port 24224
最佳实践建议 镜像管理
使用私有仓库(Harbor、Nexus)
镜像扫描(Trivy、Clair)
版本锁定(避免使用 latest)
预加载关键镜像到节点
资源管理
设置合理的 requests/limits
使用 LimitRange 和 ResourceQuota
配置 Horizontal Pod Autoscaler (HPA)
启用 Vertical Pod Autoscaler (VPA)
网络配置
选择合适的 CNI 插件
配置网络策略隔离
使用 Service Mesh(Istio)进行流量管理
监控网络性能指标
存储管理
使用动态存储 provisioning
配置 StorageClass 多级别存储
定期备份 PVC 数据
监控存储使用情况
高可用配置
多 Master 节点(至少3个)
etcd 集群独立部署(大规模场景)
配置 Pod 反亲和性
使用 PodDisruptionBudget (PDB)