【Kubernetes系列,小白必看】⑩ Kubernetes 实战案例剖析:从理论到实践的升华

        通过前九篇文章的学习,我们从0到1,从入门到精通,深入学习了k8s的技术栈。在业内Kubernetes 凭借其强大的容器编排与集群管理能力,成为众多企业构建现代化应用架构的首选。通过实际案例来学习 Kubernetes 的应用,能帮助我们更好地理解其工作原理,掌握在不同场景下的应用技巧。本篇文章将深入剖析多个 Kubernetes 实战案例,助力读者实现从理论到实践的升华。​【Kubernetes系列,小白必看】⑩ Kubernetes 实战案例剖析:从理论到实践的升华_第1张图片

案例一:电商平台微服务架构部署​

业务背景​

某电商企业拥有一个庞大的电商平台,包含商品展示、购物车、订单处理、支付等多个业务模块。随着业务量的增长,原有的单体架构难以满足高并发和快速迭代的需求,因此决定采用微服务架构进行重构,并基于 Kubernetes 进行部署。​

架构设计​

重构后的电商平台采用微服务架构,每个业务模块被拆分为独立的服务。使用 Kubernetes 作为容器编排工具,实现服务的自动化部署、扩展和管理。通过 Service 实现服务发现和负载均衡,通过 Ingress 进行外部流量管理。此外,引入服务网格 Istio,实现流量精细化控制和服务间通信安全。

部署实施​

服务容器化​

将每个微服务容器化,以商品展示服务为例,创建 Dockerfile:

# 使用Node.js运行时作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 将package.json和package - lock.json复制到工作目录
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 将整个应用目录复制到工作目录
COPY. .

# 暴露服务端口
EXPOSE 3000

# 定义容器启动时执行的命令
CMD ["npm", "start"]

执行docker build -t ecommerce - product - service:v1.0.0.构建镜像,并推送到镜像仓库。​

Kubernetes 资源配置​

创建 Deployment 来管理服务的副本数,以商品展示服务为例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: product - service - deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: product - service
  template:
    metadata:
      labels:
        app: product - service
    spec:
      containers:
      - name: product - service
        image: your - registry/ecommerce - product - service:v1.0.0
        ports:
        - containerPort: 3000

为了让外部能够访问服务,配置 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ecommerce - ingress
spec:
  rules:
  - host: ecommerce.example.com
    http:
      paths:
      - path: /products
        pathType: Prefix
        backend:
          service:
            name: product - service
            port:
              number: 80
服务网格集成​

安装 Istio 服务网格,启用 Sidecar 自动注入:

kubectl label namespace default istio - in - injection=enabled

通过 Istio 进行流量管理,例如将 50% 的流量路由到新版本的商品展示服务:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: product - service - vs
spec:
  hosts:
  - product - service
  http:
  - route:
    - destination:
        host: product - service
        subset: v1
      weight: 50
    - destination:
        host: product - service
        subset: v2
      weight: 50

案例二:大数据分析平台搭建​

业务背景​

某企业积累了大量的业务数据,希望搭建一个大数据分析平台,对数据进行实时和离线分析,以支持业务决策。选择 Kubernetes 作为平台的底层基础设施,实现资源的高效利用和任务的灵活调度。​

架构设计​

大数据分析平台采用分层架构,包括数据采集层、数据存储层、数据处理层和数据展示层。在数据采集层,使用 Fluentd 等工具收集业务数据;在数据存储层,采用 Hadoop 分布式文件系统(HDFS)和 Apache Cassandra 等存储结构化和非结构化数据;在数据处理层,使用 Apache Spark 进行离线分析,使用 Apache Flink 进行实时分析;在数据展示层,使用 Grafana 进行数据可视化。Kubernetes 负责管理和调度各个组件的容器,实现资源的动态分配。

部署实施​

组件容器化​

以 Apache Spark 为例,将其容器化。编写 Dockerfile,安装 Spark 及相关依赖:

FROM ubuntu:20.04

# 安装Java
RUN apt - get update && apt - get install - y openjdk - 11 - jdk

# 下载Spark
RUN wget https://downloads.apache.org/spark/spark - 3.2.1/spark - 3.2.1 - bin - hadoop3.2.tgz
RUN tar - xvf spark - 3.2.1 - bin - hadoop3.2.tgz
RUN mv spark - 3.2.1 - bin - hadoop3.2 /spark

