从零到一:Kubernetes 生产环境部署实战指南
2025.09.26 16:44浏览量:6简介:本文详细讲解Kubernetes集群的部署流程,涵盖环境准备、组件安装、集群验证及运维管理,提供可落地的生产级部署方案。
一、部署前环境准备与规划
硬件资源要求
生产环境建议采用3节点(Master+Worker)或5节点(3Master+2Worker)架构。单节点配置需满足:CPU≥4核、内存≥16GB、磁盘≥200GB(SSD优先)。例如,AWS EC2的m5.xlarge实例或阿里云ecs.g6.xlarge实例均可满足基础需求。操作系统与网络配置
推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需关闭SELinux(setenforce 0)和防火墙(或开放6443/10250/2379-2380等端口)。网络规划需考虑:- Pod CIDR(如10.244.0.0/16)与Service CIDR(如10.96.0.0/12)不重叠
- 核心组件(etcd、kube-apiserver)间需低延迟网络(<1ms)
- 示例配置:
# 修改内核参数以支持大量连接cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOFsysctl --system
容器运行时选择
Kubernetes 1.24+已移除Docker支持,推荐使用containerd或CRI-O。以containerd为例:# 安装containerdyum install -y containerdmkdir -p /etc/containerdcontainerd config default > /etc/containerd/config.toml# 修改配置以启用systemd cgroup驱动sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsystemctl enable --now containerd
二、核心组件安装与配置
kubeadm初始化集群
在Master节点执行:# 安装kubeadm/kubelet/kubectlcat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearchenabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgEOFyum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessystemctl enable --now kubelet# 初始化集群(指定Pod网络插件)kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.28.0
初始化完成后,需执行
mkdir -p $HOME/.kube和cp -i /etc/kubernetes/admin.conf $HOME/.kube/config以配置kubectl。Worker节点加入集群
在Master节点获取加入命令:kubeadm token create --print-join-command
在Worker节点执行输出的命令,例如:
kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \--discovery-token-ca-cert-hash sha256:xxxxxx
网络插件部署
推荐使用Calico或Flannel。以Calico为例:kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yamlkubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
验证网络连通性:
kubectl run -it --rm debug --image=busybox --restart=Never -- sh# 在容器内执行ping <其他节点Pod IP>
三、生产环境增强配置
高可用Master部署
使用kubeadm搭建HA集群需:- 外部负载均衡器(如Nginx、HAProxy)转发6443端口
- 外部etcd集群(3/5节点)
- 示例etcd配置:
# /etc/kubernetes/manifests/etcd.yamlapiVersion: v1kind: Podmetadata:name: etcdnamespace: kube-systemspec:containers:- name: etcdimage: registry.k8s.io/etcd:3.5.9-0command:- etcd- --advertise-client-urls=https://<MASTER_IP>:2379- --listen-client-urls=https://0.0.0.0:2379- --cert-file=/etc/kubernetes/pki/etcd/server.crt- --key-file=/etc/kubernetes/pki/etcd/server.keyvolumeMounts:- name: etcd-certsmountPath: /etc/kubernetes/pki/etcdvolumes:- name: etcd-certshostPath:path: /etc/kubernetes/pki/etcd
安全加固措施
- 启用RBAC权限控制:
kubectl create clusterrolebinding admin-binding \--clusterrole=cluster-admin \--user=admin@example.com
- 启用Pod安全策略(PSP)或OPA Gatekeeper
- 定期轮换证书:
kubeadm certs renew allsystemctl restart kubelet
- 启用RBAC权限控制:
监控与日志方案
推荐部署Prometheus+Grafana监控栈:helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install prometheus prometheus-community/kube-prometheus-stack
日志收集可使用EFK(Elasticsearch+Fluentd+Kibana)或Loki+Promtail+Grafana方案。
四、故障排查与运维技巧
常见问题处理
- Node状态NotReady:检查
journalctl -u kubelet日志,常见原因是网络插件未就绪或证书过期 - Pod一直Pending:执行
kubectl describe pod <pod-name>查看事件,检查资源不足或调度失败 - API Server无响应:检查etcd集群健康状态(
ETCDCTL_API=3 etcdctl endpoint health)
- Node状态NotReady:检查
备份与恢复
使用Velero进行集群备份:velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \--bucket <BACKUP_BUCKET> --secret-file ./credentials-velero# 备份命名空间velero backup create <BACKUP_NAME> --include-namespaces <NAMESPACE>
升级策略
小版本升级(如1.27→1.28):# 在Master节点yum upgrade -y kubelet kubeadm kubectlkubeadm upgrade plankubeadm upgrade apply v1.28.0# 在Worker节点systemctl drain <NODE_NAME>yum upgrade -y kubelet kubeadmsystemctl uncordon <NODE_NAME>
五、最佳实践建议
资源管理
- 为Namespace设置ResourceQuota:
apiVersion: v1kind: ResourceQuotametadata:name: compute-quotanamespace: devspec:hard:requests.cpu: "1000"requests.memory: 200Gilimits.cpu: "2000"limits.memory: 400Gi
- 使用Vertical Pod Autoscaler(VPA)自动调整资源请求
- 为Namespace设置ResourceQuota:
CI/CD集成
示例ArgoCD部署:kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlkubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
多云部署考虑
- 使用Crossplane或Cluster API管理多集群
- 考虑服务网格(如Istio)实现跨集群通信
- 存储方案需兼容不同云厂商(如CSI驱动)
本教程覆盖了从环境准备到生产运维的全流程,建议读者在非生产环境先进行验证。实际部署时需根据业务需求调整参数,例如将Pod CIDR修改为与现有网络兼容的范围。对于超大规模集群(>500节点),建议参考Kubernetes官方的大规模集群部署指南进行优化。

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