반응형
기존에 서버에서는 crontab 을 사용해서 내가 사용하던 서버중 하나를 이용해 crontab 작업을 했다.
k3s 로 옮기면서 이 작업을 변경할 필요가 있었는데 k3s 를 사용하니까 역시 pod로 만들 방법을 gpt 에 물어보니 깔끔하게 잘된다.
설정
/k8s/common/dnszi 디렉토리를 만들고 안에 다음 두 파일을 만들었다.
1. URL 들을 저장하는 yaml
2. 이것을 반복해서 스케쥴 돌려주는 conjob 용 yaml
gglabadmin@k3s-node1:/k8s/common/dnszi$ ll
total 16
drwxr-xr-x 2 root root 4096 Nov 29 21:51 ./
drwxr-xr-x 5 root root 4096 Nov 29 21:46 ../
-rw-r--r-- 1 root root 1363 Nov 29 21:44 dnszi-updater-cronjob.yaml
-rw-r--r-- 1 root root 372 Nov 29 21:51 dnszi-urls-config.yaml
gglabadmin@k3s-node1:/k8s/common/dnszi$
gglabadmin@k3s-node1:/k8s/common/dnszi$ cat dnszi-urls-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: dnszi-url-list
data:
urls: |
https://ddns.dnszi.com/set.html?user=[dnszi의 id]&auth=[dnszi의 연동키]=gglab.app&record=docs
https://ddns.dnszi.com/set.html?user=[dnszi의 id]&auth=[dnszi의 연동키]&domain=gglab.app&record=dev
https://ddns.dnszi.com/set.html?user=[dnszi의 id]&auth=[dnszi의 연동키]&domain=gglab.app&record=money-dev
gglabadmin@k3s-node1:/k8s/common/dnszi$
gglabadmin@k3s-node1:/k8s/common/dnszi$ cat dnszi-updater-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: dnszi-ip-updater
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: curl-updater
image: curlimages/curl:latest
command: ["/bin/sh", "-c"]
args:
- |
echo "Reading URLs from ConfigMap..."
# ConfigMap에서 마운트된 파일(urls)을 줄 단위로 읽어 반복 실행
while IFS= read -r URL
do
if [ -n "$URL" ]; then
echo "Attempting to update: $URL"
curl -s "$URL"
if [ $? -eq 0 ]; then
echo "SUCCESS: $URL"
else
echo "FAILURE: $URL"
fi
fi
done < /etc/config/urls # 마운트된 ConfigMap 파일 경로
echo "All updates finished."
volumeMounts:
- name: url-config-volume
mountPath: /etc/config/ # ConfigMap이 마운트될 경로
# ConfigMap을 볼륨으로 정의
volumes:
- name: url-config-volume
configMap:
name: dnszi-url-list # 위에서 생성한 ConfigMap 이름
restartPolicy: OnFailure
gglabadmin@k3s-node1:/k8s/common/dnszi$
실행확인
sudo kubectl get jobs | grep dnszi-ip-updater
dnszi-ip-updater-29407555 Complete 1/1 5s 10m
dnszi-ip-updater-29407560 Complete 1/1 5s 5m27s
dnszi-ip-updater-29407565 Complete 1/1 5s 27s
gglabadmin@k3s-node1:/k8s/common/dnszi$ sudo kubectl logs $(sudo kubectl get pods --selector=job-name=dnszi-ip-updater-29407560 -o jsonpath='{.items[0].metadata.name}')
Reading URLs from ConfigMap...
Attempting to update: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=docs
SUCCESS: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=docs
Attempting to update: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=dev
SUCCESS: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=dev
Attempting to update: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=money-dev
SUCCESS: https://ddns.dnszi.com/set.html?user=&auth=&domain=gglab.app&record=money-dev
All updates finished.
잘 실행되는것을 확인했다.
그런데 실행이 끝나면 pods 에 기록이 쌓이는 구조라고 한다.
최종 1개만 남기도록 셋팅을 추가 했다.
gglabadmin@k3s-node1:/k8s/common/dnszi$ cat dnszi-updater-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: dnszi-ip-updater
spec:
schedule: "*/5 * * * *"
successfulJobsHistoryLimit: 1 # 성공한 Job의 기록을 1개만 보존
failedJobsHistoryLimit: 3 # 실패한 Job의 기록은 3개 보존
jobTemplate:
spec:
template:
~~~~ 아래는 동일 ~~~~반응형
'인프라 > Kubernetes' 카테고리의 다른 글
| k3s Cert-Manager 에서 외부 서비스로 Proxy (0) | 2025.11.30 |
|---|---|
| pfSense 와 CertManager 연동 오류 (0) | 2025.11.29 |
| (실전) k8s 설치부터 https 서비스 포팅까지 (0) | 2025.11.23 |
| (연습) k3s HA 구성 트래픽 흐름 구조 (0) | 2025.11.21 |
| (연습) k3s VIP 설정 (MetalLB) (0) | 2025.11.20 |
