### 一个 tiup 负载节点
---
generateName: testbed-
items:
  - name: tiup
    type: WORKLOAD_NODE # 测试资源类型: WORKLOAD_NODE
    spec:
      container:
        name: node
        image: hub.pingcap.net/qa/base-image:redhat8
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            # NOTE: 目前对 tiup 的支持是将 pod 当做虚拟机使用，如果节点占用内存接近 request.memory 时，可能会导致 pod 被 oom killed，导致测试集群无法恢复(因为 tiup 用的 ssh key，systemd service 等被删除)
            # 所以在申请资源时 test-infra 会注入 systemd memory limit = requests.memory - 512 MiB
            #
            # 但中控机上执行的 tiup cluster 命令, haproxy 等不受 systemd 管控，仍需要适当调大 requests.memory 值，避免 pod 重启导致数据丢失
            memory: 4Gi
            cpu: 4000m
        securityContext:
          capabilities:
            add: ["SYS_ADMIN", "SYS_PTRACE", "NET_ADMIN"]

  # NOTE: 以下部分声明了 tiup 各节点的配置，依此配置申请节点后使用 github.com/pingcap/test-infra/caselib/pkg/host.NewTiUPCluster() 部署集群
  # 与 operator 集群不同，tiup 集群需要在 case 里调库部署 (todo: 统一实现)
  - name: tidb-0
    type: WORKLOAD_NODE # 测试资源类型: WORKLOAD_NODE
    spec:
      container:
        name: node
        image: hub.pingcap.net/qa/base-image
        imagePullPolicy: IfNotPresent
        # labels: # 用于极端性能场景的 LB，可忽略
        #   workload-app: tidb
        resources:
          requests:
            memory: 2Gi
            cpu: 1000m
            storage: 100Gi
        securityContext:
          capabilities:
            add: ["SYS_ADMIN", "SYS_PTRACE", "NET_ADMIN"]
        volumeMount:
          mountPath: "/tiup"
  - name: tidb-1
    type: WORKLOAD_NODE # 测试资源类型: WORKLOAD_NODE
    spec:
      container:
        name: node
        image: hub.pingcap.net/qa/base-image:redhat8
        imagePullPolicy: IfNotPresent
        # labels:
        #   workload-app: tidb
        resources:
          requests:
            memory: 2Gi
            cpu: 1000m
            storage: 100Gi
        securityContext:
          capabilities:
            add: ["SYS_ADMIN", "SYS_PTRACE", "NET_ADMIN"]
        volumeMount:
          mountPath: "/tiup"
  - name: tikv
    type: WORKLOAD_NODE # 测试资源类型: WORKLOAD_NODE
    spec:
      container:
        name: node
        image: hub.pingcap.net/qa/base-image
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: 2Gi
            cpu: 4000m
            storage: 100Gi
        securityContext:
          capabilities:
            add: ["SYS_ADMIN", "SYS_PTRACE", "NET_ADMIN"]
        volumeMount:
          mountPath: "/tiup"
  - name: pd
    type: WORKLOAD_NODE # 测试资源类型: WORKLOAD_NODE
    spec:
      container:
        name: node
        image: hub.pingcap.net/qa/base-image
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: 2Gi
            cpu: 1000m
            storage: 100Gi
        securityContext:
          capabilities:
            add: ["SYS_ADMIN", "SYS_PTRACE", "NET_ADMIN"]
        volumeMount:
          mountPath: "/tiup"

  # 默认 tiup 部署时会在中控机用 haproxy 当 LB，在压力很大的性能测试中 haproxy 表现不足
  # LOADBALANCER 使用 k8s service 做负载均衡，见：https://kubernetes.io/zh/docs/concepts/services-networking/service/#proxy-mode-iptables
  # - name: lb-tidb
  #   type: LOADBALANCER
  #   spec:
  #     selector: # 需要匹配 WORKLOAD_NODE.spec.container.labels
  #       workload-app: tidb
  #     port: 4000 # 对应 tidb 部署的端口
