searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

在Kubernetes(K8s) 集群跑pytorch作业

2023-09-21 09:13:55
231
0

K8s相关基础

K8s

  • :Kubernetes(K8s)是一个开源的容器编排和管理平台。
    • 容器编排
      • :对容器化应用程序的自动部署、管理和协调的过程。
      • 主要目标:简化和自动化 容器化应用程序的管理工作(容器创建、调度、扩缩容、负载均衡、健康检查、日志管理、服务发现等)。轻松管理大规模、复杂的容器化应用程序,并确保高可用性和可升缩性。
      • 怎么实现:通过声明性的配置文件(YAML)来描述应用程序的拓扑结构、资源需求、服务依赖等信息。K8s负责解析和执行这些配置文件,并根据定义的规则和策略来自动化管理容器集群中的应用程序。
      • 优势
        • 自动化部署:容器编排工具可以自动化地创建、更新和销毁容器,使应用程序的部署过程更加简单和可靠。

        • 弹性扩缩容:容器编排工具可以根据系统负载和需求动态调整容器的数量,以实现高效的资源利用和应对不同负载的需求。

        • 服务发现与负载均衡:容器编排工具可以自动管理容器之间的网络通信,并提供内建的服务发现和负载均衡功能,确保应用程序的稳定性和可用性。

        • 健康检查和自愈能力:容器编排工具可以监控容器的健康状态,并在出现故障或异常情况时自动进行恢复和治理,提供自愈的能力。

      • 容器化应用程序又是指什么?
        • 使用容器技术应用程序打包和交付的一种方法
          • 容器技术: 将应用程序及其依赖项打包到一个可移植的容器中,以保证应用程序在不同的计算机环境中具有相同的行为和性能。
            • 核心:容器引擎(eg: Docker 引擎)
        • 好处:
          • 可移植性:由于容器使用相同的运行时环境和依赖项,因此可以在不同平台和操作系统上进行部署,并保持各项指标的稳定和一致。容器化应用程序可以完全独立于宿主操作系统和硬件,实现真正的可移植性。

          • 速度和灵活性:容器化应用程序可以快速且可靠地启动和关闭,从而提高了应用程序的开发、测试和部署效率。容器还允许开发人员自定义应用程序的运行环境和配置,以满足特定的需求和要求。

          • 隔离性和安全性:容器提供了完全隔离的运行环境,可以防止应用程序之间的干扰,并减少系统资源的竞争。此外,容器化应用程序还可以与宿主操作系统区分开来,从而更好地隔离和保护系统内的敏感数据和信息。

          • 可伸缩性:容器化应用程序可以很容易地进行扩展和缩小,以应对不同负载和需求。开发人员可以使用容器编排工具(如 Kubernetes、Docker Swarm 等)来管理和自动化容器的部署和运行,以实现高效和可靠的应用程序管理。

    • K8s的主要作用
      • 容器编排:Kubernetes 可以帮助你定义和管理容器化应用程序的部署方式、容器之间的关系以及与底层基础设施的交互方式。

      • 自动伸缩:Kubernetes 允许根据应用程序的负载情况自动调整副本数量,实现弹性伸缩,以满足实时需求。

      • 负载均衡:Kubernetes 可以自动分配流量给应用程序的不同副本,确保负载均衡和高可用性。

      • 存储管理:Kubernetes 提供了各种存储选项,例如本地存储、网络存储、云存储等,并提供了方便的方式来挂载和管理这些存储。

      • 自愈性:Kubernetes 可以监控应用程序的状态,并在发生故障或节点出现问题时自动恢复应用程序的健康状态。

    • 命令行工具kubectl ,用于与 Kubernetes 集群进行交互和管理。使用 kubectl 可以执行多种操作,包括创建、删除和管理 Kubernetes 资源,以及与集群进行交互。

      一些常用的 kubectl命令:

      • 获取集群信息:

         
        kubectl cluster-info
        Kubernetes control plane is running at *****://address:port
        
        To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
        # kubectl cluster-info 命令用于获取 Kubernetes 集群的信息。
        # Kubernetes 控制平面(control plane)正在运行,其地址为 *****://address:port。这是 Kubernetes API 服务器的地址和端口。
        # 通过这个信息,可得知 Kubernetes 控制平面的运行状态以及 API 服务器的地址和端口。
        # 若需要进一步调试和诊断集群问题,可以使用 kubectl cluster-info dump 命令生成详细的集群信息转储。这将提供更全面的数据,用于故障排除和分析集群问题。
         
      • 获取集群节点列表:

        kubectl get nodes
        # NAME  STATUS   ROLES AGE   VERSION
        
         
      • 获取资源列表(如 Pod、Deployment、Service 等):

        kubectl get <资源类型>
      • 获取资源详细信息:

        kubectl describe <资源类型> <资源名称>
        # 显示yaml文件信息
         
      • 创建资源: 

        kubectl create -f <资源配置文件>
        
      • 删除资源:

        kubectl delete <资源类型> <资源名称>
        
      • 执行命令: 

        kubectl exec -it <Pod名称> -- <命令>
      • 查看日志:

        kubectl logs <Pod名称>
        
      • 伸缩应用程序:

        kubectl scale --replicas=<副本数> deployment/<应用名称>
        

         

      • 在集群中部署应用程序:

         
        kubectl apply -f <应用配置文件>
        
         

       

      • 将 Deployment 暴露为一个服务:
        kubectl expose deployment <deployment-name> --port=<port-number>

