从零开始:Kubernetes 集群部署与实战指南
2025.09.26 16:39浏览量:2简介:本文详细讲解 Kubernetes 集群部署的全流程,涵盖环境准备、安装配置、核心组件验证及生产优化建议,适合开发者和运维人员快速掌握集群搭建与维护技能。
一、环境准备与规划
1.1 节点资源分配
生产环境建议采用 3个控制平面节点 + N个工作节点 的架构,控制平面节点需配置至少 2核CPU、4GB内存,工作节点根据业务负载动态扩展(建议起步 4核CPU、8GB内存)。节点间需确保 网络互通,推荐使用万兆内网以降低Pod间通信延迟。
1.2 操作系统选择
- Linux发行版:Ubuntu 22.04 LTS 或 CentOS 8 Stream(需关闭SELinux)
- 内核参数优化:
# 调整文件描述符限制echo "* soft nofile 65536" >> /etc/security/limits.confecho "* hard nofile 65536" >> /etc/security/limits.conf# 禁用交换分区swapoff -ased -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3 网络模型选择
- Overlay网络:Calico(推荐)或 Weave Net
- Underlay网络:需支持VXLAN或BGP协议,适合物理机环境
- CNI插件配置:以Calico为例,需在
install-cni.sh中指定IP_AUTODETECTION_METHOD=interface=eth.*
二、控制平面组件部署
2.1 使用kubeadm初始化集群
# 生成初始化配置文件kubeadm config print init-defaults > kubeadm-init.yaml# 修改关键参数apiVersion: kubeadm.k8s.io/v1beta3kind: InitConfigurationlocalAPIEndpoint:advertiseAddress: <控制平面IP>bindPort: 6443---apiVersion: kubeadm.k8s.io/v1beta3kind: ClusterConfigurationkubernetesVersion: v1.28.0controlPlaneEndpoint: "<负载均衡VIP>:6443" # 高可用场景必备networking:podSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12# 执行初始化kubeadm init --config kubeadm-init.yaml
2.2 核心组件验证
- etcd健康检查:
kubectl exec -n kube-system etcd-<节点名> -- etcdctl endpoint health
- API Server负载:通过
kubectl get --raw /readyz验证,返回ok表示正常 - 控制器管理器状态:
kubectl get pods -n kube-system | grep kube-controller-manager
三、工作节点加入集群
3.1 获取加入令牌
# 生成新令牌(有效期24小时)kubeadm token create --ttl 24h --print-join-command# 输出示例:# kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \# --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxx
3.2 节点标签管理
# 为节点添加角色标签kubectl label nodes <节点名> node-role.kubernetes.io/worker=worker# 污点管理(禁止调度)kubectl taint nodes <节点名> dedicated=special:NoSchedule
四、核心组件配置优化
4.1 CoreDNS性能调优
修改/etc/kubernetes/manifests/coredns.yaml,增加以下参数:
spec:template:spec:containers:- name: corednsargs: ["-conf", "/etc/coredns/Corefile", "-dns.port=53", "-dns.tcp.listen=:53"]resources:limits:cpu: 500mmemory: 256Mi
4.2 调度器策略定制
创建/etc/kubernetes/scheduler-policy.yaml:
apiVersion: kubescheduler.config.k8s.io/v1kind: KubeSchedulerConfigurationprofiles:- schedulerName: default-schedulerpluginConfig:- name: PrioritySortargs:add:- name: "dedicated-node"weight: 10
五、生产环境加固建议
5.1 安全防护措施
- RBAC权限控制:
# 禁止匿名访问kubectl edit apiserver-kubelet-config.yaml# 修改authentication.anonymous.enabled为false
- Pod安全策略:
apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata:name: restrictedspec:privileged: falsehostPID: falsehostIPC: falserunAsUser:rule: MustRunAsNonRootseLinux:rule: RunAsAny
5.2 监控告警体系
- Prometheus配置:
- job_name: 'kubernetes-nodes'static_configs:- targets: ['<节点IP>:9100'] # Node Exportermetrics_path: /metrics
- Alertmanager规则示例:
groups:- name: node.rulesrules:- alert: NodeMemoryPressureexpr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85for: 5mlabels:severity: warning
六、故障排查指南
6.1 常见问题处理
- 证书过期:
# 备份旧证书cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak# 重新生成证书kubeadm certs renew all# 重启静态Poddocker restart $(docker ps -aqf "name=k8s_kube-")
- 网络不通:
# 检查CNI插件状态journalctl -u kubelet -n 100 | grep cni# 验证iptables规则iptables -t nat -L | grep KUBE
6.2 日志分析技巧
# 获取API Server日志kubectl logs -n kube-system kube-apiserver-<节点名> --tail=100# 实时监控节点事件kubectl get events --sort-by='.metadata.creationTimestamp' -w
七、升级与维护
7.1 版本升级流程
# 1. 升级kubeadmapt-get install kubeadm=1.28.0-00# 2. 检查升级可行性kubeadm upgrade plan# 3. 执行控制平面升级kubeadm upgrade apply v1.28.0# 4. 升级kubelet和kubectlapt-get install kubelet=1.28.0-00 kubectl=1.28.0-00systemctl restart kubelet
7.2 备份恢复方案
- etcd数据备份:
ETCDCTL_API=3 etcdctl --endpoints=<控制平面IP>:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db
- 资源定义备份:
kubectl get all --all-namespaces -o yaml > full-cluster-backup.yaml
八、进阶实践建议
- 多集群管理:考虑使用Cluster API或Karmada实现统一管控
- GPU调度:配置Device Plugin实现GPU资源隔离
- 服务网格:集成Istio或Linkerd实现服务治理
- 边缘计算:通过KubeEdge扩展至边缘节点
通过本文的详细指导,开发者可系统掌握Kubernetes部署的全生命周期管理,从基础环境搭建到生产级优化,最终构建出高可用、高性能的容器编排平台。建议在实际操作中结合具体业务场景调整参数,并通过混沌工程验证集群容错能力。

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