Rancher를 통해 Kubernetes CronJob을 suspend: true
로 변경했을 때, CloudWatch에 해당 로그가 남지 않는 경우가 발생할 수 있습니다. 반면, suspend: false
는 정상적으로 기록될 수 있습니다. 이런 문제를 해결하기 위해 Rancher에서 로그를 남기는 방법을 정리하였습니다.
Kubernetes 이벤트에서 suspend 변경 확인
먼저, Kubernetes 자체에서 suspend
변경 이벤트가 기록되는지 확인해야 합니다. 이를 위해 아래 명령어를 실행하여 suspend
관련 이벤트를 조회합니다.
kubectl get events -A --sort-by=.metadata.creationTimestamp | grep -i suspend
suspend: true
이벤트가 출력된다면 → Kubernetes에서는 변경 사항을 기록하고 있지만, CloudWatch로 전송되지 않는 문제일 가능성이 높습니다.
suspend: true
이벤트가 나오지 않는다면 → Kubernetes 자체에서 이벤트를 기록하지 않거나 Rancher가 이를 무시하고 있을 가능성이 있습니다.
Rancher에서 Logging 활성화하기
Rancher Logging 플러그인 설치
Rancher는 기본적으로 모든 컨테이너 로그를 수집하지 않습니다. 따라서 rancher-logging 플러그인을 설치하여 로그를 남길 수 있습니다.
helm repo add rancher-charts https://charts.rancher.io
helm repo update
helm install rancher-logging rancher-charts/rancher-logging -n cattle-logging-system --create-namespace
설치 후, Rancher UI에서 Cluster Explorer → Apps & Marketplace → rancher-logging을 검색하여 설정을 확인할 수 있습니다.
Rancher 로그를 CloudWatch로 보내기
Rancher의 rancher-logging
을 활성화한 후, CloudWatch로 로그를 전송하도록 설정할 수 있습니다.
Rancher UI에서 CloudWatch 연동 설정
- Rancher UI 접속
- Cluster Explorer → Apps & Marketplace → rancher-logging 검색
- Config 변경 → “Output to CloudWatch” 활성화
- CloudWatch 로그 그룹 설정 후 적용
설정을 적용한 후, CloudWatch에서 로그가 정상적으로 기록되는지 확인합니다.
Kubernetes Audit Logs 활성화 (kube-apiserver-audit
)
EKS에서 API 서버 감사를 활성화하면 "suspend"
변경 이벤트를 기록할 수 있습니다.
EKS에서 kube-apiserver-audit
로그 활성화
aws eks update-cluster-config \
--name <your-cluster-name> \
--logging '{"clusterLogging":[{"types":["audit"],"enabled":true}]}'
이후 "kube-apiserver-audit"
로그 스트림을 확인하여 "suspend: true"
가 기록되는지 확인합니다.
Kubernetes에서 CronJob
변경 로그 남기기
Kubernetes에서 CronJob의 suspend
변경 사항이 Audit 로그에 기록되지 않는 경우, Audit 정책을 조정해야 합니다.
audit-policy.yaml
설정 변경
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse
verbs: ["patch", "update"]
resources:
- group: "batch"
resources: ["cronjobs"]
이 설정을 적용한 후, API 서버를 재시작하여 변경 사항을 반영해야 합니다.
kubectl delete pod -n kube-system -l k8s-app=kube-apiserver
최종 정리 (로그가 기록되지 않을 때 체크리스트)
1. Kubernetes 이벤트에서
suspend: true
가 기록되는지 확인 (kubectl get events -A
) 2. Rancher에서
rancher-logging
활성화 후 CloudWatch 전송 설정 3. EKS
kube-apiserver-audit
로그 활성화 (aws eks update-cluster-config
) 4. Kubernetes Audit Logs 정책 추가 (
audit-policy.yaml
) 5. API 서버 재시작 (
kubectl delete pod -n kube-system -l k8s-app=kube-apiserver
)
이 과정을 적용하면 "suspend: true"
로그가 CloudWatch에도 남게 될 것입니다!