上述命令中的 <资源类型> 可以是 Pod、Deployment、Service、Namespace 等各种 Kubernetes 资源的名称,而 <资源名称> 则是具体要操作的资源实例的名称。

这只是 kubectl 的一小部分命令,它还有很多其他功能和选项,你可以使用 kubectl --help 命令查看完整的命令列表,并通过 kubectl <command> --help 获取特定命令的详细信息和用法说明。

 

基于k8s环境编写yaml文件跑作业

  • yaml文件编写
# 在 Kubernetes 中,使用 YAML 文件来定义和配置各种资源(如 Pod、Deployment、Service 等)
apiVersion:指定 Kubernetes API 的版本。例如,kubeflow.org/v1 是指 使用kubeflow.org API 组的版本 v1。
kind:指定要创建的 Kubernetes 资源类型。例如,kind: Pod 表示创建一个 Pod 资源。PyTorchJob表示要创建或管理的对象是一个 PyTorch 作业。
    Kubernetes 提供了许多不同的对象类型,如 Deployment、Service、Pod、ConfigMap、Secret 等。每个对象类型都有其特定的用途和属性,用于实现不同的功能和需求。
    kind 字段是区分不同对象类型的关键,它会告诉 Kubernetes 如何处理该对象类型,并对其进行相应的操作和管理。

metadata:包含资源的元数据信息,如名称、标签等。重要字段包括:
    name:指定资源的名称。
    labels:为资源定义标签,用于进行选择和过滤。
    annotations:为资源添加注释或描述性信息。

spec:定义资源的规格和配置信息。具体字段根据不同资源类型而有所不同,以下是几个常见资源的重要字段:
    Pod:
        containers:定义 Pod 中的容器列表。
        volumes:定义 Pod 的卷列表。
    Deployment:
        replicas:指定应该创建的副本数。
        template:定义创建的 Pod 模板。
    Service:
        type:指定服务的类型,如 ClusterIP、NodePort、LoadBalancer 等。
        ports:定义服务监听的端口。
    ConfigMap:
        data:定义配置数据的键值对。
    Secret:
        data:定义加密数据的键值对。
    PersistentVolumeClaim:
        accessModes:指定卷的访问模式。
        resources:定义卷的资源请求。
status:用于显示资源的当前状态,由 Kubernetes 自动更新。
除了上述字段外,还有一些常见的字段用于资源间的关联和引用:
selector:在某些资源类型中,用于根据标签选择其他资源。
template:在某些资源类型(如 Deployment)中,用于定义创建其他资源的模板。
  • 使用 PyTorchJob 创建的 Kubernetes Job 的yaml配置文件task.yaml
这是一个使用 PyTorchJob 创建的 Kubernetes Job 的配置文件。
apiVersion: "kubeflow.org/v1"
kind: "PyTorchJob"
metadata:
    name: name # modify the name
    namespace: default
spec:
    runPolicy:指定该 Job 的运行策略。
        schedulingPolicy:指定调度策略,其中的 queue 字段指定将任务调度到的队列。
     elasticPolicy:弹性策略的配置参数。
        rdzvBackend:指定后端类型。
        rdzvId:指定该 Job 的 ID。
        minReplicas:指定最小的副本数。
        maxReplicas:指定最大的副本数。
        maxRestarts:指定最大重启次数。
     pytorchReplicaSpecs:指定 PyTorch 的 Replica 规格。
        Worker:指定 Worker 的配置,包括副本数replicas和重启策略restartPolicy。
            template:Worker 的模板配置,包括容器、镜像、命令等信息。
                containers:指定容器的相关设置,可以定义多个容器,包括名称、镜像、命令和环境变量等。
                    name: 名称                  
                    image: 使用的容器镜像
                    imagePullPolicy
                    command
                    env指定了一些环境变量,如MY_MEM_LIMIT、LOGLEVEL
                resources: 资源限制部分,可以设置任务使用的 CPU、内存等资源的限制。
  • 部署应用程序
kubectl apply -f task.yaml
0条评论
0 / 1000
l****n
28文章数
5粉丝数
l****n
28 文章 | 5 粉丝
原创

