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.)