Kubernetes: 로그 데이터 수집을 위한 CronJob 정의
16004 단어 nodestutorialkubernetes
이 기사는 원래 my blog 에 게재되었습니다.
쿠버네티스 크론잡
A
CronJob
는 Deployment
또는 ReplicaSet
와 유사한 기본 사양에 있습니다. 실행되는 컨테이너 집합을 정의하고 실행 조건을 정의합니다. 이러한 조건은 CronJob
를 고유한 Kubernetes 리소스로 만드는 것입니다. 가장 중요한 것에 대해 간략히 논의해 보겠습니다.scheduleTime
- Linux crontab syntax을 사용하여 작업을 실행해야 하는 정확한 날짜, 시간, 분, 초를 정확하게 정의합니다. completions
- 이 cron 작업이 성공한 것으로 간주되기 전에 달성해야 하는 성공적인 완료 수입니다. 잠재적인 사용 사례는 데이터베이스의 저장소를 최적화하거나 파일을 정리하고 다른 성공 기준 세트를 가질 수 있는 작업입니다. parallelism
- cron 작업이 여러 병렬 작업에서 실행될 수 있는지 아니면 순차적으로만 실행될 수 있는지 제어합니다activeDeadlineSeconds
- 일괄 작업을 완료해야 하는 최대 시간 범위입니다. 이 제한에 도달하면 Kublet 스케줄러가 cron 작업을 중지하고 실패한 것으로 간주합니다더 많은 옵션을 사용할 수 있으므로 공식Kubernetes documentation도 살펴보세요.
KubeLogExporter CronJob
내가 사용하는 KubeLogExporter 크론 작업은 다음 요구 사항을 충족해야 합니다.
CronJob
리소스 정의를 조금씩 발전시켜 봅시다. 첫 번째 부분은 일정 요구 사항을 충족합니다. 일정은 spec.schedule
에 정의되어 매시간 실행됩니다. 작업은 정확히 한 번 완료되어야 하며( spec.jobTemplate.spec.completions
) 오류가 발생하면 다시 시작됩니다( spec.jobTemplate.spec.restartPolicy
).apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: kube-log-exporter-cron
spec:
schedule: "0 * * * *"
jobTemplate:
spec:
completions: 1
template:
spec:
restartPolicy: OnError
...
ServiceAccount
선언은 매우 간단합니다. spec.jobTemplate.spec.serviceAccountName
를 추가합니다.apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: kube-log-exporter-cron
spec:
schedule: "0 * * * *"
jobTemplate:
spec:
completions: 1
template:
spec:
restartPolicy: OnError
serviceAccountName: log-exporter-sa
...
이제 영구 볼륨 선언을 추가해야 합니다. 볼륨은 하나의 프로세스에서만 마운트하면 되며 1Gi 크기를 예약합니다.
kind: PersistentVolumeClaim
metadata:
name: log-exporter-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
내가 선택한 Kubernetes 배포판K3S에서
PersistentVolumeClaim
가 정의되면 영구 볼륨이 자동으로 생성됩니다. 다른 배포판에서는 설정PersistentVolume
도 필요하지만 이 기사의 초점은 아닙니다.이제
PersistentVolumeClaim
를 사용하여 spec.jobTemplate.spec.volumes
의 볼륨을 정의한 다음 이 볼륨을 spec.jobTemplate.spec.containers.volumeMounts
의 컨테이너에 탑재된 볼륨으로 참조합니다.apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: kube-log-exporter-cron
spec:
schedule: '0 * * * *'
jobTemplate:
spec:
completions: 1
template:
spec:
serviceAccountName: log-exporter-sa
containers:
- name: kube-log-exporter
image: docker.admantium.com/kube-log-exporter:0.1.9.12
volumeMounts:
- name: log-exporter-volume
mountPath: /etc/kube-log-exporter/logs
restartPolicy: Never
volumes:
- name: log-exporter-volume
persistentVolumeClaim:
claimName: log-exporter-pvc
CronJob 실행
이제
kubectl create -f kube-log-exporter-cron-job.yaml
를 사용하여 cron 작업을 생성합니다. 작업이 실행되면(테스트 목적으로 schedule: /1 ** **
를 사용하여 매분 작업을 실행할 수도 있음) 작업 기록을 볼 수 있습니다.kb describe cronjob kube-log-exporter 130 ↵
Name: kube-log-exporter-cron
Namespace: default
Labels: <none>
Annotations: Schedule: 0 * * * *
...
Last Schedule Time: Mon, 25 Aug 2020 19:00:00 +0200
Active Jobs: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 12m cronjob-controller Created job kube-log-exporter-cron-1590426000
Normal SawCompletedJob 12m cronjob-controller Saw completed job: kube-log-exporter-cron-1590426000, status: Complete
Normal SuccessfulDelete 12m cronjob-controller Deleted job kube-log-exporter-cron-1590415200
그리고 다음은 생성된 로그 파일의 예입니다.
> ls -la /etc/kube-log-exporter/logs
-rw-r--r-- 1 root root 4515 Aug 25 19:00 lighthouse-78cc7475c7-74ctt_lighthouse.log
-rw-r--r-- 1 root root 6012 Aug 25 19:00 lighthouse-78cc7475c7-gcl94_lighthouse.log
-rw-r--r-- 1 root root 6873 Aug 25 19:00 lighthouse-78cc7475c7-k2cv7_lighthouse.log
-rw-r--r-- 1 root root 7634 Aug 25 19:00 lighthouse-78cc7475c7-l7zpv_lighthouse.log
-rw-r--r-- 1 root root 4636 Aug 25 19:00 lighthouse-78cc7475c7-wh2gk_lighthouse.log
-rw-r--r-- 1 root root 25741 Aug 25 19:00 redis-6b746f4d9b-8tjds_redis.log
....
> cat /etc/kube-log-exporter/logs/redis-6b746f4d9b-8tjds_redis.log
1:C 25 Aug 2020 16:21:04.675 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 25 Aug 2020 16:21:04.675 # Redis version=6.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 25 Aug 2020 16:21:04.675 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.1 (00000000/0) 64 bit
.-`` .-```
{% endraw %}
.
{% raw %}
```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 7139
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
| `-._`-._ _.-'_.-' |
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 25 Aug 2020 16:21:04.678 # Server initialized
Cron 작업: 리소스 정의 완료
여기 다시 전체 버전이 있습니다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: kube-log-exporter-cron
spec:
schedule: '0 * * * *'
jobTemplate:
spec:
completions: 1
template:
spec:
serviceAccountName: log-exporter-sa
containers:
- name: kube-log-exporter
image: docker.admantium.com/kube-log-exporter:0.1.9.12
args: ['node', 'cluster.js']
volumeMounts:
- name: log-exporter-volume
mountPath: /etc/kube-log-exporter/logs
restartPolicy: Never
volumes:
- name: log-exporter-volume
persistentVolumeClaim:
claimName: log-exporter-pvc
imagePullSecrets:
- name: registry-secret
결론
Kubernetes
CronJob
는 클러스터에서 정기적으로 예약된 작업을 정의합니다. 일반적인 사용 사례는 파일 기울이기, 인덱스 업데이트 또는 데이터 수집과 같은 유지 관리 작업입니다. 로그 데이터를 일반 파일에 저장하려면 cron 작업을 사용하는 것이 간단한 솔루션입니다. 이 기사에서는 KubeLogExplorer를 사용하여 파일의 Pod 로그 데이터를 영구 볼륨으로 유지하는 cron 작업을 정의하는 방법을 보여주었습니다.
Reference
이 문제에 관하여(Kubernetes: 로그 데이터 수집을 위한 CronJob 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/admantium/kubernetes-defining-a-cronjob-for-collecting-log-data-3o37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)