简介:本文面向运维人员与开发者,详解Docker与K8s的部署逻辑与协同实践。通过“外卖店运营”类比,阐明Docker解决单机环境标准化问题,K8s实现集群资源智能调度,并给出从环境准备到运维优化的完整部署方案。
核心目标:通过Docker实现应用标准化封装,借助K8s构建高可用、弹性扩展的容器化集群,最终实现开发环境与生产环境的高度一致性,以及业务流量的智能调度。
适用场景:
典型用户画像:
# 示例:Docker安装(所有节点)curl -fsSL https://get.docker.com | shsystemctl enable docker# 示例:K8s组件安装(所有节点)cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearchenabled=1gpgcheck=1EOFyum install -y kubelet kubeadm kubectlsystemctl enable kubelet
kubeadm init --apiserver-advertise-address=<MASTER_IP> \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12# 配置kubectlmkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
# Master节点生成tokenkubeadm token create --print-join-command# Worker节点执行kubeadm join <MASTER_IP>:6443 --token <TOKEN> \--discovery-token-ca-cert-hash sha256:<HASH>
# 示例:Calico部署kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Docker镜像构建:
# 示例DockerfileFROM python:3.8-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]
K8s部署配置:
# deployment.yaml示例apiVersion: apps/v1kind: Deploymentmetadata:name: web-appspec:replicas: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: webimage: registry.example.com/web-app:v1ports:- containerPort: 8000resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "500m"memory: "512Mi"
livenessProbe:httpGet:path: /healthport: 8000initialDelaySeconds: 30periodSeconds: 10readinessProbe:httpGet:path: /readyport: 8000initialDelaySeconds: 5periodSeconds: 5
# HPA配置示例apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: web-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: web-appminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
基础验证:
kubectl get pods 查看Pod状态kubectl logs <POD_NAME> 检查日志kubectl describe pod <POD_NAME> 查看事件服务验证:
curl http://<SERVICE_IP>:<PORT>curl https://<DOMAIN>性能验证:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Pod一直Pending | 资源不足/调度失败 | 检查kubectl describe pod事件 |
| ImagePullBackOff | 镜像拉取失败 | 检查镜像地址和Registry权限 |
| CrashLoopBackOff | 应用启动崩溃 | 检查容器日志和资源限制 |
| 502 Bad Gateway | 服务不可达 | 检查Service后端Pod数量 |
| 网络延迟高 | CNI插件问题 | 检查Calico/Flannel日志 |
稳定性优化:
性能优化:
成本优化:
通过Docker实现应用标准化封装,解决了”开发环境能跑,生产环境崩溃”的经典难题;借助K8s的集群管理能力,实现了从”人工运维”到”智能调度”的质的飞跃。实际部署中需重点关注:
建议从测试环境开始验证部署流程,逐步扩展到生产环境,并通过混沌工程验证系统容错能力。对于大型集群,可考虑引入Prometheus+Grafana监控体系,结合ELK日志系统构建完整运维体系。