본문 바로가기

자격증/CKA

CKA - Section 3: Scheduling

Section 3: Scheduling

0 / 32|1hr 50min

 

49.

스케줄러 설치하고 구성하는 방법

 

50. Download Presentation Deck for this section

51. Manual Scheduling

수동으로 예약하는 방법

내장된 스케쥴러에 의존하지 않고 수동으로 스케줄러 작동시키기

nodeName: 

적합한 노드 식별해서 직접 바인딩 시켜줘야함

52. Practice Test - Manual Scheduling

53. Solutaion - Manual Scheduling (optional)

 

54. Labels and Selectors

Labels: 객체 식별 정보이며, 요구사항에 맞춰 개체의 하위 집합을 구성하고 선택하는데 사용됨.

객체의 고유성을 제공하지 않아, 여러 객체들은 같은 label을 가질 수 있음

 

Label Selectors: 객체들의 집합을 선택하여 Equality-Based Selectors, Set-Based Selectors 제공

 

metadata:

    labels: --

    function: --

 

Annotations: label 처럼 식별 정보는 아닌 임의의 비 식별 메타 데이터를 객체에 key-value 형태로 추가

 

55. Practice Test - Labels and Selectors

> kubectl get all -l env=prod --no-headers | wc -l

ReplicaSet yaml - Selector label 모두 일치해야함

 

56. Solutions - Labels and Selectors (Optional)

 

57. Taints and Tolerations

Taints - Node

> kubectl taint nodes node-name key=value:tain-effect

 

- NoSchedule: toleration이 없으면 pod가 스케쥴 돼서 실행되지 않음. 기존에 실행되던 pod에는 적용되지 않음

 

- PreferNoSchedule: toleration이 없으면 pod를 스케쥴링 하지 않으려고 하긴 하지만 필수는 아님.

 클러스터 내의 자원이 부족하거나 하면 taint가 걸려 있는 노드에서 포드가 스케쥴링 될 수 있음.

 

- NoExecute: 새로운 pod도 toleration이 없으면 실행되지 않게 하고, 기존에 있던 pod 역시 taint에 맞는 toleration 설정이 없으면 종료시킴.

 

Tolerations - PODs

> kubectl taint nodes node1 app=blue :NoSchedule

 

- pod-definition.yaml

apiVersion:

kind: Pod

metadata:

  name: myapp-pod

spec:

  containers:

  - name: nginx-container

    image: nginx

  tolerations:

  - key: app

    operator: "Equal" or "Exist"

    value: "blue"

    effect: "NoSchedule"

 

Taint - NoExecute

Taint와 Toleration은 특정 부분을 받아들이는 것을 제한하기 위한 것

 

> kubectl describe node kubemaster | grep Taints

 

58. Practice Test - Taints and Tolerations

Untaint commands

> kubectl taint nodes [nodename] node-role.kubernetes.io/master:NoSchedule-

all column

> kubectl get pods -o wide

59. Solutaion - Taints and Tolerations (optional)

60. Node Selector

yaml file

nodeSelector:

    key: value

 

61. Node Affinity

Node Affinity 기능의 주요 목적은 pod가 특정 노드에서 호스팅 되도록 하는 것

 

yaml

  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd   

 

Affinity Type

Available

- requiredDuringSchedulingIgnoredDuringExecution 

- preferredDuringSchedulingIgnoredDuringExecution

- requiredDuringSchedulingRequiredDuringExecution 

  DuringScheduling DuringExecution
Type 1 Required Ignored
Type 2 Preferred Ignored
Type 3 Required Required

62. Practice Test - Node Affinity

> kubectl get node node01 --show-lables

setting label

> kubectl label node node01 color=blue

 

> kubectl create deployment blue --image=nginx

> kubectl scale deployment blue --replicas=6

 

63. Solution - Node Affinity (optional)

64. Taints and Tolerations vs Node Affinity

65. Resource Requirements and Limits

spec:

  resources:

    requests:

      memory: "1Gi"

      cpu: 1

    limits:

      memory: "2Gi"

      cpu: 2

 

pod 내의 각 컨테이너에 대해 설정

 

66. Note on default resource requirements and limits

67. A quick note on editing PODs and Deployments

