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
'자격증 > 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 |