在Kubernetes(K8s) 集群跑pytorch作业

2023-09-21 09:13:55
231
0

K8s相关基础

K8s

  • :Kubernetes(K8s)是一个开源的容器编排和管理平台。
    • 容器编排
      • :对容器化应用程序的自动部署、管理和协调的过程。
      • 主要目标:简化和自动化 容器化应用程序的管理工作(容器创建、调度、扩缩容、负载均衡、健康检查、日志管理、服务发现等)。轻松管理大规模、复杂的容器化应用程序,并确保高可用性和可升缩性。
      • 怎么实现:通过声明性的配置文件(YAML)来描述应用程序的拓扑结构、资源需求、服务依赖等信息。K8s负责解析和执行这些配置文件,并根据定义的规则和策略来自动化管理容器集群中的应用程序。
      • 优势
        • 自动化部署:容器编排工具可以自动化地创建、更新和销毁容器,使应用程序的部署过程更加简单和可靠。

        • 弹性扩缩容:容器编排工具可以根据系统负载和需求动态调整容器的数量,以实现高效的资源利用和应对不同负载的需求。

        • 服务发现与负载均衡:容器编排工具可以自动管理容器之间的网络通信,并提供内建的服务发现和负载均衡功能,确保应用程序的稳定性和可用性。

        • 健康检查和自愈能力:容器编排工具可以监控容器的健康状态,并在出现故障或异常情况时自动进行恢复和治理,提供自愈的能力。

      • 容器化应用程序又是指什么?
        • 使用容器技术应用程序打包和交付的一种方法
          • 容器技术: 将应用程序及其依赖项打包到一个可移植的容器中,以保证应用程序在不同的计算机环境中具有相同的行为和性能。
            • 核心:容器引擎(eg: Docker 引擎)
        • 好处:
          • 可移植性:由于容器使用相同的运行时环境和依赖项,因此可以在不同平台和操作系统上进行部署,并保持各项指标的稳定和一致。容器化应用程序可以完全独立于宿主操作系统和硬件,实现真正的可移植性。

          • 速度和灵活性:容器化应用程序可以快速且可靠地启动和关闭,从而提高了应用程序的开发、测试和部署效率。容器还允许开发人员自定义应用程序的运行环境和配置,以满足特定的需求和要求。

          • 隔离性和安全性:容器提供了完全隔离的运行环境,可以防止应用程序之间的干扰,并减少系统资源的竞争。此外,容器化应用程序还可以与宿主操作系统区分开来,从而更好地隔离和保护系统内的敏感数据和信息。

          • 可伸缩性:容器化应用程序可以很容易地进行扩展和缩小,以应对不同负载和需求。开发人员可以使用容器编排工具(如 Kubernetes、Docker Swarm 等)来管理和自动化容器的部署和运行,以实现高效和可靠的应用程序管理。

    • K8s的主要作用
      • 容器编排:Kubernetes 可以帮助你定义和管理容器化应用程序的部署方式、容器之间的关系以及与底层基础设施的交互方式。

      • 自动伸缩:Kubernetes 允许根据应用程序的负载情况自动调整副本数量,实现弹性伸缩,以满足实时需求。

      • 负载均衡:Kubernetes 可以自动分配流量给应用程序的不同副本,确保负载均衡和高可用性。

      • 存储管理:Kubernetes 提供了各种存储选项,例如本地存储、网络存储、云存储等,并提供了方便的方式来挂载和管理这些存储。

      • 自愈性:Kubernetes 可以监控应用程序的状态,并在发生故障或节点出现问题时自动恢复应用程序的健康状态。

    • 命令行工具kubectl ,用于与 Kubernetes 集群进行交互和管理。使用 kubectl 可以执行多种操作,包括创建、删除和管理 Kubernetes 资源,以及与集群进行交互。

      一些常用的 kubectl命令:

      • 获取集群信息:

         
        kubectl cluster-info
        Kubernetes control plane is running at *****://address:port
        
        To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
        # kubectl cluster-info 命令用于获取 Kubernetes 集群的信息。
        # Kubernetes 控制平面(control plane)正在运行,其地址为 *****://address:port。这是 Kubernetes API 服务器的地址和端口。
        # 通过这个信息,可得知 Kubernetes 控制平面的运行状态以及 API 服务器的地址和端口。
        # 若需要进一步调试和诊断集群问题,可以使用 kubectl cluster-info dump 命令生成详细的集群信息转储。这将提供更全面的数据,用于故障排除和分析集群问题。
         
      • 获取集群节点列表:

        kubectl get nodes
        # NAME  STATUS   ROLES AGE   VERSION
        
         
      • 获取资源列表(如 Pod、Deployment、Service 等):

        kubectl get <资源类型>
      • 获取资源详细信息:

        kubectl describe <资源类型> <资源名称>
        # 显示yaml文件信息
         
      • 创建资源: 

        kubectl create -f <资源配置文件>
        
      • 删除资源:

        kubectl delete <资源类型> <资源名称>
        
      • 执行命令: 

        kubectl exec -it <Pod名称> -- <命令>
      • 查看日志:

        kubectl logs <Pod名称>
        
      • 伸缩应用程序:

        kubectl scale --replicas=<副本数> deployment/<应用名称>
        

         

      • 在集群中部署应用程序:

         
        kubectl apply -f <应用配置文件>
        
         

       

      • 将 Deployment 暴露为一个服务:
        kubectl expose deployment <deployment-name> --port=<port-number>