# 设置环境变量
ENV JAVA_HOME /usr/lib/jvm/java - 11 - openjdk - amd64
ENV SPARK_HOME /spark
ENV PATH $SPARK_HOME/bin:$PATH

# 暴露Spark端口
EXPOSE 7077 8080

# 启动Spark Master
CMD ["sh", "-c", "cd $SPARK_HOME && sbin/start - master.sh && tail -f logs/spark - root - org.apache.spark.deploy.master.Master - 1.log"]

构建镜像并推送到镜像仓库。​

Kubernetes 资源配置​

部署 Spark Master 和 Worker 节点,以 Spark Master 为例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spark - master - deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spark - master
  template:
    metadata:
      labels:
        app: spark - master
    spec:
      containers:
      - name: spark - master
        image: your - registry/spark - master:v1.0.0
        ports:
        - containerPort: 7077
        - containerPort: 8080

为 Spark Master 创建 Service:

apiVersion: v1
kind: Service
metadata:
  name: spark - master
spec:
  selector:
    app: spark - master
  ports:
  - protocol: TCP
    port: 7077
    targetPort: 7077
  - protocol: TCP
    port: 8080
    targetPort: 8080
提交 Spark 作业​

创建 Spark 作业定义文件spark - job.yaml:

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: my - spark - job
spec:
  type: Scala
  mode: cluster
  image: your - registry/spark - submit:v1.0.0
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///opt/spark/examples/jars/spark - examples_2.12 - 3.2.1.jar"
  arguments:
  - "100"

使用kubectl apply -f spark - job.yaml提交 Spark 作业。

案例三:AI 模型训练平台建设​

业务背景​

某科技公司专注于人工智能领域,需要搭建一个 AI 模型训练平台,支持多种深度学习框架,实现模型训练的高效管理和资源优化。选择 Kubernetes 作为平台的基础设施,以满足模型训练对计算资源的动态需求。​

架构设计​

AI 模型训练平台采用分层架构,包括数据准备层、模型训练层、模型评估层和模型部署层。在数据准备层,使用数据预处理工具对原始数据进行清洗和转换;在模型训练层,支持 TensorFlow、PyTorch 等多种深度学习框架,通过 Kubernetes 调度 GPU 资源进行模型训练;在模型评估层,使用评估指标对训练好的模型进行评估;在模型部署层,将训练好的模型部署到生产环境中。Kubernetes 负责管理和调度各个组件的容器,实现资源的动态分配。

部署实施​

组件容器化​

以 TensorFlow 训练任务为例,创建 Dockerfile:​

FROM tensorflow/tensorflow:2.8.0 - gpu

# 设置工作目录
WORKDIR /app

# 将训练脚本复制到工作目录
COPY train.py.

# 安装其他依赖
RUN pip install pandas numpy

# 执行训练脚本
CMD ["python", "train.py"]

构建镜像并推送到镜像仓库。​

Kubernetes 资源配置​

为了充分利用 GPU 资源,需要在 Kubernetes 中配置 GPU 支持。首先,确保节点安装了 NVIDIA 驱动和 NVIDIA Container Toolkit。然后,在 Pod 定义中指定 GPU 资源请求:

apiVersion: v1
kind: Pod
metadata:
  name: tensorflow - training - pod
spec:
  containers:
  - name: tensorflow - training
    image: your - registry/tensorflow - training:v1.0.0
    resources:
      requests:
        nvidia.com/gpu: 1
      limits:
        nvidia.com/gpu: 1
提交训练任务​

创建训练任务定义文件tensorflow - job.yaml:

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow - training - job
spec:
  template:
    spec:
      containers:
      - name: tensorflow - training
        image: your - registry/tensorflow - training:v1.0.0
        resources:
          requests:
            nvidia.com/gpu: 1
          limits:
            nvidia.com/gpu: 1
      restartPolicy: Never

使用kubectl apply -f tensorflow - job.yaml提交训练任务。​

通过以上三个实战案例,我们深入了解了 Kubernetes 在电商平台、大数据分析平台和 AI 模型训练平台等不同场景下的应用。在实际应用中,需要根据业务需求和场景,选择合适的技术方案和工具,合理配置 Kubernetes 资源,以充分发挥其优势。

你可能感兴趣的:(kubernetes集群,kubernetes,容器,云原生,运维实战)