CKA Study Day 7

김건호·2023년 4월 4일
0

76-93

Multiple Schedulers

쿠버네티스는 추가 스케쥴러를 가질 수 있음 -> 커스텀 스케쥴러
한번에 여러 스케쥴러 가능-> 반드시 이름이 달라야함

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schdulerName: my-schduler

leaderElection:
  leaderElect: true
  resourceNamepspace: kube-system
  resourceName: lock-object-my-scheduler

스케쥴러 파드로 배포되는 경우

--config=/etc/kubernetes/my-scheduler-config.yaml

ServiceAccout, ClusterRoleBinding 중요
config파일 volumes로 넘김

pod에서 사용시 pod.spec.schedulerName: my-custom-scheduler

어떤스케쥴러가 스케쥴링 했는지 확인하는 법
1.pod describe event에서 확인가능
2. 스케쥴려 로그 확인

Configuring Scheduler Profiles

우선 순위 높으면 가장 먼저 대기자 명단에 오름 -> 파드 필터 단계에 돌입(파드 실행 할 수 없는 노드 걸러짐) -> Scoring 노드마다 다른 기준으로 점수를 매김 리소스가 남을 공간을 근거로 -> Binding 높은 점수를 가진 노드에 파드가 생성됨
--> 플러그인으로 구축되어있음
PriortySort -> NodeResourcesFit, NodeName, NodeUnschedulable -> NodeResourcesFit, ImageLocality -> DefaultBinder

쿠버네티스 확장성 뛰어남 -> 플러그인 어디에 둘지 커스텀 가능 -> Extension Points를 사용하여 -> 자신만의 스케쥴러

사용법

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schdulerName: my-schduler
  plugins: 서로 다른 스케쥴러 구성법
    score:
      disabled:
      - name: TaintToleration
- schdulerName: my-schduler3
- schdulerName: my-schduler4

관련자료

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduling_code_hierarchy_overview.md
https://kubernetes.io/blog/2017/03/advanced-scheduling-in-kubernetes/
https://jvns.ca/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/
https://stackoverflow.com/questions/28857993/how-does-kubernetes-scheduler-work

Monitor Cluster Components

모니터하는 법 -> 무엇을 모니터링 할까
성능 지표, 헬스 체크, 파드 개수 등등..

솔루션이 필요함 -> Metrics, 프로메테우스 elastic stack, data dog..

Metrics Server 파드에서 메트릭을 수집하여 메모리에 저장
In-memory 모니터링 솔루션 -> 디스크에 저장하지 않음 -> 데이터 히스토리를 볼 수 없음
-> 고급 모니터링 솔루션 필요함

kubelet 파드 실행 역할 cAdvisor 컨테이너 어드바이저 있음 파드에서 성능 메트릭 수집, apiserver로 메트릭 보내 메트릭 서버에서 메트릭이 사용가능하게 만듬

메트릭 서버 설치 후, kubectl top 명령어로 확인가능

Managing Application Logs

로깅 메커니즘
docker logs -f container

쿠버네티스 파드작동시 kubectl logs -f pod로 로그 스트리밍 가능
파드안에 컨테이너에 관한 로그

멀티 컨테이너 시 컨테이너 이름을 명시해야함
kubectl logs -f pods container로

Rolling Updates and Rollbacks

처음 배포시 롤아웃을 만듬 -> 새로운 릴리즈 배포
Revision 1 -> Revision 2로 진행시 필요하다면 1로 돌아갈 수 있음

kubectl rollout status deploy/myapp-deploy

kubectl rollout history deploy/myapp-deploy

업그레이드 방식
1. 인스턴스 모두 삭제 후 새 버전으로 올림 -> 다운타임 발생 -> 사용자 접근 불가 Recreate 전략
2. 한꺼번에 없애는게 아니라 구버전 하나 제거 후 신버전 올리는 식으로 천천히 -> Rollingupdate 방식 -> 디폴트

kubectl apploy -f deploy.yaml
kubectl set image deploy/myapp-deploy \ nginx=nginx:1.9.1

deploy, pod describe 시 StrategyType로 확인 가능

업그레이드 방식

새 deploy가 생성되면 새로운 rs생성 -> 업그레이드시 새로운 rs가 생성되면 기존 rs파드 제거되며 생성
kubectl get rs로 확인 가능

롤백

kkubectl rollout undo deploy/app-deployment

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

1개의 댓글

comment-user-thumbnail
2023년 4월 4일

오타 발견 . kkubectl rollout undo deploy/app-deployment (k)kubectl k중북이요. ㅎ

답글 달기