기타/자격증

[CKA][실습] 2. Scheduling

백곰곰 2023. 2. 5. 22:08
728x90
반응형

Practice Test - Manual Scheduling

Pod 생성 후 Pending 원인 찾기

  • schedule pod가 보이지 않음
$ k get po -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-787d4945fb-hrs5c               1/1     Running   0          4m
coredns-787d4945fb-qwttb               1/1     Running   0          4m
etcd-controlplane                      1/1     Running   0          4m16s
kube-apiserver-controlplane            1/1     Running   0          4m18s
kube-controller-manager-controlplane   1/1     Running   0          4m13s
kube-proxy-dfpt6                       1/1     Running   0          3m45s
kube-proxy-krtw5                       1/1     Running   0          4m
  • Pod yaml 파일에 nodeName을 정의하여 노드를 지정함
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  -  image: nginx
     name: nginx
  nodeName: node01
  • Pod가 배포될 Node를 바꾸기 위해서는 Pod 재생성이 필요함
$ k replace --force -f nginx.yaml

 


Practice Test - Labels and Selectors

  • Label : 각 개체에 추가하는 속성
  • Selector : Labels을 사용하여 필터링할 조건을 명시
  • Annotation : 정보 수집 목적(이름, 버전, 연락처 등) 
  • ReplicaSet, Service 등에서 Selector를 통해 Pod를 묶음(연결)
$ k get po --selector='env=dev'
$ k get po --selector bu=finance --no-headers | wc -l

$ k get all --selector='env=prod' --no-headers=true | wc -l
$ k get po --selector='env=prod,bu=finance,tier=frontend'
  • ReplicaSet 생성 yaml 수정하기

[수정 전]

apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: front-end
   template:
     metadata:
       labels:
        tier: nginx
     spec:
       containers:
       - name: nginx
         image: nginx

[오류 메세지] matchLabels와 일치하는 labels가 없음

$ k apply -f replicaset-definition-1.yaml 
The ReplicaSet "replicaset-1" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"tier":"nginx"}: `selector` does not match template `labels`

[수정 후]

apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: front-end
   template:
     metadata:
       labels:
        tier: front-end
     spec:
       containers:
       - name: nginx
         image: nginx

 

Practice Test - Taints and Tolerations

  • Taints : Node에 설정
    • taint-effect (pod에 미치는 영향)
      • NoSchedule
      • PreferNoSchedule
      • NoExcute : 기존에 생성된 부적합 pod를 evict 시킴 (해당 pod는 삭제)
  • Tolerations : Pod에 설정

Pod가 Node에 배치될 때 고려하는 조건 중 하나

특정 Node에서 특정 Pod만 올라갈 수 있게 제한을 둘 수 있음

Pod에 Toleration이 적합하게 있어도 Taint가 있는 node에만 올라가진 않음

Master Node에는 Taint가 자동으로 설정되어 있음

 

  • Taint :
$ k describe no node01 | grep -i taint
## 명령어 사용법 확인
$ k taint -h
$ k taint no node01 spray=mortein:NoSchedule

## 노드 taint 제거
$ k taint no controlplane node-role.kubernetes.io/control-plane:NoSchedule-
  • Taint가 설정된 Node에 배포될 수 있는 Pod 생성 yaml :
## toleration 설정용 pod 템플릿 생성
$ k run bee --image=nginx --dry-run=client -o yaml > bee.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: bee
  name: bee
spec:
  containers:
  - image: nginx
    name: bee
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  tolerations:
  - key: "spray"
  	operator: "Equal"
    value: "mortein"
    effect: "NoSchedule"
status: {}

참고 자료 : https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/

728x90