Menu Close

3.10.2. 사용자 정의 스케줄러를 사용하여 Pod 배포

사용자 정의 스케줄러가 클러스터에 배포된 후 기본 스케줄러 대신 해당 스케줄러를 사용하도록 Pod를 구성할 수 있습니다.

참고

각 스케줄러에는 클러스터에 있는 별도의 리소스 보기가 있습니다. 따라서 각 스케줄러는 자체 노드 집합에서 작동해야 합니다.

두 개 이상의 스케줄러가 동일한 노드에서 작동하는 경우 서로 개입하여 사용 가능한 리소스보다 동일한 노드에 더 많은 포드를 예약할 수 있습니다. 이 경우 리소스가 부족하여 Pod가 거부될 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • 사용자 지정 스케줄러가 클러스터에 배포되었습니다.

절차

  1. 클러스터에서 역할 기반 액세스 제어(RBAC)를 사용하는 경우 사용자 정의 스케줄러 이름을 system:kube-scheduler 클러스터 역할에 추가합니다.

    1. system:kube-scheduler 클러스터 역할을 편집합니다.

      $ oc edit clusterrole system:kube-scheduler
    2. 사용자 정의 스케줄러의 이름을 leasesendpoints 리소스에 대한 resourceNames 목록에 추가합니다.

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        annotations:
          rbac.authorization.kubernetes.io/autoupdate: "true"
        creationTimestamp: "2021-07-07T10:19:14Z"
        labels:
          kubernetes.io/bootstrapping: rbac-defaults
        name: system:kube-scheduler
        resourceVersion: "125"
        uid: 53896c70-b332-420a-b2a4-f72c822313f2
      rules:
      ...
      - apiGroups:
        - coordination.k8s.io
        resources:
        - leases
        verbs:
        - create
      - apiGroups:
        - coordination.k8s.io
        resourceNames:
        - kube-scheduler
        - custom-scheduler 1
        resources:
        - leases
        verbs:
        - get
        - update
      - apiGroups:
        - ""
        resources:
        - endpoints
        verbs:
        - create
      - apiGroups:
        - ""
        resourceNames:
        - kube-scheduler
        - custom-scheduler 2
        resources:
        - endpoints
        verbs:
        - get
        - update
      ...
      1 2
      이 예에서는 사용자 정의 스케줄러 이름으로 custom-scheduler 를 사용합니다.
  2. Pod 구성을 생성하고 scheduler Name 매개변수에서 사용자 정의 스케줄러 의 이름을 지정합니다.

    custom-scheduler-example.yaml 파일의 예

    apiVersion: v1
    kind: Pod
    metadata:
      name: custom-scheduler-example
      labels:
        name: custom-scheduler-example
    spec:
      schedulerName: custom-scheduler 1
      containers:
      - name: pod-with-second-annotation-container
        image: docker.io/ocpqe/hello-pod

    1
    사용할 사용자 정의 스케줄러의 이름입니다. 이 예에서는 custom-scheduler 입니다. 스케줄러 이름을 제공하지 않으면 기본 스케줄러를 사용하여 Pod가 자동으로 예약됩니다.
  3. Pod를 생성합니다.

    $ oc create -f custom-scheduler-example.yaml

검증

  1. 다음 명령을 입력하여 Pod가 생성되었는지 확인합니다.

    $ oc get pod custom-scheduler-example

    custom-scheduler-example Pod는 출력에 나열됩니다.

    NAME                       READY     STATUS    RESTARTS   AGE
    custom-scheduler-example   1/1       Running   0          4m
  2. 다음 명령을 입력하여 사용자 정의 스케줄러에서 Pod를 예약했는지 확인합니다.

    $ oc describe pod custom-scheduler-example

    스케줄러, custom-scheduler 는 다음 잘린 출력에 표시된 대로 나열됩니다.

    Events:
      Type    Reason          Age        From                                               Message
      ----    ------          ----       ----                                               -------
      Normal  Scheduled       <unknown>  custom-scheduler                                   Successfully assigned default/custom-scheduler-example to <node_name>