76-93
쿠버네티스는 추가 스케쥴러를 가질 수 있음 -> 커스텀 스케쥴러
한번에 여러 스케쥴러 가능-> 반드시 이름이 달라야함
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. 스케쥴려 로그 확인
우선 순위 높으면 가장 먼저 대기자 명단에 오름 -> 파드 필터 단계에 돌입(파드 실행 할 수 없는 노드 걸러짐) -> 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
모니터하는 법 -> 무엇을 모니터링 할까
성능 지표, 헬스 체크, 파드 개수 등등..
솔루션이 필요함 -> Metrics, 프로메테우스 elastic stack, data dog..
Metrics Server 파드에서 메트릭을 수집하여 메모리에 저장
In-memory 모니터링 솔루션 -> 디스크에 저장하지 않음 -> 데이터 히스토리를 볼 수 없음
-> 고급 모니터링 솔루션 필요함
kubelet 파드 실행 역할 cAdvisor 컨테이너 어드바이저 있음 파드에서 성능 메트릭 수집, apiserver로 메트릭 보내 메트릭 서버에서 메트릭이 사용가능하게 만듬
메트릭 서버 설치 후, kubectl top 명령어로 확인가능
로깅 메커니즘
docker logs -f container
쿠버네티스 파드작동시 kubectl logs -f pod로 로그 스트리밍 가능
파드안에 컨테이너에 관한 로그
멀티 컨테이너 시 컨테이너 이름을 명시해야함
kubectl logs -f pods container로
처음 배포시 롤아웃을 만듬 -> 새로운 릴리즈 배포
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
오타 발견 . kkubectl rollout undo deploy/app-deployment (k)kubectl k중북이요. ㅎ