kubernetes吧 关注:236贴子:746
  • 0回复贴,共1

Docker+Kubernetes(k8s)微服务容器化实践

只看楼主收藏回复

获课:weiranit.fun/707/
获取ZY↑↑方打开链接↑↑
以下是基于 Docker 和 Kubernetes(K8s)的微服务容器化实践指南,涵盖核心概念、操作步骤及最佳实践:
一、核心概念与架构
微服务架构将单体应用拆分为独立自治的小型服务,每个服务专注单一功能(如用户服务、订单服务)。优势:松耦合、易扩展、技术栈灵活(不同服务可使用 Java/Node.js/Python 等)。
Docker 容器化打包服务及其依赖为镜像,确保环境一致性(开发→测试→生产)。核心组件:Dockerfile(定义镜像)、镜像仓库(Docker Hub / 私有仓库)、容器(镜像运行实例)。
Kubernetes 编排自动化管理容器的部署、扩展、负载均衡和故障恢复。核心资源:Pod:最小部署单元(1 个或多个容器)。Deployment:声明式定义 Pod 副本数、升级策略。Service:服务发现与负载均衡(ClusterIP/NodePort/LoadBalancer)。Ingress:管理外部流量路由(HTTP/HTTPS 七成负载均衡)。HPA(Horizontal Pod Autoscaler):基于 CPU / 内存自动扩缩容。
二、实践步骤:构建微服务容器化系统1. 容器化微服务(Docker 镜像构建)
示例:Flask 服务 Dockerfile
dockerfile
FROM python:3.9-slim # 基础镜像 WORKDIR /app # 工作目录 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 安装依赖 COPY . . CMD ["python", "app.py"] # 启动命令
多阶段构建(优化镜像大小)
dockerfile
# 构建阶段(编译代码) FROM python:3.9-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . RUN python -m build --wheel . # 运行阶段(仅包含运行时依赖) FROM python:3.9-slim WORKDIR /app COPY --from=builder /app/dist/*.whl . RUN pip install --no-cache-dir *.whl CMD ["gunicorn", "app:app", "-b", "0.0.0.0:5000"]
2. Kubernetes 编排与部署
步骤 1:定义 Kubernetes 资源(YAML)
Deployment(管理 Pod)
yaml
apiVersion: apps/v1 kind: Deployment metadata: name: flask-service labels: app: flask-service spec: replicas: 3 # 3个副本 selector: matchLabels: app: flask-service template: metadata: labels: app: flask-service spec: containers: - name: flask-container image: flask-service:v1 # Docker镜像 ports: - containerPort: 5000 livenessProbe: # 健康检查(重启异常容器) httpGet: path: /health port: 5000 initialDelaySeconds: 30
Service(内部通信)
yaml
apiVersion: v1 kind: Service metadata: name: flask-service spec: selector: app: flask-service ports: - protocol: TCP port: 80 targetPort: 5000 type: ClusterIP # 集群内访问
Ingress(外部访问)
yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: microservices-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: microservices.local http: paths: - path: /flask pathType: Prefix backend: service: name: flask-service port: number: 80
步骤 2:部署到 Kubernetes 集群
bash
# 创建命名空间(可选) kubectl create namespace microservices-demo # 应用配置 kubectl apply -f deployment.yaml -n microservices-demo kubectl apply -f service.yaml -n microservices-demo kubectl apply -f ingress.yaml -n microservices-demo # 验证部署 kubectl get pods -n microservices-demo # 查看Pod状态 kubectl get services -n microservices-demo # 查看服务 kubectl get ingress -n microservices-demo # 查看Ingress
步骤 3:外部访问修改本地/etc/hosts:127.0.0.1 microservices.local访问:http://microservices.local/flask(路由到 Flask 服务)。
3. 弹性扩展与 CI/CD
自动扩缩容(HPA)
yaml
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: flask-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: flask-service minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 # CPU利用率超70%时扩容
CI/CD 流水线(示例)代码提交触发 Docker 镜像构建(Jenkins/GitLab CI)。镜像推送到私有仓库(Harbor/ACR)。K8s 通过 Helm/Argo CD 自动部署新版本(滚动更新)。metadata: name: flask-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: flask-service minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 # CPU利用率超70%时扩容
CI/CD 流水线(示例)代码提交触发 Docker 镜像构建(Jenkins/GitLab CI)。镜像推送到私有仓库(Harbor/ACR)。K8s 通过 Helm/Argo CD 自动部署新版本(滚动更新)。
三、最佳实践
镜像优化使用多阶段构建,仅保留运行时文件(减小镜像体积)。选择轻量级基础镜像(如 Alpine Linux)。
服务治理服务发现:通过 K8s DNS 自动解析服务名(如flask-service.microservices-demo.svc.cluster.local)。负载均衡:K8s 内置负载均衡(Service)+ 外部负载均衡(Ingress)。
监控与日志监控:Prometheus + Grafana(采集 CPU / 内存 / 请求量指标)。日志:ELK Stack(集中管理容器日志)。
yaml
# Prometheus配置(抓取K8s指标) scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod
安全性镜像扫描(Trivy/Snyk):检测漏洞。密钥管理:使用 K8s Secrets 加密敏感数据(数据库密码、API 密钥)。
故障容错健康检查(Liveness/Readiness Probe):确保容器健康。滚动更新与回滚:通过kubectl rollout undo快速回退版本。
四、实战案例:分布式微服务系统
架构图
plaintext
外部流量 → Ingress → Service(负载均衡) → Deployment(多个Pod)
示例项目结构
plaintext
microservices-demo/ ├── flask-service/ │ ├── Dockerfile │ ├── requirements.txt │ ├── k8s/ │ │ ├── deployment.yaml │ │ └── service.yaml ├── fastapi-service/ │ ├── Dockerfile │ ├── k8s/ │ │ ├── deployment.yaml │ │ └── service.yaml └── k8s/ └── ingress.yaml
执行流程构建镜像:docker build -t flask-service:v1 ./flask-service。推送镜像到仓库(如 Docker Hub)。应用 K8s 配置:kubectl apply -f microservices-demo/k8s/。测试:通过 Ingress 访问不同服务(如/flask和/fastapi)。
五、总结
Docker 与 Kubernetes 的结合是微服务容器化的黄金搭档:
Docker解决环境一致性和轻量化部署。
Kubernetes实现自动化运维(扩缩容、故障恢复)和集群管理。
通过本文的实践,你可以掌握:
✅ 微服务容器化(Docker 镜像构建)。✅ K8s 资源定义(
Deployment/Service/Ingress)。
✅ 弹性扩展与 CI/CD 集成。✅ 监控、日志与故障处理。
扩展学习:
官方文档:Docker Documentation、Kubernetes Documentation。
实战工具:Minikube(本地集群)、Helm(包管理)、Argo CD(CD 工具)。
云服务:腾讯云 TKE、阿里云 ACK、AWS EKS(生产级集群管理)。
通过持续实践和优化,你将能够构建高可用、可扩展的微服务系统,适应企业级云原生架构需求。


IP属地:河北1楼2025-03-19 20:18回复