日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

在Kubernetes集群中部署SchedulerX

SchedulerX支持定時調度程序、多語言腳本和HTTP接口,也支持調度原生的K8s Job或者Pod。本文介紹如何在Kubernetes環境中部署SchedulerX。

使用場景

使用SchedulerX調度K8s Job有如下優勢。

可在線編輯腳本Pod

K8s Job常用于數據處理和運維場景,一般以腳本實現居多。原生的使用方式需要將腳本打包到鏡像里,在YAML文件中配置腳本命令。如果要修改腳本,需要重新構建鏡像和發布。如下所示。

展開查看代碼

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
      - name: hello
        image: registry.cn-hangzhou.aliyuncs.com/test/hello:1.0.0
        command: ["sh",  "/root/hello.sh"]
      restartPolicy: Never
  backoffLimit: 4

而使用SchedulerX則無需構建鏡像和編寫YAML腳本,只需在SchedulerX控制臺直接編輯腳本(Shell、Python、PHP或Node.js),即可自動以Pod方式運行腳本。如果要修改腳本,只需在SchedulerX控制臺重新編輯腳本,下次調度會自動生效,繼而提高K8s Job的開發效率。同時,使用SchedulerX的K8s任務時,您無需了解容器底層細節,可以低門檻使用容器技術。

可視化任務編排

K8s中主流解決方案是使用argo進行工作流編排,如下所示。

展開查看代碼

# The following workflow executes a diamond workflow
#
#   A
#  / \
# B   C
#  \ /
#   D
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: dag-diamond-
spec:
  entrypoint: diamond
  templates:
  - name: diamond
    dag:
      tasks:
      - name: A
        template: echo
        arguments:
          parameters: [{name: message, value: A}]
      - name: B
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: B}]
      - name: C
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: C}]
      - name: D
        depends: "B && C"
        template: echo
        arguments:
          parameters: [{name: message, value: D}]

  - name: echo
    inputs:
      parameters:
      - name: message
    container:
      image: alpine:3.7
      command: [echo, "{{inputs.parameters.message}}"]

SchedulerX支持通過可視化界面拖拽進行K8s任務的編排,相較于當前主流的、通過代碼進行工作流編排的解決方案更為便捷。此外,任務運行時,可視化的工作流圖可以幫助您快速排查任務卡點,提高運維效率。

報警監控

使用SchedulerX來調度Pod或者Job,可以復用SchedulerX的監控報警功能。

  • 支持的報警通道:短信、電話、郵件、Webhook(釘釘/企業微信/飛書)。

  • 支持的報警策略:失敗報警、執行超時報警。

日志服務

使用SchedulerX調度Pod或者Job時,無需額外開通日志服務,就可以自動采集Pod運行的日志。如果Pod運行失敗,您可以直接在SchedulerX控制臺排查Pod執行失敗的原因。16

監控大盤

您可以通過SchedulerX自帶的任務監控大盤實時觀察您的任務。

離線在線混和部署

SchedulerX提供離在線定時任務混布調度功能,支持Java和K8s任務類型。一個業務應用通常包括多個定時任務。如果定時任務調度頻率較高,可以直接使其與業務應用處于同一進程中。但進程內調用會消耗在線應用自身的CPU和內存,無法與在線業務隔離。所以,當一個定時任務資源消耗大且調度頻率不高(例如每小時或每天運行一次)時,可以新增一個Pod運行該定時任務,使之與原來的在線應用處于不同進程中。

方式一:通過Deployment部署SchedulerX

使用非Java應用類型時,可以通過Deployment部署一個schedulerx-agent.yaml。SchedulerX會以單獨的Pod啟動應用。流程和原理如下圖所示。

p452558.png

前提條件

1

步驟一:配置ServiceAccount

SchedulerX K8s任務依賴于ServiceAccount進行驗證與授權,且默認使用Namespace的SchedulerX ServiceAccount運行K8s任務。

在K8s集群里和對應的Namespace下,僅需運行一次schedulerx-serviceaccount.yaml。如果Namespace之間需要隔離,僅調度目標Namespace下的Pod或者Job,可運行如下YAML示例代碼。

展開查看具體代碼