上述命令中的 <资源类型> 可以是 Pod、Deployment、Service、Namespace 等各种 Kubernetes 资源的名称,而 <资源名称> 则是具体要操作的资源实例的名称。

这只是 kubectl 的一小部分命令,它还有很多其他功能和选项,你可以使用 kubectl --help 命令查看完整的命令列表,并通过 kubectl <command> --help 获取特定命令的详细信息和用法说明。

 

基于k8s环境编写yaml文件跑作业

  • yaml文件编写
# 在 Kubernetes 中,使用 YAML 文件来定义和配置各种资源(如 Pod、Deployment、Service 等)
apiVersion:指定 Kubernetes API 的版本。例如,kubeflow.org/v1 是指 使用kubeflow.org API 组的版本 v1。
kind:指定要创建的 Kubernetes 资源类型。例如,kind: Pod 表示创建一个 Pod 资源。PyTorchJob表示要创建或管理的对象是一个 PyTorch 作业。
    Kubernetes 提供了许多不同的对象类型,如 Deployment、Service、Pod、ConfigMap、Secret 等。每个对象类型都有其特定的用途和属性,用于实现不同的功能和需求。
    kind 字段是区分不同对象类型的关键,它会告诉 Kubernetes 如何处理该对象类型,并对其进行相应的操作和管理。

metadata:包含资源的元数据信息,如名称、标签等。重要字段包括:
    name:指定资源的名称。
    labels:为资源定义标签,用于进行选择和过滤。
    annotations:为资源添加注释或描述性信息。

spec:定义资源的规格和配置信息。具体字段根据不同资源类型而有所不同,以下是几个常见资源的重要字段:
    Pod:
        containers:定义 Pod 中的容器列表。
        volumes:定义 Pod 的卷列表。
    Deployment:
        replicas:指定应该创建的副本数。
        template:定义创建的 Pod 模板。
    Service:
        type:指定服务的类型,如 ClusterIP、NodePort、LoadBalancer 等。
        ports:定义服务监听的端口。
    ConfigMap:
        data:定义配置数据的键值对。
    Secret:
        data:定义加密数据的键值对。
    PersistentVolumeClaim:
        accessModes:指定卷的访问模式。
        resources:定义卷的资源请求。
status:用于显示资源的当前状态,由 Kubernetes 自动更新。
除了上述字段外,还有一些常见的字段用于资源间的关联和引用:
selector:在某些资源类型中,用于根据标签选择其他资源。
template:在某些资源类型(如 Deployment)中,用于定义创建其他资源的模板。
  • 使用 PyTorchJob 创建的 Kubernetes Job 的yaml配置文件task.yaml
这是一个使用 PyTorchJob 创建的 Kubernetes Job 的配置文件。
apiVersion: "kubeflow.org/v1"
kind: "PyTorchJob"
metadata:
    name: name # modify the name
    namespace: default
spec:
    runPolicy:指定该 Job 的运行策略。
        schedulingPolicy:指定调度策略,其中的 queue 字段指定将任务调度到的队列。
     elasticPolicy:弹性策略的配置参数。
        rdzvBackend:指定后端类型。
        rdzvId:指定该 Job 的 ID。
        minReplicas:指定最小的副本数。
        maxReplicas:指定最大的副本数。
        maxRestarts:指定最大重启次数。
     pytorchReplicaSpecs:指定 PyTorch 的 Replica 规格。
        Worker:指定 Worker 的配置,包括副本数replicas和重启策略restartPolicy。
            template:Worker 的模板配置,包括容器、镜像、命令等信息。
                containers:指定容器的相关设置,可以定义多个容器,包括名称、镜像、命令和环境变量等。
                    name: 名称                  
                    image: 使用的容器镜像
                    imagePullPolicy
                    command
                    env指定了一些环境变量,如MY_MEM_LIMIT、LOGLEVEL
                resources: 资源限制部分,可以设置任务使用的 CPU、内存等资源的限制。
  • 部署应用程序
kubectl apply -f task.yaml
文章来自个人专栏
AI-llama大模型,go语言开发
28 文章 | 2 订阅
0条评论
0 / 1000
请输入你的评论
0
0