Table of Contents
k8s 에서 curl 을 사용하여 cronjob 등록하기
배경
종종 쿠버네티스 클러스터에서 cronjob 을 활용할 일이 있는데 간단하게 curl 명령어 한번만 실행하면 되는 경우가 있다.
이럴 때 사용하기 위한 alpine 기반의 curl 이미지를 사용하는 방법에 대해서 알아보았다.
k8s cronjob
쿠버네티스의 오브젝트 중에서 cronjob
오브젝트는 yml 에 정의된 스케줄에 맞게 지정한 이미지를 기반으로 명령어를 실행하는 오브젝트다.
나는 다음과 같은 형식으로 사용하고 있다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob-name
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-cronjob-name-pod-name
image: curlimages/curl:7.77.0
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- |
curl -X "POST" "somehost" \
-H 'header-key: value' \
-H 'Content-Type: application/json; charset=utf-8'
restartPolicy: Never
설명
-
먼저 apiVersion 에 맞게
CronJob
을 등록한다. -
schedule 는 리눅스의 cronjob 을 등록하는 포맷과 동일한데 위의 예제에서는 5분 마다 실행하라고 정의하였다.
-
image 는
curlimages/curl:7.77.0
을 사용하였는데 필요하다면 alpine 기반으로apk --no-cache add curl
을 추가하여 직접 이미지를 생성하여 사용해도 된다. -
command 부분에서
|
로 이어지는 부분으로 연결하면 curl 명령어를 raw 하게 정의할 수 있다. 콘솔에서 입력하는 형태 그대로 정의하자.
실행 기록
kubectl get pods
로 확인해보면 다음과 같이 언제 완료되었는지 확인이 가능하고 필요하다면 실행 결과를 로그로 확인할수도 있다.
$ kubectl get pods
my-cronjob-name-1623488400-tb4zs 0/1 Completed 0 16s
$ kubectl logs my-cronjob-name-1623488400-tb4zs
Response OK
참고
comments powered by Disqus
FEATURED TAGS
accesscontrol
adaptive-growth
alpine-linux
ansible
ansible-tower
apache2.4
architecture
argocd
asgi
aws
awx
backoffice
beautiful-goodbye
begining-docker
benchmark
blockhound
blocking-code
blog
book
brew-cask
build-cache
collaboration
communication
composer
confluence
cronjob
curl
customizing
customlog
data.sql
database
developer
difference
docker
docker-desktop
dockerize
dos-attack
eks
elasticsearch
empty-string
environment-to-do-well
errorlogformat
event-driven
experience
file-upload
filebeat
fluentd
forwarded-option
framework
fuse.js
golang
graceful-deploy
happy-new-year
haproxy
haproxy-1.8
haproxy-acl-logging
haproxy-custom-variable-logging
haproxy-metric
haproxy-reload-fail
haproxy-stat
heap-memory
hedgehog-sharp
how-do-i-work
hugo
index-alias
install
installation
instance-type
inverted-index
istio
iterm
java
jdk-21
jekyll
jekyll-to-hugo
jetbrains
json
k8s
k8s-api
kmooc
kubernetes
leadership
learning-in-2019
lets-encrypt
letsencrypt
limit_req_zone
litestar
logstash
m1-macbook-pro
macro
macro-key-mapping
mapping
match
match_phrase
maven
microservice-설계-및-구현
migration
mm
multi-datasource
mysql
nginx
nginx-ingress
nginx-regexp
ngram
null
openjdk
partial-matching
phpstorm
poeaa
portfolio-expansion
product-strategy
python
query-dsl
rate-limit
rate-litmiting
rds
reindex
rss-template
seamless-reload
search-on-hugo
service-account-role
sidebar-search
speed-up
speedup
spring
spring-boot
spring-camp
spring-camp-2023
spring-event
ssh
struct
study
system-manager
systemd-reload
template
term
throughput
timezone
tips
traffic-management
ulid
unused-plugins
uuid
ux-consideration
virtual-thread
vm-options
webflux
wildcard
zero-downtime
만들면서-배우는-클린-아키텍처
시작하세요-도커
엔터프라이즈-애플리케이션-아키텍처-패턴
쿠버네티스-시작하기