Kubernetes部署全流程:从零到生产环境的实践指南
2025.09.26 16:39浏览量:2简介:本文详细解析Kubernetes集群部署的核心步骤,涵盖环境准备、安装配置、集群验证及生产优化建议,帮助开发者快速搭建高可用容器编排平台。
一、Kubernetes部署前的环境准备
1.1 硬件资源规划
生产环境建议采用3节点主控平面(Master)架构,每个节点配置不低于8核CPU、32GB内存及100GB存储空间。工作节点(Worker)根据业务负载动态扩展,单节点建议16核CPU、64GB内存起步,确保容器密度与性能平衡。
1.2 操作系统选择
推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需关闭SELinux(setenforce 0)并配置防火墙规则。以CentOS为例,需安装依赖包:
yum install -y conntrack ntpdate ebtables socat ipset
1.3 容器运行时安装
Kubernetes 1.24+版本已移除Docker支持,需改用containerd或CRI-O。以containerd为例:
# 安装containerdcat <<EOF | sudo tee /etc/modules-load.d/containerd.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfilter# 配置containerdmkdir -p /etc/containerdcontainerd config default | tee /etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsystemctl restart containerd
二、Kubernetes集群安装
2.1 使用kubeadm初始化主节点
# 安装kubeadm/kubelet/kubectlcat <<EOF | sudo tee /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=kubernetes# 初始化主节点(替换<api-server-advertise-address>为实际IP)kubeadm init --apiserver-advertise-address=<api-server-advertise-address> \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--kubernetes-version=v1.28.0
初始化完成后,需执行mkdir -p $HOME/.kube和sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config配置kubeconfig。
2.2 加入工作节点
在主节点获取加入命令:
kubeadm token create --print-join-command
在工作节点执行获取的命令,例如:
kubeadm join <api-server-endpoint>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash>
2.3 网络插件部署
推荐使用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 get pods -n kube-system | grep calico
三、集群验证与基础测试
3.1 核心组件状态检查
kubectl get componentstatuses# 预期输出:# NAME STATUS MESSAGE ERROR# scheduler Healthy ok# controller-manager Healthy ok# etcd-0 Healthy {"health":"true"}
3.2 节点状态验证
kubectl get nodes# 预期输出:# NAME STATUS ROLES AGE VERSION# master01 Ready control-plane 10m v1.28.0# worker01 Ready <none> 8m v1.28.0
3.3 部署测试应用
# nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25.3ports:- containerPort: 80
执行部署并验证:
kubectl apply -f nginx-deployment.yamlkubectl get pods -l app=nginxkubectl expose deployment nginx-deployment --port=80 --type=NodePortcurl <node-ip>:<node-port>
四、生产环境优化建议
4.1 高可用架构设计
- 主控平面部署:使用3节点etcd集群+3节点控制平面,通过
kubeadm init --control-plane-endpoint配置负载均衡VIP - 存储方案:集成Ceph或Rook提供持久化存储
- 监控体系:部署Prometheus+Grafana监控集群状态
4.2 安全加固措施
- 启用RBAC权限控制:通过
kubectl create clusterrolebinding限制用户权限 - 配置网络策略:使用Calico NetworkPolicy限制Pod间通信
- 定期轮换证书:执行
kubeadm certs renew all更新证书
4.3 备份与恢复方案
使用Velero进行集群备份:
# 安装Velerovelero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \--bucket <backup-bucket> --secret-file ./credentials-velero# 执行备份velero backup create full-backup --include-namespaces default
五、常见问题处理
5.1 节点NotReady状态
检查kubelet日志:
journalctl -u kubelet -n 100 --no-pager
常见原因:
- CNI插件未正确安装
- 容器运行时未运行
- 资源不足(内存/磁盘)
5.2 Pod Pending状态
执行kubectl describe pod <pod-name>查看事件,常见原因:
- 资源不足(
Insufficient cpu/memory) - 持久卷绑定失败(
PersistentVolumeClaim not bound) - 调度器故障(
FailedScheduling)
5.3 证书过期问题
证书有效期为1年,过期前需执行:
# 主节点执行kubeadm certs renew all# 重启kubeletsystemctl restart kubelet
六、进阶部署方案
6.1 使用Kubespray自动化部署
git clone https://github.com/kubernetes-sigs/kubespray.gitcd kubespraypip install -r requirements.txtcp inventory/sample inventory/mycluster# 修改inventory/mycluster/inventory.ini配置节点信息ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b -v
6.2 混合云部署
通过Kubefed实现多集群管理:
# 在主集群安装Kubefed控制平面kubectl create namespace kubefed-systemkubectl apply -f https://github.com/kubernetes-sigs/kubefed/releases/download/v0.13.0/kubefedctl.yamlkubefedctl init kubefed --host-cluster-context=primary --image=kubefed/kubefed:v0.13.0# 加入成员集群kubefedctl join <member-cluster-name> --cluster-context=<member-context> \--host-cluster-context=primary --v=2
七、总结与最佳实践
- 版本管理:保持主节点与工作节点Kubernetes版本一致,避免跨大版本升级
- 资源限制:通过
LimitRange和ResourceQuota控制资源使用 - 日志收集:集成EFK(Elasticsearch+Fluentd+Kibana)或Loki日志系统
- CI/CD集成:使用ArgoCD或Flux实现GitOps持续部署
通过本文的完整流程,开发者可快速构建符合生产标准的Kubernetes集群。实际部署时需根据业务需求调整配置参数,并建立完善的运维监控体系。

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