메트릭등을 카운트 하여 얼럿을 생성해도 되겠지만 간단하게 로그를 카운팅 하여 얼럿을 설정 할수도 있다 그라파나에서 loki 로그 카운터로 얼럿을 생성하는 방법 테스트 먼저 로그를 찍기 위해 pod를 한개 배포함 % k get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS worker 1/1 Running 0 6d18h run=worker 해당 파드의 로그 테스트 (얼럿에 추가할 로그는 임의로 trigger_alert_xxxapi_error라고 정함) 앱에서 특정 로그를 찍으면 그것을 카운팅 하는 형태 파드에서 STD 출력을 통해 로깅 수행 [root@worker /]# echo "trigger_alert_xxxapi_error" >> /proc/1/f..
쿠버네티스 이벤트에는 클러스터 동작관련된 중요한 로그가 남는다 이 로그는 휘발성이며 1시간만 보유됨, 컨테이너 로깅이 아니기때문에 기본 로그수집기로는 수집 불가 https://artifacthub.io/packages/helm/deliveryhero/k8s-event-logger 위 툴은 컨테이너를 하나 띄워 주기적으로 k8s api에 event를 콜하고 STD출력함 STG출력은 기본 로그 수집기인 fluentd 가 수집하여 로키로 보냄 위와같이 쿼리하면 json형식으로 쿠버네티스 이벤트 로그를 수집하고 확인할수 있다 prettify json을 활성화하면 좀더 보기 좋게 나옴
동일 도메인을 path별로 공유할때는 1개의 Ingress를 사용한다 이렇게 되면 여러가지 타겟을 한개의 ingress가 바라보는 형태인데 각각 타겟별로 속성이 다르다면(헬스체크,attributes 등) ingress 어노테이션이 아닌 서비스 어노테이션을 이용하면 된다 헬스체크 패스가 /가 아니라면 아래와 같이 ingress 어노테이션을 설정하는데 annotations: alb.ingress.kubernetes.io/healthcheck-path: /api/health 이 어노테이션을 인그레스가 아닌 대상이 바라보는 서비스에 달면 각각의 타겟별로 설정을 다르게 가져갈수 있다
min 이 0 인 ASG를 CA가 scaling 하지 못하는 문제 발생 https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#auto-discovery-setup 문서 확인결과 아래 태그가 ASG에 필요함 k8s.io/cluster-autoscaler/node-template/label/value k8s.io/cluster-autoscaler/node-template/taint/value 테라폼에서 여러개의 태그를 지정하기 위해 아래 방법 시도 locals { eks_asg_tag_list_gpu_pv = { "k8s.io/cluster-autoscaler/node-template..
쿠버네티스 타임존은 기본적으로 UTC로 동작하며 이를 변경할수 없음 파드 내부의 타임존은 timezone파일을 마운트 하여 맞출수 있지만 크론탭의 경우 불가능함 일반적인 사용에는 -9해서 만들면 되니까 큰 문제가 없는데 만약 매달 1일 05시에 도는 잡이라면 문제가 발생 30 8 1 * * /usr/bin/bash test3 0 5 1 * * /usr/bin/bash test1 0 6 1 * * /usr/bin/bash test 이게 왜 문제냐면 위 시간은 UTC라 KST로 조정하면 1일이 아니고 매달 말일임 매달 말일의 경우 크론탭으로는 설정이 불가능(28일,30일,31일 등 여러가지 조건이 있으므로) 해서 일반적으로 크론탭에서는 아래와 같은 방법을 쓰는데 30 23 28-31 * * [ $(date ..
쿠버네티스 롤링 업데이트를 하다보면 업데이트 간 간헐적으로 50x 코드가 발생하는데 이러한일이 왜 발생되며 예방하려면 어떠한 기술을 사용해야 하는지에 대한 정리 구조상 무조건 발생되는 문제이며 대부분 모르거나 새로고침하면 해결되므로 그냥 두는경우가 있는데 충분히 예방하고 방지할수 있는 부분임 쿠버네티스만의 문제는 아니고 복합적인 원인과 문제로 인해 발생되는 일 먼저 에러가 왜 발생되는지에 대한 부분 테스트를 위해 구동하는데 10초가 걸리는 웹서버를 생성 package main import ( "fmt" "net/http" "time" ) func main() { // 루트 경로 핸들러 등록 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request..
k8s에서 노드 모니터링 하는건 단순히 4가지인데 이는 아래와 같다 노드 컨디션 설명 Ready 노드가 상태 양호하며 파드를 수용할 준비가 되어 있는 경우 True, 노드의 상태가 불량하여 파드를 수용하지 못할 경우 False, 그리고 노드 컨트롤러가 마지막 node-monitor-grace-period (기본값 40 기간 동안 노드로부터 응답을 받지 못한 경우) Unknown DiskPressure 디스크 사이즈 상에 압박이 있는 경우, 즉 디스크 용량이 넉넉치 않은 경우 True, 반대의 경우 False MemoryPressure 노드 메모리 상에 압박이 있는 경우, 즉 노드 메모리가 넉넉치 않은 경우 True, 반대의 경우 False PIDPressure 프로세스 상에 압박이 있는 경우, 즉 노드 ..