Rancher에서 CronJob Suspend 로그를 CloudWatch에 남기는 방법

Rancher를 통해 Kubernetes CronJob을 suspend: true로 변경했을 때, CloudWatch에 해당 로그가 남지 않는 경우가 발생할 수 있습니다. 반면, suspend: false는 정상적으로 기록될 수 있습니다. 이런 문제를 해결하기 위해 Rancher에서 로그를 남기는 방법을 정리하였습니다.


1️⃣ Kubernetes 이벤트에서 suspend 변경 확인

먼저, Kubernetes 자체에서 suspend 변경 이벤트가 기록되는지 확인해야 합니다. 이를 위해 아래 명령어를 실행하여 suspend 관련 이벤트를 조회합니다.

kubectl get events -A --sort-by=.metadata.creationTimestamp | grep -i suspend

✅ suspend: true 이벤트가 출력된다면 → Kubernetes에서는 변경 사항을 기록하고 있지만, CloudWatch로 전송되지 않는 문제일 가능성이 높습니다. ✅ suspend: true 이벤트가 나오지 않는다면 → Kubernetes 자체에서 이벤트를 기록하지 않거나 Rancher가 이를 무시하고 있을 가능성이 있습니다.


2️⃣ 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을 검색하여 설정을 확인할 수 있습니다.


3️⃣ Rancher 로그를 CloudWatch로 보내기

Rancher의 rancher-logging을 활성화한 후, CloudWatch로 로그를 전송하도록 설정할 수 있습니다.

🔹 Rancher UI에서 CloudWatch 연동 설정

  1. Rancher UI 접속
  2. Cluster Explorer → Apps & Marketplace → rancher-logging 검색
  3. Config 변경 → “Output to CloudWatch” 활성화
  4. CloudWatch 로그 그룹 설정 후 적용

설정을 적용한 후, CloudWatch에서 로그가 정상적으로 기록되는지 확인합니다.


4️⃣ 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"가 기록되는지 확인합니다.


5️⃣ 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에도 남게 될 것입니다! 🚀😊

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다