apiVersion: v1
kind: ServiceAccount
metadata:
  name: schedulerx
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: schedulerx-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["create","delete","get","list","patch","update"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["watch"]
  - apiGroups: ["batch"]
    resources: ["jobs","cronjobs"]
    verbs: ["create","delete","get","list","patch","update","watch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: schedulerx-binding
subjects:
  - kind: ServiceAccount
    name: schedulerx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: schedulerx-role

如果有跨Namespace調度的需求,需使用ClusterRole和ClusterRoleBinding。

展開查看具體代碼

apiVersion: v1
kind: ServiceAccount
metadata:
  name: schedulerx
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: schedulerx-cluster-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["create","delete","get","list","patch","update"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["watch"]
  - apiGroups: ["batch"]
    resources: ["jobs","cronjobs"]
    verbs: ["create","delete","get","list","patch","update","watch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: schedulerx-cluster-binding
subjects:
  - kind: ServiceAccount
    name: schedulerx
    namespace: <NAMESPACE1>
  - kind: ServiceAccount
    name: schedulerx
    namespace: <NAMESPACE2>
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: schedulerx-cluster-role

步驟二:安裝schedulerx-agent.yaml

schedulerx-agent.yaml配置如下所示。

展開查看schedulerx-agent.yaml配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: schedulerx-agent
  labels:
    app: schedulerx-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: schedulerx-agent
  template:
    metadata:
      labels:
        app: schedulerx-agent
    spec:
      serviceAccountName: schedulerx
      containers:
      - name: schedulerx-agent
        image: registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64
        imagePullPolicy: Always
        resources:
          limits:
            cpu: 200m
          requests:
            cpu: 200m
        env:
          - name: "SCHEDULERX_ENDPOINT"
            value: "${SCHEDULERX_ENDPOINT}"
          - name: "SCHEDULERX_NAMESPACE"
            value: "${SCHEDULERX_NAMESPACE}"
          - name: "SCHEDULERX_GROUPID"
            value: "${SCHEDULERX_GROUPID}"
          - name: "SCHEDULERX_APPKEY"
            value: "${SCHEDULERX_APPKEY}"
          - name: "SCHEDULERX_STARTER_MODE"
            value: "pod"
        livenessProbe:
          exec:
            command: ["/bin/bash","/root/health.sh"]
          timeoutSeconds: 30
          initialDelaySeconds: 30
SchedulerX agent image變量說明

芯片架構

區域

說明

X86_64

中國地區

registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64

中國境外

schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64

ARM64

中國地區

registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64

中國境外

schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64

SchedulerX agent env變量說明

變量

說明

${SCHEDULERX_ENDPOINT}

您部署應用的地域(Region)和對應的Endpoint,例如addr-sh-internal.edas.aliyun.com。更多信息,請參見Endpoint列表。

${SCHEDULERX_NAMESPACE}

Namespace為命名空間ID,可以在SchedulerX控制臺的命名空間頁面獲取。7

${SCHEDULERX_GROUPID}

GroupId為應用ID,可以在SchedulerX控制臺應用管理頁面獲取。1

${SCHEDULERX_APPKEY}

AppKey為應用Key,可以在SchedulerX控制臺應用管理頁面獲取。1

部署Deployment完成后,如果可以在SchedulerX控制臺應用管理頁面查看實例,表明接入成功。9

方式二:通過helm包部署SchedulerX(推薦)

前提條件

步驟一:下載SchedulerX helm

執行如下命令,下載SchedulerX helm包。

wget https://schedulerx2.oss-cn-hangzhou.aliyuncs.com/helm/schedulerxchart-2.0.0.tgz

步驟二:安裝schedulerx helm包

  1. 在分布式任務調度平臺獲取應用的接入參數。

    1. 登錄EDAS控制臺

    2. 在頂部菜單欄選擇地域。

    3. 在左側導航欄,選擇任務調度,單擊應用管理

    4. 應用管理頁面的操作列,單擊接入配置。在接入配置頁面左上角,選擇k8s。

  2. 執行如下安裝命令。

    說明
    • 安裝命令的接入參數需要替換為目標應用的接入參數。

    • 接入配置中的鏡像地址默認為公網中amd架構的鏡像。您需要根據自身機器所在的區域以及機器架構選擇合適的鏡像地址。

    helm install  schedulerxchart schedulerxchart-2.0.0.tgz \
    --set SCHEDULERX_ENDPOINT=acm.aliyun.com\
    ,SCHEDULERX_NAMESPACE=f856c3f8-a15c-4a7e-9b4e-f812a9f8****\
    ,SCHEDULERX_GROUPID=k8s-test3\
    ,SCHEDULERX_APPKEY=****\
    ,SCHEDULERX_AGENT_IMAGE=registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64

    安裝過程截圖如下所示。

    1

    SchedulerX agent image變量說明

    芯片架構

    區域

    說明

    x86_64

    中國地區

    registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64

    中國境外

    schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64

    arm64

    中國地區

    registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64

    中國境外

    schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64

    SchedulerX agent env變量說明

    變量

    說明

    ${SCHEDULERX_ENDPOINT}

    您部署應用的地域(Region)和對應的Endpoint,例如addr-sh-internal.edas.aliyun.com。更多信息,請參見Endpoint列表。

    ${SCHEDULERX_NAMESPACE}

    Namespace為命名空間ID,可以在SchedulerX控制臺的命名空間頁面獲取。7

    ${SCHEDULERX_GROUPID}

    GroupId為應用ID,可以在SchedulerX控制臺應用管理頁面獲取。1

    ${SCHEDULERX_APPKEY}

    AppKey為應用Key,可以在SchedulerX控制臺應用管理頁面獲取。1

    SCHEDULERX_AGENT_IMAGE

    鏡像地址。

    安裝完成后,可以通過SchedulerX控制臺查看實例。11

方式三:通過Java SDK部署SchedulerX

如果您的應用為Java應用,除K8s任務外,還需要調度Java程序,您可以使用Java SDK部署。SchedulerX和您的在線業務處于一個進程中。流程和原理如下圖所示。66

前提條件

接入SchedulerX

關于SDK接入,請參見Spring Boot應用接入SchedulerX。

使用K8s任務還需要依賴一個schedulerx-plugin-kubernetes,如下所示。

說明

schedulerx2.version使用最新客戶端版本,更多信息,請參見發布記錄。

<dependency>
  <groupId>com.aliyun.schedulerx</groupId>
  <artifactId>schedulerx2-spring-boot-starter</artifactId>
  <version>${schedulerx2.version}</version>
</dependency>	
<dependency>
  <groupId>com.aliyun.schedulerx</groupId>
  <artifactId>schedulerx2-plugin-kubernetes</artifactId>
  <version>${schedulerx2-plugin-kubernetes.version}</version>
</dependency>

后續步驟:創建K8s任務

運行以下腳本時,您需要在任務管理頁面創建一個K8s任務。具體操作,請參見任務管理。

Shell腳本

如果您想通過Pod運行Shell腳本,您可以在任務管理頁面創建一個K8s任務,選擇資源類型Shell-Script,使用默認鏡像busybox,或替換為您自建的鏡像。a1

單擊運行一次,在Kubernetes集群中可以看到Pod啟動,Pod名稱為schedulerx-shell-{JobId}。7

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以查看Pod運行的日志。7

Python腳本

如果您想通過Pod運行Python腳本,您可以在任務管理頁面創建一個K8s任務,選擇資源類型Python-Script,使用默認鏡像Python,或替換為您自建的鏡像。a2

單擊運行一次,在Kubernetes集群中可以看到Pod啟動,Pod名稱為schedulerx-python-{JobId}。7

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以看到Pod運行的日志。8

PHP腳本

如果您想通過Pod運行PHP腳本,您可以在任務管理頁面創建一個K8s任務,選擇資源類型PHP-Script,使用默認鏡像php:7.4-cli,或替換為您自建的鏡像。a3

單擊運行一次,在Kubernetes集群中可以看到Pod啟動,Pod名稱為schedulerx-php-{JobId}。12

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以查看Pod運行的日志。8

Node.js腳本

如果您想通過Pod運行Node.js腳本,您可以在任務管理頁面創建一個K8s任務,選擇資源類型Nodejs-Script,使用默認鏡像node:16,或替換為您自建的鏡像。a4

單擊運行一次,在Kubernetes集群中可以看到Pod啟動,Pod名稱為schedulerx-node-{JobId}。8

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以看到Pod運行的日志。8

Job-YAML

通過SchedulerX也可以運行K8s原生的Job。您可以在任務管理頁面創建一個K8s任務,選擇資源類型Job-YAMLa5

單擊運行一次,在Kubernetes集群中可以看到Job和Pod啟動成功。8

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以看到Pod運行的日志。8

CronJob-YAML

通過SchedulerX也可以運行K8s原生的CronJob。您可以在任務管理頁面創建一個K8s任務,資源類型選擇CronJob-YAML。

image.png

單擊運行一次,在任務實例記錄頁面可以看到Pod啟動成功。

image.png

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以看到Pod運行的日志。

image.png

Pod-YAML

通過SchedulerX也可以運行K8s原生的Pod。您可以在任務管理頁面創建一個K8s任務,資源類型選擇Pod-YAML。a6

單擊運行一次,在Kubernetes集群中可以看到Pod啟動成功。9

在SchedulerX控制臺任務管理頁面可以查詢歷史執行記錄,也可以看到Pod運行的日志。9

說明

通過SchedulerX運行K8s Pod時,有如下注意事項。

  • 免運行周期較長的Pod,例如Web應用,一旦啟動永遠不會結束。

  • 建議將重啟策略設置成Never,否則Pod會不斷重啟。