> kubectl edit pod <pod name>

> kubectl edit deployment my-deployment

 

68. Practice Test - Resource Requirements and Limits

69. Solution: Resource Limits (Optional)

 

70. DeamonSets

포드의 복사본 하나가 클러스터의 모든 노드에 항상 존재하도록 보장함

Monitoring Solution / Logs Viewer / Cluster Storage

 

UseCase

kube-proxy / Networking

 

DaemonSet Definition

replicaSet definition과 유사

 

71. Practice Test - DaemonSets

72. Solution - DaemonSets (Optional)

> kubectl get ds --all-namespaces

 

73. Static Pods

kubelet은 쿠버네티스의 에이전트로 컨테이너를 포드에 배포하는 역할 담당

kube-api 서버 없이 kubelet에 포드 정의 파일 제공

kubernetes 클러스터 구성 요소는 정적 POD로 알려져 있음

 

kubelet.servicce

1) --pod-manifest-path="..." 바로 지정 / etc\kubernetes\manifest

2) --config="파일 경로" config 방식으로 .yaml 파일 지정 - staticPodPath="" 지정

 

> docker ps

kube-apiserver가 없기 때문에 kubectl 유틸리티 사용 불가하므로 docker 명령어 사용

 

kubelet이 동시에 두 종류의 POD를 생성할 수 있는 경우

1) 정적 포드 폴더의 POD 정의 파일

2) HTTP API 엔드 포인드

 

정적 포드는 kubernetes 제어 영역에 종속되지 않으므로 정적 포드를 사용하여 배포할 수 있음

변경이 일어나면 자동으로 재시작됨

 

Static POD vs DaemonSets

Created by the Kubelet / Created by Kube-API server(DaemonSet Controller)

Deploy Control Plane components as Static Pods / Deploy Monitoring Agents, Logging Agents on nodes

Ignored by the Kube-Scheduler

 

74. Practice Test - Static Pods

75. Solution - Static Pods (Optional)

> kubectl run static-busybox --image=busybox --command sllep 1000 --restart=Never --dry-run=client -o yaml > static-busybox.yaml

 

> kubectl get node node01 -o wide

> node01 - Internal IP : 172.17.0.41

> ssh 172.17.0.41

node01 > ps -ef | grep kubelet | grep "\--config"

--config=/var/lib/kubelet/config.yaml

node01 > grep -i static /var/lib/kubelet/config.yaml

staticPodPath: /etc/just-to-mess-with-you

node01 > cd  /etc/just-to-mess-with-you

node01 > ls

greenbox.yaml

 

node01 > rm -rf greenbox.yaml

node01 > logout

 

> kubectl get pods

static Pods 'greenbox' deleted !

 

76. Multiple Schedulers

kube-scheduler.service

--scheduler-name=default-scheduler

 

my-custom-scheduler.service

--scheduler-name=my-custom-scheduler

 

.yaml 파일 비교

- command:

  - --leader-elect=true

  - --scheduler-name-my-customer-scheduler

  - --lock-object-name-my-customer-sch => 사용자 지정 스케줄러와 기본값 구분하기 위함

 

pod-definition.yaml

spec:

  schedulerName: my-custom-scheduler

 

> kubectl get events

> kubectl logs [scheduler name] --namespace=kube-system

 

77. Practice Test - Multi Scheduler

78. Solution - Practice Test - Multiple Schedulers: (Optional)

79. Configuring Kubernetes Scheduler

80. Connect with me!

 

 

참고 사이트

kin3303.tistory.com/137?category=887096

 

05. Resouce Limits

스케줄러가 포드를 노드에 배치하려고 할 때 메니페스트 파일중 컨테이너 스펙에 정의된 리소스를 검사하여 충분한 양의 리소스가 있는 노드를 식별한다. 크게 보면 CPU, Memory, Disk 가 있을 수 있

kin3303.tistory.com

 

'자격증 > CKA' 카테고리의 다른 글

CKA - Section 6: Cluster Maintenance  (0) 2021.03.17
CKA - Section 5: Application Lifecycle Management  (0) 2021.03.15
CKA - Section 4: Logging & Monitoring  (0) 2021.03.05
CKA - Section 2: Core Concepts  (0) 2021.02.16