您可以通过编排模板或命令行的方式在轻量化节点上创建工作负载。本文介绍如何在轻量化节点上创建Pod、Deployment和DaemonSet三种工作负载。

前提条件

已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群

使用限制

  • Pod网络模式只能使用Host网络模式。更多信息,请参见使用Host网络
  • Pod存储仅支持HostPath、EmptyDir、Secret、ConfigMap四种数据卷类型。
  • 镜像拉取策略(imagePullPolicy)默认不支持Always策略。如需支持,您需要给Pod添加Label:apps.openyurt.io/imagePullPolicy.Always: "true"
    说明 在轻量化场景下,边缘设备可能与云上网络断开。若业务Pod使用的是云上的镜像仓库,且imagePullPolicy使用Always策略,在断网的情况下,会导致边缘设备上的Pod创建失败。
  • 在轻量化场景下,不支持Kubernetes的Service能力。

创建Pod

  1. 使用以下内容,创建pod.yaml文件。
    • metadata.labels:增加type: lite-kubelet
    • spec.nodeName:设置为需要部署的轻量化接入的节点。
    • spec.template.spec.containers.imagePullPolicy:使用IfNotPresent
      说明 如需强制使用imagePullPolicy: Always策略,您需要给Pod添加Label:apps.openyurt.io/imagePullPolicy.Always: "true"
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        type: lite-kubelet
      name: busybox-1
      namespace: default
    spec:
      containers:
      - name: busybox
        image: busybox:1.28.0
        command:
          - sleep
          - "36000"
        imagePullPolicy: IfNotPresent
      nodeName: {your node name}       // 替换为您需要部署的轻量化接入的节点。
  2. 执行以下命令,创建Pod。
    kubectl create -f pod.yaml

    带有Label:type: lite-kubelet的Pod资源创建后, 云端控制器ack-kole-controller会自动为Pod注入以下内容:

    参数 说明
    spec.affinity.nodeAffinity 新增type: lite-kubelet node的亲和性。
    spec.tolerations 新增type=lite-kubelet effect:NoSchedule污点的容忍。
    spec.hostNetwork 设置为true

创建无状态工作负载Deployment

您可以通过编排模板的方式创建无状态工作负载Deployment,具体操作如下:

  1. 登录容器服务管理控制台,在左侧导航栏中选择集群
  2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择工作负载 > 无状态
  3. 无状态页面,单击右上角的使用YAML创建资源
  4. 对模板进行相关配置,完成配置后单击创建
    • 命名空间:在创建页面的顶部选择资源对象所属的命名空间,默认是Default。除了节点、持久化存储卷等底层计算资源以外,大多数资源对象需要作用于命名空间。
    • 示例模板:阿里云容器服务提供了多种资源类型的Kubernetes YAML示例模板,让您快速部署资源对象。您可以根据Kubernetes YAML编排的格式要求自主编写,来描述您想定义的资源类型。
    • 添加工作负载:您可通过此功能快速定义一个YAML模板。
    • 使用已有模板:您可将已有编排模板导入到模板配置页面。
    • 保存模板:您可以保存设置好的编排模板。

    下面以Nginx镜像为例,定义的Deployment需要包含以下配置,YAML示例如下:

    • metadata.labels:增加type: lite-kubelet
    • spec.template.spec.containers.imagePullPolicy:使用IfNotPresent
      说明 如需强制使用imagePullPolicy: Always策略,您需要给Pod添加Label:apps.openyurt.io/imagePullPolicy.Always: "true"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
        type: lite-kubelet
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: zone
                    operator: In
                    values:
                    - cn-hangzhou
          containers:
          - name: nginx
            image: nginx:1.14.2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80                       

    带有Label:type: lite-kubelet的Deployment资源创建后, 云端控制器ack-kole-controller会自动为Deployment注入以下内容:

    参数 说明
    spec.template.metadata.labels 新增type: lite-kubelet
    spec.selector.matchLabels 新增type: lite-kubelet
    spec.template.spec.affinity.nodeAffinity 新增type: lite-kubelet node的亲和性。
    spec.template.spec.tolerations 新增type=lite-kubelet effect: NoSchedule污点的容忍。
    spec.template.spec.hostNetwork 设置为true

创建守护进程集工作负载DaemonSet

  1. 使用以下内容,创建daemonset.yaml文件。
    • metadata.labels:增加type: lite-kubelet
    • spec.template.spec.containers.imagePullPolicy:使用IfNotPresent
      说明 如需强制使用imagePullPolicy: Always策略,您需要给Pod添加Label:apps.openyurt.io/imagePullPolicy.Always: "true"
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        type: lite-kubelet
      name: my-daemonset
      namespace: default
    spec:
      selector:
        matchLabels:
          app: my-daemon
      template:
        metadata:
          labels:
            app: my-daemon
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: zone
                    operator: In
                    values:
                    - cn-hangzhou
          containers:
          - image: nginx
            imagePullPolicy: Always
            name: daemonset-container
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
              hostPort: 80
              protocol: TCP
  2. 执行以下命令,创建DaemonSet。
    kubectl create -f daemonset.yaml
    当输出daemonset.apps/my-daemonset created时,则说明成功创建守护进程集DaemonSet。此时云端控制器ack-kole-controller会自动为DaemonSet注入以下内容:
    参数 说明
    spec.template.metadata.labels 新增type: lite-kubelet
    spec.selector.matchLabels 新增type: lite-kubelet
    spec.template.spec.affinity.nodeAffinity 新增type: lite-kubelet node的亲和性。
    spec.template.spec.tolerations 新增type=lite-kubelet effect: NoSchedule污点的容忍。
    spec.template.spec.hostNetwork 设置为true