zoukankan      html  css  js  c++  java
  • volcano之job plugins

    K8s

    pod

    pod是kubernetes中可以创建和部署的最小也是最简单的单位。pod代表集群中运行的进程。

    在k8s集群中,pod有两种使用方式

    • 一个pod运行一个容器:单个容器的封装,但是k8手、管理的是pod而不是容器。这也是最常见的用法。
    • 一个pod运行多个容器:一个pod中同时封装几个需要紧密耦合相互协作的容器,它们之间共享资源。同一个pod中的容器可以互相协助成为一个service单位——一个容器共享文件。另一个容器更新文件。pod将这些容器的存储资源作为一个实体来管理。

    k8s内建了很多controller,相当于状态机,用来控制pod的具体状态和行为。

    Deployment

    Deployment为pod和ReplicaSet提供一个声明式的定义和更新的方法。

    只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和 ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

    一些典型用例:

    • 使用 Deployment 来创建 ReplicaSet。ReplicaSet 在后台创建 pod。检查启动状态,看它是成功还是失败。
    • 然后,通过更新 Deployment 的 PodTemplateSpec 字段来声明 Pod 的新状态。这会创建一个新的 ReplicaSet,Deployment 会按照控制的速率将 pod 从旧的 ReplicaSet 移动到新的 ReplicaSet 中。
    • 如果当前状态不稳定,回滚到之前的 Deployment revision。每次回滚都会更新 Deployment 的 revision。
    • 扩容 Deployment 以满足更高的负载。
    • 暂停 Deployment 来应用 PodTemplateSpec 的多个修复,然后恢复上线。
    • 根据 Deployment 的状态判断上线是否 hang 住了。
    • 清除旧的不必要的 ReplicaSet。

    StatefulSet

    StatefulSet作为controller为pod提供唯一标识。StatefulSet是为了解决有状态服务问题。其应用场景包括:

    • 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现。
    • 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现。
    • 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现。
    • 有序收缩,有序删除(即从N-1到0)。

    Job

    负责批处理任务,批处理任务:仅执行一次的任务。

    volcanoJob

    vcjob提供如指定调度器、支持最小运行pod数、支持task、支持生命周期管理、支持指定队列、支持优先级调度。vcjob更适合机器学习、大数据科学计算等高性能计算场景。

    Service

    首先考虑这样的场景在 Kubernetes 集群中,一组pod(称为backend)为其他pod(称为frontend)提供服务,那么对于frontend该如何发现并连接到backend中的哪个pod呢?service提供了一种抽象。

    举个例子,考虑一个图片处理 backend,它运行了3个副本。这些副本是可互换的 —— frontend 不需要关心它们调用了哪个 backend 副本。然而组成这一组 backend 程序的 Pod 实际上可能会发生变化,frontend 客户端不应该也没必要知道,而且也不需要跟踪这一组 backend 的状态。

    Service 定义的抽象能够解耦这种关联。

    Job plugin是做什么的?

    volcano的作业有很多定制化的需求。考虑分布式的训练场景,多个pod运行起来之后,pod之间需要网络互访问,进行数据同步。

    svc: 支持pods communicate.
    ssh: sign in ssh without password, e.g. use command mpirun or mpiexec.

    env

    Func OnPodCreate
    Index := jobhelpers.GetTask(pod)
    
    For i in pod//遍历pod里面的所有contariner
      //Set VK_TASK_INDEX && VC_TASK_INDEX
      Pod.Spec.Containers[i].Env  <--- append(TaskVkindex , index)
      Pod.Spec.Containers[i].Env  <---append(TaskIndex , index)
    
    
    

    逻辑

    作业内为任务分配索引.

    ssh

    Struct sshPlugin{
     pluginArguments[] string
     Client pluginsinterface.pluginClientset
     sshKeyFilePath string
    }
    
    Func new //创建初始化sshPlugin
    Func OnJobAdd
    Func OnJobDelete
    Func OnJobUpdate
    Func mountRsaKey
         SSHPrivateKey
         SSHPublicKey
         SSHAuthorizedKeys
         SSHConfig
    Func generateRsaKey
    Func generateSSHConfig
    Func addFlags
    
    

    逻辑

    为容器配置PrivateKeyPublicKeyAuthorizedKeysConfig

    svc

    /*每个pod有了hostname subdomain pod中的容器配置好env*/
    func onPodCreate
       Hostname subdomain ---> pod
       
    /*为pod初始化ConfigMap*/
    func onJobAdd
          CreateOrUpdateConfigMap
          CreateServiceIfNotExist
          CreateNetworkPolicyIfNotExist
    func onJobDelete
    func onJobUpdate
    func mountConfigmap
    func createServiceIfNotExist
       /*为job创建service*/
       /*配置service*/
       /*namespace name ServicePort:Port/Protocol/TargetPort*/
       
    func createNetworkPolicyIfNotExist
    /*limit pods can be accessible only by pods belong to the job*/
    func cmName
    func GenerateHosts
    
    

    Service 定义的抽象能够解耦这种关联。

    createServiceIfNotExist为pod创建service

    createNetworkPolicyIfNotExist为对应的service设置限制,同job下的pod才能访问。

  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/rhythmic/p/14599027.html
Copyright © 2011-2022 走看看