从零到一:Kubernetes 生产环境部署全流程指南
2025.09.26 16:44浏览量:1简介:本文详细阐述 Kubernetes 集群的部署流程,涵盖环境准备、集群搭建、核心组件配置及运维实践,提供可落地的生产级部署方案。
一、部署前环境准备与规划
1.1 基础设施选型
生产环境部署需根据业务规模选择基础设施:
- 云平台方案:AWS EKS、Azure AKS、GCP GKE 提供托管服务,简化运维但灵活性受限
- 物理机方案:适合对数据主权要求高的场景,需自行搭建网络存储(如Ceph)
- 虚拟机方案:推荐使用KVM或VMware,需确保嵌套虚拟化支持
硬件配置建议(以3节点控制平面为例):
| 角色 | CPU核心 | 内存 | 存储 | 网络带宽 |
|——————|————-|———-|———-|—————|
| 控制节点 | 4核 | 16GB | 200GB | 1Gbps |
| 工作节点 | 8核 | 32GB+ | 500GB | 10Gbps |
1.2 操作系统优化
推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需进行以下优化:
# 禁用交换分区(Kubernetes要求)swapoff -ased -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 配置内核参数cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOFsysctl --system# 安装容器运行时(以containerd为例)cat <<EOF > /etc/modules-load.d/containerd.confoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter
1.3 网络拓扑设计
推荐采用三层网络架构:
- 物理网络层:使用VXLAN或NVGRE实现跨主机通信
- 集群网络层:配置Calico或Cilium实现网络策略
- 服务网格层:可选部署Istio或Linkerd
CIDR分配方案示例:
- 服务CIDR:10.96.0.0/12
- Pod CIDR:10.244.0.0/16(每个节点256个IP)
- 集群DNS:10.96.0.10
二、集群安装与配置
2.1 控制平面部署
使用kubeadm初始化控制平面(v1.27+示例):
# 初始化命令(需替换${API_SERVER_CERT_SAN})kubeadm init --control-plane-endpoint=${LOAD_BALANCER_IP} \--apiserver-advertise-address=${CONTROL_PLANE_IP} \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--apiserver-cert-extra-sans=${API_SERVER_CERT_SAN}# 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2 工作节点加入
获取join命令后执行:
# 在控制节点执行kubeadm token create --print-join-command# 在工作节点执行(需替换${JOIN_COMMAND})${JOIN_COMMAND} \--node-name=${NODE_NAME} \--cri-socket=/run/containerd/containerd.sock
2.3 核心组件安装
网络插件部署(Calico示例)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml# 修改配置中的CALICO_IPV4POOL_CIDR为10.244.0.0/16
存储类配置(以本地存储为例)
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer
三、生产级增强配置
3.1 高可用架构
推荐使用N+1冗余设计:
- 控制平面:3/5个节点,使用etcd集群
- 工作节点:根据业务需求动态扩展
- 负载均衡:配置四层负载均衡器(如HAProxy)
3.2 安全加固
认证授权配置
# 启用RBACkubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/admin/authorization/rbac-strict.yaml# 创建管理员角色cat <<EOF | kubectl apply -f -apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: cluster-admin-extendedrules:- apiGroups: ["*"]resources: ["*"]verbs: ["*"]EOF
网络策略示例
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: default-deny-allspec:podSelector: {}policyTypes:- Ingress- Egress---apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: allow-same-namespacespec:podSelector: {}policyTypes:- Ingressingress:- from:- podSelector: {}
3.3 监控体系搭建
Prometheus Operator部署
helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install prometheus prometheus-community/kube-prometheus-stack \--set prometheus.prometheusSpec.retention=30d \--set alertmanager.enabled=true
关键指标监控
| 指标类型 | 监控项 | 告警阈值 |
|---|---|---|
| 集群健康 | NodeReady状态 | 非Ready节点>0 |
| 资源使用 | CPU/Memory使用率 | 持续>85% |
| API Server性能 | 请求延迟(P99) | >500ms |
| etcd健康 | 集群同步状态 | false状态 |
四、运维实践与故障排查
4.1 日常维护流程
备份管理:
- 使用etcdctl定期备份:
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \--endpoints=${ETCD_ENDPOINTS} \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key
- 使用etcdctl定期备份:
升级策略:
- 遵循N-1版本兼容原则
- 先升级控制平面,再升级工作节点
- 使用
kubeadm upgrade plan进行预检
4.2 常见问题处理
节点NotReady状态排查
# 检查kubelet日志journalctl -u kubelet -n 100 --no-pager# 常见原因:# 1. 证书过期:kubeadm certs renew all# 2. CNI插件故障:systemctl restart containerd# 3. 资源不足:检查/var/lib/kubelet/disk/
Pod调度失败处理
# 查看事件kubectl describe pod ${POD_NAME} | grep -i "events"# 常见原因:# 1. 资源不足:调整requests/limits# 2. 节点选择器不匹配:检查nodeSelector# 3. 污点容忍:添加tolerations
4.3 性能优化建议
API Server优化:
- 启用审计日志(—audit-log-path)
- 调整并发参数(—default-not-ready-toleration-seconds)
etcd优化:
- 配置SSD存储
- 调整—quota-backend-bytes(默认8GB)
网络优化:
- 启用IPVS模式(—proxy-mode=ipvs)
- 调整conntrack参数(net.netfilter.nf_conntrack_max)
五、进阶部署方案
5.1 混合云部署
使用Submariner实现跨集群通信:
# 安装Broker集群组件kubectl create namespace submariner-operatorkubectl apply -f https://github.com/submariner-io/submariner-operator/releases/download/v0.15.0/submariner-operator.yaml# 加入成员集群cat <<EOF | kubectl apply -f -apiVersion: operator.submariner.io/v1alpha1kind: Submarinermetadata:name: submarinernamespace: submariner-operatorspec:cableDriver: libreswanceIPSecDebug: falseclusterCIDR: 10.244.0.0/16serviceCIDR: 10.96.0.0/12globalCIDR: 100.64.0.0/16EOF
5.2 边缘计算部署
使用KubeEdge实现边缘节点管理:
# 云侧安装kubectl apply -f "https://cloud.edge.tencent.com/kubeedge/v1.13/cloud/install.yaml"# 边缘节点安装tar zxvf kubeedge-v1.13.0-linux-amd64.tar.gzcd kubeedge-v1.13.0-linux-amd64/edge./edgecore --config ./conf/edgecore.yaml
本教程完整覆盖了Kubernetes从环境准备到生产运维的全流程,特别强调了高可用架构设计、安全加固和监控体系等关键生产要素。实际部署时建议先在测试环境验证,再逐步迁移到生产环境。对于超大规模集群(>500节点),建议采用分区域部署方案,并配合Service Mesh实现服务治理。

发表评论
登录后可评论,请前往 登录 或 注册