简介:本文系统梳理容器化部署的核心流程,涵盖Docker镜像构建、容器编排、Kubernetes集群部署及运维监控全链路。通过80个实战案例解析,帮助开发运维人员掌握容器化应用的资源规划、环境配置、上线验证及性能优化方法,适用于互联网应用、微服务架构及混合云场景下的高效部署。
容器化部署已成为现代应用交付的标准模式,其核心价值在于通过标准化环境封装实现”一次构建,处处运行”。本文聚焦Docker与Kubernetes两大主流容器技术,旨在帮助读者:
适用人群:具备Linux基础的系统管理员、需要优化CI/CD流程的DevOps工程师、规划微服务架构的技术负责人。建议读者具备网络配置、命令行操作及基础运维知识。
典型容器化部署包含四层架构:
| 资源类型 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| 计算节点 | 1核2G×1节点 | 2核4G×2节点 | 4核8G×3节点+ |
| 存储空间 | 50GB SSD | 200GB SSD | 1TB NVMe+对象存储 |
| 网络带宽 | 100Mbps | 500Mbps | 1Gbps+负载均衡 |
| 副本数 | N/A | 2副本 | 3-5副本+跨可用区 |
net.ipv4.ip_forward=1、vm.swappiness=0
# 生成自签名证书示例openssl req -x509 -nodes -days 3650 \-newkey rsa:2048 -keyout /etc/kubernetes/pki/apiserver.key \-out /etc/kubernetes/pki/apiserver.crt \-subj "/CN=kube-apiserver"
配置Kubernetes API Server启用RBAC认证:
# kube-apiserver.yaml 关键配置- --authorization-mode=Node,RBAC- --client-ca-file=/etc/kubernetes/pki/ca.crt- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
FROM alpine:3.16
COPY —from=builder /app/service /usr/local/bin/
CMD [“service”]
2. **镜像优化技巧**:- 使用`.dockerignore`排除无关文件- 合并RUN指令减少镜像层数- 标签管理策略:`<镜像名>:<版本>-<环境>-<构建号>`#### 4.2 Kubernetes集群部署**初始化控制平面**:```bashkubeadm init --pod-network-cidr=10.244.0.0/16 \--apiserver-advertise-address=<MASTER_IP>mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/config
加入Worker节点:
kubeadm join <MASTER_IP>:6443 --token <TOKEN> \--discovery-token-ca-cert-hash <HASH>
网络插件部署(以Calico为例):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Deployment示例:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.23ports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "500m"memory: "512Mi"
节点状态检查:
kubectl get nodes -o wide# 预期输出:STATUS为Ready,ROLES包含control-plane或worker
Pod健康检查:
kubectl get pods -n kube-system# 核心组件Pod状态应为Running
服务可达性测试:
curl -k https://<NODE_IP>:<NodePort># 应返回200状态码
Prometheus配置示例:
# prometheus-configmap.yamlscrape_configs:- job_name: 'kubernetes-nodes'static_configs:- targets: ['<NODE_IP>:10250']metrics_path: /metrics
Grafana看板关键指标:
可能原因:
排查步骤:
# 1. 检查Pod事件kubectl describe pod <pod-name># 2. 验证镜像拉取权限kubectl create secret docker-registry regcred \--docker-server=<registry-server> \--docker-username=<username> \--docker-password=<password>
诊断流程:
查看容器日志:
kubectl logs <pod-name> --previous
检查资源限制:
kubectl describe pod <pod-name> | grep -A10 Limits
验证应用依赖服务(如数据库连接)
# deployment.yaml 更新配置spec:strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 1
Horizontal Pod Autoscaler配置:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: php-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: php-apacheminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
资源配额管理:
# namespace-quota.yamlapiVersion: v1kind: ResourceQuotametadata:name: compute-quotaspec:hard:requests.cpu: "4"requests.memory: 8Gilimits.cpu: "8"limits.memory: 16Gi
容器化部署的核心价值在于通过标准化实现环境可移植性和交付效率提升。本文通过架构解析、配置详解和故障排查三个维度,构建了从开发到生产的完整知识体系。实际生产环境中,建议结合以下方向深化实践:
容器技术生态仍在快速发展,建议持续关注CNCF项目动态,定期更新工具链版本(如Kubernetes每季度发布的补丁版本),并建立完善的回滚机制保障业务连续性。